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 }