···9494}
95959696// GetEmailForHash converts a provided md5sum to the email
9797-func GetEmailForHash(md5Sum string) (string, error) {
9797+func GetEmailForHash(ctx context.Context, md5Sum string) (string, error) {
9898 return cache.GetString("Avatar:"+md5Sum, func() (string, error) {
9999 emailHash := EmailHash{
100100 Hash: strings.ToLower(strings.TrimSpace(md5Sum)),
101101 }
102102103103- _, err := db.GetEngine(db.DefaultContext).Get(&emailHash)
103103+ _, err := db.GetEngine(ctx).Get(&emailHash)
104104 return emailHash.Email, err
105105 })
106106}
···127127128128// saveEmailHash returns an avatar link for a provided email,
129129// the email and hash are saved into database, which will be used by GetEmailForHash later
130130-func saveEmailHash(email string) string {
130130+func saveEmailHash(ctx context.Context, email string) string {
131131 lowerEmail := strings.ToLower(strings.TrimSpace(email))
132132 emailHash := HashEmail(lowerEmail)
133133 _, _ = cache.GetString("Avatar:"+emailHash, func() (string, error) {
···136136 Hash: emailHash,
137137 }
138138 // OK we're going to open a session just because I think that that might hide away any problems with postgres reporting errors
139139- if err := db.WithTx(db.DefaultContext, func(ctx context.Context) error {
139139+ if err := db.WithTx(ctx, func(ctx context.Context) error {
140140 has, err := db.GetEngine(ctx).Where("email = ? AND hash = ?", emailHash.Email, emailHash.Hash).Get(new(EmailHash))
141141 if has || err != nil {
142142 // Seriously we don't care about any DB problems just return the lowerEmail - we expect the transaction to fail most of the time
···196196197197 enableFederatedAvatar := setting.Config().Picture.EnableFederatedAvatar.Value(ctx)
198198 if enableFederatedAvatar {
199199- emailHash := saveEmailHash(email)
199199+ emailHash := saveEmailHash(ctx, email)
200200 if final {
201201 // for final link, we can spend more time on slow external query
202202 var avatarURL *url.URL
+2-2
models/repo/redirect.go
···5050}
51515252// LookupRedirect look up if a repository has a redirect name
5353-func LookupRedirect(ownerID int64, repoName string) (int64, error) {
5353+func LookupRedirect(ctx context.Context, ownerID int64, repoName string) (int64, error) {
5454 repoName = strings.ToLower(repoName)
5555 redirect := &Redirect{OwnerID: ownerID, LowerName: repoName}
5656- if has, err := db.GetEngine(db.DefaultContext).Get(redirect); err != nil {
5656+ if has, err := db.GetEngine(ctx).Get(redirect); err != nil {
5757 return 0, err
5858 } else if !has {
5959 return 0, ErrRedirectNotExist{OwnerID: ownerID, RepoName: repoName}
···830830 }
831831832832 // Contains true if the user can create issue dependencies
833833- ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx.Doer, isPull)
833833+ ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx, ctx.Doer, isPull)
834834835835 return labels
836836}
···15481548 ctx.Data["OtherStopwatchURL"] = swIssue.Link()
15491549 }
15501550 }
15511551- ctx.Data["CanUseTimetracker"] = ctx.Repo.CanUseTimetracker(issue, ctx.Doer)
15511551+ ctx.Data["CanUseTimetracker"] = ctx.Repo.CanUseTimetracker(ctx, issue, ctx.Doer)
15521552 } else {
15531553 ctx.Data["CanUseTimetracker"] = false
15541554 }
···15591559 }
1560156015611561 // Check if the user can use the dependencies
15621562- ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx.Doer, issue.IsPull)
15621562+ ctx.Data["CanCreateIssueDependencies"] = ctx.Repo.CanCreateIssueDependencies(ctx, ctx.Doer, issue.IsPull)
1563156315641564 // check if dependencies can be created across repositories
15651565 ctx.Data["AllowCrossRepositoryDependencies"] = setting.Service.AllowCrossRepositoryDependencies
+2-2
routers/web/repo/issue_dependency.go
···2222 }
23232424 // Check if the Repo is allowed to have dependencies
2525- if !ctx.Repo.CanCreateIssueDependencies(ctx.Doer, issue.IsPull) {
2525+ if !ctx.Repo.CanCreateIssueDependencies(ctx, ctx.Doer, issue.IsPull) {
2626 ctx.Error(http.StatusForbidden, "CanCreateIssueDependencies")
2727 return
2828 }
···9797 }
98989999 // Check if the Repo is allowed to have dependencies
100100- if !ctx.Repo.CanCreateIssueDependencies(ctx.Doer, issue.IsPull) {
100100+ if !ctx.Repo.CanCreateIssueDependencies(ctx, ctx.Doer, issue.IsPull) {
101101 ctx.Error(http.StatusForbidden, "CanCreateIssueDependencies")
102102 return
103103 }
+2-2
routers/web/repo/issue_stopwatch.go
···2626 showSuccessMessage = true
2727 }
28282929- if !c.Repo.CanUseTimetracker(issue, c.Doer) {
2929+ if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
3030 c.NotFound("CanUseTimetracker", nil)
3131 return
3232 }
···5050 if c.Written() {
5151 return
5252 }
5353- if !c.Repo.CanUseTimetracker(issue, c.Doer) {
5353+ if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
5454 c.NotFound("CanUseTimetracker", nil)
5555 return
5656 }
+2-2
routers/web/repo/issue_timetrack.go
···2222 if c.Written() {
2323 return
2424 }
2525- if !c.Repo.CanUseTimetracker(issue, c.Doer) {
2525+ if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
2626 c.NotFound("CanUseTimetracker", nil)
2727 return
2828 }
···5656 if c.Written() {
5757 return
5858 }
5959- if !c.Repo.CanUseTimetracker(issue, c.Doer) {
5959+ if !c.Repo.CanUseTimetracker(c, issue, c.Doer) {
6060 c.NotFound("CanUseTimetracker", nil)
6161 return
6262 }
+1-1
routers/web/repo/pull.go
···1170117011711171 // handle manually-merged mark
11721172 if manuallyMerged {
11731173- if err := pull_service.MergedManually(pr, ctx.Doer, ctx.Repo.GitRepo, form.MergeCommitID); err != nil {
11731173+ if err := pull_service.MergedManually(ctx, pr, ctx.Doer, ctx.Repo.GitRepo, form.MergeCommitID); err != nil {
11741174 switch {
1175117511761176 case models.IsErrInvalidMergeStyle(err):
···44package oauth2
5566import (
77+ "context"
78 "encoding/gob"
89 "net/http"
910 "sync"
···2627const ProviderHeaderKey = "gitea-oauth2-provider"
27282829// Init initializes the oauth source
2929-func Init() error {
3030+func Init(ctx context.Context) error {
3031 if err := InitSigningKey(); err != nil {
3132 return err
3233 }
···5152 // Unlock our mutex
5253 gothRWMutex.Unlock()
53545454- return initOAuth2Sources()
5555+ return initOAuth2Sources(ctx)
5556}
56575758// ResetOAuth2 clears existing OAuth2 providers and loads them from DB
5858-func ResetOAuth2() error {
5959+func ResetOAuth2(ctx context.Context) error {
5960 ClearProviders()
6060- return initOAuth2Sources()
6161+ return initOAuth2Sources(ctx)
6162}
62636364// initOAuth2Sources is used to load and register all active OAuth2 providers
6464-func initOAuth2Sources() error {
6565- authSources, _ := auth.GetActiveOAuth2ProviderSources()
6565+func initOAuth2Sources(ctx context.Context) error {
6666+ authSources, _ := auth.GetActiveOAuth2ProviderSources(ctx)
6667 for _, source := range authSources {
6768 oauth2Source, ok := source.Cfg.(*Source)
6869 if !ok {
+3-2
services/auth/source/oauth2/providers.go
···44package oauth2
5566import (
77+ "context"
78 "errors"
89 "fmt"
910 "html"
···9798// GetActiveOAuth2Providers returns the map of configured active OAuth2 providers
9899// key is used as technical name (like in the callbackURL)
99100// values to display
100100-func GetActiveOAuth2Providers() ([]string, map[string]Provider, error) {
101101+func GetActiveOAuth2Providers(ctx context.Context) ([]string, map[string]Provider, error) {
101102 // Maybe also separate used and unused providers so we can force the registration of only 1 active provider for each type
102103103103- authSources, err := auth.GetActiveOAuth2ProviderSources()
104104+ authSources, err := auth.GetActiveOAuth2ProviderSources(ctx)
104105 if err != nil {
105106 return nil, nil, err
106107 }
···4040 // 6. Take the output of cat-file --batch and check if each file in turn
4141 // to see if they're pointers to files in the LFS store associated with
4242 // the head repo and add them to the base repo if so
4343- go createLFSMetaObjectsFromCatFileBatch(catFileBatchReader, &wg, pr)
4343+ go createLFSMetaObjectsFromCatFileBatch(db.DefaultContext, catFileBatchReader, &wg, pr)
44444545 // 5. Take the shas of the blobs and batch read them
4646 go pipeline.CatFileBatch(ctx, shasToBatchReader, catFileBatchWriter, &wg, tmpBasePath)
···6868 return nil
6969}
70707171-func createLFSMetaObjectsFromCatFileBatch(catFileBatchReader *io.PipeReader, wg *sync.WaitGroup, pr *issues_model.PullRequest) {
7171+func createLFSMetaObjectsFromCatFileBatch(ctx context.Context, catFileBatchReader *io.PipeReader, wg *sync.WaitGroup, pr *issues_model.PullRequest) {
7272 defer wg.Done()
7373 defer catFileBatchReader.Close()
7474···116116 }
117117118118 // Then we need to check that this pointer is in the db
119119- if _, err := git_model.GetLFSMetaObjectByOid(db.DefaultContext, pr.HeadRepoID, pointer.Oid); err != nil {
119119+ if _, err := git_model.GetLFSMetaObjectByOid(ctx, pr.HeadRepoID, pointer.Oid); err != nil {
120120 if err == git_model.ErrLFSObjectNotExist {
121121 log.Warn("During merge of: %d in %-v, there is a pointer to LFS Oid: %s which although present in the LFS store is not associated with the head repo %-v", pr.Index, pr.BaseRepo, pointer.Oid, pr.HeadRepo)
122122 continue
···129129 // Therefore it should be associated with the base repo
130130 meta := &git_model.LFSMetaObject{Pointer: pointer}
131131 meta.RepositoryID = pr.BaseRepoID
132132- if _, err := git_model.NewLFSMetaObject(db.DefaultContext, meta); err != nil {
132132+ if _, err := git_model.NewLFSMetaObject(ctx, meta); err != nil {
133133 _ = catFileBatchReader.CloseWithError(err)
134134 break
135135 }