Skip to content

Commit 3c3855a

Browse files
authored
Move user functions into user.go (#17659)
* Move user functions into user.go * Fix test
1 parent 6874fe9 commit 3c3855a

File tree

14 files changed

+101
-72
lines changed

14 files changed

+101
-72
lines changed

models/admin/main_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package admin
6+
7+
import (
8+
"path/filepath"
9+
"testing"
10+
11+
"code.gitea.io/gitea/models/unittest"
12+
)
13+
14+
func TestMain(m *testing.M) {
15+
unittest.MainTest(m, filepath.Join("..", ".."),
16+
"notice.yml",
17+
)
18+
}

models/admin.go renamed to models/admin/notice.go

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
// Copyright 2014 The Gogs Authors. All rights reserved.
2-
// Copyright 2020 The Gitea Authors. All rights reserved.
1+
// Copyright 2021 The Gitea Authors. All rights reserved.
32
// Use of this source code is governed by a MIT-style
43
// license that can be found in the LICENSE file.
54

6-
package models
5+
package admin
76

87
import (
8+
"context"
99
"fmt"
1010

1111
"code.gitea.io/gitea/models/db"
@@ -44,53 +44,55 @@ func (n *Notice) TrStr() string {
4444

4545
// CreateNotice creates new system notice.
4646
func CreateNotice(tp NoticeType, desc string, args ...interface{}) error {
47-
return createNotice(db.GetEngine(db.DefaultContext), tp, desc, args...)
47+
return CreateNoticeCtx(db.DefaultContext, tp, desc, args...)
4848
}
4949

50-
func createNotice(e db.Engine, tp NoticeType, desc string, args ...interface{}) error {
50+
// CreateNoticeCtx creates new system notice.
51+
func CreateNoticeCtx(ctx context.Context, tp NoticeType, desc string, args ...interface{}) error {
5152
if len(args) > 0 {
5253
desc = fmt.Sprintf(desc, args...)
5354
}
5455
n := &Notice{
5556
Type: tp,
5657
Description: desc,
5758
}
58-
_, err := e.Insert(n)
59-
return err
59+
return db.Insert(ctx, n)
6060
}
6161

6262
// CreateRepositoryNotice creates new system notice with type NoticeRepository.
6363
func CreateRepositoryNotice(desc string, args ...interface{}) error {
64-
return createNotice(db.GetEngine(db.DefaultContext), NoticeRepository, desc, args...)
64+
return CreateNoticeCtx(db.DefaultContext, NoticeRepository, desc, args...)
6565
}
6666

6767
// RemoveAllWithNotice removes all directories in given path and
6868
// creates a system notice when error occurs.
6969
func RemoveAllWithNotice(title, path string) {
70-
removeAllWithNotice(db.GetEngine(db.DefaultContext), title, path)
70+
RemoveAllWithNoticeCtx(db.DefaultContext, title, path)
7171
}
7272

7373
// RemoveStorageWithNotice removes a file from the storage and
7474
// creates a system notice when error occurs.
7575
func RemoveStorageWithNotice(bucket storage.ObjectStorage, title, path string) {
76-
removeStorageWithNotice(db.GetEngine(db.DefaultContext), bucket, title, path)
76+
removeStorageWithNotice(db.DefaultContext, bucket, title, path)
7777
}
7878

79-
func removeStorageWithNotice(e db.Engine, bucket storage.ObjectStorage, title, path string) {
79+
func removeStorageWithNotice(ctx context.Context, bucket storage.ObjectStorage, title, path string) {
8080
if err := bucket.Delete(path); err != nil {
8181
desc := fmt.Sprintf("%s [%s]: %v", title, path, err)
8282
log.Warn(title+" [%s]: %v", path, err)
83-
if err = createNotice(e, NoticeRepository, desc); err != nil {
83+
if err = CreateNoticeCtx(ctx, NoticeRepository, desc); err != nil {
8484
log.Error("CreateRepositoryNotice: %v", err)
8585
}
8686
}
8787
}
8888

89-
func removeAllWithNotice(e db.Engine, title, path string) {
89+
// RemoveAllWithNoticeCtx removes all directories in given path and
90+
// creates a system notice when error occurs.
91+
func RemoveAllWithNoticeCtx(ctx context.Context, title, path string) {
9092
if err := util.RemoveAll(path); err != nil {
9193
desc := fmt.Sprintf("%s [%s]: %v", title, path, err)
9294
log.Warn(title+" [%s]: %v", path, err)
93-
if err = createNotice(e, NoticeRepository, desc); err != nil {
95+
if err = CreateNoticeCtx(ctx, NoticeRepository, desc); err != nil {
9496
log.Error("CreateRepositoryNotice: %v", err)
9597
}
9698
}
@@ -142,16 +144,3 @@ func DeleteNoticesByIDs(ids []int64) error {
142144
Delete(new(Notice))
143145
return err
144146
}
145-
146-
// GetAdminUser returns the first administrator
147-
func GetAdminUser() (*User, error) {
148-
var admin User
149-
has, err := db.GetEngine(db.DefaultContext).Where("is_admin=?", true).Get(&admin)
150-
if err != nil {
151-
return nil, err
152-
} else if !has {
153-
return nil, ErrUserNotExist{}
154-
}
155-
156-
return &admin, nil
157-
}

models/admin_test.go renamed to models/admin/notice_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a MIT-style
33
// license that can be found in the LICENSE file.
44

5-
package models
5+
package admin
66

77
import (
88
"testing"

models/consistency.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package models
66

77
import (
8+
admin_model "code.gitea.io/gitea/models/admin"
89
"code.gitea.io/gitea/models/db"
910

1011
"xorm.io/builder"
@@ -127,7 +128,7 @@ func DeleteOrphanedIssues() error {
127128

128129
// Remove issue attachment files.
129130
for i := range attachmentPaths {
130-
removeAllWithNotice(db.GetEngine(db.DefaultContext), "Delete issue attachment", attachmentPaths[i])
131+
admin_model.RemoveAllWithNoticeCtx(db.DefaultContext, "Delete issue attachment", attachmentPaths[i])
131132
}
132133
return nil
133134
}

models/repo.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323

2424
_ "image/jpeg" // Needed for jpeg support
2525

26+
admin_model "code.gitea.io/gitea/models/admin"
2627
"code.gitea.io/gitea/models/db"
2728
"code.gitea.io/gitea/models/unit"
2829
"code.gitea.io/gitea/models/webhook"
@@ -133,7 +134,7 @@ func NewRepoContext() {
133134
loadRepoConfig()
134135
unit.LoadUnitConfig()
135136

136-
RemoveAllWithNotice("Clean up repository temporary data", filepath.Join(setting.AppDataPath, "tmp"))
137+
admin_model.RemoveAllWithNotice("Clean up repository temporary data", filepath.Join(setting.AppDataPath, "tmp"))
137138
}
138139

139140
// RepositoryStatus defines the status of repository
@@ -1648,36 +1649,36 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
16481649

16491650
// Remove repository files.
16501651
repoPath := repo.RepoPath()
1651-
removeAllWithNotice(db.GetEngine(db.DefaultContext), "Delete repository files", repoPath)
1652+
admin_model.RemoveAllWithNotice("Delete repository files", repoPath)
16521653

16531654
// Remove wiki files
16541655
if repo.HasWiki() {
1655-
removeAllWithNotice(db.GetEngine(db.DefaultContext), "Delete repository wiki", repo.WikiPath())
1656+
admin_model.RemoveAllWithNotice("Delete repository wiki", repo.WikiPath())
16561657
}
16571658

16581659
// Remove archives
16591660
for i := range archivePaths {
1660-
removeStorageWithNotice(db.GetEngine(db.DefaultContext), storage.RepoArchives, "Delete repo archive file", archivePaths[i])
1661+
admin_model.RemoveStorageWithNotice(storage.RepoArchives, "Delete repo archive file", archivePaths[i])
16611662
}
16621663

16631664
// Remove lfs objects
16641665
for i := range lfsPaths {
1665-
removeStorageWithNotice(db.GetEngine(db.DefaultContext), storage.LFS, "Delete orphaned LFS file", lfsPaths[i])
1666+
admin_model.RemoveStorageWithNotice(storage.LFS, "Delete orphaned LFS file", lfsPaths[i])
16661667
}
16671668

16681669
// Remove issue attachment files.
16691670
for i := range attachmentPaths {
1670-
RemoveStorageWithNotice(storage.Attachments, "Delete issue attachment", attachmentPaths[i])
1671+
admin_model.RemoveStorageWithNotice(storage.Attachments, "Delete issue attachment", attachmentPaths[i])
16711672
}
16721673

16731674
// Remove release attachment files.
16741675
for i := range releaseAttachments {
1675-
RemoveStorageWithNotice(storage.Attachments, "Delete release attachment", releaseAttachments[i])
1676+
admin_model.RemoveStorageWithNotice(storage.Attachments, "Delete release attachment", releaseAttachments[i])
16761677
}
16771678

16781679
// Remove attachment with no issue_id and release_id.
16791680
for i := range newAttachmentPaths {
1680-
RemoveStorageWithNotice(storage.Attachments, "Delete issue attachment", attachmentPaths[i])
1681+
admin_model.RemoveStorageWithNotice(storage.Attachments, "Delete issue attachment", attachmentPaths[i])
16811682
}
16821683

16831684
if len(repo.Avatar) > 0 {

models/user.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
_ "image/jpeg" // Needed for jpeg support
2424

25+
admin_model "code.gitea.io/gitea/models/admin"
2526
"code.gitea.io/gitea/models/db"
2627
"code.gitea.io/gitea/models/login"
2728
"code.gitea.io/gitea/models/unit"
@@ -1148,7 +1149,8 @@ func deleteBeans(e db.Engine, beans ...interface{}) (err error) {
11481149
return nil
11491150
}
11501151

1151-
func deleteUser(e db.Engine, u *User) error {
1152+
func deleteUser(ctx context.Context, u *User) error {
1153+
e := db.GetEngine(ctx)
11521154
// Note: A user owns any repository or belongs to any organization
11531155
// cannot perform delete operation.
11541156

@@ -1304,15 +1306,15 @@ func deleteUser(e db.Engine, u *User) error {
13041306
path := UserPath(u.Name)
13051307
if err = util.RemoveAll(path); err != nil {
13061308
err = fmt.Errorf("Failed to RemoveAll %s: %v", path, err)
1307-
_ = createNotice(e, NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err))
1309+
_ = admin_model.CreateNoticeCtx(ctx, admin_model.NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err))
13081310
return err
13091311
}
13101312

13111313
if len(u.Avatar) > 0 {
13121314
avatarPath := u.CustomAvatarRelativePath()
13131315
if err = storage.Avatars.Delete(avatarPath); err != nil {
13141316
err = fmt.Errorf("Failed to remove %s: %v", avatarPath, err)
1315-
_ = createNotice(e, NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err))
1317+
_ = admin_model.CreateNoticeCtx(ctx, admin_model.NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err))
13161318
return err
13171319
}
13181320
}
@@ -1328,18 +1330,18 @@ func DeleteUser(u *User) (err error) {
13281330
return fmt.Errorf("%s is an organization not a user", u.Name)
13291331
}
13301332

1331-
sess := db.NewSession(db.DefaultContext)
1332-
defer sess.Close()
1333-
if err = sess.Begin(); err != nil {
1333+
ctx, committer, err := db.TxContext()
1334+
if err != nil {
13341335
return err
13351336
}
1337+
defer committer.Close()
13361338

1337-
if err = deleteUser(sess, u); err != nil {
1339+
if err = deleteUser(ctx, u); err != nil {
13381340
// Note: don't wrapper error here.
13391341
return err
13401342
}
13411343

1342-
return sess.Commit()
1344+
return committer.Commit()
13431345
}
13441346

13451347
// DeleteInactiveUsers deletes all inactive users and email addresses.
@@ -1825,3 +1827,16 @@ func GetUserByOpenID(uri string) (*User, error) {
18251827

18261828
return nil, ErrUserNotExist{0, uri, 0}
18271829
}
1830+
1831+
// GetAdminUser returns the first administrator
1832+
func GetAdminUser() (*User, error) {
1833+
var admin User
1834+
has, err := db.GetEngine(db.DefaultContext).Where("is_admin=?", true).Get(&admin)
1835+
if err != nil {
1836+
return nil, err
1837+
} else if !has {
1838+
return nil, ErrUserNotExist{}
1839+
}
1840+
1841+
return &admin, nil
1842+
}

modules/repository/check.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"code.gitea.io/gitea/models"
14+
admin_model "code.gitea.io/gitea/models/admin"
1415
"code.gitea.io/gitea/models/db"
1516
"code.gitea.io/gitea/modules/git"
1617
"code.gitea.io/gitea/modules/log"
@@ -38,7 +39,7 @@ func GitFsck(ctx context.Context, timeout time.Duration, args []string) error {
3839
repoPath := repo.RepoPath()
3940
if err := git.Fsck(ctx, repoPath, timeout, args...); err != nil {
4041
log.Warn("Failed to health check repository (%v): %v", repo, err)
41-
if err = models.CreateRepositoryNotice("Failed to health check repository (%s): %v", repo.FullName(), err); err != nil {
42+
if err = admin_model.CreateRepositoryNotice("Failed to health check repository (%s): %v", repo.FullName(), err); err != nil {
4243
log.Error("CreateRepositoryNotice: %v", err)
4344
}
4445
}
@@ -87,7 +88,7 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...string) erro
8788
if err != nil {
8889
log.Error("Repository garbage collection failed for %v. Stdout: %s\nError: %v", repo, stdout, err)
8990
desc := fmt.Sprintf("Repository garbage collection failed for %s. Stdout: %s\nError: %v", repo.RepoPath(), stdout, err)
90-
if err = models.CreateRepositoryNotice(desc); err != nil {
91+
if err = admin_model.CreateRepositoryNotice(desc); err != nil {
9192
log.Error("CreateRepositoryNotice: %v", err)
9293
}
9394
return fmt.Errorf("Repository garbage collection failed in repo: %s: Error: %v", repo.FullName(), err)
@@ -97,7 +98,7 @@ func GitGcRepos(ctx context.Context, timeout time.Duration, args ...string) erro
9798
if err := repo.UpdateSize(db.DefaultContext); err != nil {
9899
log.Error("Updating size as part of garbage collection failed for %v. Stdout: %s\nError: %v", repo, stdout, err)
99100
desc := fmt.Sprintf("Updating size as part of garbage collection failed for %s. Stdout: %s\nError: %v", repo.RepoPath(), stdout, err)
100-
if err = models.CreateRepositoryNotice(desc); err != nil {
101+
if err = admin_model.CreateRepositoryNotice(desc); err != nil {
101102
log.Error("CreateRepositoryNotice: %v", err)
102103
}
103104
return fmt.Errorf("Updating size as part of garbage collection failed in repo: %s: Error: %v", repo.FullName(), err)
@@ -139,7 +140,7 @@ func gatherMissingRepoRecords(ctx context.Context) ([]*models.Repository, error)
139140
if strings.HasPrefix(err.Error(), "Aborted gathering missing repo") {
140141
return nil, err
141142
}
142-
if err2 := models.CreateRepositoryNotice("gatherMissingRepoRecords: %v", err); err2 != nil {
143+
if err2 := admin_model.CreateRepositoryNotice("gatherMissingRepoRecords: %v", err); err2 != nil {
143144
log.Error("CreateRepositoryNotice: %v", err2)
144145
}
145146
return nil, err
@@ -167,7 +168,7 @@ func DeleteMissingRepositories(ctx context.Context, doer *models.User) error {
167168
log.Trace("Deleting %d/%d...", repo.OwnerID, repo.ID)
168169
if err := models.DeleteRepository(doer, repo.OwnerID, repo.ID); err != nil {
169170
log.Error("Failed to DeleteRepository %s [%d]: Error: %v", repo.FullName(), repo.ID, err)
170-
if err2 := models.CreateRepositoryNotice("Failed to DeleteRepository %s [%d]: Error: %v", repo.FullName(), repo.ID, err); err2 != nil {
171+
if err2 := admin_model.CreateRepositoryNotice("Failed to DeleteRepository %s [%d]: Error: %v", repo.FullName(), repo.ID, err); err2 != nil {
171172
log.Error("CreateRepositoryNotice: %v", err)
172173
}
173174
}
@@ -195,7 +196,7 @@ func ReinitMissingRepositories(ctx context.Context) error {
195196
log.Trace("Initializing %d/%d...", repo.OwnerID, repo.ID)
196197
if err := git.InitRepository(repo.RepoPath(), true); err != nil {
197198
log.Error("Unable (re)initialize repository %d at %s. Error: %v", repo.ID, repo.RepoPath(), err)
198-
if err2 := models.CreateRepositoryNotice("InitRepository [%d]: %v", repo.ID, err); err2 != nil {
199+
if err2 := admin_model.CreateRepositoryNotice("InitRepository [%d]: %v", repo.ID, err); err2 != nil {
199200
log.Error("CreateRepositoryNotice: %v", err2)
200201
}
201202
}

routers/web/admin/notice.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"net/http"
1010
"strconv"
1111

12-
"code.gitea.io/gitea/models"
12+
admin_model "code.gitea.io/gitea/models/admin"
1313
"code.gitea.io/gitea/modules/base"
1414
"code.gitea.io/gitea/modules/context"
1515
"code.gitea.io/gitea/modules/log"
@@ -26,13 +26,13 @@ func Notices(ctx *context.Context) {
2626
ctx.Data["PageIsAdmin"] = true
2727
ctx.Data["PageIsAdminNotices"] = true
2828

29-
total := models.CountNotices()
29+
total := admin_model.CountNotices()
3030
page := ctx.FormInt("page")
3131
if page <= 1 {
3232
page = 1
3333
}
3434

35-
notices, err := models.Notices(page, setting.UI.Admin.NoticePagingNum)
35+
notices, err := admin_model.Notices(page, setting.UI.Admin.NoticePagingNum)
3636
if err != nil {
3737
ctx.ServerError("Notices", err)
3838
return
@@ -57,7 +57,7 @@ func DeleteNotices(ctx *context.Context) {
5757
}
5858
}
5959

60-
if err := models.DeleteNoticesByIDs(ids); err != nil {
60+
if err := admin_model.DeleteNoticesByIDs(ids); err != nil {
6161
ctx.Flash.Error("DeleteNoticesByIDs: " + err.Error())
6262
ctx.Status(500)
6363
} else {
@@ -68,7 +68,7 @@ func DeleteNotices(ctx *context.Context) {
6868

6969
// EmptyNotices delete all the notices
7070
func EmptyNotices(ctx *context.Context) {
71-
if err := models.DeleteNotices(0, 0); err != nil {
71+
if err := admin_model.DeleteNotices(0, 0); err != nil {
7272
ctx.ServerError("DeleteNotices", err)
7373
return
7474
}

0 commit comments

Comments
 (0)