pkg/client/keycloak/adapter/component.go (76 lines of code) (raw):

package adapter import ( "context" "fmt" "net/http" "github.com/pkg/errors" ) type Component struct { Name string `json:"name"` ParentID string `json:"parentId,omitempty"` ProviderID string `json:"providerId"` ProviderType string `json:"providerType"` Config map[string][]string `json:"config"` ID string `json:"id,omitempty"` } func (a GoCloakAdapter) CreateComponent(ctx context.Context, realmName string, component *Component) error { rsp, err := a.startRestyRequest().SetContext(ctx).SetPathParams(map[string]string{ keycloakApiParamRealm: realmName, }).SetBody(component).Post(a.buildPath(realmComponent)) if err = a.checkError(err, rsp); err != nil { return errors.Wrap(err, "error during request") } return nil } func (a GoCloakAdapter) UpdateComponent(ctx context.Context, realmName string, component *Component) error { if component.ID == "" { _component, err := a.GetComponent(ctx, realmName, component.Name) if err != nil { return errors.Wrap(err, "unable to get component id") } component.ID = _component.ID } rsp, err := a.startRestyRequest().SetContext(ctx).SetPathParams(map[string]string{ keycloakApiParamRealm: realmName, keycloakApiParamId: component.ID, }).SetBody(component).Put(a.buildPath(realmComponentEntity)) if err = a.checkError(err, rsp); err != nil { return errors.Wrap(err, "error during update component request") } return nil } func (a GoCloakAdapter) DeleteComponent(ctx context.Context, realmName, componentName string) error { component, err := a.GetComponent(ctx, realmName, componentName) if err != nil { if IsErrNotFound(err) { return nil } return fmt.Errorf("unable to get component id: %w", err) } rsp, err := a.startRestyRequest().SetContext(ctx).SetPathParams(map[string]string{ keycloakApiParamRealm: realmName, keycloakApiParamId: component.ID, }).Delete(a.buildPath(realmComponentEntity)) if rsp.StatusCode() == http.StatusNotFound { return nil } if err = a.checkError(err, rsp); err != nil { return errors.Wrap(err, "error during delete component request") } return nil } func (a GoCloakAdapter) GetComponent(ctx context.Context, realmName, componentName string) (*Component, error) { var components []Component rsp, err := a.startRestyRequest().SetContext(ctx).SetPathParams(map[string]string{ keycloakApiParamRealm: realmName, }).SetResult(&components).Get(a.buildPath(realmComponent)) if err = a.checkError(err, rsp); err != nil { return nil, errors.Wrap(err, "error during get component request") } for _, c := range components { if c.Name == componentName { return &c, nil } } return nil, NotFoundError("component not found") }