Skip to content

Commit

Permalink
Support additional login ids (#334)
Browse files Browse the repository at this point in the history
* Support additional login ids

* fix import users

* CR fixes

* remove redudnant print
  • Loading branch information
asafshen authored Nov 30, 2023
1 parent f30471c commit 1b9f9ae
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 25 deletions.
38 changes: 20 additions & 18 deletions descope/internal/mgmt/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ func (u *user) Create(loginID string, user *descope.UserRequest) (*descope.UserR
if user == nil {
user = &descope.UserRequest{}
}
return u.create(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, false, false, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, nil)
return u.create(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, false, false, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, user.AdditionalLoginIDs, nil)
}

func (u *user) CreateTestUser(loginID string, user *descope.UserRequest) (*descope.UserResponse, error) {
if user == nil {
user = &descope.UserRequest{}
}
return u.create(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, false, true, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, nil)
return u.create(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, false, true, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, user.AdditionalLoginIDs, nil)
}

func (u *user) CreateBatch(users []*descope.BatchUser) (*descope.UsersBatchResponse, error) {
Expand All @@ -37,7 +37,7 @@ func (u *user) Invite(loginID string, user *descope.UserRequest, options *descop
if user == nil {
user = &descope.UserRequest{}
}
return u.create(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, true, false, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, options)
return u.create(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, true, false, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, user.AdditionalLoginIDs, options)
}

func (u *user) InviteBatch(users []*descope.BatchUser, options *descope.InviteOptions) (*descope.UsersBatchResponse, error) {
Expand All @@ -47,11 +47,11 @@ func (u *user) InviteBatch(users []*descope.BatchUser, options *descope.InviteOp
return u.createBatch(users, options)
}

func (u *user) create(loginID, email, phone, displayName, picture string, roles []string, tenants []*descope.AssociatedTenant, invite, test bool, customAttributes map[string]any, verifiedEmail *bool, verifiedPhone *bool, options *descope.InviteOptions) (*descope.UserResponse, error) {
func (u *user) create(loginID, email, phone, displayName, picture string, roles []string, tenants []*descope.AssociatedTenant, invite, test bool, customAttributes map[string]any, verifiedEmail *bool, verifiedPhone *bool, additionalLoginIDs []string, options *descope.InviteOptions) (*descope.UserResponse, error) {
if loginID == "" {
return nil, utils.NewInvalidArgumentError("loginID")
}
req := makeCreateUserRequest(loginID, email, phone, displayName, picture, roles, tenants, invite, test, customAttributes, verifiedEmail, verifiedPhone, options)
req := makeCreateUserRequest(loginID, email, phone, displayName, picture, roles, tenants, invite, test, customAttributes, verifiedEmail, verifiedPhone, additionalLoginIDs, options)
res, err := u.client.DoPostRequest(api.Routes.ManagementUserCreate(), req, nil, u.conf.ManagementKey)
if err != nil {
return nil, err
Expand All @@ -75,7 +75,7 @@ func (u *user) Update(loginID string, user *descope.UserRequest) (*descope.UserR
if user == nil {
user = &descope.UserRequest{}
}
req := makeUpdateUserRequest(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone)
req := makeUpdateUserRequest(loginID, user.Email, user.Phone, user.Name, user.Picture, user.Roles, user.Tenants, user.CustomAttributes, user.VerifiedEmail, user.VerifiedPhone, user.AdditionalLoginIDs)
res, err := u.client.DoPostRequest(api.Routes.ManagementUserUpdate(), req, nil, u.conf.ManagementKey)
if err != nil {
return nil, err
Expand Down Expand Up @@ -455,9 +455,10 @@ func (u *user) GenerateEmbeddedLink(loginID string, customClaims map[string]any)
return tRes.Token, nil
}

func makeCreateUserRequest(loginID, email, phone, displayName, picture string, roles []string, tenants []*descope.AssociatedTenant, invite, test bool, customAttributes map[string]any, verifiedEmail *bool, verifiedPhone *bool, options *descope.InviteOptions) map[string]any {
req := makeUpdateUserRequest(loginID, email, phone, displayName, picture, roles, tenants, customAttributes, verifiedEmail, verifiedPhone)
func makeCreateUserRequest(loginID, email, phone, displayName, picture string, roles []string, tenants []*descope.AssociatedTenant, invite, test bool, customAttributes map[string]any, verifiedEmail *bool, verifiedPhone *bool, additionalLoginIDs []string, options *descope.InviteOptions) map[string]any {
req := makeUpdateUserRequest(loginID, email, phone, displayName, picture, roles, tenants, customAttributes, verifiedEmail, verifiedPhone, additionalLoginIDs)
req["invite"] = invite
req["additionalLoginIds"] = additionalLoginIDs
if test {
req["test"] = true
}
Expand All @@ -478,7 +479,7 @@ func makeCreateUserRequest(loginID, email, phone, displayName, picture string, r
func makeCreateUsersBatchRequest(users []*descope.BatchUser, options *descope.InviteOptions) map[string]any {
var usersReq []map[string]any
for _, u := range users {
user := makeUpdateUserRequest(u.LoginID, u.Email, u.Phone, u.Name, u.Picture, u.Roles, u.Tenants, u.CustomAttributes, u.VerifiedEmail, u.VerifiedPhone)
user := makeUpdateUserRequest(u.LoginID, u.Email, u.Phone, u.Name, u.Picture, u.Roles, u.Tenants, u.CustomAttributes, u.VerifiedEmail, u.VerifiedPhone, u.AdditionalLoginIDs)
if u.Password != nil {
if cleartext := u.Password.Cleartext; cleartext != "" {
user["password"] = u.Password.Cleartext
Expand Down Expand Up @@ -518,16 +519,17 @@ func makeCreateUsersBatchRequest(users []*descope.BatchUser, options *descope.In
return req
}

func makeUpdateUserRequest(loginID, email, phone, displayName, picture string, roles []string, tenants []*descope.AssociatedTenant, customAttributes map[string]any, verifiedEmail *bool, verifiedPhone *bool) map[string]any {
func makeUpdateUserRequest(loginID, email, phone, displayName, picture string, roles []string, tenants []*descope.AssociatedTenant, customAttributes map[string]any, verifiedEmail *bool, verifiedPhone *bool, additionalLoginIDs []string) map[string]any {
res := map[string]any{
"loginId": loginID,
"email": email,
"phone": phone,
"displayName": displayName,
"roleNames": roles,
"userTenants": makeAssociatedTenantList(tenants),
"customAttributes": customAttributes,
"picture": picture,
"loginId": loginID,
"email": email,
"phone": phone,
"displayName": displayName,
"roleNames": roles,
"userTenants": makeAssociatedTenantList(tenants),
"customAttributes": customAttributes,
"picture": picture,
"additionalLoginIds": additionalLoginIDs,
}
if verifiedEmail != nil {
res["verifiedEmail"] = *verifiedEmail
Expand Down
15 changes: 8 additions & 7 deletions descope/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,13 +273,14 @@ type User struct {
}

type UserRequest struct {
User `json:",inline"`
Roles []string `json:"roles,omitempty"`
Tenants []*AssociatedTenant `json:"tenants,omitempty"`
CustomAttributes map[string]any `json:"customAttributes,omitempty"`
Picture string `json:"picture,omitempty"`
VerifiedEmail *bool `json:"verifiedEmail,omitempty"`
VerifiedPhone *bool `json:"verifiedPhone,omitempty"`
User `json:",inline"`
Roles []string `json:"roles,omitempty"`
Tenants []*AssociatedTenant `json:"tenants,omitempty"`
CustomAttributes map[string]any `json:"customAttributes,omitempty"`
Picture string `json:"picture,omitempty"`
VerifiedEmail *bool `json:"verifiedEmail,omitempty"`
VerifiedPhone *bool `json:"verifiedPhone,omitempty"`
AdditionalLoginIDs []string `json:"additionalLoginIds,omitempty"`
}

type BatchUser struct {
Expand Down

0 comments on commit 1b9f9ae

Please sign in to comment.