2016-08-14 02:11:52 +03:00
// Copyright 2016 The Gogs Authors. All rights reserved.
2016-12-21 15:13:17 +03:00
// Copyright 2016 The Gitea Authors. All rights reserved.
2016-08-14 02:11:52 +03:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package cmd
import (
"fmt"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/setting"
2017-04-12 10:44:54 +03:00
"github.com/urfave/cli"
2016-08-14 02:11:52 +03:00
)
var (
2016-11-04 14:42:18 +03:00
// CmdAdmin represents the available admin sub-command.
2016-08-14 02:11:52 +03:00
CmdAdmin = cli . Command {
Name : "admin" ,
2017-02-21 04:14:37 +03:00
Usage : "Perform admin operations on command line" ,
2016-12-21 15:13:17 +03:00
Description : ` Allow using internal logic of Gitea without hacking into the source code
2016-08-14 02:11:52 +03:00
to make automatic initialization process more smoothly ` ,
Subcommands : [ ] cli . Command {
subcmdCreateUser ,
2017-03-20 11:23:38 +03:00
subcmdChangePassword ,
2016-08-14 02:11:52 +03:00
} ,
}
subcmdCreateUser = cli . Command {
Name : "create-user" ,
Usage : "Create a new user in database" ,
Action : runCreateUser ,
Flags : [ ] cli . Flag {
2016-11-10 01:18:22 +03:00
cli . StringFlag {
Name : "name" ,
Value : "" ,
Usage : "Username" ,
} ,
cli . StringFlag {
Name : "password" ,
2016-11-10 01:32:24 +03:00
Value : "" ,
Usage : "User password" ,
2016-11-10 01:18:22 +03:00
} ,
cli . StringFlag {
Name : "email" ,
2016-11-10 01:32:24 +03:00
Value : "" ,
Usage : "User email address" ,
2016-11-10 01:18:22 +03:00
} ,
cli . BoolFlag {
Name : "admin" ,
Usage : "User is an admin" ,
} ,
cli . StringFlag {
Name : "config, c" ,
Value : "custom/conf/app.ini" ,
Usage : "Custom configuration file path" ,
} ,
2016-08-14 02:11:52 +03:00
} ,
}
2017-03-20 11:23:38 +03:00
subcmdChangePassword = cli . Command {
Name : "change-password" ,
Usage : "Change a user's password" ,
Action : runChangePassword ,
Flags : [ ] cli . Flag {
cli . StringFlag {
Name : "username,u" ,
Value : "" ,
Usage : "The user to change password for" ,
} ,
cli . StringFlag {
Name : "password,p" ,
Value : "" ,
Usage : "New password to set for user" ,
} ,
} ,
}
2016-08-14 02:11:52 +03:00
)
2017-03-20 11:23:38 +03:00
func runChangePassword ( c * cli . Context ) error {
if ! c . IsSet ( "password" ) {
return fmt . Errorf ( "Password is not specified" )
} else if ! c . IsSet ( "username" ) {
return fmt . Errorf ( "Username is not specified" )
}
setting . NewContext ( )
models . LoadConfigs ( )
setting . NewXORMLogService ( false )
if err := models . SetEngine ( ) ; err != nil {
return fmt . Errorf ( "models.SetEngine: %v" , err )
}
uname := c . String ( "username" )
user , err := models . GetUserByName ( uname )
if err != nil {
return fmt . Errorf ( "%v" , err )
}
user . Passwd = c . String ( "password" )
if user . Salt , err = models . GetUserSalt ( ) ; err != nil {
return fmt . Errorf ( "%v" , err )
}
user . EncodePasswd ( )
2017-08-12 17:18:44 +03:00
if err := models . UpdateUserCols ( user , "passwd" , "salt" ) ; err != nil {
2017-03-20 11:23:38 +03:00
return fmt . Errorf ( "%v" , err )
}
fmt . Printf ( "User '%s' password has been successfully updated!\n" , uname )
return nil
}
2016-08-14 02:11:52 +03:00
func runCreateUser ( c * cli . Context ) error {
if ! c . IsSet ( "name" ) {
return fmt . Errorf ( "Username is not specified" )
} else if ! c . IsSet ( "password" ) {
return fmt . Errorf ( "Password is not specified" )
} else if ! c . IsSet ( "email" ) {
return fmt . Errorf ( "Email is not specified" )
}
if c . IsSet ( "config" ) {
setting . CustomConf = c . String ( "config" )
}
setting . NewContext ( )
models . LoadConfigs ( )
2017-02-20 11:11:13 +03:00
setting . NewXORMLogService ( false )
2017-01-05 11:31:07 +03:00
if err := models . SetEngine ( ) ; err != nil {
return fmt . Errorf ( "models.SetEngine: %v" , err )
}
2016-08-14 02:11:52 +03:00
if err := models . CreateUser ( & models . User {
Name : c . String ( "name" ) ,
Email : c . String ( "email" ) ,
Passwd : c . String ( "password" ) ,
IsActive : true ,
IsAdmin : c . Bool ( "admin" ) ,
} ) ; err != nil {
return fmt . Errorf ( "CreateUser: %v" , err )
}
fmt . Printf ( "New user '%s' has been successfully created!\n" , c . String ( "name" ) )
return nil
}