Implement OIDC provider Update and Delete methods

This commit is contained in:
Akshay Gaikwad
2022-01-25 18:35:48 +05:30
parent a6e6827fac
commit d5b8fa3466
2 changed files with 88 additions and 1 deletions
@@ -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)
}
@@ -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
}