This repository has been archived by the owner on Dec 4, 2023. It is now read-only.
/
keycloak_cache.go
92 lines (80 loc) · 2.13 KB
/
keycloak_cache.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* Copyright 2019, EnMasse authors.
* License: Apache License 2.0 (see the file LICENSE or http://apache.org/licenses/LICENSE-2.0.html).
*/
package messaginguser
import (
userv1beta1 "github.com/enmasseproject/enmasse/pkg/apis/user/v1beta1"
"github.com/enmasseproject/enmasse/pkg/keycloak"
)
type keycloakCache struct {
clients map[string]keycloak.KeycloakClient
}
type cachedClient struct {
wrapped keycloak.KeycloakClient
invalidate func()
}
var (
_ keycloak.KeycloakClient = &cachedClient{}
)
func NewKeycloakCache() keycloakCache {
return keycloakCache{
clients: make(map[string]keycloak.KeycloakClient, 0),
}
}
func (c *keycloakCache) get(key string) keycloak.KeycloakClient {
return c.clients[key]
}
func (c *keycloakCache) put(key string, client keycloak.KeycloakClient) keycloak.KeycloakClient {
cached := &cachedClient{
wrapped: client,
invalidate: func() {
delete(c.clients, key)
},
}
c.clients[key] = cached
return cached
}
func (c *cachedClient) CreateUser(realm string, user *userv1beta1.MessagingUser) error {
err := c.wrapped.CreateUser(realm, user)
if err != nil {
c.invalidate()
return err
}
return err
}
func (c *cachedClient) UpdateUser(realm string, existing *userv1beta1.MessagingUser, updated *userv1beta1.MessagingUser) error {
err := c.wrapped.UpdateUser(realm, existing, updated)
if err != nil {
c.invalidate()
}
return err
}
func (c *cachedClient) GetUser(realm string, username string) (*userv1beta1.MessagingUser, error) {
user, err := c.wrapped.GetUser(realm, username)
if err != nil {
c.invalidate()
}
return user, err
}
func (c *cachedClient) DeleteUser(realm string, user *userv1beta1.MessagingUser) error {
err := c.wrapped.DeleteUser(realm, user)
if err != nil {
c.invalidate()
}
return err
}
func (c *cachedClient) GetUsers(realm string, filters ...keycloak.AttributeFilter) ([]*userv1beta1.MessagingUser, error) {
users, err := c.wrapped.GetUsers(realm, filters...)
if err != nil {
c.invalidate()
}
return users, err
}
func (c *cachedClient) GetRealms() ([]string, error) {
realms, err := c.wrapped.GetRealms()
if err != nil {
c.invalidate()
}
return realms, err
}