diff --git a/descope/internal/mgmt/user.go b/descope/internal/mgmt/user.go index 954bfacb..dd5799c4 100644 --- a/descope/internal/mgmt/user.go +++ b/descope/internal/mgmt/user.go @@ -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) { @@ -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) { @@ -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 @@ -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 @@ -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 } @@ -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 @@ -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 diff --git a/descope/types.go b/descope/types.go index 37b9d5f2..894aa2e2 100644 --- a/descope/types.go +++ b/descope/types.go @@ -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 {