From bf1db401fe9fd8095a7c8caba4a1a83f13bd3a5f Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sat, 17 Apr 2021 22:49:58 +0800 Subject: [PATCH] add listing user sessions cli --- cmd/user_data.go | 47 ++++++++++++++++++++++++++++++++++++++++++++ pkg/cli/user_data.go | 24 ++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/cmd/user_data.go b/cmd/user_data.go index 8d77b2ea..d793613d 100644 --- a/cmd/user_data.go +++ b/cmd/user_data.go @@ -1,6 +1,8 @@ package cmd import ( + "fmt" + "github.com/mayswind/ezbookkeeping/pkg/models" "os" "github.com/urfave/cli/v2" @@ -110,6 +112,19 @@ var UserData = &cli.Command{ }, }, }, + { + Name: "user-session-list", + Usage: "List all user sessions", + Action: listUserTokens, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "username", + Aliases: []string{"n"}, + Required: true, + Usage: "Specific user name", + }, + }, + }, { Name: "user-session-clear", Usage: "Clear user all sessions", @@ -264,6 +279,32 @@ func disableUser2FA(c *cli.Context) error { return nil } +func listUserTokens(c *cli.Context) error { + _, err := initializeSystem(c) + + if err != nil { + return err + } + + username := c.String("username") + tokens, err := clis.UserData.ListUserTokens(c, username) + + if err != nil { + log.BootErrorf("[user_data.listUserTokens] error occurs when getting user tokens") + return err + } + + for i := 0; i < len(tokens); i++ { + printTokenInfo(tokens[i]) + + if i < len(tokens) - 1 { + fmt.Printf("---\n") + } + } + + return nil +} + func clearUserTokens(c *cli.Context) error { _, err := initializeSystem(c) @@ -349,3 +390,9 @@ func exportUserTransaction(c *cli.Context) error { return nil } + +func printTokenInfo(token *models.TokenRecord) { + fmt.Printf("[CreatedAt] %s (%d)\n", utils.FormatUnixTimeToLongDateTimeInServerTimezone(token.CreatedUnixTime), token.CreatedUnixTime) + fmt.Printf("[ExpiredAt] %s (%d)\n", utils.FormatUnixTimeToLongDateTimeInServerTimezone(token.ExpiredUnixTime), token.ExpiredUnixTime) + fmt.Printf("[UserAgent] %s\n", token.UserAgent) +} diff --git a/pkg/cli/user_data.go b/pkg/cli/user_data.go index 509ee9b1..69ca42c1 100644 --- a/pkg/cli/user_data.go +++ b/pkg/cli/user_data.go @@ -178,6 +178,30 @@ func (l *UserDataCli) DeleteUser(c *cli.Context, username string) error { return nil } +// ListUserTokens returns all tokens of the specified user +func (l *UserDataCli) ListUserTokens(c *cli.Context, username string) ([]*models.TokenRecord, error) { + if username == "" { + log.BootErrorf("[user_data.ListUserTokens] user name is empty") + return nil, errs.ErrUsernameIsEmpty + } + + uid, err := l.getUserIdByUsername(c, username) + + if err != nil { + log.BootErrorf("[user_data.ListUserTokens] error occurs when getting user id by user name") + return nil, err + } + + tokens, err := l.tokens.GetAllUnexpiredNormalTokensByUid(uid) + + if err != nil { + log.BootErrorf("[user_data.ListUserTokens] failed to get tokens of user \"%s\", because %s", username, err.Error()) + return nil, err + } + + return tokens, nil +} + // ClearUserTokens clears all tokens of the specified user func (l *UserDataCli) ClearUserTokens(c *cli.Context, username string) error { if username == "" {