github.com/esnet/gdg@v0.6.1-0.20240412190737-6b6eba9c14d8/cli/backup/connection_permissions.go (about)

     1  package backup
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"github.com/bep/simplecobra"
     7  	"github.com/esnet/gdg/cli/support"
     8  	"github.com/esnet/gdg/internal/config"
     9  	"github.com/esnet/gdg/internal/service"
    10  	"github.com/esnet/gdg/internal/tools"
    11  	"github.com/jedib0t/go-pretty/v6/table"
    12  	"log/slog"
    13  
    14  	"github.com/spf13/cobra"
    15  )
    16  
    17  func newConnectionsPermissionCmd() simplecobra.Commander {
    18  	description := "Connections Permission"
    19  	return &support.SimpleCommand{
    20  		NameP: "permission",
    21  		Short: description,
    22  		Long:  description,
    23  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    24  			cmd.Aliases = []string{"p", "permissions"}
    25  		},
    26  		CommandsList: []simplecobra.Commander{
    27  			newConnectionsPermissionListCmd(),
    28  			newConnectionsPermissionDownloadCmd(),
    29  			newConnectionsPermissionUploadCmd(),
    30  			newConnectionsPermissionClearCmd(),
    31  		},
    32  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    33  			return cd.CobraCommand.Help()
    34  		},
    35  	}
    36  }
    37  
    38  func newConnectionsPermissionListCmd() simplecobra.Commander {
    39  	description := "List Connection Permissions"
    40  	return &support.SimpleCommand{
    41  		NameP: "list",
    42  		Short: description,
    43  		Long:  description,
    44  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    45  			cmd.Aliases = []string{"l"}
    46  		},
    47  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    48  			connectionFilter, _ := cd.CobraCommand.Flags().GetString("connection")
    49  			filters := service.NewConnectionFilter(connectionFilter)
    50  			slog.Info("Listing Connection Permissions for context", "context", config.Config().GetGDGConfig().GetContext())
    51  			rootCmd.TableObj.AppendHeader(table.Row{"id", "uid", "name", "slug", "type", "default", "url"})
    52  			connections := rootCmd.GrafanaSvc().ListConnectionPermissions(filters)
    53  			_ = connections
    54  
    55  			if len(connections) == 0 {
    56  				slog.Info("No connections found")
    57  			} else {
    58  				for link, perms := range connections {
    59  					url := fmt.Sprintf("%s/datasource/edit/%d", config.Config().GetDefaultGrafanaConfig().URL, link.ID)
    60  					rootCmd.TableObj.AppendRow(table.Row{link.ID, link.UID, link.Name, service.GetSlug(link.Name), link.Type, link.IsDefault, url})
    61  					if perms != nil && perms.Enabled {
    62  						for _, perm := range perms.Permissions {
    63  							rootCmd.TableObj.AppendRow(table.Row{link.ID, link.UID, "    PERMISSION-->", perm.PermissionName, perm.Team, perm.UserEmail})
    64  						}
    65  					}
    66  				}
    67  				rootCmd.Render(cd.CobraCommand, connections)
    68  			}
    69  			return nil
    70  		},
    71  	}
    72  }
    73  func newConnectionsPermissionClearCmd() simplecobra.Commander {
    74  	description := "Clear Connection Permissions"
    75  	return &support.SimpleCommand{
    76  		NameP: "clear",
    77  		Short: description,
    78  		Long:  description,
    79  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
    80  			cmd.Aliases = []string{"c"}
    81  		},
    82  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
    83  			slog.Info("Clear all connections permissions")
    84  			tools.GetUserConfirmation(fmt.Sprintf("WARNING: this will clear all permission from all connections on: '%s' "+
    85  				"(Or all permission matching yoru --connection filter).  Do you wish to continue (y/n) ", config.Config().GetGDGConfig().ContextName,
    86  			), "", true)
    87  			rootCmd.TableObj.AppendHeader(table.Row{"cleared connection permissions"})
    88  			connectionFilter, _ := cd.CobraCommand.Flags().GetString("connection")
    89  			filters := service.NewConnectionFilter(connectionFilter)
    90  			connections := rootCmd.GrafanaSvc().DeleteAllConnectionPermissions(filters)
    91  
    92  			if len(connections) == 0 {
    93  				slog.Info("No connections found")
    94  			} else {
    95  				for _, connections := range connections {
    96  					rootCmd.TableObj.AppendRow(table.Row{connections})
    97  				}
    98  				rootCmd.Render(cd.CobraCommand, connections)
    99  			}
   100  
   101  			return nil
   102  		},
   103  	}
   104  }
   105  
   106  func newConnectionsPermissionDownloadCmd() simplecobra.Commander {
   107  	description := "Download Connection Permissions"
   108  	return &support.SimpleCommand{
   109  		NameP: "download",
   110  		Short: description,
   111  		Long:  description,
   112  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
   113  			cmd.Aliases = []string{"d"}
   114  		},
   115  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
   116  			slog.Info("Download Connections for context",
   117  				"context", config.Config().GetGDGConfig().GetContext())
   118  			rootCmd.TableObj.AppendHeader(table.Row{"filename"})
   119  			connectionFilter, _ := cd.CobraCommand.Flags().GetString("connection")
   120  			filters := service.NewConnectionFilter(connectionFilter)
   121  			connections := rootCmd.GrafanaSvc().DownloadConnectionPermissions(filters)
   122  			slog.Info("Downloading connections permissions")
   123  
   124  			if len(connections) == 0 {
   125  				slog.Info("No connections found")
   126  			} else {
   127  				for _, connections := range connections {
   128  					rootCmd.TableObj.AppendRow(table.Row{connections})
   129  				}
   130  				rootCmd.Render(cd.CobraCommand, connections)
   131  			}
   132  			return nil
   133  		},
   134  	}
   135  }
   136  func newConnectionsPermissionUploadCmd() simplecobra.Commander {
   137  	description := "Upload Connection Permissions"
   138  	return &support.SimpleCommand{
   139  		NameP: "upload",
   140  		Short: description,
   141  		Long:  description,
   142  		WithCFunc: func(cmd *cobra.Command, r *support.RootCommand) {
   143  			cmd.Aliases = []string{"u"}
   144  		},
   145  		RunFunc: func(ctx context.Context, cd *simplecobra.Commandeer, rootCmd *support.RootCommand, args []string) error {
   146  			slog.Info("Uploading connections permissions")
   147  			rootCmd.TableObj.AppendHeader(table.Row{"connection permission"})
   148  			connectionFilter, _ := cd.CobraCommand.Flags().GetString("connection")
   149  			filters := service.NewConnectionFilter(connectionFilter)
   150  			connections := rootCmd.GrafanaSvc().UploadConnectionPermissions(filters)
   151  
   152  			if len(connections) == 0 {
   153  				slog.Info("No connections found")
   154  			} else {
   155  				for _, connections := range connections {
   156  					rootCmd.TableObj.AppendRow(table.Row{connections})
   157  				}
   158  				rootCmd.Render(cd.CobraCommand, connections)
   159  			}
   160  			return nil
   161  		},
   162  	}
   163  }