NOISSUE - Add Domains to the SDK (#45)

* add: domains sdk

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: error

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: cli users token and refresh

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: cli provision

Signed-off-by: Arvindh <arvindh91@gmail.com>

* add domains cli

Signed-off-by: Arvindh <arvindh91@gmail.com>

* remove test program

Signed-off-by: Arvindh <arvindh91@gmail.com>

* update cli command for list domains

Signed-off-by: Arvindh <arvindh91@gmail.com>

* add list user domain cli cmd

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix varaible naming

Signed-off-by: Arvindh <arvindh91@gmail.com>

* fix: comments grammar & varabile; add package headers

Signed-off-by: Arvindh <arvindh91@gmail.com>

---------

Signed-off-by: Arvindh <arvindh91@gmail.com>
This commit is contained in:
Arvindh
2023-11-17 16:12:53 +05:30
committed by GitHub
parent 7acf21a3e1
commit 48dddc4bba
13 changed files with 632 additions and 66 deletions
+236
View File
@@ -0,0 +1,236 @@
// Copyright (c) Magistrala
// SPDX-License-Identifier: Apache-2.0
package cli
import (
"encoding/json"
mgxsdk "github.com/absmach/magistrala/pkg/sdk/go"
"github.com/spf13/cobra"
)
var cmdDomains = []cobra.Command{
{
Use: "create <name> <alias> <token>",
Short: "Create Domain",
Long: "Create Domain with provided name and alias. \n" +
"For example:\n" +
"\tmagistrala-cli domains create domain_1 domain_1_alias $TOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 3 {
logUsage(cmd.Use)
return
}
user := mgxsdk.Domain{
Name: args[0],
Alias: args[1],
}
user, err := sdk.CreateDomain(user, args[2])
if err != nil {
logError(err)
return
}
logJSON(user)
},
},
{
Use: "get [all | <domain_id> ] <token>",
Short: "Get Domains",
Long: "Get all domains. Users can be filtered by name or metadata or status",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
metadata, err := convertMetadata(Metadata)
if err != nil {
logError(err)
return
}
pageMetadata := mgxsdk.PageMetadata{
Name: Name,
Offset: Offset,
Limit: Limit,
Metadata: metadata,
Status: Status,
}
if args[0] == all {
l, err := sdk.Domains(pageMetadata, args[1])
if err != nil {
logError(err)
return
}
logJSON(l)
return
}
d, err := sdk.Domain(args[0], args[1])
if err != nil {
logError(err)
return
}
logJSON(d)
},
},
{
Use: "users <domain_id> <token>",
Short: "List Domain users",
Long: "List Domain users",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
metadata, err := convertMetadata(Metadata)
if err != nil {
logError(err)
return
}
pageMetadata := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
Metadata: metadata,
Status: Status,
}
l, err := sdk.ListDomainUsers(args[0], pageMetadata, args[1])
if err != nil {
logError(err)
return
}
logJSON(l)
},
},
{
Use: "update <domain_id> <JSON_string> <user_auth_token>",
Short: "Update domains",
Long: "Updates domains name, alias and metadata \n" +
"Usage:\n" +
"\tmagistrala-cli domains update <domain_id> '{\"name\":\"new name\", \"alias\":\"new_alias\", \"metadata\":{\"key\": \"value\"}}' $TOKEN \n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 4 && len(args) != 3 {
logUsage(cmd.Use)
return
}
var d mgxsdk.Domain
if err := json.Unmarshal([]byte(args[1]), &d); err != nil {
logError(err)
return
}
d.ID = args[0]
d, err := sdk.UpdateDomain(d, args[2])
if err != nil {
logError(err)
return
}
logJSON(d)
},
},
{
Use: "enable <domain_id> <token>",
Short: "Change domain status to enabled",
Long: "Change domain status to enabled\n" +
"Usage:\n" +
"\tmagistrala-cli domains enable <domain_id> <token>\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
if err := sdk.EnableDomain(args[0], args[1]); err != nil {
logError(err)
return
}
logOK()
},
},
{
Use: "disable <domain_id> <token>",
Short: "Change domain status to disabled",
Long: "Change domain status to disabled\n" +
"Usage:\n" +
"\tmagistrala-cli domains disable <domain_id> <token>\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
if err := sdk.DisableDomain(args[0], args[1]); err != nil {
logError(err)
return
}
logOK()
},
},
{
Use: "assign user <relation> <user_ids> <domain_id> <token>",
Short: "Assign user",
Long: "Assign user to a domain\n" +
"Usage:\n" +
"\tmagistrala-cli groups assign user <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <domain_id> $TOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 5 {
logUsage(cmd.Use)
return
}
var userIDs []string
if err := json.Unmarshal([]byte(args[2]), &userIDs); err != nil {
logError(err)
return
}
if err := sdk.AddUserToDomain(args[3], mgxsdk.UsersRelationRequest{Relation: args[1], UserIDs: userIDs}, args[4]); err != nil {
logError(err)
return
}
logOK()
},
},
{
Use: "unassign user <relation> <user_ids> <domain_id> <token>",
Short: "Unassign user",
Long: "Unassign user from a domain\n" +
"Usage:\n" +
"\tmagistrala-cli groups unassign user <relation> '[\"<user_id_1>\", \"<user_id_2>\"]' <domain_id> $TOKEN\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 5 {
logUsage(cmd.Use)
return
}
var userIDs []string
if err := json.Unmarshal([]byte(args[2]), &userIDs); err != nil {
logError(err)
return
}
if err := sdk.RemoveUserFromDomain(args[3], mgxsdk.UsersRelationRequest{Relation: args[1], UserIDs: userIDs}, args[4]); err != nil {
logError(err)
return
}
logOK()
},
},
}
// NewDomainsCmd returns domains command.
func NewDomainsCmd() *cobra.Command {
cmd := cobra.Command{
Use: "domains [create | get | update | enable | disable | enable | users | assign | unassign]",
Short: "Domains management",
Long: `Domains management: create, update, retrieve domains , assign/unassign users to domains and list users of domain"`,
}
for i := range cmdDomains {
cmd.AddCommand(&cmdDomains[i])
}
return &cmd
}
+1 -1
View File
@@ -140,7 +140,7 @@ var cmdProvision = []cobra.Command{
}
user.Credentials.Secret = "12345678"
ut, err := sdk.CreateToken(user)
ut, err := sdk.CreateToken(mgxsdk.Login{Identity: user.Credentials.Identity, Secret: user.Credentials.Secret})
if err != nil {
logError(err)
return
+49 -15
View File
@@ -88,24 +88,26 @@ var cmdUsers = []cobra.Command{
},
},
{
Use: "token <username> <password>",
Use: "token <username> <password> [<domainID>]",
Short: "Get token",
Long: "Generate new token from username and password\n" +
"For example:\n" +
"\tmagistrala-cli users token user@example.com 12345678\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
if len(args) != 3 && len(args) != 2 {
logUsage(cmd.Use)
return
}
user := mgxsdk.User{
Credentials: mgxsdk.Credentials{
Identity: args[0],
Secret: args[1],
},
lg := mgxsdk.Login{
Identity: args[0],
Secret: args[1],
}
token, err := sdk.CreateToken(user)
if len(args) == 3 {
lg.DomainID = args[2]
}
token, err := sdk.CreateToken(lg)
if err != nil {
logError(err)
return
@@ -115,18 +117,22 @@ var cmdUsers = []cobra.Command{
},
},
{
Use: "refreshtoken <token>",
Use: "refreshtoken <token> [<domainID>]",
Short: "Get token",
Long: "Generate new token from refresh token\n" +
"For example:\n" +
"\tmagistrala-cli users refreshtoken <refresh_token>\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 1 {
if len(args) != 2 && len(args) != 1 {
logUsage(cmd.Use)
return
}
token, err := sdk.RefreshToken(args[0])
lg := mgxsdk.Login{}
if len(args) == 2 {
lg.DomainID = args[1]
}
token, err := sdk.RefreshToken(lg, args[0])
if err != nil {
logError(err)
return
@@ -351,13 +357,13 @@ var cmdUsers = []cobra.Command{
Limit: Limit,
}
users, err := sdk.ListUserChannels(args[0], pm, args[1])
cp, err := sdk.ListUserChannels(args[0], pm, args[1])
if err != nil {
logError(err)
return
}
logJSON(users)
logJSON(cp)
},
},
@@ -378,15 +384,43 @@ var cmdUsers = []cobra.Command{
Limit: Limit,
}
users, err := sdk.ListUserThings(args[0], pm, args[1])
tp, err := sdk.ListUserThings(args[0], pm, args[1])
if err != nil {
logError(err)
return
}
logJSON(users)
logJSON(tp)
},
},
{
Use: "domains <user_id> <user_auth_token>",
Short: "List domains",
Long: "List user's domains\n" +
"Usage:\n" +
"\tmagistrala-cli users domains <user_id> <user_auth_token>\n",
Run: func(cmd *cobra.Command, args []string) {
if len(args) != 2 {
logUsage(cmd.Use)
return
}
pm := mgxsdk.PageMetadata{
Offset: Offset,
Limit: Limit,
}
dp, err := sdk.ListUserDomains(args[0], pm, args[1])
if err != nil {
logError(err)
return
}
logJSON(dp)
},
},
{
Use: "groups <user_id> <user_auth_token>",
Short: "List groups",