mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 04:57:33 +00:00
fix: use domain models for v2 eventstore (#1151)
* fix: use domain models for v2 eventstore * fix: user domain model * Update internal/api/grpc/admin/login_policy_converter.go Co-authored-by: Livio Amstutz <livio.a@gmail.com> * fix: converter Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package management
|
||||
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/v2/command"
|
||||
"github.com/caos/zitadel/internal/v2/query"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/caos/zitadel/internal/api/authz"
|
||||
@@ -18,6 +20,8 @@ const (
|
||||
var _ management.ManagementServiceServer = (*Server)(nil)
|
||||
|
||||
type Server struct {
|
||||
command *command.CommandSide
|
||||
query *query.QuerySide
|
||||
project repository.ProjectRepository
|
||||
org repository.OrgRepository
|
||||
user repository.UserRepository
|
||||
@@ -31,8 +35,10 @@ type Config struct {
|
||||
Repository eventsourcing.Config
|
||||
}
|
||||
|
||||
func CreateServer(repo repository.Repository, sd systemdefaults.SystemDefaults) *Server {
|
||||
func CreateServer(command *command.CommandSide, query *query.QuerySide, repo repository.Repository, sd systemdefaults.SystemDefaults) *Server {
|
||||
return &Server{
|
||||
command: command,
|
||||
query: query,
|
||||
project: repo,
|
||||
org: repo,
|
||||
user: repo,
|
||||
|
@@ -52,11 +52,11 @@ func (s *Server) IsUserUnique(ctx context.Context, request *management.UniqueUse
|
||||
}
|
||||
|
||||
func (s *Server) CreateUser(ctx context.Context, in *management.CreateUserRequest) (*management.UserResponse, error) {
|
||||
user, err := s.user.CreateUser(ctx, userCreateToModel(in))
|
||||
user, err := s.command.AddUser(ctx, userCreateToDomain(in))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return userFromModel(user), nil
|
||||
return userFromDomain(user), nil
|
||||
}
|
||||
|
||||
func (s *Server) DeactivateUser(ctx context.Context, in *management.UserID) (*management.UserResponse, error) {
|
||||
|
@@ -4,6 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/caos/logging"
|
||||
"github.com/caos/zitadel/internal/v2/domain"
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
"golang.org/x/text/language"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
@@ -16,6 +17,32 @@ import (
|
||||
"github.com/caos/zitadel/pkg/grpc/message"
|
||||
)
|
||||
|
||||
func userFromDomain(user *domain.User) *management.UserResponse {
|
||||
creationDate, err := ptypes.TimestampProto(user.CreationDate)
|
||||
logging.Log("GRPC-8duwe").OnError(err).Debug("unable to parse timestamp")
|
||||
|
||||
changeDate, err := ptypes.TimestampProto(user.ChangeDate)
|
||||
logging.Log("GRPC-ckoe3d").OnError(err).Debug("unable to parse timestamp")
|
||||
|
||||
userResp := &management.UserResponse{
|
||||
Id: user.AggregateID,
|
||||
State: userStateFromDomain(user.State),
|
||||
CreationDate: creationDate,
|
||||
ChangeDate: changeDate,
|
||||
Sequence: user.Sequence,
|
||||
UserName: user.UserName,
|
||||
}
|
||||
|
||||
if user.Machine != nil {
|
||||
userResp.User = &management.UserResponse_Machine{Machine: machineFromDomain(user.Machine)}
|
||||
}
|
||||
if user.Human != nil {
|
||||
userResp.User = &management.UserResponse_Human{Human: humanFromDomain(user.Human)}
|
||||
}
|
||||
|
||||
return userResp
|
||||
}
|
||||
|
||||
func userFromModel(user *usr_model.User) *management.UserResponse {
|
||||
creationDate, err := ptypes.TimestampProto(user.CreationDate)
|
||||
logging.Log("GRPC-8duwe").OnError(err).Debug("unable to parse timestamp")
|
||||
@@ -25,7 +52,7 @@ func userFromModel(user *usr_model.User) *management.UserResponse {
|
||||
|
||||
userResp := &management.UserResponse{
|
||||
Id: user.AggregateID,
|
||||
State: userStateFromModel(user.State),
|
||||
State: management.UserState(user.State),
|
||||
CreationDate: creationDate,
|
||||
ChangeDate: changeDate,
|
||||
Sequence: user.Sequence,
|
||||
@@ -42,18 +69,18 @@ func userFromModel(user *usr_model.User) *management.UserResponse {
|
||||
return userResp
|
||||
}
|
||||
|
||||
func userCreateToModel(user *management.CreateUserRequest) *usr_model.User {
|
||||
var human *usr_model.Human
|
||||
var machine *usr_model.Machine
|
||||
func userCreateToDomain(user *management.CreateUserRequest) *domain.User {
|
||||
var human *domain.Human
|
||||
var machine *domain.Machine
|
||||
|
||||
if h := user.GetHuman(); h != nil {
|
||||
human = humanCreateToModel(h)
|
||||
human = humanCreateToDomain(h)
|
||||
}
|
||||
if m := user.GetMachine(); m != nil {
|
||||
machine = machineCreateToModel(m)
|
||||
machine = machineCreateToDomain(m)
|
||||
}
|
||||
|
||||
return &usr_model.User{
|
||||
return &domain.User{
|
||||
UserName: user.UserName,
|
||||
Human: human,
|
||||
Machine: machine,
|
||||
@@ -222,7 +249,7 @@ func profileFromModel(profile *usr_model.Profile) *management.UserProfile {
|
||||
DisplayName: profile.DisplayName,
|
||||
NickName: profile.NickName,
|
||||
PreferredLanguage: profile.PreferredLanguage.String(),
|
||||
Gender: genderFromModel(profile.Gender),
|
||||
Gender: management.Gender(profile.Gender),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,7 +270,7 @@ func profileViewFromModel(profile *usr_model.Profile) *management.UserProfileVie
|
||||
DisplayName: profile.DisplayName,
|
||||
NickName: profile.NickName,
|
||||
PreferredLanguage: profile.PreferredLanguage.String(),
|
||||
Gender: genderFromModel(profile.Gender),
|
||||
Gender: management.Gender(profile.Gender),
|
||||
LoginNames: profile.LoginNames,
|
||||
PreferredLoginName: profile.PreferredLoginName,
|
||||
}
|
||||
@@ -259,7 +286,7 @@ func updateProfileToModel(u *management.UpdateUserProfileRequest) *usr_model.Pro
|
||||
LastName: u.LastName,
|
||||
NickName: u.NickName,
|
||||
PreferredLanguage: preferredLanguage,
|
||||
Gender: genderToModel(u.Gender),
|
||||
Gender: usr_model.Gender(u.Gender),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,7 +457,7 @@ func userViewFromModel(user *usr_model.UserView) *management.UserView {
|
||||
|
||||
userView := &management.UserView{
|
||||
Id: user.ID,
|
||||
State: userStateFromModel(user.State),
|
||||
State: management.UserState(user.State),
|
||||
CreationDate: creationDate,
|
||||
ChangeDate: changeDate,
|
||||
LastLogin: lastLogin,
|
||||
@@ -520,30 +547,30 @@ func notifyTypeToModel(state management.NotificationType) usr_model.Notification
|
||||
}
|
||||
}
|
||||
|
||||
func userStateFromModel(state usr_model.UserState) management.UserState {
|
||||
func userStateFromDomain(state domain.UserState) management.UserState {
|
||||
switch state {
|
||||
case usr_model.UserStateActive:
|
||||
case domain.UserStateActive:
|
||||
return management.UserState_USERSTATE_ACTIVE
|
||||
case usr_model.UserStateInactive:
|
||||
case domain.UserStateInactive:
|
||||
return management.UserState_USERSTATE_INACTIVE
|
||||
case usr_model.UserStateLocked:
|
||||
case domain.UserStateLocked:
|
||||
return management.UserState_USERSTATE_LOCKED
|
||||
case usr_model.UserStateInitial:
|
||||
case domain.UserStateInitial:
|
||||
return management.UserState_USERSTATE_INITIAL
|
||||
case usr_model.UserStateSuspend:
|
||||
case domain.UserStateSuspend:
|
||||
return management.UserState_USERSTATE_SUSPEND
|
||||
default:
|
||||
return management.UserState_USERSTATE_UNSPECIFIED
|
||||
}
|
||||
}
|
||||
|
||||
func genderFromModel(gender usr_model.Gender) management.Gender {
|
||||
func genderFromDomain(gender domain.Gender) management.Gender {
|
||||
switch gender {
|
||||
case usr_model.GenderFemale:
|
||||
case domain.GenderFemale:
|
||||
return management.Gender_GENDER_FEMALE
|
||||
case usr_model.GenderMale:
|
||||
case domain.GenderMale:
|
||||
return management.Gender_GENDER_MALE
|
||||
case usr_model.GenderDiverse:
|
||||
case domain.GenderDiverse:
|
||||
return management.Gender_GENDER_DIVERSE
|
||||
default:
|
||||
return management.Gender_GENDER_UNSPECIFIED
|
||||
@@ -562,16 +589,17 @@ func memberTypeFromModel(memberType usr_model.MemberType) management.MemberType
|
||||
return management.MemberType_MEMBERTYPE_UNSPECIFIED
|
||||
}
|
||||
}
|
||||
func genderToModel(gender management.Gender) usr_model.Gender {
|
||||
|
||||
func genderToDomain(gender management.Gender) domain.Gender {
|
||||
switch gender {
|
||||
case management.Gender_GENDER_FEMALE:
|
||||
return usr_model.GenderFemale
|
||||
return domain.GenderFemale
|
||||
case management.Gender_GENDER_MALE:
|
||||
return usr_model.GenderMale
|
||||
return domain.GenderMale
|
||||
case management.Gender_GENDER_DIVERSE:
|
||||
return usr_model.GenderDiverse
|
||||
return domain.GenderDiverse
|
||||
default:
|
||||
return usr_model.GenderUnspecified
|
||||
return domain.GenderUnspecified
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -3,11 +3,40 @@ package management
|
||||
import (
|
||||
"github.com/caos/logging"
|
||||
usr_model "github.com/caos/zitadel/internal/user/model"
|
||||
"github.com/caos/zitadel/internal/v2/domain"
|
||||
"github.com/caos/zitadel/pkg/grpc/management"
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
|
||||
func humanFromDomain(user *domain.Human) *management.HumanResponse {
|
||||
human := &management.HumanResponse{
|
||||
FirstName: user.FirstName,
|
||||
LastName: user.LastName,
|
||||
DisplayName: user.DisplayName,
|
||||
NickName: user.NickName,
|
||||
PreferredLanguage: user.PreferredLanguage.String(),
|
||||
Gender: genderFromDomain(user.Gender),
|
||||
}
|
||||
|
||||
if user.Email != nil {
|
||||
human.Email = user.EmailAddress
|
||||
human.IsEmailVerified = user.IsEmailVerified
|
||||
}
|
||||
if user.Phone != nil {
|
||||
human.Phone = user.PhoneNumber
|
||||
human.IsPhoneVerified = user.IsPhoneVerified
|
||||
}
|
||||
if user.Address != nil {
|
||||
human.Country = user.Country
|
||||
human.Locality = user.Locality
|
||||
human.PostalCode = user.PostalCode
|
||||
human.Region = user.Region
|
||||
human.StreetAddress = user.StreetAddress
|
||||
}
|
||||
return human
|
||||
}
|
||||
|
||||
func humanFromModel(user *usr_model.Human) *management.HumanResponse {
|
||||
human := &management.HumanResponse{
|
||||
FirstName: user.FirstName,
|
||||
@@ -15,7 +44,8 @@ func humanFromModel(user *usr_model.Human) *management.HumanResponse {
|
||||
DisplayName: user.DisplayName,
|
||||
NickName: user.NickName,
|
||||
PreferredLanguage: user.PreferredLanguage.String(),
|
||||
Gender: genderFromModel(user.Gender),
|
||||
//TODO: User Converter
|
||||
Gender: management.Gender(user.Gender),
|
||||
}
|
||||
|
||||
if user.Email != nil {
|
||||
@@ -46,37 +76,38 @@ func humanViewFromModel(user *usr_model.HumanView) *management.HumanView {
|
||||
DisplayName: user.DisplayName,
|
||||
NickName: user.NickName,
|
||||
PreferredLanguage: user.PreferredLanguage,
|
||||
Gender: genderFromModel(user.Gender),
|
||||
Email: user.Email,
|
||||
IsEmailVerified: user.IsEmailVerified,
|
||||
Phone: user.Phone,
|
||||
IsPhoneVerified: user.IsPhoneVerified,
|
||||
Country: user.Country,
|
||||
Locality: user.Locality,
|
||||
PostalCode: user.PostalCode,
|
||||
Region: user.Region,
|
||||
StreetAddress: user.StreetAddress,
|
||||
PasswordChanged: passwordChanged,
|
||||
//TODO: User converter
|
||||
Gender: management.Gender(user.Gender),
|
||||
Email: user.Email,
|
||||
IsEmailVerified: user.IsEmailVerified,
|
||||
Phone: user.Phone,
|
||||
IsPhoneVerified: user.IsPhoneVerified,
|
||||
Country: user.Country,
|
||||
Locality: user.Locality,
|
||||
PostalCode: user.PostalCode,
|
||||
Region: user.Region,
|
||||
StreetAddress: user.StreetAddress,
|
||||
PasswordChanged: passwordChanged,
|
||||
}
|
||||
}
|
||||
|
||||
func humanCreateToModel(u *management.CreateHumanRequest) *usr_model.Human {
|
||||
func humanCreateToDomain(u *management.CreateHumanRequest) *domain.Human {
|
||||
preferredLanguage, err := language.Parse(u.PreferredLanguage)
|
||||
logging.Log("GRPC-cK5k2").OnError(err).Debug("language malformed")
|
||||
|
||||
human := &usr_model.Human{
|
||||
Profile: &usr_model.Profile{
|
||||
human := &domain.Human{
|
||||
Profile: &domain.Profile{
|
||||
FirstName: u.FirstName,
|
||||
LastName: u.LastName,
|
||||
NickName: u.NickName,
|
||||
PreferredLanguage: preferredLanguage,
|
||||
Gender: genderToModel(u.Gender),
|
||||
Gender: genderToDomain(u.Gender),
|
||||
},
|
||||
Email: &usr_model.Email{
|
||||
Email: &domain.Email{
|
||||
EmailAddress: u.Email,
|
||||
IsEmailVerified: u.IsEmailVerified,
|
||||
},
|
||||
Address: &usr_model.Address{
|
||||
Address: &domain.Address{
|
||||
Country: u.Country,
|
||||
Locality: u.Locality,
|
||||
PostalCode: u.PostalCode,
|
||||
@@ -85,10 +116,10 @@ func humanCreateToModel(u *management.CreateHumanRequest) *usr_model.Human {
|
||||
},
|
||||
}
|
||||
if u.Password != "" {
|
||||
human.Password = &usr_model.Password{SecretString: u.Password}
|
||||
human.Password = &domain.Password{SecretString: u.Password}
|
||||
}
|
||||
if u.Phone != "" {
|
||||
human.Phone = &usr_model.Phone{PhoneNumber: u.Phone, IsPhoneVerified: u.IsPhoneVerified}
|
||||
human.Phone = &domain.Phone{PhoneNumber: u.Phone, IsPhoneVerified: u.IsPhoneVerified}
|
||||
}
|
||||
return human
|
||||
}
|
||||
|
@@ -2,6 +2,7 @@ package management
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/caos/zitadel/internal/v2/domain"
|
||||
"time"
|
||||
|
||||
"github.com/caos/logging"
|
||||
@@ -12,8 +13,8 @@ import (
|
||||
"github.com/golang/protobuf/ptypes"
|
||||
)
|
||||
|
||||
func machineCreateToModel(machine *management.CreateMachineRequest) *usr_model.Machine {
|
||||
return &usr_model.Machine{
|
||||
func machineCreateToDomain(machine *management.CreateMachineRequest) *domain.Machine {
|
||||
return &domain.Machine{
|
||||
Name: machine.Name,
|
||||
Description: machine.Description,
|
||||
}
|
||||
@@ -26,6 +27,13 @@ func updateMachineToModel(machine *management.UpdateMachineRequest) *usr_model.M
|
||||
}
|
||||
}
|
||||
|
||||
func machineFromDomain(account *domain.Machine) *management.MachineResponse {
|
||||
return &management.MachineResponse{
|
||||
Name: account.Name,
|
||||
Description: account.Description,
|
||||
}
|
||||
}
|
||||
|
||||
func machineFromModel(account *usr_model.Machine) *management.MachineResponse {
|
||||
return &management.MachineResponse{
|
||||
Name: account.Name,
|
||||
|
Reference in New Issue
Block a user