diff --git a/cli/cmd/role.go b/cli/cmd/role.go new file mode 100644 index 0000000000000000000000000000000000000000..5e587e05c72fe6e5c730090914dff3217f5b0fb4 --- /dev/null +++ b/cli/cmd/role.go @@ -0,0 +1,49 @@ +/* +Copyright © 2021 da/net Research Group <danet@h-da.de> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +package cmd + +import ( + "github.com/spf13/cobra" +) + +//var duid string + +// networkElementCmd represents the network element command. +var roleCmd = &cobra.Command{ + Use: "role", + Short: "the role command contains all sub-commands for role management", + Long: `The role command contains all sub-commands for role management. It has no functionality in itself.`, +} + +func init() { + rootCmd.AddCommand(roleCmd) +} diff --git a/cli/cmd/roleCreate.go b/cli/cmd/roleCreate.go new file mode 100644 index 0000000000000000000000000000000000000000..0fc47dff92e70e5ab5b9a30d2d5c7266d671a2a5 --- /dev/null +++ b/cli/cmd/roleCreate.go @@ -0,0 +1,93 @@ +/* +Copyright © 2021 da/net Research Group <danet@h-da.de> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +package cmd + +import ( + "strings" + + "github.com/pterm/pterm" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/rbac" + "code.fbi.h-da.de/danet/gosdn/controller/api" +) + +// roleCreateCmd represents the create command. +var roleCreateCmd = &cobra.Command{ + Use: "create", + Short: "Creates a role in the controller", + Long: `Creates a role in the controller with the provided permissions as comma separated strings.`, + + Run: func(cmd *cobra.Command, args []string) { + spinner, _ := pterm.DefaultSpinner.Start("Creating new role") + + var permissions []string + if createRolePermissions != "" { + permissions = strings.Split(createRolePermissions, ",") + } + + roles := []*rbac.Role{ + { + Name: createRoleName, + Description: createRoleDescription, + Permissions: permissions, + }, + } + + _, err := api.CreateRoles(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint"), roles) + if err != nil { + spinner.Fail(err) + return + } + + spinner.Success("Roles have been created.") + }, + PostRun: func(cmd *cobra.Command, args []string) { + // Necessary for prompt mode. The flag variables have to be resetted, + // since in prompt mode the program keeps running. + + createRoleName, createRoleDescription, createRolePermissions = "", "", "" + }, +} + +var createRoleName string +var createRoleDescription string +var createRolePermissions string + +func init() { + roleCmd.AddCommand(roleCreateCmd) + + roleCreateCmd.Flags().StringVar(&createRoleName, "name", "", "add a name for the role") + roleCreateCmd.Flags().StringVar(&createRoleDescription, "description", "", "add a description to the role") + roleCreateCmd.Flags().StringVar(&createRolePermissions, "permissions", "", "add multiple permissions separated by comma: --permissions \"p1,p2\"") +} diff --git a/cli/cmd/roleGetAll.go b/cli/cmd/roleGetAll.go new file mode 100644 index 0000000000000000000000000000000000000000..dad97638eb6478e089caac96630ce3bd122b93c3 --- /dev/null +++ b/cli/cmd/roleGetAll.go @@ -0,0 +1,72 @@ +/* +Copyright © 2021 da/net Research Group <danet@h-da.de> +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +package cmd + +import ( + "github.com/pterm/pterm" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "code.fbi.h-da.de/danet/gosdn/controller/api" +) + +// roleGetAllCmd represents the get all command. +var roleGetAllCmd = &cobra.Command{ + Use: "getAll", + Short: "Requests all the available roles.", + Long: `Requests all the available roles.`, + Run: func(cmd *cobra.Command, args []string) { + spinner, _ := pterm.DefaultSpinner.Start("Fetching roles") + + resp, err := api.GetRoles(createContextWithAuthorization(), viper.GetString("controllerAPIEndpoint")) + if err != nil { + spinner.Fail(err) + return + } + + data := pterm.TableData{[]string{"Name", "ID", "Description", "Permissions"}} + for _, role := range resp.GetRoles() { + data = append(data, []string{role.Name, role.Id, role.Description}, role.Permissions) + } + + spinner.Success() + + err = pterm.DefaultTable.WithHasHeader().WithData(data).Render() + if err != nil { + return + } + }, +} + +func init() { + roleCmd.AddCommand(roleGetAllCmd) +}