@@ -6,6 +6,7 @@ package cmd
66import (
77 "errors"
88 "fmt"
9+ "strings"
910
1011 auth_model "forgejo.org/models/auth"
1112 "forgejo.org/models/db"
@@ -61,6 +62,16 @@ var microcmdUserCreate = &cli.Command{
6162 Name : "access-token" ,
6263 Usage : "Generate access token for the user" ,
6364 },
65+ & cli.StringFlag {
66+ Name : "access-token-name" ,
67+ Usage : `Name of the generated access token` ,
68+ Value : "gitea-admin" ,
69+ },
70+ & cli.StringFlag {
71+ Name : "access-token-scopes" ,
72+ Usage : `Scopes of the generated access token, comma separated. Examples: "all", "public-only,read:issue", "write:repository,write:user"` ,
73+ Value : "all" ,
74+ },
6475 & cli.BoolFlag {
6576 Name : "restricted" ,
6677 Usage : "Make a restricted user account" ,
@@ -157,23 +168,40 @@ func runCreateUser(c *cli.Context) error {
157168 IsRestricted : restricted ,
158169 }
159170
171+ var accessTokenName string
172+ var accessTokenScope auth_model.AccessTokenScope
173+ if c .IsSet ("access-token" ) {
174+ accessTokenName = strings .TrimSpace (c .String ("access-token-name" ))
175+ if accessTokenName == "" {
176+ return errors .New ("access-token-name cannot be empty" )
177+ }
178+ var err error
179+ accessTokenScope , err = auth_model .AccessTokenScope (c .String ("access-token-scopes" )).Normalize ()
180+ if err != nil {
181+ return fmt .Errorf ("invalid access token scope provided: %w" , err )
182+ }
183+ if ! accessTokenScope .HasPermissionScope () {
184+ return errors .New ("access token does not have any permission" )
185+ }
186+ } else if c .IsSet ("access-token-name" ) || c .IsSet ("access-token-scopes" ) {
187+ return errors .New ("access-token-name and access-token-scopes flags are only valid when access-token flag is set" )
188+ }
189+
190+ // arguments should be prepared before creating the user & access token, in case there is anything wrong
191+
192+ // create the user
160193 if err := user_model .CreateUser (ctx , u , overwriteDefault ); err != nil {
161194 return fmt .Errorf ("CreateUser: %w" , err )
162195 }
196+ fmt .Printf ("New user '%s' has been successfully created!\n " , username )
163197
164- if c .Bool ("access-token" ) {
165- t := & auth_model.AccessToken {
166- Name : "gitea-admin" ,
167- UID : u .ID ,
168- }
169-
198+ // create the access token
199+ if accessTokenScope != "" {
200+ t := & auth_model.AccessToken {Name : accessTokenName , UID : u .ID , Scope : accessTokenScope }
170201 if err := auth_model .NewAccessToken (ctx , t ); err != nil {
171202 return err
172203 }
173-
174204 fmt .Printf ("Access token was successfully created... %s\n " , t .Token )
175205 }
176-
177- fmt .Printf ("New user '%s' has been successfully created!\n " , username )
178206 return nil
179207}
0 commit comments