diff --git a/components/usermgmt/pkg/server/oidc_provider.go b/components/usermgmt/pkg/server/oidc_provider.go index 68c8418..8a7c365 100644 --- a/components/usermgmt/pkg/server/oidc_provider.go +++ b/components/usermgmt/pkg/server/oidc_provider.go @@ -30,5 +30,6 @@ func (s *oidcProvider) UpdateOIDCProvider(ctx context.Context, p *userv3.OIDCPro return s.Update(ctx, p) } func (s *oidcProvider) DeleteOIDCProvider(ctx context.Context, p *userv3.OIDCProvider) (*emptypb.Empty, error) { + // TODO: if successful return 204 NO CONTENT return &emptypb.Empty{}, s.Delete(ctx, p) } diff --git a/components/usermgmt/pkg/service/oidc_provider.go b/components/usermgmt/pkg/service/oidc_provider.go index c400f86..929e9dd 100644 --- a/components/usermgmt/pkg/service/oidc_provider.go +++ b/components/usermgmt/pkg/service/oidc_provider.go @@ -194,9 +194,95 @@ func (s *oidcProvider) List(ctx context.Context) (*userv3.OIDCProviderList, erro } func (s *oidcProvider) Update(ctx context.Context, provider *userv3.OIDCProvider) (*userv3.OIDCProvider, error) { - return &userv3.OIDCProvider{}, nil + var id, orgId, partId uuid.UUID + id, err := uuid.Parse(provider.Metadata.GetId()) + // TODO: 400 Bad Request + if err != nil { + return &userv3.OIDCProvider{}, err + } + if len(provider.Metadata.GetOrganization()) != 0 { + orgId, err = uuid.Parse(provider.Metadata.GetOrganization()) + if err != nil { + return &userv3.OIDCProvider{}, err + } + } + if len(provider.Metadata.GetPartner()) != 0 { + partId, err = uuid.Parse(provider.Metadata.GetPartner()) + if err != nil { + return &userv3.OIDCProvider{}, err + } + } + _, err = s.dao.GetByID(ctx, id, &models.OIDCProvider{}) + // TODO: Return proper error for Id not exist + if err != nil { + return &userv3.OIDCProvider{}, err + } + entity := &models.OIDCProvider{ + Id: id, + Name: provider.Metadata.GetName(), + Description: provider.Metadata.GetDescription(), + OrganizationId: orgId, + PartnerId: partId, + ModifiedAt: time.Now(), + ProviderName: provider.Spec.GetProviderName(), + MapperURL: provider.Spec.GetMapperUrl(), + MapperFilename: provider.Spec.GetMapperFilename(), + ClientId: provider.Spec.GetClientId(), + ClientSecret: provider.Spec.GetClientSecret(), + Scopes: provider.Spec.GetScopes(), + IssuerURL: provider.Spec.GetIssuerUrl(), + AuthURL: provider.Spec.GetAuthUrl(), + TokenURL: provider.Spec.GetTokenUrl(), + RequestedClaims: provider.Spec.GetRequestedClaims().AsMap(), + Predefined: provider.Spec.GetPredefined(), + CallbackURL: provider.Spec.GetCallbackUrl(), + } + _, err = s.dao.Update(ctx, id, entity) + if err != nil { + return &userv3.OIDCProvider{}, err + } + + rclaims, _ := structpb.NewStruct(entity.RequestedClaims) + rv := &userv3.OIDCProvider{ + ApiVersion: "usermgmt.k8smgmt.io/v3", + Kind: "OIDCProvider", + Metadata: &commonv3.Metadata{ + Name: entity.Name, + Description: entity.Description, + Id: entity.Id.String(), + }, + Spec: &userv3.OIDCProviderSpec{ + ProviderName: entity.ProviderName, + MapperUrl: entity.MapperURL, + MapperFilename: entity.MapperFilename, + ClientId: entity.ClientId, + ClientSecret: entity.ClientSecret, + Scopes: entity.Scopes, + IssuerUrl: entity.IssuerURL, + AuthUrl: entity.AuthURL, + TokenUrl: entity.TokenURL, + RequestedClaims: rclaims, + Predefined: entity.Predefined, + CallbackUrl: entity.CallbackURL, + }, + } + return rv, nil } func (s *oidcProvider) Delete(ctx context.Context, provider *userv3.OIDCProvider) error { + id, err := uuid.Parse(provider.Metadata.GetId()) + if err != nil { + return err + } + entity := &models.OIDCProvider{} + _, err = s.dao.GetByID(ctx, id, entity) + if entity.Id != id { + return fmt.Errorf("ID DOES NOT EXISTS") + } + + err = s.dao.Delete(ctx, id, &models.OIDCProvider{}) + if err != nil { + return err + } return nil }