+
+type Client struct {
+ AdminURL string `json:"adminUrl,omitempty"`
+ AuthorizationServicesEnabled *bool `json:"authorizationServicesEnabled,omitempty"`
+ BearerOnly bool `json:"bearerOnly,omitempty"`
+ ClientID string `json:"clientId,omitempty"`
+ Enabled bool `json:"enabled,omitempty"`
+ ID *string `json:"id,omitempty"`
+ PublicClient bool `json:"publicClient,omitempty"`
+ RootURL string `json:"rootUrl,omitempty"`
+ Secret *string `json:"secret,omitempty"`
+ ServiceAccountsEnabled bool `json:"serviceAccountsEnabled,omitempty"`
+}
+
+func (km *KeycloakManager) AddClient(clientId string, realm string) error {
+
+ data := url.Values{"grant_type": {"password"}, "username": {km.admin.User}, "password": {km.admin.Password}, "client_id": {"admin-cli"}}
+ token, err := km.GetToken("master", data)
+ if err != nil {
+ log.Errorf("error wrong credentials or url %v\n", err)
+ return err
+ }
+
+ realmVal, ok := km.realms[realm]
+ if !ok {
+ log.Errorf("error realm does not exist\n")
+ return errors.New("realm does not exist")
+ }
+
+ createClientUrl := km.keycloakServerUrl + "/admin/realms/" + realmVal + "/clients"
+ newClient := map[string]interface{}{"clientId": clientId, "serviceAccountsEnabled": true}
+
+ body, err := json.Marshal(newClient)
+ if err != nil {
+ return err
+ }
+
+ var headers = map[string]string{"Content-Type": "application/json", "Authorization": "Bearer " + token.AccessToken}
+ if err := restclient.Post(createClientUrl, body, headers, km.client); err != nil {
+ log.Errorf("addClient - error with http request: %+v\n", err)
+ return err
+ }
+
+ log.Debug("Created new client")
+ return nil
+
+}
+
+func (km *KeycloakManager) GetClientRepresentation(clientId string, realm string) (*Client, error) {
+
+ data := url.Values{"grant_type": {"password"}, "username": {km.admin.User}, "password": {km.admin.Password}, "client_id": {"admin-cli"}}
+ token, err := km.GetToken("master", data)
+ if err != nil {
+ log.Errorf("error wrong credentials or url %v\n", err)
+ return nil, err
+ }
+
+ realmVal, ok := km.realms[realm]
+ if !ok {
+ log.Errorf("error realm does not exist\n")
+ return nil, errors.New("realm does not exist")
+ }
+
+ createClientUrl, _ := url.Parse(km.keycloakServerUrl + "/admin/realms/" + realmVal + "/clients")
+ q := createClientUrl.Query()
+ q.Add("clientId", clientId)
+ createClientUrl.RawQuery = q.Encode()
+
+ var headers = map[string]string{"Content-Type": "application/json", "Authorization": "Bearer " + token.AccessToken}
+
+ if resp, err := restclient.Get(createClientUrl.String(), headers, km.client); err == nil {
+ var client []Client
+
+ if err = json.Unmarshal(resp, &client); err != nil {
+ log.Errorf("error unmarshal keycloak client object: %+v\n", err)
+ return nil, err
+ }
+
+ if len(client) > 0 {
+ return &client[0], nil
+ }
+ return nil, nil
+
+ } else {
+ log.Errorf("error with http request: %+v\n", err)
+ return nil, err
+ }
+
+}