@@ -6,6 +6,7 @@ package cmd
6
6
import (
7
7
"errors"
8
8
"fmt"
9
+ "strings"
9
10
10
11
auth_model "forgejo.org/models/auth"
11
12
"forgejo.org/models/db"
@@ -61,6 +62,16 @@ var microcmdUserCreate = &cli.Command{
61
62
Name : "access-token" ,
62
63
Usage : "Generate access token for the user" ,
63
64
},
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
+ },
64
75
& cli.BoolFlag {
65
76
Name : "restricted" ,
66
77
Usage : "Make a restricted user account" ,
@@ -157,23 +168,40 @@ func runCreateUser(c *cli.Context) error {
157
168
IsRestricted : restricted ,
158
169
}
159
170
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
160
193
if err := user_model .CreateUser (ctx , u , overwriteDefault ); err != nil {
161
194
return fmt .Errorf ("CreateUser: %w" , err )
162
195
}
196
+ fmt .Printf ("New user '%s' has been successfully created!\n " , username )
163
197
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 }
170
201
if err := auth_model .NewAccessToken (ctx , t ); err != nil {
171
202
return err
172
203
}
173
-
174
204
fmt .Printf ("Access token was successfully created... %s\n " , t .Token )
175
205
}
176
-
177
- fmt .Printf ("New user '%s' has been successfully created!\n " , username )
178
206
return nil
179
207
}
0 commit comments