fix: idp provider handler (#874)

* fix: idp provider handler

* fix: idp provider search

* fix: idp provider search

* fix: error handling

* fix: error handling

* fix: fix read config
This commit is contained in:
Fabi 2020-10-20 14:26:19 +02:00 committed by GitHub
parent 84b212bd75
commit 7e56ace9d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 81 additions and 27 deletions

View File

@ -66,13 +66,17 @@ func (m *IDPProvider) processIdpProvider(event *models.Event) (err error) {
} }
return m.view.DeleteIDPProvider(event.AggregateID, provider.IDPConfigID, event.Sequence) return m.view.DeleteIDPProvider(event.AggregateID, provider.IDPConfigID, event.Sequence)
case model.IDPConfigChanged, org_es_model.IDPConfigChanged: case model.IDPConfigChanged, org_es_model.IDPConfigChanged:
config := new(iam_model.IDPConfig) esConfig := new(iam_view_model.IDPConfigView)
config.AppendEvent(event) providerType := iam_model.IDPProviderTypeSystem
providers, err := m.view.IDPProvidersByIdpConfigID(config.IDPConfigID) if event.AggregateID != m.systemDefaults.IamID {
providerType = iam_model.IDPProviderTypeOrg
}
esConfig.AppendEvent(providerType, event)
providers, err := m.view.IDPProvidersByIdpConfigID(esConfig.IDPConfigID)
if err != nil { if err != nil {
return err return err
} }
config, err = m.iamEvents.GetIDPConfig(context.Background(), provider.AggregateID, config.IDPConfigID) config, err := m.iamEvents.GetIDPConfig(context.Background(), event.AggregateID, esConfig.IDPConfigID)
if err != nil { if err != nil {
return err return err
} }

View File

@ -61,7 +61,11 @@ func (s *Server) UpdateOidcIdpConfig(ctx context.Context, request *management.Oi
} }
func (s *Server) SearchIdps(ctx context.Context, request *management.IdpSearchRequest) (*management.IdpSearchResponse, error) { func (s *Server) SearchIdps(ctx context.Context, request *management.IdpSearchRequest) (*management.IdpSearchResponse, error) {
response, err := s.org.SearchIDPConfigs(ctx, idpConfigSearchRequestToModel(request)) searchRequest, err := idpConfigSearchRequestToModel(request)
if err != nil {
return nil, err
}
response, err := s.org.SearchIDPConfigs(ctx, searchRequest)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -2,9 +2,11 @@ package management
import ( import (
"github.com/caos/logging" "github.com/caos/logging"
caos_errors "github.com/caos/zitadel/internal/errors"
iam_model "github.com/caos/zitadel/internal/iam/model" iam_model "github.com/caos/zitadel/internal/iam/model"
"github.com/caos/zitadel/pkg/grpc/management" "github.com/caos/zitadel/pkg/grpc/management"
"github.com/golang/protobuf/ptypes" "github.com/golang/protobuf/ptypes"
"strconv"
) )
func createOidcIdpToModel(idp *management.OidcIdpConfigCreate) *iam_model.IDPConfig { func createOidcIdpToModel(idp *management.OidcIdpConfigCreate) *iam_model.IDPConfig {
@ -131,29 +133,47 @@ func idpConfigStateFromModel(state iam_model.IDPConfigState) management.IdpState
} }
} }
func idpConfigSearchRequestToModel(request *management.IdpSearchRequest) *iam_model.IDPConfigSearchRequest { func idpConfigSearchRequestToModel(request *management.IdpSearchRequest) (*iam_model.IDPConfigSearchRequest, error) {
return &iam_model.IDPConfigSearchRequest{ convertedSearchRequest := &iam_model.IDPConfigSearchRequest{
Limit: request.Limit, Limit: request.Limit,
Offset: request.Offset, Offset: request.Offset,
Queries: idpConfigSearchQueriesToModel(request.Queries),
} }
convertedQueries, err := idpConfigSearchQueriesToModel(request.Queries)
if err != nil {
return nil, err
}
convertedSearchRequest.Queries = convertedQueries
return convertedSearchRequest, nil
} }
func idpConfigSearchQueriesToModel(queries []*management.IdpSearchQuery) []*iam_model.IDPConfigSearchQuery { func idpConfigSearchQueriesToModel(queries []*management.IdpSearchQuery) ([]*iam_model.IDPConfigSearchQuery, error) {
modelQueries := make([]*iam_model.IDPConfigSearchQuery, len(queries)) modelQueries := make([]*iam_model.IDPConfigSearchQuery, len(queries))
for i, query := range queries { for i, query := range queries {
modelQueries[i] = idpConfigSearchQueryToModel(query) converted, err := idpConfigSearchQueryToModel(query)
if err != nil {
return nil, err
}
modelQueries[i] = converted
} }
return modelQueries return modelQueries, nil
} }
func idpConfigSearchQueryToModel(query *management.IdpSearchQuery) *iam_model.IDPConfigSearchQuery { func idpConfigSearchQueryToModel(query *management.IdpSearchQuery) (*iam_model.IDPConfigSearchQuery, error) {
return &iam_model.IDPConfigSearchQuery{ converted := &iam_model.IDPConfigSearchQuery{
Key: idpConfigSearchKeyToModel(query.Key), Key: idpConfigSearchKeyToModel(query.Key),
Method: searchMethodToModel(query.Method), Method: searchMethodToModel(query.Method),
Value: query.Value, Value: query.Value,
} }
if query.Key != management.IdpSearchKey_IDPSEARCHKEY_PROVIDER_TYPE {
return converted, nil
}
value, err := idpProviderTypeStringToModel(query.Value)
if err != nil {
return nil, err
}
converted.Value = value
return converted, nil
} }
func idpConfigSearchKeyToModel(key management.IdpSearchKey) iam_model.IDPConfigSearchKey { func idpConfigSearchKeyToModel(key management.IdpSearchKey) iam_model.IDPConfigSearchKey {
@ -229,3 +249,15 @@ func idpConfigStylingTypeToModel(stylingType management.IdpStylingType) iam_mode
return iam_model.IDPStylingTypeUnspecified return iam_model.IDPStylingTypeUnspecified
} }
} }
func idpProviderTypeStringToModel(providerType string) (iam_model.IDPProviderType, error) {
i, _ := strconv.Atoi(providerType)
switch management.IdpProviderType(i) {
case management.IdpProviderType_IDPPROVIDERTYPE_SYSTEM:
return iam_model.IDPProviderTypeSystem, nil
case management.IdpProviderType_IDPPROVIDERTYPE_ORG:
return iam_model.IDPProviderTypeOrg, nil
default:
return 0, caos_errors.ThrowPreconditionFailed(nil, "MGMT-6is9f", "Errors.Org.IDP.InvalidSearchQuery")
}
}

View File

@ -66,16 +66,21 @@ func (m *IDPProvider) processIdpProvider(event *models.Event) (err error) {
} }
return m.view.DeleteIDPProvider(event.AggregateID, provider.IDPConfigID, event.Sequence) return m.view.DeleteIDPProvider(event.AggregateID, provider.IDPConfigID, event.Sequence)
case model.IDPConfigChanged, org_es_model.IDPConfigChanged: case model.IDPConfigChanged, org_es_model.IDPConfigChanged:
config := new(iam_model.IDPConfig) esConfig := new(iam_view_model.IDPConfigView)
config.AppendEvent(event) providerType := iam_model.IDPProviderTypeSystem
providers, err := m.view.IDPProvidersByIDPConfigID(config.IDPConfigID) if event.AggregateID != m.systemDefaults.IamID {
providerType = iam_model.IDPProviderTypeOrg
}
esConfig.AppendEvent(providerType, event)
providers, err := m.view.IDPProvidersByIDPConfigID(esConfig.IDPConfigID)
if err != nil { if err != nil {
return err return err
} }
if provider.IDPProviderType == int32(iam_model.IDPProviderTypeSystem) { config := new(iam_model.IDPConfig)
config, err = m.iamEvents.GetIDPConfig(context.Background(), provider.AggregateID, config.IDPConfigID) if event.AggregateID == m.systemDefaults.IamID {
config, err = m.iamEvents.GetIDPConfig(context.Background(), event.AggregateID, esConfig.IDPConfigID)
} else { } else {
config, err = m.orgEvents.GetIDPConfig(context.Background(), provider.AggregateID, provider.IDPConfigID) config, err = m.orgEvents.GetIDPConfig(context.Background(), event.AggregateID, esConfig.IDPConfigID)
} }
if err != nil { if err != nil {
return err return err

View File

@ -66,16 +66,21 @@ func (m *IDPProvider) processIdpProvider(event *models.Event) (err error) {
} }
return m.view.DeleteIdpProvider(event.AggregateID, provider.IDPConfigID, event.Sequence) return m.view.DeleteIdpProvider(event.AggregateID, provider.IDPConfigID, event.Sequence)
case model.IDPConfigChanged, org_es_model.IDPConfigChanged: case model.IDPConfigChanged, org_es_model.IDPConfigChanged:
config := new(iam_model.IDPConfig) esConfig := new(iam_view_model.IDPConfigView)
config.AppendEvent(event) providerType := iam_model.IDPProviderTypeSystem
providers, err := m.view.IdpProvidersByIdpConfigID(event.AggregateID, config.IDPConfigID) if event.AggregateID != m.systemDefaults.IamID {
providerType = iam_model.IDPProviderTypeOrg
}
esConfig.AppendEvent(providerType, event)
providers, err := m.view.IdpProvidersByIdpConfigID(event.AggregateID, esConfig.IDPConfigID)
if err != nil { if err != nil {
return err return err
} }
if provider.IDPProviderType == int32(iam_model.IDPProviderTypeSystem) { config := new(iam_model.IDPConfig)
config, err = m.iamEvents.GetIDPConfig(context.Background(), provider.AggregateID, config.IDPConfigID) if event.AggregateID == m.systemDefaults.IamID {
config, err = m.iamEvents.GetIDPConfig(context.Background(), event.AggregateID, esConfig.IDPConfigID)
} else { } else {
config, err = m.orgEvents.GetIDPConfig(context.Background(), provider.AggregateID, provider.IDPConfigID) config, err = m.orgEvents.GetIDPConfig(context.Background(), event.AggregateID, esConfig.IDPConfigID)
} }
if err != nil { if err != nil {
return err return err

View File

@ -83,6 +83,8 @@ Errors:
IdpNotExisting: IDP Konfiguration existiert nicht IdpNotExisting: IDP Konfiguration existiert nicht
OIDCConfigInvalid: OIDC IDP Konfiguration ist ungültig OIDCConfigInvalid: OIDC IDP Konfiguration ist ungültig
IdpIsNotOIDC: IDP Konfiguration ist nicht vom Typ OIDC IdpIsNotOIDC: IDP Konfiguration ist nicht vom Typ OIDC
IDP:
InvalidSearchQuery: Ungültiger Suchparameter
LoginPolicy: LoginPolicy:
Invalid: Login Policy ist ungültig Invalid: Login Policy ist ungültig
NotExisting: Login Policy existiert nicht auf dieser Organisation NotExisting: Login Policy existiert nicht auf dieser Organisation

View File

@ -83,6 +83,8 @@ Errors:
IdpNotExisting: IDP configuration does not exist IdpNotExisting: IDP configuration does not exist
OIDCConfigInvalid: OIDC IDP configuration is invalid OIDCConfigInvalid: OIDC IDP configuration is invalid
IdpIsNotOIDC: IDP configuration is not of type oidc IdpIsNotOIDC: IDP configuration is not of type oidc
IDP:
InvalidSearchQuery: Ungültiger Suchparameter
LoginPolicy: LoginPolicy:
Invalid: Login Policy is invalid Invalid: Login Policy is invalid
NotExisting: Login Policy not existig NotExisting: Login Policy not existig