2023-02-15 01:12:19 +03:00
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package cmd
import (
"fmt"
auth_model "code.gitea.io/gitea/models/auth"
user_model "code.gitea.io/gitea/models/user"
2023-07-21 12:28:19 +03:00
"github.com/urfave/cli/v2"
2023-02-15 01:12:19 +03:00
)
2023-07-21 12:28:19 +03:00
var microcmdUserGenerateAccessToken = & cli . Command {
2023-02-15 01:12:19 +03:00
Name : "generate-access-token" ,
Usage : "Generate an access token for a specific user" ,
Flags : [ ] cli . Flag {
2023-07-21 12:28:19 +03:00
& cli . StringFlag {
Name : "username" ,
Aliases : [ ] string { "u" } ,
Usage : "Username" ,
2023-02-15 01:12:19 +03:00
} ,
2023-07-21 12:28:19 +03:00
& cli . StringFlag {
Name : "token-name" ,
Aliases : [ ] string { "t" } ,
Usage : "Token name" ,
Value : "gitea-admin" ,
2023-02-15 01:12:19 +03:00
} ,
2023-07-21 12:28:19 +03:00
& cli . BoolFlag {
2023-02-15 01:12:19 +03:00
Name : "raw" ,
Usage : "Display only the token value" ,
} ,
2023-07-21 12:28:19 +03:00
& cli . StringFlag {
2023-02-15 01:12:19 +03:00
Name : "scopes" ,
Value : "" ,
Usage : "Comma separated list of scopes to apply to access token" ,
} ,
} ,
Action : runGenerateAccessToken ,
}
func runGenerateAccessToken ( c * cli . Context ) error {
if ! c . IsSet ( "username" ) {
return fmt . Errorf ( "You must provide a username to generate a token for" )
}
ctx , cancel := installSignals ( )
defer cancel ( )
if err := initDB ( ctx ) ; err != nil {
return err
}
user , err := user_model . GetUserByName ( ctx , c . String ( "username" ) )
if err != nil {
return err
}
accessTokenScope , err := auth_model . AccessTokenScope ( c . String ( "scopes" ) ) . Normalize ( )
if err != nil {
return err
}
t := & auth_model . AccessToken {
Name : c . String ( "token-name" ) ,
UID : user . ID ,
Scope : accessTokenScope ,
}
if err := auth_model . NewAccessToken ( t ) ; err != nil {
return err
}
if c . Bool ( "raw" ) {
fmt . Printf ( "%s\n" , t . Token )
} else {
fmt . Printf ( "Access token was successfully created: %s\n" , t . Token )
}
return nil
}