Add user list command #427
55
cmd/admin.go
Normal file
55
cmd/admin.go
Normal file
|
@ -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"},
|
||||
noerw marked this conversation as resolved
|
||||
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
|
||||
}
|
54
cmd/admin/users/list.go
Normal file
54
cmd/admin/users/list.go
Normal file
|
@ -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(),
|
||||
})
|
||||
noerw marked this conversation as resolved
Outdated
noerw
commented
if you put that before the request, flag validation will fail faster (i.e. before waiting for the request) if you put that before the request, flag validation will fail faster (i.e. before waiting for the request)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
print.UserList(users, ctx.Output, fields)
|
||||
|
||||
return nil
|
||||
}
|
|
@ -8,4 +8,5 @@ var (
|
|||
catSetup = "SETUP"
|
||||
catEntities = "ENTITIES"
|
||||
catHelpers = "HELPERS"
|
||||
catMisc = "MISCELLANEOUS"
|
||||
noerw marked this conversation as resolved
Outdated
noerw
commented
if we put all admin commands under the if we put all admin commands under the `tea admin` namespace, do we need a `ADMIN` category? the admin command will be the only one in this category.. though I agree it shouldn't be in any of the existing categories.. hm.
maybe rename it to a more generic `MISC`?
|
||||
)
|
||||
|
|
|
@ -14,7 +14,7 @@ import (
|
|||
// CmdWhoami represents the command to show current logged in user
|
||||
var CmdWhoami = cli.Command{
|
||||
Name: "whoami",
|
||||
Category: catSetup,
|
||||
Category: catMisc,
|
||||
Description: `For debugging purposes, show the user that is currently logged in.`,
|
||||
Usage: "Show current logged in user",
|
||||
ArgsUsage: " ", // command does not accept arguments
|
||||
|
|
2
main.go
2
main.go
|
@ -54,6 +54,8 @@ func main() {
|
|||
&cmd.CmdOpen,
|
||||
&cmd.CmdNotifications,
|
||||
&cmd.CmdRepoClone,
|
||||
|
||||
&cmd.CmdAdmin,
|
||||
}
|
||||
app.EnableBashCompletion = true
|
||||
err := app.Run(os.Args)
|
||||
|
|
|
@ -77,6 +77,9 @@ var UserFields = []string{
|
|||
"website",
|
||||
"description",
|
||||
"visibility",
|
||||
"activated",
|
||||
"lastlogin_at",
|
||||
"created_at",
|
||||
}
|
||||
|
||||
type printableUser struct{ *gitea.User }
|
||||
|
@ -113,6 +116,8 @@ func (x printableUser) FormatField(field string, machineReadable bool) string {
|
|||
return formatBoolean(x.Restricted, !machineReadable)
|
||||
case "prohibit_login":
|
||||
return formatBoolean(x.ProhibitLogin, !machineReadable)
|
||||
case "activated":
|
||||
return formatBoolean(x.IsActive, !machineReadable)
|
||||
case "location":
|
||||
return x.Location
|
||||
case "website":
|
||||
|
@ -121,6 +126,10 @@ func (x printableUser) FormatField(field string, machineReadable bool) string {
|
|||
return x.Description
|
||||
case "visibility":
|
||||
return string(x.Visibility)
|
||||
case "created_at":
|
||||
return FormatTime(x.Created, machineReadable)
|
||||
case "lastlogin_at":
|
||||
return FormatTime(x.LastLogin, machineReadable)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user
return cli.ShowCommandHelp(cmd, "")
would be a good default behaviour i think