Skip to content

Commit

Permalink
Add support for phoneNumberVerified attribute
Browse files Browse the repository at this point in the history
added phoneNumberVerified attribute + refactoring mobilephone to phoneNumber
  • Loading branch information
bsoniam committed Apr 29, 2019
1 parent b87896b commit acb6da2
Show file tree
Hide file tree
Showing 4 changed files with 178 additions and 181 deletions.
113 changes: 100 additions & 13 deletions api/management/api.go
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
package management_api

import (
"strconv"

kc "github.com/cloudtrust/keycloak-client"
)

type UserRepresentation struct {
Id *string `json:"id,omitempty"`
Username *string `json:"username,omitempty"`
Email *string `json:"email,omitempty"`
Enabled *bool `json:"enabled,omitempty"`
EmailVerified *bool `json:"emailVerified,omitempty"`
FirstName *string `json:"firstName,omitempty"`
LastName *string `json:"lastName,omitempty"`
MobilePhone *string `json:"mobilePhone,omitempty"`
Label *string `json:"label,omitempty"`
Gender *string `json:"gender,omitempty"`
BirthDate *string `json:"birthDate,omitempty"`
Groups *[]string `json:"group,omitempty"`
CreatedTimestamp *int64 `json:"createdTimestamp,omitempty"`
Id *string `json:"id,omitempty"`
Username *string `json:"username,omitempty"`
Email *string `json:"email,omitempty"`
Enabled *bool `json:"enabled,omitempty"`
EmailVerified *bool `json:"emailVerified,omitempty"`
PhoneNumberVerified *bool `json:"phoneNumberVerified,omitempty"`
FirstName *string `json:"firstName,omitempty"`
LastName *string `json:"lastName,omitempty"`
PhoneNumber *string `json:"phoneNumber,omitempty"`
Label *string `json:"label,omitempty"`
Gender *string `json:"gender,omitempty"`
BirthDate *string `json:"birthDate,omitempty"`
Groups *[]string `json:"group,omitempty"`
CreatedTimestamp *int64 `json:"createdTimestamp,omitempty"`
}

type RealmRepresentation struct {
Expand Down Expand Up @@ -83,3 +86,87 @@ func ConvertCredential(credKc *kc.CredentialRepresentation) CredentialRepresenta
}
return cred
}

// ConvertToAPIUser creates an API user representation from a KC user representation
func ConvertToAPIUser(userKc kc.UserRepresentation) UserRepresentation {
var userRep UserRepresentation

userRep.Id = userKc.Id
userRep.Username = userKc.Username
userRep.Email = userKc.Email
userRep.Enabled = userKc.Enabled
userRep.EmailVerified = userKc.EmailVerified
userRep.FirstName = userKc.FirstName
userRep.LastName = userKc.LastName
userRep.CreatedTimestamp = userKc.CreatedTimestamp

if userKc.Attributes != nil {
var m = *userKc.Attributes

if m["phoneNumber"] != nil {
var phoneNumber = m["phoneNumber"][0]
userRep.PhoneNumber = &phoneNumber
}

if m["label"] != nil {
var label = m["label"][0]
userRep.Label = &label
}

if m["gender"] != nil {
var gender = m["gender"][0]
userRep.Gender = &gender
}

if m["birthDate"] != nil {
var birthDate = m["birthDate"][0]
userRep.BirthDate = &birthDate
}

if m["phoneNumberVerified"] != nil {
var phoneNumberVerified, _ = strconv.ParseBool(m["phoneNumberVerified"][0])
userRep.PhoneNumberVerified = &phoneNumberVerified
}
}
return userRep
}

// ConvertToKCUser creates a KC user representation from an API user
func ConvertToKCUser(user UserRepresentation) kc.UserRepresentation {
var userRep kc.UserRepresentation

userRep.Username = user.Username
userRep.Email = user.Email
userRep.Enabled = user.Enabled
userRep.EmailVerified = user.EmailVerified
userRep.FirstName = user.FirstName
userRep.LastName = user.LastName

var attributes = make(map[string][]string)

if user.PhoneNumber != nil {
attributes["phoneNumber"] = []string{*user.PhoneNumber}
}

if user.Label != nil {
attributes["label"] = []string{*user.Label}
}

if user.Gender != nil {
attributes["gender"] = []string{*user.Gender}
}

if user.BirthDate != nil {
attributes["birthDate"] = []string{*user.BirthDate}
}

if user.PhoneNumberVerified != nil {
attributes["phoneNumberVerified"] = []string{strconv.FormatBool(*user.PhoneNumberVerified)}
}

if len(attributes) > 0 {
userRep.Attributes = &attributes
}

return userRep
}
17 changes: 11 additions & 6 deletions api/management/swagger-api_management.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -704,19 +704,28 @@ components:
default: true
emailVerified:
type: boolean
default: true
default: false
firstName:
type: string
lastName:
type: string
mobilePhone:
phoneNumber:
type: string
phoneNumberVerified:
type: boolean
default: false
label:
type: string
gender:
type: string
birthDate:
type: string
groups:
type: array
items:
type: string
createdTimestamp:
type: integer
UserStatus:
type: object
properties:
Expand All @@ -738,10 +747,6 @@ components:
enabled:
type: boolean
default: true
lastName:
type: string
mobilePhone:
type: string
Role:
type: object
properties:
Expand Down
123 changes: 4 additions & 119 deletions pkg/management/component.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,34 +207,8 @@ func (c *component) CreateUser(ctx context.Context, realmName string, user api.U
var accessToken = ctx.Value("access_token").(string)

var userRep kc.UserRepresentation
userRep.Username = user.Username
userRep.Email = user.Email
userRep.Enabled = user.Enabled
userRep.EmailVerified = user.EmailVerified
userRep.FirstName = user.FirstName
userRep.LastName = user.LastName

var attributes = make(map[string][]string)

if user.MobilePhone != nil {
attributes["mobilephone"] = []string{*user.MobilePhone}
}

if user.Label != nil {
attributes["label"] = []string{*user.Label}
}

if user.Gender != nil {
attributes["gender"] = []string{*user.Gender}
}

if user.BirthDate != nil {
attributes["birthDate"] = []string{*user.BirthDate}
}

if len(attributes) > 0 {
userRep.Attributes = &attributes
}
userRep = api.ConvertToKCUser(user)

locationURL, err := c.keycloakClient.CreateUser(accessToken, realmName, userRep)

Expand Down Expand Up @@ -292,38 +266,7 @@ func (c *component) GetUser(ctx context.Context, realmName, userID string) (api.
return userRep, err
}

userRep.Id = userKc.Id
userRep.Username = userKc.Username
userRep.Email = userKc.Email
userRep.Enabled = userKc.Enabled
userRep.EmailVerified = userKc.EmailVerified
userRep.FirstName = userKc.FirstName
userRep.LastName = userKc.LastName
userRep.CreatedTimestamp = userKc.CreatedTimestamp

if userKc.Attributes != nil {
var m = *userKc.Attributes

if m["mobilephone"] != nil {
var mobilePhone = m["mobilephone"][0]
userRep.MobilePhone = &mobilePhone
}

if m["label"] != nil {
var label = m["label"][0]
userRep.Label = &label
}

if m["gender"] != nil {
var gender = m["gender"][0]
userRep.Gender = &gender
}

if m["birthDate"] != nil {
var birthDate = m["birthDate"][0]
userRep.BirthDate = &birthDate
}
}
userRep = api.ConvertToAPIUser(userKc)

//store the API call into the DB
event := createEventMap("GET_DETAILS")
Expand All @@ -346,34 +289,7 @@ func (c *component) UpdateUser(ctx context.Context, realmName, userID string, us
var accessToken = ctx.Value("access_token").(string)

var userRep kc.UserRepresentation
userRep.Username = user.Username
userRep.Email = user.Email
userRep.Enabled = user.Enabled
userRep.EmailVerified = user.EmailVerified
userRep.FirstName = user.FirstName
userRep.LastName = user.LastName

var attributes = make(map[string][]string)

if user.MobilePhone != nil {
attributes["mobilephone"] = []string{*user.MobilePhone}
}

if user.Label != nil {
attributes["label"] = []string{*user.Label}
}

if user.Gender != nil {
attributes["gender"] = []string{*user.Gender}
}

if user.BirthDate != nil {
attributes["birthDate"] = []string{*user.BirthDate}
}

if len(attributes) > 0 {
userRep.Attributes = &attributes
}
userRep = api.ConvertToKCUser(user)

err := c.keycloakClient.UpdateUser(accessToken, realmName, userID, userRep)

Expand Down Expand Up @@ -421,38 +337,7 @@ func (c *component) GetUsers(ctx context.Context, realmName string, groupID stri
var usersRep []api.UserRepresentation
for _, userKc := range usersKc {
var userRep api.UserRepresentation
userRep.Id = userKc.Id
userRep.Username = userKc.Username
userRep.Email = userKc.Email
userRep.Enabled = userKc.Enabled
userRep.EmailVerified = userKc.EmailVerified
userRep.FirstName = userKc.FirstName
userRep.LastName = userKc.LastName
userRep.CreatedTimestamp = userKc.CreatedTimestamp

if userKc.Attributes != nil {
var m = *userKc.Attributes

if m["mobilephone"] != nil {
var mobilePhone = m["mobilephone"][0]
userRep.MobilePhone = &mobilePhone
}

if m["label"] != nil {
var label = m["label"][0]
userRep.Label = &label
}

if m["gender"] != nil {
var gender = m["gender"][0]
userRep.Gender = &gender
}

if m["birthDate"] != nil {
var birthDate = m["birthDate"][0]
userRep.BirthDate = &birthDate
}
}
userRep = api.ConvertToAPIUser(userKc)

usersRep = append(usersRep, userRep)
}
Expand Down
Loading

0 comments on commit acb6da2

Please sign in to comment.