1package admin23import (4 "fmt"56 "git.lin.moe/go/mlisting/storage"7 "github.com/spf13/cobra"8)910func init() {11 grpShowCmd := &cobra.Command{12 Use: "show",13 Aliases: []string{"ls", "list"},14 Short: "show group information",15 RunE: groupShow,16 }1718 grpNewCmd := &cobra.Command{19 Use: "create {name} {address} {description}",20 Aliases: []string{"new"},21 Short: "create group",22 Args: cobra.MatchAll(cobra.ExactArgs(3), cobra.OnlyValidArgs),23 RunE: groupAdd,24 }25 grpNewCmd.Flags().Uint8("perm", 3, "default permission of new group (1:browser,2:reply,4:post)")2627 grpDelCmd := &cobra.Command{28 Use: "delete {address} ",29 Aliases: []string{"del", "rm"},30 Short: "delete group",31 Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),32 RunE: groupDelete,33 }3435 grpModifyCmd := &cobra.Command{36 Use: "update {address}",37 Aliases: []string{"modify"},38 Short: "update group configures",39 Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),40 RunE: groupModify,41 }42 grpModifyCmd.Flags().String("name", "", "group name")43 grpModifyCmd.Flags().String("desc", "", "group description")44 grpModifyCmd.Flags().Uint8("perm", 0, "default group member permissions (1:browser,2:reply,4:post)")4546 grpCmd := &cobra.Command{47 Use: "group",48 Aliases: []string{"grp"},49 Short: "group management",50 }5152 grpCmd.AddCommand(grpShowCmd)53 grpCmd.AddCommand(grpNewCmd)54 grpCmd.AddCommand(grpDelCmd)55 grpCmd.AddCommand(grpModifyCmd)56 cmd.AddCommand(grpCmd)57}5859func groupAdd(cmd *cobra.Command, args []string) error {60 st, ok := storage.FromContext(cmd.Context())61 if !ok {62 return fmt.Errorf("storage not found")63 }6465 name := args[0]66 addr := args[1]67 desc := args[2]68 perm, _ := cmd.Flags().GetUint8("perm")69 if list, err := st.NewList(cmd.Context(), name, addr, desc, perm); err != nil {70 return err71 } else {72 cmd.Printf("list created: %s <%s> \n", list.Name(), list.Address())73 }74 return nil75}7677func groupShow(cmd *cobra.Command, args []string) error {78 st, ok := storage.FromContext(cmd.Context())79 if !ok {80 return fmt.Errorf("storage not found")81 }8283 lists, err := st.Lists(cmd.Context())84 if err != nil {85 return err86 }87 for _, l := range lists {88 cmd.Printf("%s <%s> [%s]: %s\n", l.Name(), l.Address(), storage.PermString(l.DefaultPerm()), l.Description())89 }90 return nil91}9293func groupDelete(cmd *cobra.Command, args []string) error {94 st, ok := storage.FromContext(cmd.Context())95 if !ok {96 return fmt.Errorf("storage not found")97 }9899 addr := args[0]100 list, err := st.GetList(cmd.Context(), addr)101 if err != nil {102 return err103 }104 if err := st.DeleteList(cmd.Context(), addr); err != nil {105 return err106 }107 cmd.Printf("list %s <%s> deleted\n", list.Name(), list.Address())108 return nil109}110111func groupModify(cmd *cobra.Command, args []string) error {112 st, ok := storage.FromContext(cmd.Context())113 if !ok {114 return fmt.Errorf("storage not found")115 }116117 list, err := st.GetList(cmd.Context(), args[0])118 if err != nil {119 return err120 }121 address := list.Address()122123 name := list.Name()124 if cmd.Flags().Changed("name") {125 name, _ = cmd.Flags().GetString("name")126 }127 description := list.Description()128 if cmd.Flags().Changed("desc") {129 description, _ = cmd.Flags().GetString("desc")130 }131 defaultPerm := list.DefaultPerm()132 if cmd.Flags().Changed("perm") {133 defaultPerm, _ = cmd.Flags().GetUint8("perm")134 }135 l, err := st.UpdateList(cmd.Context(), address, name, description, defaultPerm)136 if err == nil {137 cmd.Printf("%s <%s> [%s]: %s\n", l.Name(), l.Address(), storage.PermString(l.DefaultPerm()), l.Description())138 }139 return err140}