/
module.go
61 lines (51 loc) · 1.58 KB
/
module.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package export
import (
"context"
internal "github.com/cloudtrust/keycloak-bridge/internal/keycloakb"
msg "github.com/cloudtrust/keycloak-bridge/internal/constants"
keycloak "github.com/cloudtrust/keycloak-client"
"github.com/pkg/errors"
)
// KeycloakClient is the interface of the keycloak client.
type KeycloakClient interface {
GetRealms(accessToken string) ([]keycloak.RealmRepresentation, error)
ExportRealm(accessToken string, realmName string) (keycloak.RealmRepresentation, error)
}
// Module wraps a KeycloakClient to Get/Export realms
type Module struct {
kc KeycloakClient
logger internal.Logger
}
// NewModule returns a user module.
func NewModule(kc KeycloakClient, logger internal.Logger) *Module {
return &Module{
kc: kc,
logger: logger,
}
}
// GetRealms returns the list of all realms.
func (m *Module) GetRealms(ctx context.Context) ([]string, error) {
var res = []string{}
var accessToken = "TOKEN=="
var realms, err = m.kc.GetRealms(accessToken)
if err != nil {
m.logger.Warn(ctx, "err", err.Error())
return res, errors.Wrap(err, msg.MsgErrCannotObtain+msg.ListOfRealms)
}
for _, realm := range realms {
if name := realm.Realm; name != nil {
res = append(res, *name)
}
}
return res, nil
}
// ExportRealm exports the desired realm.
func (m *Module) ExportRealm(ctx context.Context, realmName string) (keycloak.RealmRepresentation, error) {
var accessToken = "TOKEN=="
res, err := m.kc.ExportRealm(accessToken, realmName)
if err != nil {
m.logger.Warn(ctx, "err", err.Error())
return keycloak.RealmRepresentation{}, err
}
return res, nil
}