mirror of
https://github.com/moul/sshportal.git
synced 2025-11-10 15:30:34 +08:00
Add --latest and --quiet options to ls commands
This commit is contained in:
parent
7eb76c861f
commit
391a39d82c
3 changed files with 220 additions and 36 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## master (unreleased)
|
## master (unreleased)
|
||||||
|
|
||||||
* No entry
|
* Add `--latest` and `--quiet` options to `ls` commands
|
||||||
|
|
||||||
## v1.5.0 (2017-12-02)
|
## v1.5.0 (2017-12-02)
|
||||||
|
|
||||||
|
|
|
||||||
16
README.md
16
README.md
|
|
@ -138,7 +138,7 @@ You can enter in interactive mode using this syntax: `ssh admin@portal.example.o
|
||||||
acl help
|
acl help
|
||||||
acl create [-h] [--hostgroup=HOSTGROUP...] [--usergroup=USERGROUP...] [--pattern=<value>] [--comment=<value>] [--action=<value>] [--weight=value]
|
acl create [-h] [--hostgroup=HOSTGROUP...] [--usergroup=USERGROUP...] [--pattern=<value>] [--comment=<value>] [--action=<value>] [--weight=value]
|
||||||
acl inspect [-h] ACL...
|
acl inspect [-h] ACL...
|
||||||
acl ls [-h]
|
acl ls [-h] [--latest] [--quiet]
|
||||||
acl rm [-h] ACL...
|
acl rm [-h] ACL...
|
||||||
acl update [-h] [--comment=<value>] [--action=<value>] [--weight=<value>] [--assign-hostgroup=HOSTGROUP...] [--unassign-hostgroup=HOSTGROUP...] [--assign-usergroup=USERGROUP...] [--unassign-usergroup=USERGROUP...] ACL...
|
acl update [-h] [--comment=<value>] [--action=<value>] [--weight=<value>] [--assign-hostgroup=HOSTGROUP...] [--unassign-hostgroup=HOSTGROUP...] [--assign-usergroup=USERGROUP...] [--unassign-usergroup=USERGROUP...] ACL...
|
||||||
|
|
||||||
|
|
@ -149,14 +149,14 @@ config restore [-h] [--confirm] [--decrypt]
|
||||||
|
|
||||||
# event management
|
# event management
|
||||||
event help
|
event help
|
||||||
event ls [-h]
|
event ls [-h] [--latest] [--quiet]
|
||||||
event inspect [-h] EVENT...
|
event inspect [-h] EVENT...
|
||||||
|
|
||||||
# host management
|
# host management
|
||||||
host help
|
host help
|
||||||
host create [-h] [--name=<value>] [--password=<value>] [--comment=<value>] [--key=KEY] [--group=HOSTGROUP...] <username>[:<password>]@<host>[:<port>]
|
host create [-h] [--name=<value>] [--password=<value>] [--comment=<value>] [--key=KEY] [--group=HOSTGROUP...] <username>[:<password>]@<host>[:<port>]
|
||||||
host inspect [-h] [--decrypt] HOST...
|
host inspect [-h] [--decrypt] HOST...
|
||||||
host ls [-h]
|
host ls [-h] [--latest] [--quiet]
|
||||||
host rm [-h] HOST...
|
host rm [-h] HOST...
|
||||||
host update [-h] [--name=<value>] [--comment=<value>] [--key=KEY] [--assign-group=HOSTGROUP...] [--unassign-group=HOSTGROUP...] HOST...
|
host update [-h] [--name=<value>] [--comment=<value>] [--key=KEY] [--assign-group=HOSTGROUP...] [--unassign-group=HOSTGROUP...] HOST...
|
||||||
|
|
||||||
|
|
@ -164,27 +164,27 @@ host update [-h] [--name=<value>] [--comment=<value>] [--key=KEY] [--assign-grou
|
||||||
hostgroup help
|
hostgroup help
|
||||||
hostgroup create [-h] [--name=<value>] [--comment=<value>]
|
hostgroup create [-h] [--name=<value>] [--comment=<value>]
|
||||||
hostgroup inspect [-h] HOSTGROUP...
|
hostgroup inspect [-h] HOSTGROUP...
|
||||||
hostgroup ls [-h]
|
hostgroup ls [-h] [--latest] [--quiet]
|
||||||
hostgroup rm [-h] HOSTGROUP...
|
hostgroup rm [-h] HOSTGROUP...
|
||||||
|
|
||||||
# key management
|
# key management
|
||||||
key help
|
key help
|
||||||
key create [-h] [--name=<value>] [--type=<value>] [--length=<value>] [--comment=<value>]
|
key create [-h] [--name=<value>] [--type=<value>] [--length=<value>] [--comment=<value>]
|
||||||
key inspect [-h] [--decrypt] KEY...
|
key inspect [-h] [--decrypt] KEY...
|
||||||
key ls [-h]
|
key ls [-h] [--latest] [--quiet]
|
||||||
key rm [-h] KEY...
|
key rm [-h] KEY...
|
||||||
key setup [-h] KEY
|
key setup [-h] KEY
|
||||||
|
|
||||||
# session management
|
# session management
|
||||||
session help
|
session help
|
||||||
session ls [-h]
|
session ls [-h] [--latest] [--quiet]
|
||||||
session inspect [-h] SESSION...
|
session inspect [-h] SESSION...
|
||||||
|
|
||||||
# user management
|
# user management
|
||||||
user help
|
user help
|
||||||
user invite [-h] [--name=<value>] [--comment=<value>] [--group=USERGROUP...] <email>
|
user invite [-h] [--name=<value>] [--comment=<value>] [--group=USERGROUP...] <email>
|
||||||
user inspect [-h] USER...
|
user inspect [-h] USER...
|
||||||
user ls [-h]
|
user ls [-h] [--latest] [--quiet]
|
||||||
user rm [-h] USER...
|
user rm [-h] USER...
|
||||||
user update [-h] [--name=<value>] [--email=<value>] [--set-admin] [--unset-admin] [--assign-group=USERGROUP...] [--unassign-group=USERGROUP...] USER...
|
user update [-h] [--name=<value>] [--email=<value>] [--set-admin] [--unset-admin] [--assign-group=USERGROUP...] [--unassign-group=USERGROUP...] USER...
|
||||||
|
|
||||||
|
|
@ -192,7 +192,7 @@ user update [-h] [--name=<value>] [--email=<value>] [--set-admin] [--unset-admin
|
||||||
usergroup help
|
usergroup help
|
||||||
hostgroup create [-h] [--name=<value>] [--comment=<value>]
|
hostgroup create [-h] [--name=<value>] [--comment=<value>]
|
||||||
usergroup inspect [-h] USERGROUP...
|
usergroup inspect [-h] USERGROUP...
|
||||||
usergroup ls [-h]
|
usergroup ls [-h] [--latest] [--quiet]
|
||||||
usergroup rm [-h] USERGROUP...
|
usergroup rm [-h] USERGROUP...
|
||||||
|
|
||||||
# other
|
# other
|
||||||
|
|
|
||||||
220
shell.go
220
shell.go
|
|
@ -141,14 +141,35 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists ACLs",
|
Usage: "Lists ACLs",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest ACL"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
var acls []ACL
|
|
||||||
if err := db.Order("created_at desc").Preload("UserGroups").Preload("HostGroups").Find(&acls).Error; err != nil {
|
var acls []*ACL
|
||||||
|
query := db.Order("created_at desc").Preload("UserGroups").Preload("HostGroups")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var acl ACL
|
||||||
|
if err := query.First(&acl).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
acls = append(acls, &acl)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&acls).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, acl := range acls {
|
||||||
|
fmt.Fprintln(s, acl.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Weight", "User groups", "Host groups", "Host pattern", "Action", "Updated", "Created", "Comment"})
|
table.SetHeader([]string{"ID", "Weight", "User groups", "Host groups", "Host pattern", "Action", "Updated", "Created", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
@ -544,15 +565,36 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists events",
|
Usage: "Lists events",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest event"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var events []Event
|
var events []Event
|
||||||
if err := db.Order("created_at desc").Preload("Author").Find(&events).Error; err != nil {
|
query := db.Order("created_at desc").Preload("Author")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var event Event
|
||||||
|
if err := query.First(&event).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
events = append(events, event)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&events).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, event := range events {
|
||||||
|
fmt.Fprintln(s, event.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Author", "Domain", "Action", "Entity", "Args", "Date"})
|
table.SetHeader([]string{"ID", "Author", "Domain", "Action", "Entity", "Args", "Date"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
@ -691,15 +733,36 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists hosts",
|
Usage: "Lists hosts",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest host"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin", "listhosts"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin", "listhosts"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var hosts []*Host
|
var hosts []*Host
|
||||||
if err := db.Order("created_at desc").Preload("Groups").Find(&hosts).Error; err != nil {
|
query := db.Order("created_at desc").Preload("Groups")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var host Host
|
||||||
|
if err := query.First(&host).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
hosts = append(hosts, &host)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&hosts).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, host := range hosts {
|
||||||
|
fmt.Fprintln(s, host.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Name", "URL", "Key", "Pass", "Groups", "Updated", "Created", "Comment"})
|
table.SetHeader([]string{"ID", "Name", "URL", "Key", "Pass", "Groups", "Updated", "Created", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
@ -884,15 +947,36 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists host groups",
|
Usage: "Lists host groups",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest host group"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var hostGroups []*HostGroup
|
var hostGroups []*HostGroup
|
||||||
if err := db.Order("created_at desc").Preload("ACLs").Preload("Hosts").Find(&hostGroups).Error; err != nil {
|
query := db.Order("created_at desc").Preload("ACLs").Preload("Hosts")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var hostGroup HostGroup
|
||||||
|
if err := query.First(&hostGroup).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
hostGroups = append(hostGroups, &hostGroup)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&hostGroups).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, hostGroup := range hostGroups {
|
||||||
|
fmt.Fprintln(s, hostGroup.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Name", "Hosts", "ACLs", "Updated", "Created", "Comment"})
|
table.SetHeader([]string{"ID", "Name", "Hosts", "ACLs", "Updated", "Created", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
@ -1047,20 +1131,40 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists keys",
|
Usage: "Lists keys",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest key"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var keys []SSHKey
|
var sshKeys []*SSHKey
|
||||||
if err := db.Order("created_at desc").Preload("Hosts").Find(&keys).Error; err != nil {
|
query := db.Order("created_at desc").Preload("Hosts")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var sshKey SSHKey
|
||||||
|
if err := query.First(&sshKey).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
sshKeys = append(sshKeys, &sshKey)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&sshKeys).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, sshKey := range sshKeys {
|
||||||
|
fmt.Fprintln(s, sshKey.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Name", "Type", "Length", "Hosts", "Updated", "Created", "Comment"})
|
table.SetHeader([]string{"ID", "Name", "Type", "Length", "Hosts", "Updated", "Created", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
table.SetCaption(true, fmt.Sprintf("Total: %d keys.", len(keys)))
|
table.SetCaption(true, fmt.Sprintf("Total: %d keys.", len(sshKeys)))
|
||||||
for _, key := range keys {
|
for _, key := range sshKeys {
|
||||||
table.Append([]string{
|
table.Append([]string{
|
||||||
fmt.Sprintf("%d", key.ID),
|
fmt.Sprintf("%d", key.ID),
|
||||||
key.Name,
|
key.Name,
|
||||||
|
|
@ -1195,15 +1299,35 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists users",
|
Usage: "Lists users",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest user"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var users []User
|
var users []*User
|
||||||
if err := db.Order("created_at desc").Preload("Groups").Preload("Roles").Preload("Keys").Find(&users).Error; err != nil {
|
query := db.Order("created_at desc").Preload("Groups").Preload("Roles").Preload("Keys")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var user User
|
||||||
|
if err := query.First(&user).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
users = append(users, &user)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&users).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, user := range users {
|
||||||
|
fmt.Fprintln(s, user.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Name", "Email", "Roles", "Keys", "Groups", "Updated", "Created", "Comment"})
|
table.SetHeader([]string{"ID", "Name", "Email", "Roles", "Keys", "Groups", "Updated", "Created", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
@ -1395,15 +1519,35 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists user groups",
|
Usage: "Lists user groups",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest user group"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var userGroups []*UserGroup
|
var userGroups []*UserGroup
|
||||||
if err := db.Order("created_at desc").Preload("ACLs").Preload("Users").Find(&userGroups).Error; err != nil {
|
query := db.Order("created_at desc").Preload("ACLs").Preload("Users")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var userGroup UserGroup
|
||||||
|
if err := query.First(&userGroup).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
userGroups = append(userGroups, &userGroup)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&userGroups).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, userGroup := range userGroups {
|
||||||
|
fmt.Fprintln(s, userGroup.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "Name", "Users", "ACLs", "Update", "Create", "Comment"})
|
table.SetHeader([]string{"ID", "Name", "Users", "ACLs", "Update", "Create", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
@ -1520,20 +1664,40 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists userkeys",
|
Usage: "Lists userkeys",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest user key"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var userkeys []UserKey
|
var userKeys []*UserKey
|
||||||
if err := db.Order("created_at desc").Preload("User").Find(&userkeys).Error; err != nil {
|
query := db.Order("created_at desc").Preload("User")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var userKey UserKey
|
||||||
|
if err := query.First(&userKey).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
userKeys = append(userKeys, &userKey)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&userKeys).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, userKey := range userKeys {
|
||||||
|
fmt.Fprintln(s, userKey.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "User", "Updated", "Created", "Comment"})
|
table.SetHeader([]string{"ID", "User", "Updated", "Created", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
table.SetCaption(true, fmt.Sprintf("Total: %d userkeys.", len(userkeys)))
|
table.SetCaption(true, fmt.Sprintf("Total: %d userkeys.", len(userKeys)))
|
||||||
for _, userkey := range userkeys {
|
for _, userkey := range userKeys {
|
||||||
table.Append([]string{
|
table.Append([]string{
|
||||||
fmt.Sprintf("%d", userkey.ID),
|
fmt.Sprintf("%d", userkey.ID),
|
||||||
userkey.User.Email,
|
userkey.User.Email,
|
||||||
|
|
@ -1592,15 +1756,35 @@ GLOBAL OPTIONS:
|
||||||
}, {
|
}, {
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
Usage: "Lists sessions",
|
Usage: "Lists sessions",
|
||||||
|
Flags: []cli.Flag{
|
||||||
|
cli.BoolFlag{Name: "latest, l", Usage: "Show the latest session"},
|
||||||
|
cli.BoolFlag{Name: "quiet, q", Usage: "Only display IDs"},
|
||||||
|
},
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var sessions []Session
|
var sessions []*Session
|
||||||
if err := db.Order("created_at desc").Preload("User").Preload("Host").Find(&sessions).Error; err != nil {
|
query := db.Order("created_at desc").Preload("User").Preload("Host")
|
||||||
|
if c.Bool("latest") {
|
||||||
|
var session Session
|
||||||
|
if err := query.First(&session).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
sessions = append(sessions, &session)
|
||||||
|
} else {
|
||||||
|
if err := query.Find(&sessions).Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c.Bool("quiet") {
|
||||||
|
for _, session := range sessions {
|
||||||
|
fmt.Fprintln(s, session.ID)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
table := tablewriter.NewWriter(s)
|
table := tablewriter.NewWriter(s)
|
||||||
table.SetHeader([]string{"ID", "User", "Host", "Status", "Start", "Duration", "Error", "Comment"})
|
table.SetHeader([]string{"ID", "User", "Host", "Status", "Start", "Duration", "Error", "Comment"})
|
||||||
table.SetBorder(false)
|
table.SetBorder(false)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue