/
api.go
126 lines (114 loc) · 5.55 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package apiregister
import (
"encoding/json"
"strings"
"github.com/cloudtrust/common-service/validation"
"github.com/cloudtrust/keycloak-bridge/internal/constants"
kc "github.com/cloudtrust/keycloak-client"
)
// ActionRepresentation struct
type ActionRepresentation struct {
Name *string `json:"name"`
Scope *string `json:"scope"`
}
// UserRepresentation representation
type UserRepresentation struct {
Username *string `json:"username,omitempty"`
Gender *string `json:"gender,omitempty"`
FirstName *string `json:"firstName,omitempty"`
LastName *string `json:"lastName,omitempty"`
Email *string `json:"email,omitempty"`
PhoneNumber *string `json:"phoneNumber,omitempty"`
BirthDate *string `json:"birthDate,omitempty"`
BirthLocation *string `json:"birthLocation,omitempty"`
Nationality *string `json:"nationality,omitempty"`
IDDocumentType *string `json:"idDocumentType,omitempty"`
IDDocumentNumber *string `json:"idDocumentNumber,omitempty"`
IDDocumentExpiration *string `json:"idDocumentExpiration,omitempty"`
IDDocumentCountry *string `json:"idDocumentCountry,omitempty"`
Locale *string `json:"locale,omitempty"`
BusinessID *string `json:"businessId,omitempty"`
}
// ConfigurationRepresentation representation
type ConfigurationRepresentation struct {
RedirectCancelledRegistrationURL *string `json:"redirect_cancelled_registration_url,omitempty"`
Mode *string `json:"mode,omitempty"`
Theme *string `json:"theme,omitempty"`
SupportedLocales *[]string `json:"supportedLocales,omitempty"`
SelfRegisterEnabled *bool `json:"selfRegisterEnabled,omitempty"`
}
// Parameter references
const (
prmUserGender = "user_gender"
prmUserFirstName = "user_firstName"
prmUserLastName = "user_lastName"
prmUserEmail = "user_emailAddress"
prmUserPhoneNumber = "user_phoneNumber"
prmUserBirthDate = "user_birthDate"
prmUserBirthLocation = "user_birthLocation"
prmUserNationality = "user_nationality"
prmUserIDDocumentType = "user_idDocType"
prmUserIDDocumentNumber = "user_idDocNumber"
prmUserIDDocumentExpiration = "user_idDocExpiration"
prmUserIDDocumentCountry = "user_idDocCountry"
prmUserLocale = "user_locale"
prmUserBusinessID = "user_businessId"
)
// UserFromJSON creates a User using its json representation
func UserFromJSON(jsonRep string) (UserRepresentation, error) {
var user UserRepresentation
dec := json.NewDecoder(strings.NewReader(jsonRep))
dec.DisallowUnknownFields()
err := dec.Decode(&user)
return user, err
}
// UserToJSON returns a json representation of a given User
func (u *UserRepresentation) UserToJSON() string {
var bytes, _ = json.Marshal(u)
return string(bytes)
}
// ConvertToKeycloak converts a given User to a Keycloak UserRepresentation
func (u *UserRepresentation) ConvertToKeycloak() kc.UserRepresentation {
var (
bTrue = true
bFalse = false
attributes = make(kc.Attributes)
)
attributes.SetStringWhenNotNil(constants.AttrbGender, u.Gender)
if u.PhoneNumber != nil {
attributes.SetString(constants.AttrbPhoneNumber, *u.PhoneNumber)
attributes.SetBool(constants.AttrbPhoneNumberVerified, false)
}
attributes.SetDateWhenNotNil(constants.AttrbBirthDate, u.BirthDate, constants.SupportedDateLayouts)
attributes.SetStringWhenNotNil(constants.AttrbLocale, u.Locale)
attributes.SetStringWhenNotNil(constants.AttrbBusinessID, u.BusinessID)
return kc.UserRepresentation{
Username: u.Username,
Email: u.Email,
EmailVerified: &bFalse,
Enabled: &bTrue,
FirstName: u.FirstName,
LastName: u.LastName,
Attributes: &attributes,
}
}
// Validate checks the validity of the given User
func (u *UserRepresentation) Validate(allFieldsMandatory bool) error {
return validation.NewParameterValidator().
ValidateParameterRegExp(prmUserGender, u.Gender, constants.RegExpGender, allFieldsMandatory).
ValidateParameterRegExp(prmUserFirstName, u.FirstName, constants.RegExpFirstName, true).
ValidateParameterRegExp(prmUserLastName, u.LastName, constants.RegExpLastName, true).
ValidateParameterRegExp(prmUserEmail, u.Email, constants.RegExpEmail, true).
ValidateParameterPhoneNumber(prmUserPhoneNumber, u.PhoneNumber, allFieldsMandatory).
ValidateParameterDateMultipleLayout(prmUserBirthDate, u.BirthDate, constants.SupportedDateLayouts, allFieldsMandatory).
ValidateParameterRegExp(prmUserBirthLocation, u.BirthLocation, constants.RegExpBirthLocation, allFieldsMandatory).
ValidateParameterRegExp(prmUserNationality, u.Nationality, constants.RegExpCountryCode, allFieldsMandatory).
ValidateParameterIn(prmUserIDDocumentType, u.IDDocumentType, constants.AllowedDocumentTypes, allFieldsMandatory).
ValidateParameterRegExp(prmUserIDDocumentNumber, u.IDDocumentNumber, constants.RegExpIDDocumentNumber, allFieldsMandatory).
ValidateParameterLength(prmUserIDDocumentNumber, u.IDDocumentNumber, 1, 50, allFieldsMandatory).
ValidateParameterDateMultipleLayout(prmUserIDDocumentExpiration, u.IDDocumentExpiration, constants.SupportedDateLayouts, allFieldsMandatory).
ValidateParameterRegExp(prmUserIDDocumentCountry, u.IDDocumentCountry, constants.RegExpCountryCode, allFieldsMandatory).
ValidateParameterRegExp(prmUserLocale, u.Locale, constants.RegExpLocale, true).
ValidateParameterRegExp(prmUserBusinessID, u.BusinessID, constants.RegExpBusinessID, false).
Status()
}