mirror of
https://github.com/absmach/supermq.git
synced 2026-06-23 07:30:25 +00:00
MG-2426 - Replace generic Clients in Users service (#2436)
Signed-off-by: Musilah <nataleigh.nk@gmail.com> Signed-off-by: Arvindh <arvindh91@gmail.com> Signed-off-by: Felix Gateru <felix.gateru@gmail.com> Signed-off-by: Dusan Borovcanin <borovcanindusan1@gmail.com> Co-authored-by: Arvindh <arvindh91@gmail.com> Co-authored-by: Felix Gateru <felix.gateru@gmail.com> Co-authored-by: Dusan Borovcanin <borovcanindusan1@gmail.com>
This commit is contained in:
+5
-5
@@ -135,9 +135,10 @@ var cmdProvision = []cobra.Command{
|
||||
// Create test user
|
||||
name := namesgenerator.Generate()
|
||||
user := mgxsdk.User{
|
||||
Name: name,
|
||||
FirstName: name,
|
||||
Email: fmt.Sprintf("%s@email.com", name),
|
||||
Credentials: mgxsdk.Credentials{
|
||||
Identity: fmt.Sprintf("%s@email.com", name),
|
||||
Username: name,
|
||||
Secret: "12345678",
|
||||
},
|
||||
Status: mgxsdk.EnabledStatus,
|
||||
@@ -148,8 +149,7 @@ var cmdProvision = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
user.Credentials.Secret = "12345678"
|
||||
ut, err := sdk.CreateToken(mgxsdk.Login{Identity: user.Credentials.Identity, Secret: user.Credentials.Secret})
|
||||
ut, err := sdk.CreateToken(mgxsdk.Login{Username: user.Username, Secret: user.Credentials.Secret})
|
||||
if err != nil {
|
||||
logErrorCmd(*cmd, err)
|
||||
return
|
||||
@@ -166,7 +166,7 @@ var cmdProvision = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
ut, err = sdk.CreateToken(mgxsdk.Login{Identity: user.Credentials.Identity, Secret: user.Credentials.Secret})
|
||||
ut, err = sdk.CreateToken(mgxsdk.Login{Email: user.Email, Secret: user.Credentials.Secret})
|
||||
if err != nil {
|
||||
logErrorCmd(*cmd, err)
|
||||
return
|
||||
|
||||
+2
-2
@@ -33,7 +33,7 @@ var (
|
||||
var thing = sdk.Thing{
|
||||
ID: testsutil.GenerateUUID(&testing.T{}),
|
||||
Name: "testthing",
|
||||
Credentials: sdk.Credentials{
|
||||
Credentials: sdk.ClientCredentials{
|
||||
Secret: "secret",
|
||||
},
|
||||
DomainID: testsutil.GenerateUUID(&testing.T{}),
|
||||
@@ -385,7 +385,7 @@ func TestUpdateThingCmd(t *testing.T) {
|
||||
ID: thing.ID,
|
||||
DomainID: thing.DomainID,
|
||||
Status: thing.Status,
|
||||
Credentials: sdk.Credentials{
|
||||
Credentials: sdk.ClientCredentials{
|
||||
Secret: newSecret,
|
||||
},
|
||||
},
|
||||
|
||||
+41
-23
@@ -9,36 +9,38 @@ import (
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
||||
mgclients "github.com/absmach/magistrala/pkg/clients"
|
||||
mgxsdk "github.com/absmach/magistrala/pkg/sdk/go"
|
||||
"github.com/absmach/magistrala/users"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var cmdUsers = []cobra.Command{
|
||||
{
|
||||
Use: "create <name> <username> <password> <user_auth_token>",
|
||||
Use: "create <first_name> <last_name> <email> <username> <password> <user_auth_token>",
|
||||
Short: "Create user",
|
||||
Long: "Create user with provided name, username and password. Token is optional\n" +
|
||||
Long: "Create user with provided firstname, lastname, email, username and password. Token is optional\n" +
|
||||
"For example:\n" +
|
||||
"\tmagistrala-cli users create user user@example.com 12345678 $USER_AUTH_TOKEN\n",
|
||||
"\tmagistrala-cli users create jane doe janedoe@example.com jane_doe 12345678 $USER_AUTH_TOKEN\n",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) < 3 || len(args) > 4 {
|
||||
if len(args) < 5 || len(args) > 6 {
|
||||
logUsageCmd(*cmd, cmd.Use)
|
||||
return
|
||||
}
|
||||
if len(args) == 3 {
|
||||
if len(args) == 5 {
|
||||
args = append(args, "")
|
||||
}
|
||||
|
||||
user := mgxsdk.User{
|
||||
Name: args[0],
|
||||
FirstName: args[0],
|
||||
LastName: args[1],
|
||||
Email: args[2],
|
||||
Credentials: mgxsdk.Credentials{
|
||||
Identity: args[1],
|
||||
Secret: args[2],
|
||||
Username: args[3],
|
||||
Secret: args[4],
|
||||
},
|
||||
Status: mgclients.EnabledStatus.String(),
|
||||
Status: users.EnabledStatus.String(),
|
||||
}
|
||||
user, err := sdk.CreateUser(user, args[3])
|
||||
user, err := sdk.CreateUser(user, args[5])
|
||||
if err != nil {
|
||||
logErrorCmd(*cmd, err)
|
||||
return
|
||||
@@ -66,6 +68,7 @@ var cmdUsers = []cobra.Command{
|
||||
return
|
||||
}
|
||||
pageMetadata := mgxsdk.PageMetadata{
|
||||
Username: Username,
|
||||
Identity: Identity,
|
||||
Offset: Offset,
|
||||
Limit: Limit,
|
||||
@@ -93,21 +96,21 @@ var cmdUsers = []cobra.Command{
|
||||
{
|
||||
Use: "token <username> <password>",
|
||||
Short: "Get token",
|
||||
Long: "Generate new token from username and password\n" +
|
||||
Long: "Generate a new token with username and password\n" +
|
||||
"For example:\n" +
|
||||
"\tmagistrala-cli users token user@example.com 12345678\n",
|
||||
"\tmagistrala-cli users token jane.doe 12345678\n",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) != 2 {
|
||||
logUsageCmd(*cmd, cmd.Use)
|
||||
return
|
||||
}
|
||||
|
||||
lg := mgxsdk.Login{
|
||||
Identity: args[0],
|
||||
loginReq := mgxsdk.Login{
|
||||
Username: args[0],
|
||||
Secret: args[1],
|
||||
}
|
||||
|
||||
token, err := sdk.CreateToken(lg)
|
||||
token, err := sdk.CreateToken(loginReq)
|
||||
if err != nil {
|
||||
logErrorCmd(*cmd, err)
|
||||
return
|
||||
@@ -116,6 +119,7 @@ var cmdUsers = []cobra.Command{
|
||||
logJSONCmd(*cmd, token)
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
Use: "refreshtoken <token>",
|
||||
Short: "Get token",
|
||||
@@ -138,13 +142,15 @@ var cmdUsers = []cobra.Command{
|
||||
},
|
||||
},
|
||||
{
|
||||
Use: "update [<user_id> <JSON_string> | tags <user_id> <tags> | identity <user_id> <identity> ] <user_auth_token>",
|
||||
Use: "update [<user_id> <JSON_string> | tags <user_id> <tags> | username <user_id> <username> | email <user_id> <email>] <user_auth_token>",
|
||||
Short: "Update user",
|
||||
Long: "Updates either user name and metadata or user tags or user identity\n" +
|
||||
Long: "Updates either user name and metadata or user tags or user email\n" +
|
||||
"Usage:\n" +
|
||||
"\tmagistrala-cli users update <user_id> '{\"name\":\"new name\", \"metadata\":{\"key\": \"value\"}}' $USERTOKEN - updates user name and metadata\n" +
|
||||
"\tmagistrala-cli users update <user_id> '{\"first_name\":\"new first_name\", \"metadata\":{\"key\": \"value\"}}' $USERTOKEN - updates user first and lastname and metadata\n" +
|
||||
"\tmagistrala-cli users update tags <user_id> '[\"tag1\", \"tag2\"]' $USERTOKEN - updates user tags\n" +
|
||||
"\tmagistrala-cli users update identity <user_id> newidentity@example.com $USERTOKEN - updates user identity\n",
|
||||
"\tmagistrala-cli users update username <user_id> newusername $USERTOKEN - updates user name\n" +
|
||||
"\tmagistrala-cli users update email <user_id> newemail@example.com $USERTOKEN - updates user email\n",
|
||||
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) != 4 && len(args) != 3 {
|
||||
logUsageCmd(*cmd, cmd.Use)
|
||||
@@ -168,10 +174,22 @@ var cmdUsers = []cobra.Command{
|
||||
return
|
||||
}
|
||||
|
||||
if args[0] == "identity" {
|
||||
if args[0] == "email" {
|
||||
user.ID = args[1]
|
||||
user.Credentials.Identity = args[2]
|
||||
user, err := sdk.UpdateUserIdentity(user, args[3])
|
||||
user.Email = args[2]
|
||||
user, err := sdk.UpdateUserEmail(user, args[3])
|
||||
if err != nil {
|
||||
logErrorCmd(*cmd, err)
|
||||
return
|
||||
}
|
||||
logJSONCmd(*cmd, user)
|
||||
return
|
||||
}
|
||||
|
||||
if args[0] == "username" {
|
||||
user.ID = args[1]
|
||||
user.Credentials.Username = args[2]
|
||||
user, err := sdk.UpdateUser(user, args[3])
|
||||
if err != nil {
|
||||
logErrorCmd(*cmd, err)
|
||||
return
|
||||
|
||||
+41
-32
@@ -22,11 +22,12 @@ import (
|
||||
)
|
||||
|
||||
var user = mgsdk.User{
|
||||
ID: testsutil.GenerateUUID(&testing.T{}),
|
||||
Name: "testuser",
|
||||
ID: testsutil.GenerateUUID(&testing.T{}),
|
||||
FirstName: "testuserfirstname",
|
||||
LastName: "testuserfirstname",
|
||||
Credentials: mgsdk.Credentials{
|
||||
Secret: "testpassword",
|
||||
Identity: "identity@example.com",
|
||||
Username: "testusername",
|
||||
},
|
||||
Status: mgclients.EnabledStatus.String(),
|
||||
}
|
||||
@@ -57,9 +58,11 @@ func TestCreateUsersCmd(t *testing.T) {
|
||||
{
|
||||
desc: "create user successfully with token",
|
||||
args: []string{
|
||||
user.Name,
|
||||
user.Credentials.Identity,
|
||||
user.FirstName,
|
||||
user.LastName,
|
||||
user.Email,
|
||||
user.Credentials.Secret,
|
||||
user.Credentials.Username,
|
||||
validToken,
|
||||
},
|
||||
user: user,
|
||||
@@ -68,9 +71,11 @@ func TestCreateUsersCmd(t *testing.T) {
|
||||
{
|
||||
desc: "create user successfully without token",
|
||||
args: []string{
|
||||
user.Name,
|
||||
user.Credentials.Identity,
|
||||
user.FirstName,
|
||||
user.LastName,
|
||||
user.Email,
|
||||
user.Credentials.Secret,
|
||||
user.Credentials.Username,
|
||||
},
|
||||
user: user,
|
||||
logType: entityLog,
|
||||
@@ -78,9 +83,12 @@ func TestCreateUsersCmd(t *testing.T) {
|
||||
{
|
||||
desc: "failed to create user",
|
||||
args: []string{
|
||||
user.Name,
|
||||
user.Credentials.Identity,
|
||||
user.FirstName,
|
||||
user.LastName,
|
||||
user.Email,
|
||||
user.Credentials.Secret,
|
||||
user.Credentials.Username,
|
||||
validToken,
|
||||
},
|
||||
sdkerr: errors.NewSDKErrorWithStatus(svcerr.ErrCreateEntity, http.StatusUnprocessableEntity),
|
||||
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrCreateEntity, http.StatusUnprocessableEntity).Error()),
|
||||
@@ -88,7 +96,7 @@ func TestCreateUsersCmd(t *testing.T) {
|
||||
},
|
||||
{
|
||||
desc: "create user with invalid args",
|
||||
args: []string{user.Name, user.Credentials.Identity},
|
||||
args: []string{user.FirstName, user.Credentials.Username},
|
||||
logType: usageLog,
|
||||
},
|
||||
}
|
||||
@@ -96,12 +104,13 @@ func TestCreateUsersCmd(t *testing.T) {
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.desc, func(t *testing.T) {
|
||||
sdkCall := sdkMock.On("CreateUser", mock.Anything, mock.Anything).Return(tc.user, tc.sdkerr)
|
||||
if len(tc.args) == 3 {
|
||||
if len(tc.args) == 4 {
|
||||
sdkUser := mgsdk.User{
|
||||
Name: tc.args[0],
|
||||
FirstName: tc.args[0],
|
||||
LastName: tc.args[1],
|
||||
Email: tc.args[2],
|
||||
Credentials: mgsdk.Credentials{
|
||||
Identity: tc.args[1],
|
||||
Secret: tc.args[2],
|
||||
Secret: tc.args[3],
|
||||
},
|
||||
}
|
||||
sdkCall = sdkMock.On("CreateUser", mock.Anything, sdkUser).Return(tc.user, tc.sdkerr)
|
||||
@@ -297,7 +306,7 @@ func TestIssueTokenCmd(t *testing.T) {
|
||||
{
|
||||
desc: "issue token successfully",
|
||||
args: []string{
|
||||
user.Credentials.Identity,
|
||||
user.Email,
|
||||
user.Credentials.Secret,
|
||||
},
|
||||
sdkerr: nil,
|
||||
@@ -307,7 +316,7 @@ func TestIssueTokenCmd(t *testing.T) {
|
||||
{
|
||||
desc: "issue token with failed authentication",
|
||||
args: []string{
|
||||
user.Credentials.Identity,
|
||||
user.Email,
|
||||
invalidPassword,
|
||||
},
|
||||
sdkerr: errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden),
|
||||
@@ -318,7 +327,7 @@ func TestIssueTokenCmd(t *testing.T) {
|
||||
{
|
||||
desc: "issue token with invalid args",
|
||||
args: []string{
|
||||
user.Credentials.Identity,
|
||||
user.Email,
|
||||
user.Credentials.Secret,
|
||||
extraArg,
|
||||
},
|
||||
@@ -329,8 +338,8 @@ func TestIssueTokenCmd(t *testing.T) {
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.desc, func(t *testing.T) {
|
||||
lg := mgsdk.Login{
|
||||
Identity: tc.args[0],
|
||||
Secret: tc.args[1],
|
||||
Email: tc.args[0],
|
||||
Secret: tc.args[1],
|
||||
}
|
||||
sdkCall := sdkMock.On("CreateToken", lg).Return(tc.token, tc.sdkerr)
|
||||
|
||||
@@ -391,7 +400,7 @@ func TestRefreshIssueTokenCmd(t *testing.T) {
|
||||
logType: usageLog,
|
||||
},
|
||||
{
|
||||
desc: "issue refresh token with invalid identity",
|
||||
desc: "issue refresh token with invalid Username",
|
||||
args: []string{
|
||||
"invalidToken",
|
||||
},
|
||||
@@ -435,9 +444,9 @@ func TestUpdateUserCmd(t *testing.T) {
|
||||
userID := testsutil.GenerateUUID(t)
|
||||
|
||||
tagUpdateType := "tags"
|
||||
identityUpdateType := "identity"
|
||||
emailUpdateType := "email"
|
||||
roleUpdateType := "role"
|
||||
newIdentity := "newidentity@example.com"
|
||||
newEmail := "newemail@example.com"
|
||||
newRole := "administrator"
|
||||
newTagsJSON := "[\"tag1\", \"tag2\"]"
|
||||
newNameMetadataJSON := "{\"name\":\"new name\", \"metadata\":{\"key\": \"value\"}}"
|
||||
@@ -487,22 +496,22 @@ func TestUpdateUserCmd(t *testing.T) {
|
||||
errLogMessage: fmt.Sprintf("\nerror: %s\n\n", errors.NewSDKErrorWithStatus(svcerr.ErrAuthorization, http.StatusForbidden)),
|
||||
},
|
||||
{
|
||||
desc: "update user identity successfully",
|
||||
desc: "update user email successfully",
|
||||
args: []string{
|
||||
identityUpdateType,
|
||||
emailUpdateType,
|
||||
userID,
|
||||
newIdentity,
|
||||
newEmail,
|
||||
validToken,
|
||||
},
|
||||
logType: entityLog,
|
||||
user: user,
|
||||
},
|
||||
{
|
||||
desc: "update user identity with invalid token",
|
||||
desc: "update user email with invalid token",
|
||||
args: []string{
|
||||
identityUpdateType,
|
||||
emailUpdateType,
|
||||
userID,
|
||||
newIdentity,
|
||||
newEmail,
|
||||
invalidToken,
|
||||
},
|
||||
logType: errLog,
|
||||
@@ -590,19 +599,19 @@ func TestUpdateUserCmd(t *testing.T) {
|
||||
u.ID = tc.args[1]
|
||||
|
||||
sdkCall1 = sdkMock.On("UpdateUserTags", u, tc.args[3]).Return(tc.user, tc.sdkerr)
|
||||
case tc.args[0] == identityUpdateType:
|
||||
case tc.args[0] == emailUpdateType:
|
||||
var u mgsdk.User
|
||||
u.Credentials.Identity = tc.args[2]
|
||||
u.Email = tc.args[2]
|
||||
u.ID = tc.args[1]
|
||||
|
||||
sdkCall2 = sdkMock.On("UpdateUserIdentity", u, tc.args[3]).Return(tc.user, tc.sdkerr)
|
||||
sdkCall2 = sdkMock.On("UpdateUserEmail", u, tc.args[3]).Return(tc.user, tc.sdkerr)
|
||||
case tc.args[0] == roleUpdateType && len(tc.args) == 4:
|
||||
sdkCall3 = sdkMock.On("UpdateUserRole", mgsdk.User{
|
||||
Role: tc.args[2],
|
||||
}, tc.args[3]).Return(tc.user, tc.sdkerr)
|
||||
case tc.args[0] == userID:
|
||||
sdkCall = sdkMock.On("UpdateUser", mgsdk.User{
|
||||
Name: "new name",
|
||||
FirstName: "new name",
|
||||
Metadata: mgsdk.Metadata{
|
||||
"key": "value",
|
||||
},
|
||||
|
||||
@@ -36,6 +36,12 @@ var (
|
||||
Contact string = ""
|
||||
// RawOutput raw output mode.
|
||||
RawOutput bool = false
|
||||
// Username query parameter.
|
||||
Username string = ""
|
||||
// FirstName query parameter.
|
||||
FirstName string = ""
|
||||
// LastName query parameter.
|
||||
LastName string = ""
|
||||
)
|
||||
|
||||
func logJSONCmd(cmd cobra.Command, iList ...interface{}) {
|
||||
|
||||
Reference in New Issue
Block a user