151a726620
(cherry picked from commit2555e315f7
) (cherry picked from commit51b9c9092e
) [CLI] implement forgejo-cli (squash) support initDB (cherry picked from commit5c31ae602a
) (cherry picked from commitbbf76489a7
) Conflicts: because ofd0dbe52e76
upgrade to https://pkg.go.dev/github.com/urfave/cli/v2 (cherry picked from commitb6c1bcc008
) [CLI] implement forgejo-cli actions (cherry picked from commit08be2b226e
) (cherry picked from commitb6cfa88c6e
) (cherry picked from commit59704200de
) [CLI] implement forgejo-cli actions generate-secret (cherry picked from commit6f7905c8ec
) (cherry picked from commite085d6d273
) [CLI] implement forgejo-cli actions generate-secret (squash) NoInit (cherry picked from commit962c944eb2
) [CLI] implement forgejo-cli actions register (cherry picked from commit2f95143000
) (cherry picked from commit42f2f8731e
) [CLI] implement forgejo-cli actions register (squash) no private Do not go through the private API, directly modify the database (cherry picked from commit1ba7c0d39d
) [CLI] implement forgejo-cli actions (cherry picked from commit6f7905c8ec
) (cherry picked from commite085d6d273
) [CLI] implement forgejo-cli actions generate-secret (squash) NoInit (cherry picked from commit962c944eb2
) (cherry picked from commit4c121ef022
) Conflicts: cmd/forgejo/actions.go tests/integration/cmd_forgejo_actions_test.go (cherry picked from commit36997a48e3
) [CLI] implement forgejo-cli actions (squash) restore --version Refs: https://codeberg.org/forgejo/forgejo/issues/1134 (cherry picked from commit9739eb52d8
) [CI] implement forgejo-cli (squash) the actions subcommand needs config (cherry picked from commit def638475122a26082ab3835842c84cd03839154) Conflicts: cmd/main.go https://codeberg.org/forgejo/forgejo/pulls/1209 (cherry picked from commita1758a3910
) (cherry picked from commit935fa650c7
) (cherry picked from commitcd21026bc9
) (cherry picked from commit1700b8973a
) (cherry picked from commit1def42a379
) (cherry picked from commit839d97521d
) (cherry picked from commitfd8c13be6b
) (cherry picked from commit588e5d552f
)
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
// SPDX-License-Identifier: MIT
|
|
|
|
package actions
|
|
|
|
import (
|
|
"context"
|
|
"encoding/hex"
|
|
"fmt"
|
|
|
|
auth_model "code.gitea.io/gitea/models/auth"
|
|
"code.gitea.io/gitea/models/db"
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
gouuid "github.com/google/uuid"
|
|
)
|
|
|
|
func RegisterRunner(ctx context.Context, ownerID, repoID int64, token string, labels []string, name, version string) (*ActionRunner, error) {
|
|
uuid, err := gouuid.FromBytes([]byte(token[:16]))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("gouuid.FromBytes %v", err)
|
|
}
|
|
uuidString := uuid.String()
|
|
|
|
var runner ActionRunner
|
|
|
|
has, err := db.GetEngine(ctx).Where("uuid=?", uuidString).Get(&runner)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("GetRunner %v", err)
|
|
} else if !has {
|
|
//
|
|
// The runner does not exist yet, create it
|
|
//
|
|
saltBytes, err := util.CryptoRandomBytes(16)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("CryptoRandomBytes %v", err)
|
|
}
|
|
salt := hex.EncodeToString(saltBytes)
|
|
|
|
hash := auth_model.HashToken(token, salt)
|
|
|
|
runner = ActionRunner{
|
|
UUID: uuidString,
|
|
TokenHash: hash,
|
|
TokenSalt: salt,
|
|
}
|
|
|
|
if err := CreateRunner(ctx, &runner); err != nil {
|
|
return &runner, fmt.Errorf("can't create new runner %w", err)
|
|
}
|
|
}
|
|
|
|
//
|
|
// Update the existing runner
|
|
//
|
|
name, _ = util.SplitStringAtByteN(name, 255)
|
|
|
|
runner.Name = name
|
|
runner.OwnerID = ownerID
|
|
runner.RepoID = repoID
|
|
runner.Version = version
|
|
runner.AgentLabels = labels
|
|
|
|
if err := UpdateRunner(ctx, &runner, "name", "owner_id", "repo_id", "version", "agent_labels"); err != nil {
|
|
return &runner, fmt.Errorf("can't update the runner %+v %w", runner, err)
|
|
}
|
|
|
|
return &runner, nil
|
|
}
|