Add tea whoami command #426

Merged
techknowlogick merged 5 commits from whoami into master 2021-10-04 17:42:00 +00:00
3 changed files with 154 additions and 0 deletions

27
cmd/whoami.go Normal file
View File

@ -0,0 +1,27 @@
// 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/modules/context"
"code.gitea.io/tea/modules/print"
"github.com/urfave/cli/v2"
)
// CmdWhoami represents the command to show current logged in user
techknowlogick marked this conversation as resolved Outdated
Outdated
Review

linter complains about func comment

linter complains about func comment
var CmdWhoami = cli.Command{
Name: "whoami",
Category: catSetup,
Description: `For debugging purposes, show the user that is currently logged in.`,
techknowlogick marked this conversation as resolved Outdated
Outdated
Review

That looks odd, please use the same content of Usage or elaborate further on the functionality (this string is displayed in tea whoami --help)

That looks odd, please use the same content of `Usage` or elaborate further on the functionality (this string is displayed in `tea whoami --help`)
Usage: "Show current logged in user",
Action: func(cmd *cli.Context) error {
ctx := context.InitCommand(cmd)
client := ctx.Login.Client()
user, _, _ := client.GetMyUserInfo()
print.UserDetails(user)
return nil
},
}

View File

@ -35,6 +35,7 @@ func main() {
&cmd.CmdLogin,
&cmd.CmdLogout,
&cmd.CmdAutocomplete,
&cmd.CmdWhoami,
&cmd.CmdIssues,
&cmd.CmdPulls,

126
modules/print/user.go Normal file
View File

@ -0,0 +1,126 @@
// Copyright 2021 The Gitea Authors. All rights reserved.
axifive marked this conversation as resolved Outdated

2021

2021
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package print
import (
"fmt"
"code.gitea.io/sdk/gitea"
)
// UserDetails print a formatted user to stdout
techknowlogick marked this conversation as resolved Outdated

doc func name

doc func name
func UserDetails(user *gitea.User) {
title := "# " + user.UserName
if user.IsAdmin {
title += " (admin)"
}
if !user.IsActive {
title += " (disabled)"
}
if user.Restricted {
title += " (restricted)"
}
if user.ProhibitLogin {
title += " (login prohibited)"
}
title += "\n"
var desc string
if len(user.Description) != 0 {
desc = fmt.Sprintf("*%s*\n\n", user.Description)
}
var website string
if len(user.Website) != 0 {
website = fmt.Sprintf("%s\n\n", user.Website)
}
stats := fmt.Sprintf(
"Follower Count: %d, Following Count: %d, Starred Repos: %d\n",
user.FollowerCount,
user.FollowingCount,
user.StarredRepoCount,
)
outputMarkdown(fmt.Sprintf(
"%s%s\n%s\n%s",
title,
desc,
website,
stats,
), "")
}
// UserList prints a listing of the users
techknowlogick marked this conversation as resolved Outdated

same

same
func UserList(user []*gitea.User, output string, fields []string) {
var printables = make([]printable, len(user))
for i, u := range user {
printables[i] = &printableUser{u}
}
t := tableFromItems(fields, printables, isMachineReadable(output))
t.print(output)
}
// UserFields are the available fields to print with UserList()
var UserFields = []string{
"id",
"login",
"full_name",
"email",
"avatar_url",
"language",
"is_admin",
"restricted",
"prohibit_login",
"location",
"website",
"description",
"visibility",
}
type printableUser struct{ *gitea.User }
func (x printableUser) FormatField(field string, machineReadable bool) string {
switch field {
case "id":
return fmt.Sprintf("%d", x.ID)
case "login":
if x.IsAdmin {
return fmt.Sprintf("%s (admin)", x.UserName)
}
if !x.IsActive {
return fmt.Sprintf("%s (disabled)", x.UserName)
}
if x.Restricted {
return fmt.Sprintf("%s (restricted)", x.UserName)
}
if x.ProhibitLogin {
return fmt.Sprintf("%s (login prohibited)", x.UserName)
}
return x.UserName
case "full_name":
return x.FullName
case "email":
return x.Email
case "avatar_url":
return x.AvatarURL
case "language":
return x.Language
case "is_admin":
return formatBoolean(x.IsAdmin, !machineReadable)
techknowlogick marked this conversation as resolved Outdated
Outdated
Review

we have a FormatBool() helper for consistency

we have a `FormatBool()` helper for consistency
Outdated
Review
-		return formatBoolean(x.IsAdmin, true)
+		return formatBoolean(x.IsAdmin, !machineReadable)
```diff - return formatBoolean(x.IsAdmin, true) + return formatBoolean(x.IsAdmin, !machineReadable) ```

updated

updated
case "restricted":
return formatBoolean(x.Restricted, !machineReadable)
case "prohibit_login":
return formatBoolean(x.ProhibitLogin, !machineReadable)
case "location":
return x.Location
case "website":
return x.Website
case "description":
return x.Description
case "visibility":
return string(x.Visibility)
}
return ""
}