fix: language.Tag marshalling (#1110)

* fix(searchlimit): increase to 1000

* rafactor: remove unused return

* fix(user): marshalling of language tag

* fix(spooler): shuffle handlers on start

* fix(sql): reduce max open conns from 200 to 25 per pod

* chore(deps): google.golang.org/grpc and github.com/lib/pq

* chore(deps): update github.com/cockroachdb/cockroach-go/v2
This commit is contained in:
Silvan
2020-12-17 08:55:11 +01:00
committed by GitHub
parent 055cdf98ed
commit 584bcda108
14 changed files with 120 additions and 56 deletions

View File

@@ -16,8 +16,6 @@ type Email struct {
EmailAddress string `json:"email,omitempty"`
IsEmailVerified bool `json:"-"`
isEmailUnique bool `json:"-"`
}
type EmailCode struct {

View File

@@ -1,6 +1,8 @@
package model
import (
"encoding/json"
"golang.org/x/text/language"
es_models "github.com/caos/zitadel/internal/eventstore/models"
@@ -10,14 +12,12 @@ import (
type Profile struct {
es_models.ObjectRoot
FirstName string `json:"firstName,omitempty"`
LastName string `json:"lastName,omitempty"`
NickName string `json:"nickName,omitempty"`
DisplayName string `json:"displayName,omitempty"`
PreferredLanguage language.Tag `json:"preferredLanguage,omitempty"`
Gender int32 `json:"gender,omitempty"`
isUserNameUnique bool
FirstName string `json:"firstName,omitempty"`
LastName string `json:"lastName,omitempty"`
NickName string `json:"nickName,omitempty"`
DisplayName string `json:"displayName,omitempty"`
PreferredLanguage LanguageTag `json:"preferredLanguage,omitempty"`
Gender int32 `json:"gender,omitempty"`
}
func (p *Profile) Changes(changed *Profile) map[string]interface{} {
@@ -34,7 +34,7 @@ func (p *Profile) Changes(changed *Profile) map[string]interface{} {
if changed.DisplayName != "" && p.DisplayName != changed.DisplayName {
changes["displayName"] = changed.DisplayName
}
if changed.PreferredLanguage != language.Und && changed.PreferredLanguage != p.PreferredLanguage {
if language.Tag(changed.PreferredLanguage) != language.Und && changed.PreferredLanguage != p.PreferredLanguage {
changes["preferredLanguage"] = changed.PreferredLanguage
}
if changed.Gender != p.Gender {
@@ -50,7 +50,7 @@ func ProfileFromModel(profile *model.Profile) *Profile {
LastName: profile.LastName,
NickName: profile.NickName,
DisplayName: profile.DisplayName,
PreferredLanguage: profile.PreferredLanguage,
PreferredLanguage: LanguageTag(profile.PreferredLanguage),
Gender: int32(profile.Gender),
}
}
@@ -62,7 +62,37 @@ func ProfileToModel(profile *Profile) *model.Profile {
LastName: profile.LastName,
NickName: profile.NickName,
DisplayName: profile.DisplayName,
PreferredLanguage: profile.PreferredLanguage,
PreferredLanguage: language.Tag(profile.PreferredLanguage),
Gender: model.Gender(profile.Gender),
}
}
type LanguageTag language.Tag
func (t *LanguageTag) UnmarshalJSON(data []byte) error {
var tag string
err := json.Unmarshal(data, &tag)
if err != nil {
return err
}
*t = LanguageTag(language.Make(tag))
return nil
}
func (t LanguageTag) MarshalJSON() ([]byte, error) {
return json.Marshal(language.Tag(t))
}
func (t *LanguageTag) MarshalBinary() ([]byte, error) {
if t == nil {
return nil, nil
}
return []byte(language.Tag(*t).String()), nil
}
// UnmarshalBinary modifies the receiver so it must take a pointer receiver.
func (t *LanguageTag) UnmarshalBinary(data []byte) error {
*t = LanguageTag(language.Make(string(data)))
return nil
}

View File

@@ -23,8 +23,8 @@ func TestProfileChanges(t *testing.T) {
{
name: "all attributes changed",
args: args{
existingProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: language.German, Gender: int32(user_model.GenderFemale)},
newProfile: &Profile{FirstName: "FirstNameChanged", LastName: "LastNameChanged", NickName: "NickNameChanged", DisplayName: "DisplayNameChanged", PreferredLanguage: language.English, Gender: int32(user_model.GenderMale)},
existingProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: LanguageTag(language.German), Gender: int32(user_model.GenderFemale)},
newProfile: &Profile{FirstName: "FirstNameChanged", LastName: "LastNameChanged", NickName: "NickNameChanged", DisplayName: "DisplayNameChanged", PreferredLanguage: LanguageTag(language.English), Gender: int32(user_model.GenderMale)},
},
res: res{
changesLen: 6,
@@ -33,8 +33,8 @@ func TestProfileChanges(t *testing.T) {
{
name: "no changes",
args: args{
existingProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: language.German, Gender: int32(user_model.GenderFemale)},
newProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: language.German, Gender: int32(user_model.GenderFemale)},
existingProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: LanguageTag(language.German), Gender: int32(user_model.GenderFemale)},
newProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: LanguageTag(language.German), Gender: int32(user_model.GenderFemale)},
},
res: res{
changesLen: 0,
@@ -43,8 +43,8 @@ func TestProfileChanges(t *testing.T) {
{
name: "empty names",
args: args{
existingProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: language.German, Gender: int32(user_model.GenderFemale)},
newProfile: &Profile{FirstName: "", LastName: "", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: language.German, Gender: int32(user_model.GenderFemale)},
existingProfile: &Profile{FirstName: "FirstName", LastName: "LastName", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: LanguageTag(language.German), Gender: int32(user_model.GenderFemale)},
newProfile: &Profile{FirstName: "", LastName: "", NickName: "NickName", DisplayName: "DisplayName", PreferredLanguage: LanguageTag(language.German), Gender: int32(user_model.GenderFemale)},
},
res: res{
changesLen: 0,

View File

@@ -99,18 +99,18 @@ func (u *User) AppendEvent(event *es_models.Event) error {
}
if u.Human != nil {
u.Human.User = u
u.Human.user = u
return u.Human.AppendEvent(event)
} else if u.Machine != nil {
u.Machine.User = u
u.Machine.user = u
return u.Machine.AppendEvent(event)
}
if strings.HasPrefix(string(event.Type), "user.human") || event.AggregateVersion == "v1" {
u.Human = &Human{User: u}
u.Human = &Human{user: u}
return u.Human.AppendEvent(event)
}
if strings.HasPrefix(string(event.Type), "user.machine") {
u.Machine = &Machine{User: u}
u.Machine = &Machine{user: u}
return u.Machine.AppendEvent(event)
}

View File

@@ -12,7 +12,7 @@ import (
)
type Human struct {
*User `json:"-"`
user *User `json:"-"`
*Password
*Profile
@@ -231,27 +231,27 @@ func (h *Human) AppendEvent(event *es_models.Event) (err error) {
}
func (h *Human) ComputeObject() {
if h.State == int32(model.UserStateUnspecified) || h.State == int32(model.UserStateInitial) {
if h.user.State == int32(model.UserStateUnspecified) || h.user.State == int32(model.UserStateInitial) {
if h.Email != nil && h.IsEmailVerified {
h.State = int32(model.UserStateActive)
h.user.State = int32(model.UserStateActive)
} else {
h.State = int32(model.UserStateInitial)
h.user.State = int32(model.UserStateInitial)
}
}
if h.Password != nil && h.Password.ObjectRoot.IsZero() {
h.Password.ObjectRoot = h.User.ObjectRoot
h.Password.ObjectRoot = h.user.ObjectRoot
}
if h.Profile != nil && h.Profile.ObjectRoot.IsZero() {
h.Profile.ObjectRoot = h.User.ObjectRoot
h.Profile.ObjectRoot = h.user.ObjectRoot
}
if h.Email != nil && h.Email.ObjectRoot.IsZero() {
h.Email.ObjectRoot = h.User.ObjectRoot
h.Email.ObjectRoot = h.user.ObjectRoot
}
if h.Phone != nil && h.Phone.ObjectRoot.IsZero() {
h.Phone.ObjectRoot = h.User.ObjectRoot
h.Phone.ObjectRoot = h.user.ObjectRoot
}
if h.Address != nil && h.Address.ObjectRoot.IsZero() {
h.Address.ObjectRoot = h.User.ObjectRoot
h.Address.ObjectRoot = h.user.ObjectRoot
}
}

View File

@@ -13,7 +13,7 @@ import (
)
type Machine struct {
*User `json:"-"`
user *User `json:"-"`
Name string `json:"name,omitempty"`
Description string `json:"description,omitempty"`