Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

admin_user_generate_access_token.go 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // Copyright 2023 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package cmd
  4. import (
  5. "errors"
  6. "fmt"
  7. auth_model "code.gitea.io/gitea/models/auth"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "github.com/urfave/cli/v2"
  10. )
  11. var microcmdUserGenerateAccessToken = &cli.Command{
  12. Name: "generate-access-token",
  13. Usage: "Generate an access token for a specific user",
  14. Flags: []cli.Flag{
  15. &cli.StringFlag{
  16. Name: "username",
  17. Aliases: []string{"u"},
  18. Usage: "Username",
  19. },
  20. &cli.StringFlag{
  21. Name: "token-name",
  22. Aliases: []string{"t"},
  23. Usage: "Token name",
  24. Value: "gitea-admin",
  25. },
  26. &cli.BoolFlag{
  27. Name: "raw",
  28. Usage: "Display only the token value",
  29. },
  30. &cli.StringFlag{
  31. Name: "scopes",
  32. Value: "",
  33. Usage: "Comma separated list of scopes to apply to access token",
  34. },
  35. },
  36. Action: runGenerateAccessToken,
  37. }
  38. func runGenerateAccessToken(c *cli.Context) error {
  39. if !c.IsSet("username") {
  40. return errors.New("You must provide a username to generate a token for")
  41. }
  42. ctx, cancel := installSignals()
  43. defer cancel()
  44. if err := initDB(ctx); err != nil {
  45. return err
  46. }
  47. user, err := user_model.GetUserByName(ctx, c.String("username"))
  48. if err != nil {
  49. return err
  50. }
  51. // construct token with name and user so we can make sure it is unique
  52. t := &auth_model.AccessToken{
  53. Name: c.String("token-name"),
  54. UID: user.ID,
  55. }
  56. exist, err := auth_model.AccessTokenByNameExists(ctx, t)
  57. if err != nil {
  58. return err
  59. }
  60. if exist {
  61. return errors.New("access token name has been used already")
  62. }
  63. // make sure the scopes are valid
  64. accessTokenScope, err := auth_model.AccessTokenScope(c.String("scopes")).Normalize()
  65. if err != nil {
  66. return fmt.Errorf("invalid access token scope provided: %w", err)
  67. }
  68. t.Scope = accessTokenScope
  69. // create the token
  70. if err := auth_model.NewAccessToken(ctx, t); err != nil {
  71. return err
  72. }
  73. if c.Bool("raw") {
  74. fmt.Printf("%s\n", t.Token)
  75. } else {
  76. fmt.Printf("Access token was successfully created: %s\n", t.Token)
  77. }
  78. return nil
  79. }