forked from lei.chen/myxce
Merge Go frontend (apiserver + xcecli) into meson build
This commit is contained in:
parent
43dc12a36c
commit
c9dc8c4676
205 changed files with 30793 additions and 328 deletions
137
src/frontend/xcecli/cmd/permissions/list.go
Normal file
137
src/frontend/xcecli/cmd/permissions/list.go
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
package permissions
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"xcecli/common/request"
|
||||
"xcecli/config"
|
||||
"xcecli/models"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
resp models.PermsResponse
|
||||
)
|
||||
|
||||
const (
|
||||
minIDWidth = 7 // Length of "PERM_ID"
|
||||
minNameWidth = 9 // Length of "PERM_NAME"
|
||||
padding = 2
|
||||
maxNameWidth = 60
|
||||
)
|
||||
|
||||
type PermsQuerier struct {
|
||||
configManager *config.ConfigManager
|
||||
noHeader bool
|
||||
fields []string
|
||||
}
|
||||
|
||||
func NewPermsQuerier(configManager *config.ConfigManager) *PermsQuerier {
|
||||
return &PermsQuerier{
|
||||
configManager: configManager,
|
||||
}
|
||||
}
|
||||
|
||||
func NewListPermsCmd(configManager *config.ConfigManager) *cobra.Command {
|
||||
permsQuerier := NewPermsQuerier(configManager)
|
||||
|
||||
listCmd := &cobra.Command{
|
||||
Use: "list",
|
||||
Short: "Query permissions info",
|
||||
Long: `Query permissions detail info.
|
||||
Example:
|
||||
xce permissions list # list all permissions`,
|
||||
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
if err := permsQuerier.ParseCmdArgs(cmd, args); err != nil {
|
||||
fmt.Println(strings.ToLower(err.Error()))
|
||||
return nil
|
||||
}
|
||||
if err := permsQuerier.RunPermsList(); err != nil {
|
||||
fmt.Println(strings.ToLower(err.Error()))
|
||||
return nil
|
||||
}
|
||||
return nil
|
||||
},
|
||||
}
|
||||
flags := listCmd.Flags()
|
||||
flags.BoolVarP(&permsQuerier.noHeader, "noheader", "n", false, "output no header")
|
||||
return listCmd
|
||||
}
|
||||
|
||||
func (pq *PermsQuerier) ParseCmdArgs(cmd *cobra.Command, args []string) error {
|
||||
// No additional processing needed, all parameters are bound in flags
|
||||
if len(args) > 0 {
|
||||
return fmt.Errorf("too many arguments")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (pq *PermsQuerier) RunPermsList() error {
|
||||
// Get server information
|
||||
serverInfo, err := pq.configManager.GetServerInfo()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get server info: %w", err)
|
||||
}
|
||||
|
||||
// create API client
|
||||
apiClient := request.NewAPIClient(serverInfo.URL)
|
||||
apiClient.SetRootCAs(serverInfo.CACert)
|
||||
|
||||
// Build query parameters
|
||||
params := make(map[string]string)
|
||||
pq.fields = []string{}
|
||||
|
||||
// Make API request
|
||||
err = apiClient.GetRequestFromAPIServer(serverInfo.Token, "", serverInfo.CACert, "/xce/v1/permissions", &resp, params)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data := resp.Data
|
||||
|
||||
if len(data) == 0 {
|
||||
fmt.Println("no permissions found")
|
||||
return nil
|
||||
}
|
||||
|
||||
// Calculate column widths for proper alignment
|
||||
permIDWidth := minIDWidth + padding
|
||||
permNameWidth := minNameWidth + padding
|
||||
|
||||
// Get the maximum ID width (last item)
|
||||
if len(data) > 0 {
|
||||
lastIDStr := fmt.Sprintf("%d", len(data))
|
||||
if len(lastIDStr) > permIDWidth-padding {
|
||||
permIDWidth = len(lastIDStr) + padding
|
||||
}
|
||||
}
|
||||
|
||||
// Get maximum permission name width
|
||||
for _, permStr := range data {
|
||||
if len(permStr) > permNameWidth-padding {
|
||||
permNameWidth = len(permStr) + padding
|
||||
}
|
||||
}
|
||||
|
||||
// Apply max width limit
|
||||
if permNameWidth > maxNameWidth {
|
||||
permNameWidth = maxNameWidth
|
||||
}
|
||||
|
||||
// Add headers with proper alignment
|
||||
if !pq.noHeader {
|
||||
fmt.Printf("%-*s %-*s\n", permIDWidth, "PERM_ID", permNameWidth, "PERM_NAME")
|
||||
}
|
||||
|
||||
// Print permissions with auto-incrementing IDs and aligned columns
|
||||
for i, permStr := range data {
|
||||
// Truncate long permission names
|
||||
displayPermStr := permStr
|
||||
if len(permStr) > permNameWidth-padding {
|
||||
displayPermStr = permStr[:permNameWidth-padding] + ".."
|
||||
}
|
||||
fmt.Printf("%-*d %-*s\n", permIDWidth, i+1, permNameWidth, displayPermStr)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
26
src/frontend/xcecli/cmd/permissions/permissions.go
Normal file
26
src/frontend/xcecli/cmd/permissions/permissions.go
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
package permissions
|
||||
|
||||
import (
|
||||
"xcecli/config"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func NewPermsCmd(configManager *config.ConfigManager) *cobra.Command {
|
||||
|
||||
// Create the parent permissions command
|
||||
cmd := &cobra.Command{
|
||||
Use: "permissions",
|
||||
GroupID: "query",
|
||||
Short: "Manage permissions",
|
||||
Long: `Manage permissions in the system.
|
||||
Use 'xce permissions list' to query permissions information.`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
// Display help when no subcommand is specified
|
||||
cmd.Help()
|
||||
},
|
||||
}
|
||||
cmd.AddCommand(NewListPermsCmd(configManager))
|
||||
|
||||
return cmd
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue