summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmd/admin.go89
-rw-r--r--docs/content/doc/usage/command-line.en-us.md50
-rw-r--r--models/user.go6
3 files changed, 121 insertions, 24 deletions
diff --git a/cmd/admin.go b/cmd/admin.go
index 9f81f5284d..d503657250 100644
--- a/cmd/admin.go
+++ b/cmd/admin.go
@@ -30,16 +30,38 @@ var (
Name: "admin",
Usage: "Command line interface to perform common administrative operations",
Subcommands: []cli.Command{
- subcmdCreateUser,
- subcmdChangePassword,
+ subcmdUser,
subcmdRepoSyncReleases,
subcmdRegenerate,
subcmdAuth,
},
}
- subcmdCreateUser = cli.Command{
- Name: "create-user",
+ subcmdUser = cli.Command{
+ Name: "user",
+ Usage: "Modify users",
+ Subcommands: []cli.Command{
+ microcmdUserCreate,
+ microcmdUserList,
+ microcmdUserChangePassword,
+ microcmdUserDelete,
+ },
+ }
+
+ microcmdUserList = cli.Command{
+ Name: "list",
+ Usage: "List users",
+ Action: runListUsers,
+ Flags: []cli.Flag{
+ cli.BoolFlag{
+ Name: "admin",
+ Usage: "List only admin users",
+ },
+ },
+ }
+
+ microcmdUserCreate = cli.Command{
+ Name: "create",
Usage: "Create a new user in database",
Action: runCreateUser,
Flags: []cli.Flag{
@@ -83,7 +105,7 @@ var (
},
}
- subcmdChangePassword = cli.Command{
+ microcmdUserChangePassword = cli.Command{
Name: "change-password",
Usage: "Change a user's password",
Action: runChangePassword,
@@ -101,6 +123,13 @@ var (
},
}
+ microcmdUserDelete = cli.Command{
+ Name: "delete",
+ Usage: "Delete specific user",
+ Flags: []cli.Flag{idFlag},
+ Action: runDeleteUser,
+ }
+
subcmdRepoSyncReleases = cli.Command{
Name: "repo-sync-releases",
Usage: "Synchronize repository releases with tags",
@@ -377,6 +406,56 @@ func runCreateUser(c *cli.Context) error {
return nil
}
+func runListUsers(c *cli.Context) error {
+ if err := initDB(); err != nil {
+ return err
+ }
+
+ users, err := models.GetAllUsers()
+
+ if err != nil {
+ return err
+ }
+
+ w := tabwriter.NewWriter(os.Stdout, 5, 0, 1, ' ', 0)
+
+ if c.IsSet("admin") {
+ fmt.Fprintf(w, "ID\tUsername\tEmail\tIsActive\n")
+ for _, u := range users {
+ if u.IsAdmin {
+ fmt.Fprintf(w, "%d\t%s\t%s\t%t\n", u.ID, u.Name, u.Email, u.IsActive)
+ }
+ }
+ } else {
+ fmt.Fprintf(w, "ID\tUsername\tEmail\tIsActive\tIsAdmin\n")
+ for _, u := range users {
+ fmt.Fprintf(w, "%d\t%s\t%s\t%t\t%t\n", u.ID, u.Name, u.Email, u.IsActive, u.IsAdmin)
+ }
+
+ }
+
+ w.Flush()
+ return nil
+
+}
+
+func runDeleteUser(c *cli.Context) error {
+ if !c.IsSet("id") {
+ return fmt.Errorf("--id flag is missing")
+ }
+
+ if err := initDB(); err != nil {
+ return err
+ }
+
+ user, err := models.GetUserByID(c.Int64("id"))
+ if err != nil {
+ return err
+ }
+
+ return models.DeleteUser(user)
+}
+
func runRepoSyncReleases(c *cli.Context) error {
if err := initDB(); err != nil {
return err
diff --git a/docs/content/doc/usage/command-line.en-us.md b/docs/content/doc/usage/command-line.en-us.md
index 49df30edb0..193f216658 100644
--- a/docs/content/doc/usage/command-line.en-us.md
+++ b/docs/content/doc/usage/command-line.en-us.md
@@ -55,28 +55,40 @@ Starts the server:
Admin operations:
- Commands:
- - `create-user`
- - Options:
- - `--name value`: Username. Required. As of gitea 1.9.0, use the `--username` flag instead.
- - `--username value`: Username. Required. New in gitea 1.9.0.
- - `--password value`: Password. Required.
- - `--email value`: Email. Required.
- - `--admin`: If provided, this makes the user an admin. Optional.
- - `--access-token`: If provided, an access token will be created for the user. Optional. (default: false).
- - `--must-change-password`: If provided, the created user will be required to choose a newer password after
+ - `user`:
+ - `list`:
+ - Options:
+ - `--admin`: List only admin users. Optional.
+ - Description: lists all users that exist
+ - Examples:
+ - `gitea admin user list`
+ - `delete`:
+ - Options:
+ - `--id`: ID of user to be deleted. Required.
+ - Examples:
+ - `gitea admin user delete --id 1`
+ - `create`:
+ - Options:
+ - `--name value`: Username. Required. As of gitea 1.9.0, use the `--username` flag instead.
+ - `--username value`: Username. Required. New in gitea 1.9.0.
+ - `--password value`: Password. Required.
+ - `--email value`: Email. Required.
+ - `--admin`: If provided, this makes the user an admin. Optional.
+ - `--access-token`: If provided, an access token will be created for the user. Optional. (default: false).
+ - `--must-change-password`: If provided, the created user will be required to choose a newer password after
the initial login. Optional. (default: true).
- - ``--random-password``: If provided, a randomly generated password will be used as the password of
+ - ``--random-password``: If provided, a randomly generated password will be used as the password of
the created user. The value of `--password` will be discarded. Optional.
- - `--random-password-length`: If provided, it will be used to configure the length of the randomly
+ - `--random-password-length`: If provided, it will be used to configure the length of the randomly
generated password. Optional. (default: 12)
- - Examples:
- - `gitea admin create-user --username myname --password asecurepassword --email me@example.com`
- - `change-password`
- - Options:
- - `--username value`, `-u value`: Username. Required.
- - `--password value`, `-p value`: New password. Required.
- - Examples:
- - `gitea admin change-password --username myname --password asecurepassword`
+ - Examples:
+ - `gitea admin create-user --username myname --password asecurepassword --email me@example.com`
+ - `change-password`:
+ - Options:
+ - `--username value`, `-u value`: Username. Required.
+ - `--password value`, `-p value`: New password. Required.
+ - Examples:
+ - `gitea admin change-password --username myname --password asecurepassword`
- `regenerate`
- Options:
- `hooks`: Regenerate git-hooks for all repositories
diff --git a/models/user.go b/models/user.go
index 7248db5337..f019475298 100644
--- a/models/user.go
+++ b/models/user.go
@@ -235,6 +235,12 @@ func (u *User) GetEmail() string {
return u.Email
}
+// GetAllUsers returns a slice of all users found in DB.
+func GetAllUsers() ([]*User, error) {
+ users := make([]*User, 0)
+ return users, x.OrderBy("id").Find(&users)
+}
+
// APIFormat converts a User to api.User
func (u *User) APIFormat() *api.User {
if u == nil {