mirror of
https://github.com/moul/sshportal.git
synced 2025-11-09 15:00:37 +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)
|
||||
|
||||
* No entry
|
||||
* Add `--latest` and `--quiet` options to `ls` commands
|
||||
|
||||
## 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 create [-h] [--hostgroup=HOSTGROUP...] [--usergroup=USERGROUP...] [--pattern=<value>] [--comment=<value>] [--action=<value>] [--weight=value]
|
||||
acl inspect [-h] ACL...
|
||||
acl ls [-h]
|
||||
acl ls [-h] [--latest] [--quiet]
|
||||
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...
|
||||
|
||||
|
|
@ -149,14 +149,14 @@ config restore [-h] [--confirm] [--decrypt]
|
|||
|
||||
# event management
|
||||
event help
|
||||
event ls [-h]
|
||||
event ls [-h] [--latest] [--quiet]
|
||||
event inspect [-h] EVENT...
|
||||
|
||||
# host management
|
||||
host help
|
||||
host create [-h] [--name=<value>] [--password=<value>] [--comment=<value>] [--key=KEY] [--group=HOSTGROUP...] <username>[:<password>]@<host>[:<port>]
|
||||
host inspect [-h] [--decrypt] HOST...
|
||||
host ls [-h]
|
||||
host ls [-h] [--latest] [--quiet]
|
||||
host rm [-h] 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 create [-h] [--name=<value>] [--comment=<value>]
|
||||
hostgroup inspect [-h] HOSTGROUP...
|
||||
hostgroup ls [-h]
|
||||
hostgroup ls [-h] [--latest] [--quiet]
|
||||
hostgroup rm [-h] HOSTGROUP...
|
||||
|
||||
# key management
|
||||
key help
|
||||
key create [-h] [--name=<value>] [--type=<value>] [--length=<value>] [--comment=<value>]
|
||||
key inspect [-h] [--decrypt] KEY...
|
||||
key ls [-h]
|
||||
key ls [-h] [--latest] [--quiet]
|
||||
key rm [-h] KEY...
|
||||
key setup [-h] KEY
|
||||
|
||||
# session management
|
||||
session help
|
||||
session ls [-h]
|
||||
session ls [-h] [--latest] [--quiet]
|
||||
session inspect [-h] SESSION...
|
||||
|
||||
# user management
|
||||
user help
|
||||
user invite [-h] [--name=<value>] [--comment=<value>] [--group=USERGROUP...] <email>
|
||||
user inspect [-h] USER...
|
||||
user ls [-h]
|
||||
user ls [-h] [--latest] [--quiet]
|
||||
user rm [-h] 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
|
||||
hostgroup create [-h] [--name=<value>] [--comment=<value>]
|
||||
usergroup inspect [-h] USERGROUP...
|
||||
usergroup ls [-h]
|
||||
usergroup ls [-h] [--latest] [--quiet]
|
||||
usergroup rm [-h] USERGROUP...
|
||||
|
||||
# other
|
||||
|
|
|
|||
238
shell.go
238
shell.go
|
|
@ -141,14 +141,35 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
var acls []ACL
|
||||
if err := db.Order("created_at desc").Preload("UserGroups").Preload("HostGroups").Find(&acls).Error; err != nil {
|
||||
return err
|
||||
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Weight", "User groups", "Host groups", "Host pattern", "Action", "Updated", "Created", "Comment"})
|
||||
table.SetBorder(false)
|
||||
|
|
@ -544,15 +565,36 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var events []Event
|
||||
if err := db.Order("created_at desc").Preload("Author").Find(&events).Error; err != nil {
|
||||
return err
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Author", "Domain", "Action", "Entity", "Args", "Date"})
|
||||
table.SetBorder(false)
|
||||
|
|
@ -691,15 +733,36 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin", "listhosts"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var hosts []*Host
|
||||
if err := db.Order("created_at desc").Preload("Groups").Find(&hosts).Error; err != nil {
|
||||
return err
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Name", "URL", "Key", "Pass", "Groups", "Updated", "Created", "Comment"})
|
||||
table.SetBorder(false)
|
||||
|
|
@ -884,15 +947,36 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var hostGroups []*HostGroup
|
||||
if err := db.Order("created_at desc").Preload("ACLs").Preload("Hosts").Find(&hostGroups).Error; err != nil {
|
||||
return err
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Name", "Hosts", "ACLs", "Updated", "Created", "Comment"})
|
||||
table.SetBorder(false)
|
||||
|
|
@ -1047,20 +1131,40 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var keys []SSHKey
|
||||
if err := db.Order("created_at desc").Preload("Hosts").Find(&keys).Error; err != nil {
|
||||
return err
|
||||
var sshKeys []*SSHKey
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Name", "Type", "Length", "Hosts", "Updated", "Created", "Comment"})
|
||||
table.SetBorder(false)
|
||||
table.SetCaption(true, fmt.Sprintf("Total: %d keys.", len(keys)))
|
||||
for _, key := range keys {
|
||||
table.SetCaption(true, fmt.Sprintf("Total: %d keys.", len(sshKeys)))
|
||||
for _, key := range sshKeys {
|
||||
table.Append([]string{
|
||||
fmt.Sprintf("%d", key.ID),
|
||||
key.Name,
|
||||
|
|
@ -1195,15 +1299,35 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var users []User
|
||||
if err := db.Order("created_at desc").Preload("Groups").Preload("Roles").Preload("Keys").Find(&users).Error; err != nil {
|
||||
return err
|
||||
var users []*User
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Name", "Email", "Roles", "Keys", "Groups", "Updated", "Created", "Comment"})
|
||||
table.SetBorder(false)
|
||||
|
|
@ -1395,15 +1519,35 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var userGroups []*UserGroup
|
||||
if err := db.Order("created_at desc").Preload("ACLs").Preload("Users").Find(&userGroups).Error; err != nil {
|
||||
return err
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "Name", "Users", "ACLs", "Update", "Create", "Comment"})
|
||||
table.SetBorder(false)
|
||||
|
|
@ -1520,20 +1664,40 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var userkeys []UserKey
|
||||
if err := db.Order("created_at desc").Preload("User").Find(&userkeys).Error; err != nil {
|
||||
return err
|
||||
var userKeys []*UserKey
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "User", "Updated", "Created", "Comment"})
|
||||
table.SetBorder(false)
|
||||
table.SetCaption(true, fmt.Sprintf("Total: %d userkeys.", len(userkeys)))
|
||||
for _, userkey := range userkeys {
|
||||
table.SetCaption(true, fmt.Sprintf("Total: %d userkeys.", len(userKeys)))
|
||||
for _, userkey := range userKeys {
|
||||
table.Append([]string{
|
||||
fmt.Sprintf("%d", userkey.ID),
|
||||
userkey.User.Email,
|
||||
|
|
@ -1592,15 +1756,35 @@ GLOBAL OPTIONS:
|
|||
}, {
|
||||
Name: "ls",
|
||||
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 {
|
||||
if err := UserCheckRoles(myself, []string{"admin"}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var sessions []Session
|
||||
if err := db.Order("created_at desc").Preload("User").Preload("Host").Find(&sessions).Error; err != nil {
|
||||
return err
|
||||
var sessions []*Session
|
||||
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
|
||||
}
|
||||
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.SetHeader([]string{"ID", "User", "Host", "Status", "Start", "Duration", "Error", "Comment"})
|
||||
table.SetBorder(false)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue