66
77 "github.com/spf13/cobra"
88 "github.com/synapse-dev/synapse-cli/internal/commandfeatures"
9+ "github.com/synapse-dev/synapse-cli/internal/config"
910 tuioutput "github.com/synapse-dev/synapse-cli/internal/output"
1011)
1112
@@ -105,6 +106,9 @@ var pluginsLoadCmd = &cobra.Command{
105106 Args : cobra .ExactArgs (1 ),
106107 RunE : func (cmd * cobra.Command , args []string ) error {
107108 client := clientFromCmd (cmd )
109+ if err := requirePluginOperator (cmd , "load plugin" ); err != nil {
110+ return err
111+ }
108112 var resp map [string ]any
109113 if err := client .Post ("/api/plugins/" + args [0 ]+ "/load" , nil , & resp ); err != nil {
110114 return err
@@ -120,6 +124,9 @@ var pluginsUnloadCmd = &cobra.Command{
120124 Args : cobra .ExactArgs (1 ),
121125 RunE : func (cmd * cobra.Command , args []string ) error {
122126 client := clientFromCmd (cmd )
127+ if err := requirePluginOperator (cmd , "unload plugin" ); err != nil {
128+ return err
129+ }
123130 if err := client .Post ("/api/plugins/" + args [0 ]+ "/unload" , nil , nil ); err != nil {
124131 return err
125132 }
@@ -134,6 +141,9 @@ var pluginsReloadCmd = &cobra.Command{
134141 Args : cobra .ExactArgs (1 ),
135142 RunE : func (cmd * cobra.Command , args []string ) error {
136143 client := clientFromCmd (cmd )
144+ if err := requirePluginOperator (cmd , "reload plugin" ); err != nil {
145+ return err
146+ }
137147 var resp map [string ]any
138148 if err := client .Post ("/api/plugins/" + args [0 ]+ "/reload" , nil , & resp ); err != nil {
139149 return err
@@ -149,6 +159,9 @@ var pluginsEnableCmd = &cobra.Command{
149159 Args : cobra .ExactArgs (1 ),
150160 RunE : func (cmd * cobra.Command , args []string ) error {
151161 client := clientFromCmd (cmd )
162+ if err := requirePluginOperator (cmd , "enable plugin" ); err != nil {
163+ return err
164+ }
152165 var resp map [string ]any
153166 if err := client .Post ("/api/plugins/" + args [0 ]+ "/enable" , nil , & resp ); err != nil {
154167 return err
@@ -164,6 +177,9 @@ var pluginsDisableCmd = &cobra.Command{
164177 Args : cobra .ExactArgs (1 ),
165178 RunE : func (cmd * cobra.Command , args []string ) error {
166179 client := clientFromCmd (cmd )
180+ if err := requirePluginOperator (cmd , "disable plugin" ); err != nil {
181+ return err
182+ }
167183 var resp map [string ]any
168184 if err := client .Post ("/api/plugins/" + args [0 ]+ "/disable" , nil , & resp ); err != nil {
169185 return err
@@ -179,6 +195,9 @@ var pluginsUninstallCmd = &cobra.Command{
179195 Args : cobra .ExactArgs (1 ),
180196 RunE : func (cmd * cobra.Command , args []string ) error {
181197 client := clientFromCmd (cmd )
198+ if err := requirePluginOperator (cmd , "uninstall plugin" ); err != nil {
199+ return err
200+ }
182201 if err := client .Delete ("/api/plugins/" + args [0 ]); err != nil {
183202 return err
184203 }
@@ -193,6 +212,9 @@ var pluginsInstallCmd = &cobra.Command{
193212 Args : cobra .ExactArgs (1 ),
194213 RunE : func (cmd * cobra.Command , args []string ) error {
195214 client := clientFromCmd (cmd )
215+ if err := requirePluginOperator (cmd , "install plugin" ); err != nil {
216+ return err
217+ }
196218
197219 var manifest map [string ]any
198220 if err := client .Post ("/api/plugins/install" , args [0 ], & manifest ); err != nil {
@@ -405,6 +427,9 @@ var pluginsPromoteCmd = &cobra.Command{
405427 Short : "Promote all staging JARs to system/" ,
406428 RunE : func (cmd * cobra.Command , args []string ) error {
407429 client := clientFromCmd (cmd )
430+ if err := requirePluginOperator (cmd , "promote plugin staging JARs" ); err != nil {
431+ return err
432+ }
408433 if err := client .Post ("/api/plugins/loader/promote" , nil , nil ); err != nil {
409434 return err
410435 }
@@ -418,6 +443,9 @@ var pluginsPublishCmd = &cobra.Command{
418443 Short : "Print submission guidance for publishing a plugin" ,
419444 Args : cobra .ExactArgs (1 ),
420445 RunE : func (cmd * cobra.Command , args []string ) error {
446+ if err := requirePluginOperator (cmd , "publish plugin" ); err != nil {
447+ return err
448+ }
421449 tuioutput .Header ("Plugin Publishing Guide" )
422450 tuioutput .Separator ()
423451 tuioutput .Row ("Official plugins:" , "Submit PR to github.com/FTMahringer/synapse-plugins" )
@@ -459,3 +487,15 @@ func init() {
459487 commandfeatures .BindSubcommandListing (pluginsCmd )
460488 rootCmd .AddCommand (pluginsCmd )
461489}
490+
491+ func requirePluginOperator (cmd * cobra.Command , action string ) error {
492+ profile , _ := cmd .Flags ().GetString ("profile" )
493+ role := strings .ToUpper (strings .TrimSpace (config .GetProfile (profile ).Role ))
494+ if role == "ADMIN" || role == "OWNER" {
495+ return nil
496+ }
497+ if role == "" {
498+ role = "unset"
499+ }
500+ return fmt .Errorf ("%s requires ADMIN or OWNER role (current role: %s)" , action , role )
501+ }
0 commit comments