mirror of
https://github.com/go-gitea/gitea.git
synced 2025-04-18 00:47:48 -04:00
feat: generate token for task
This commit is contained in:
parent
30df383ca0
commit
b4b22e78ad
@ -12,13 +12,17 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
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/bots"
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/timeutil"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
runnerv1 "gitea.com/gitea/proto-go/runner/v1"
|
||||
"xorm.io/builder"
|
||||
|
||||
gouuid "github.com/google/uuid"
|
||||
"github.com/nektos/act/pkg/jobparser"
|
||||
)
|
||||
|
||||
@ -35,6 +39,11 @@ type Task struct {
|
||||
Started timeutil.TimeStamp
|
||||
Stopped timeutil.TimeStamp
|
||||
|
||||
Token string `xorm:"-"`
|
||||
TokenHash string `xorm:"UNIQUE"` // sha256 of token
|
||||
TokenSalt string
|
||||
TokenLastEight string `xorm:"token_last_eight"`
|
||||
|
||||
LogFilename string // file name of log
|
||||
LogInStorage bool // read log from database or from storage
|
||||
LogLength int64 // lines count
|
||||
@ -139,6 +148,18 @@ func (task *Task) FullSteps() []*TaskStep {
|
||||
return steps
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
type LogIndexes []int64
|
||||
|
||||
func (i *LogIndexes) FromDB(b []byte) error {
|
||||
@ -240,14 +261,17 @@ func CreateTaskForRunner(ctx context.Context, runner *Runner) (*Task, bool, erro
|
||||
Started: now,
|
||||
Status: StatusRunning,
|
||||
}
|
||||
if err := task.GenerateToken(); err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
|
||||
var wolkflowJob *jobparser.Job
|
||||
var workflowJob *jobparser.Job
|
||||
if gots, err := jobparser.Parse(job.WorkflowPayload); err != nil {
|
||||
return nil, false, fmt.Errorf("parse workflow of job %d: %w", job.ID, err)
|
||||
} else if len(gots) != 1 {
|
||||
return nil, false, fmt.Errorf("workflow of job %d: not signle workflow", job.ID)
|
||||
} else {
|
||||
_, wolkflowJob = gots[0].Job()
|
||||
_, workflowJob = gots[0].Job()
|
||||
}
|
||||
|
||||
if _, err := e.Insert(task); err != nil {
|
||||
@ -259,8 +283,8 @@ func CreateTaskForRunner(ctx context.Context, runner *Runner) (*Task, bool, erro
|
||||
return nil, false, err
|
||||
}
|
||||
|
||||
steps := make([]*TaskStep, len(wolkflowJob.Steps))
|
||||
for i, v := range wolkflowJob.Steps {
|
||||
steps := make([]*TaskStep, len(workflowJob.Steps))
|
||||
for i, v := range workflowJob.Steps {
|
||||
steps[i] = &TaskStep{
|
||||
Name: v.String(),
|
||||
TaskID: task.ID,
|
||||
|
@ -294,16 +294,23 @@ func pickTask(ctx context.Context, runner *bots_model.Runner) (*runnerv1.Task, b
|
||||
"ref_type": "",
|
||||
"head_ref": "",
|
||||
"base_ref": "",
|
||||
"token": "",
|
||||
"token": t.Token,
|
||||
"repository_owner": fmt.Sprint(t.Job.Run.Repo.OwnerName),
|
||||
"retention_days": "",
|
||||
})
|
||||
secrets := getSecretsOfTask(ctx, t)
|
||||
if _, ok := secrets["GITHUB_TOKEN"]; !ok {
|
||||
secrets["GITHUB_TOKEN"] = t.Token
|
||||
}
|
||||
if _, ok := secrets["GITEA_TOKEN"]; !ok {
|
||||
secrets["GITEA_TOKEN"] = t.Token
|
||||
}
|
||||
|
||||
task := &runnerv1.Task{
|
||||
Id: t.ID,
|
||||
WorkflowPayload: t.Job.WorkflowPayload,
|
||||
Context: taskContext,
|
||||
Secrets: getSecretsOfTask(ctx, t),
|
||||
Secrets: secrets,
|
||||
}
|
||||
return task, true, nil
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user