Add user list command (#427)
Co-authored-by: Matti R <matti@mdranta.net> Co-authored-by: Norwin <noerw@noreply.gitea.io> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Norwin <git@nroo.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/427 Reviewed-by: Norwin <noerw@noreply.gitea.io> Reviewed-by: 6543 <6543@obermui.de> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-committed-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
parent
99e49991bb
commit
832136b6d4
|
@ -0,0 +1,55 @@
|
||||||
|
// Copyright 2021 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"code.gitea.io/tea/cmd/admin/users"
|
||||||
|
"code.gitea.io/tea/modules/context"
|
||||||
|
"code.gitea.io/tea/modules/print"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CmdAdmin represents the namespace of admin commands.
|
||||||
|
// The command itself has no functionality, but hosts subcommands.
|
||||||
|
var CmdAdmin = cli.Command{
|
||||||
|
Name: "admin",
|
||||||
|
Usage: "Operations requiring admin access on the Gitea instance",
|
||||||
|
Aliases: []string{"a"},
|
||||||
|
Category: catMisc,
|
||||||
|
Action: func(cmd *cli.Context) error {
|
||||||
|
return cli.ShowSubcommandHelp(cmd)
|
||||||
|
},
|
||||||
|
Subcommands: []*cli.Command{
|
||||||
|
&cmdAdminUsers,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmdAdminUsers = cli.Command{
|
||||||
|
Name: "users",
|
||||||
|
Aliases: []string{"u"},
|
||||||
|
Usage: "Manage registered users",
|
||||||
|
Action: func(ctx *cli.Context) error {
|
||||||
|
if ctx.Args().Len() == 1 {
|
||||||
|
return runAdminUserDetail(ctx, ctx.Args().First())
|
||||||
|
}
|
||||||
|
return users.RunUserList(ctx)
|
||||||
|
},
|
||||||
|
Subcommands: []*cli.Command{
|
||||||
|
&users.CmdUserList,
|
||||||
|
},
|
||||||
|
Flags: users.CmdUserList.Flags,
|
||||||
|
}
|
||||||
|
|
||||||
|
func runAdminUserDetail(cmd *cli.Context, u string) error {
|
||||||
|
ctx := context.InitCommand(cmd)
|
||||||
|
client := ctx.Login.Client()
|
||||||
|
user, _, err := client.GetUserInfo(u)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
print.UserDetails(user)
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
// Copyright 2021 The Gitea Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a MIT-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package users
|
||||||
|
|
||||||
|
import (
|
||||||
|
"code.gitea.io/tea/cmd/flags"
|
||||||
|
"code.gitea.io/tea/modules/context"
|
||||||
|
"code.gitea.io/tea/modules/print"
|
||||||
|
|
||||||
|
"code.gitea.io/sdk/gitea"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
var userFieldsFlag = flags.FieldsFlag(print.UserFields, []string{
|
||||||
|
"id", "login", "full_name", "email", "activated",
|
||||||
|
})
|
||||||
|
|
||||||
|
// CmdUserList represents a sub command of users to list users
|
||||||
|
var CmdUserList = cli.Command{
|
||||||
|
Name: "list",
|
||||||
|
Aliases: []string{"ls"},
|
||||||
|
Usage: "List Users",
|
||||||
|
Description: "List users",
|
||||||
|
Action: RunUserList,
|
||||||
|
Flags: append([]cli.Flag{
|
||||||
|
userFieldsFlag,
|
||||||
|
&flags.PaginationPageFlag,
|
||||||
|
&flags.PaginationLimitFlag,
|
||||||
|
}, flags.AllDefaultFlags...),
|
||||||
|
}
|
||||||
|
|
||||||
|
// RunUserList list users
|
||||||
|
func RunUserList(cmd *cli.Context) error {
|
||||||
|
ctx := context.InitCommand(cmd)
|
||||||
|
|
||||||
|
fields, err := userFieldsFlag.GetValues(cmd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
client := ctx.Login.Client()
|
||||||
|
users, _, err := client.AdminListUsers(gitea.AdminListUsersOptions{
|
||||||
|
ListOptions: ctx.GetListOptions(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
print.UserList(users, ctx.Output, fields)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -8,4 +8,5 @@ var (
|
||||||
catSetup = "SETUP"
|
catSetup = "SETUP"
|
||||||
catEntities = "ENTITIES"
|
catEntities = "ENTITIES"
|
||||||
catHelpers = "HELPERS"
|
catHelpers = "HELPERS"
|
||||||
|
catMisc = "MISCELLANEOUS"
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
// CmdWhoami represents the command to show current logged in user
|
// CmdWhoami represents the command to show current logged in user
|
||||||
var CmdWhoami = cli.Command{
|
var CmdWhoami = cli.Command{
|
||||||
Name: "whoami",
|
Name: "whoami",
|
||||||
Category: catSetup,
|
Category: catMisc,
|
||||||
Description: `For debugging purposes, show the user that is currently logged in.`,
|
Description: `For debugging purposes, show the user that is currently logged in.`,
|
||||||
Usage: "Show current logged in user",
|
Usage: "Show current logged in user",
|
||||||
ArgsUsage: " ", // command does not accept arguments
|
ArgsUsage: " ", // command does not accept arguments
|
||||||
|
|
2
main.go
2
main.go
|
@ -54,6 +54,8 @@ func main() {
|
||||||
&cmd.CmdOpen,
|
&cmd.CmdOpen,
|
||||||
&cmd.CmdNotifications,
|
&cmd.CmdNotifications,
|
||||||
&cmd.CmdRepoClone,
|
&cmd.CmdRepoClone,
|
||||||
|
|
||||||
|
&cmd.CmdAdmin,
|
||||||
}
|
}
|
||||||
app.EnableBashCompletion = true
|
app.EnableBashCompletion = true
|
||||||
err := app.Run(os.Args)
|
err := app.Run(os.Args)
|
||||||
|
|
|
@ -77,6 +77,9 @@ var UserFields = []string{
|
||||||
"website",
|
"website",
|
||||||
"description",
|
"description",
|
||||||
"visibility",
|
"visibility",
|
||||||
|
"activated",
|
||||||
|
"lastlogin_at",
|
||||||
|
"created_at",
|
||||||
}
|
}
|
||||||
|
|
||||||
type printableUser struct{ *gitea.User }
|
type printableUser struct{ *gitea.User }
|
||||||
|
@ -113,6 +116,8 @@ func (x printableUser) FormatField(field string, machineReadable bool) string {
|
||||||
return formatBoolean(x.Restricted, !machineReadable)
|
return formatBoolean(x.Restricted, !machineReadable)
|
||||||
case "prohibit_login":
|
case "prohibit_login":
|
||||||
return formatBoolean(x.ProhibitLogin, !machineReadable)
|
return formatBoolean(x.ProhibitLogin, !machineReadable)
|
||||||
|
case "activated":
|
||||||
|
return formatBoolean(x.IsActive, !machineReadable)
|
||||||
case "location":
|
case "location":
|
||||||
return x.Location
|
return x.Location
|
||||||
case "website":
|
case "website":
|
||||||
|
@ -121,6 +126,10 @@ func (x printableUser) FormatField(field string, machineReadable bool) string {
|
||||||
return x.Description
|
return x.Description
|
||||||
case "visibility":
|
case "visibility":
|
||||||
return string(x.Visibility)
|
return string(x.Visibility)
|
||||||
|
case "created_at":
|
||||||
|
return FormatTime(x.Created, machineReadable)
|
||||||
|
case "lastlogin_at":
|
||||||
|
return FormatTime(x.LastLogin, machineReadable)
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue