Johan Droz 8 years ago
parent
commit
7ffcaeb28a
  1. 28
      client_initial_access.go
  2. 13
      client_registration_policy.go
  3. 26
      client_role_mappings.go
  4. 13
      keycloak_client.go
  5. 4
      users.go

28
client_initial_access.go

@ -1 +1,29 @@
package keycloak
import (
"gopkg.in/h2non/gentleman.v2/plugins/body"
"gopkg.in/h2non/gentleman.v2/plugins/url"
)
const (
clientInitialAccessPath = "/auth/admin/realms/:realm/clients-initial-access"
)
// CreateClientInitialAccess creates a new initial access token.
func (c *Client) CreateClientInitialAccess(realmName string, access ClientInitialAccessCreatePresentation) (ClientInitialAccessPresentation, error) {
var resp = ClientInitialAccessPresentation{}
var err = c.post(url.Path(clientInitialAccessPath), url.Param("realm", realmName), body.JSON(access))
return respasf, err
}
// GetClientInitialAccess returns a list of clients initial access.
func (c *Client) GetClientInitialAccess(realmName string) ([]ClientInitialAccessPresentation, error) {
var resp = []ClientInitialAccessPresentation{}
var err = c.get(&resp, url.Path(clientInitialAccessPath), url.Param("realm", realmName))
return resp, err
}
// DeleteClientInitialAccess deletes the client initial access.
func (c *Client) DeleteClientInitialAccess(realmName, accessID string) error {
return c.delete(url.Path(clientInitialAccessPath+"/:id"), url.Param("realm", realmName), url.Param("id", accessID))
}

13
client_registration_policy.go

@ -1 +1,14 @@
package keycloak
import "gopkg.in/h2non/gentleman.v2/plugins/url"
const (
clientRegistrationPolicyPath = "/auth/admin/realms/:realm/client-registration-policy/providers"
)
// GetClientRegistrationPolicy is the base path to retrieve providers with the configProperties properly filled.
func (c *Client) GetClientRegistrationPolicy(realmName, configID string) ([]ComponentTypeRepresentation, error) {
var resp = []ComponentTypeRepresentation{}
var err = c.get(&resp, url.Path(clientRegistrationPolicyPath), url.Param("realm", realmName))
return resp, err
}

26
client_role_mappings.go

@ -1 +1,27 @@
package keycloak
import (
"gopkg.in/h2non/gentleman.v2/plugins/body"
"gopkg.in/h2non/gentleman.v2/plugins/url"
)
const (
clientRoleMappingPath = "/auth/admin/realms/:realm/groups/:id/role-mappings/clients/:client"
)
// CreateClientsRoleMapping add client-level roles to the user role mapping.
func (c *Client) CreateClientsRoleMapping(realmName, groupID, clientID string, roles []RoleRepresentation) error {
return c.post(url.Path(clientRoleMappingPath), url.Param("realm", realmName), url.Param("id", groupID), url.Param("client", clientID), body.JSON(roles))
}
// GetClientsRoleMapping gets client-level role mappings for the user, and the app.
func (c *Client) GetClientsRoleMapping(realmName, groupID, clientID string) ([]RoleRepresentation, error) {
var resp = []RoleRepresentation{}
var err = c.get(&resp, url.Path(clientRoleMappingPath), url.Param("realm", realmName), url.Param("id", groupID), url.Param("client", clientID))
return resp, err
}
// DeleteClientsRoleMapping deletes client-level roles from user role mapping.
func (c *Client) DeleteClientsRoleMapping(realmName, groupID, clientID string) error {
return c.delete(url.Path(clientRoleMappingPath), url.Param("realm", realmName), url.Param("id", groupID), url.Param("client", clientID))
}

13
keycloak_client.go

@ -2,7 +2,6 @@ package keycloak
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
@ -128,6 +127,7 @@ func (c *Client) verifyToken() error {
// get is a HTTP get method.
func (c *Client) get(data interface{}, plugins ...plugin.Plugin) error {
var req = c.httpClient.Get()
req = applyPlugins(req, c.accessToken, plugins...)
var resp *gentleman.Response
@ -151,7 +151,15 @@ func (c *Client) get(data interface{}, plugins ...plugin.Plugin) error {
case resp.StatusCode >= 400:
return fmt.Errorf("invalid status code: '%v': %v", resp.RawResponse.Status, string(resp.Bytes()))
case resp.StatusCode >= 200:
return json.Unmarshal(resp.Bytes(), data)
switch resp.Header.Get("Content-Type") {
case "application/json":
return resp.JSON(data)
case "application/octet-stream":
data = resp.Bytes()
return nil
default:
return fmt.Errorf("unkown http content-type: %v", resp.Header.Get("Content-Type"))
}
default:
return fmt.Errorf("unknown response status code: %v", resp.StatusCode)
}
@ -161,7 +169,6 @@ func (c *Client) get(data interface{}, plugins ...plugin.Plugin) error {
func (c *Client) post(plugins ...plugin.Plugin) error {
var req = c.httpClient.Post()
req = applyPlugins(req, c.accessToken, plugins...)
var resp *gentleman.Response
{
var err error

4
users.go

@ -29,8 +29,8 @@ func (c *Client) GetUsers(realmName string, paramKV ...string) ([]UserRepresenta
}
// CreateUser creates the user from its UserRepresentation. The username must be unique.
func (c *Client) CreateUser(realm string, user UserRepresentation) error {
return c.post(url.Path(userPath), url.Param("realm", realm), body.JSON(user))
func (c *Client) CreateUser(realmName string, user UserRepresentation) error {
return c.post(url.Path(userPath), url.Param("realm", realmName), body.JSON(user))
}
// CountUsers returns the number of users in the realm.

Loading…
Cancel
Save