diff --git a/models/bots/runner.go b/models/bots/runner.go index ee898e6078..315a7209b1 100644 --- a/models/bots/runner.go +++ b/models/bots/runner.go @@ -10,16 +10,12 @@ import ( "strings" "time" - auth_model "code.gitea.io/gitea/models/auth" "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/timeutil" - "code.gitea.io/gitea/modules/util" runnerv1 "code.gitea.io/bots-proto-go/runner/v1" - gouuid "github.com/google/uuid" "xorm.io/builder" ) @@ -147,15 +143,9 @@ func (r *Runner) LoadAttributes(ctx context.Context) error { return nil } -func (r *Runner) GenerateToken() error { - salt, err := util.CryptoRandomString(10) - if err != nil { - return err - } - r.TokenSalt = salt - r.Token = base.EncodeSha1(gouuid.New().String()) - r.TokenHash = auth_model.HashToken(r.Token, r.TokenSalt) - return nil +func (r *Runner) GenerateToken() (err error) { + r.Token, r.TokenSalt, r.TokenHash, _, err = generateSaltedToken() + return err } func init() { diff --git a/models/bots/runner_token.go b/models/bots/runner_token.go index 4798bb06a4..b13237d7ca 100644 --- a/models/bots/runner_token.go +++ b/models/bots/runner_token.go @@ -11,10 +11,8 @@ import ( "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/timeutil" - - gouuid "github.com/google/uuid" + "code.gitea.io/gitea/modules/util" ) // ErrRunnerNotExist represents an error for bot runner not exist @@ -77,13 +75,17 @@ func UpdateRunnerToken(ctx context.Context, r *RunnerToken, cols ...string) (err // NewRunnerToken creates a new runner token func NewRunnerToken(ownerID, repoID int64) (*RunnerToken, error) { + token, err := util.CryptoRandomString(40) + if err != nil { + return nil, err + } runnerToken := &RunnerToken{ OwnerID: ownerID, RepoID: repoID, IsActive: false, - Token: base.EncodeSha1(gouuid.New().String()), + Token: token, } - _, err := db.GetEngine(db.DefaultContext).Insert(runnerToken) + _, err = db.GetEngine(db.DefaultContext).Insert(runnerToken) return runnerToken, err } diff --git a/models/bots/task.go b/models/bots/task.go index 08c0666c00..5637e4eeb1 100644 --- a/models/bots/task.go +++ b/models/bots/task.go @@ -17,14 +17,12 @@ import ( auth_model "code.gitea.io/gitea/models/auth" "code.gitea.io/gitea/models/db" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" runnerv1 "code.gitea.io/bots-proto-go/runner/v1" - gouuid "github.com/google/uuid" lru "github.com/hashicorp/golang-lru" "github.com/nektos/act/pkg/jobparser" "google.golang.org/protobuf/types/known/timestamppb" @@ -190,16 +188,9 @@ func (task *Task) LoadAttributes(ctx context.Context) error { return nil } -func (task *Task) GenerateToken() error { - salt, err := util.CryptoRandomString(10) - if err != nil { - return err - } - task.TokenSalt = salt - task.Token = base.EncodeSha1(gouuid.New().String()) - task.TokenHash = auth_model.HashToken(task.Token, task.TokenSalt) - task.TokenLastEight = task.Token[len(task.Token)-8:] - return nil +func (task *Task) GenerateToken() (err error) { + task.Token, task.TokenSalt, task.TokenHash, task.TokenLastEight, err = generateSaltedToken() + return err } type LogIndexes []int64 diff --git a/models/bots/utils.go b/models/bots/utils.go new file mode 100644 index 0000000000..d35976c9ef --- /dev/null +++ b/models/bots/utils.go @@ -0,0 +1,26 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package bots + +import ( + "encoding/hex" + + auth_model "code.gitea.io/gitea/models/auth" + "code.gitea.io/gitea/modules/util" +) + +func generateSaltedToken() (string, string, string, string, error) { + salt, err := util.CryptoRandomString(10) + if err != nil { + return "", "", "", "", err + } + buf, err := util.CryptoRandomBytes(20) + if err != nil { + return "", "", "", "", err + } + token := hex.EncodeToString(buf) + hash := auth_model.HashToken(token, salt) + return token, salt, hash, token[:8], nil +}