+
+type Client struct {
+ AdminURL string `json:"adminUrl,omitempty"`
+ BearerOnly bool `json:"bearerOnly,omitempty"`
+ ClientID string `json:"clientId,omitempty"`
+ Enabled bool `json:"enabled,omitempty"`
+ PublicClient bool `json:"publicClient,omitempty"`
+ RootURL string `json:"rootUrl,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
+ }
+
+ createClientUrl := km.keycloakServerUrl + "/admin/realms/" + realm + "/clients"
+ newClient := Client{
+ ClientID: clientId,
+ Enabled: true,
+ ServiceAccountsEnabled: true,
+ BearerOnly: false,
+ PublicClient: false,
+ }
+
+ body, _ := json.Marshal(newClient)
+ var headers = map[string]string{"Content-Type": "application/json", "Authorization": "Bearer " + token.AccessToken}
+ if error := restclient.Post(createClientUrl, body, headers, km.client); error != nil {
+ log.Errorf("error with http request: %+v\n", err)
+ return err
+ }
+
+ log.Info("Created new client")
+ return nil
+
+}