Merge pull request #6067 from owncloud/ainmosni/feature/search-keycloak-by-username
Search users by username instead of by email
This commit is contained in:
@@ -90,34 +90,39 @@ func (c *ConcreteClient) SendActionsMail(ctx context.Context, realm, userID stri
|
||||
return c.keycloak.ExecuteActionsEmail(ctx, token.AccessToken, realm, params)
|
||||
}
|
||||
|
||||
// GetUserByEmail looks up a user by email.
|
||||
func (c *ConcreteClient) GetUserByEmail(ctx context.Context, realm, mail string) (*libregraph.User, error) {
|
||||
// getUserByParams looks up a user by the given parameters.
|
||||
func (c *ConcreteClient) getUserByParams(ctx context.Context, realm string, params gocloak.GetUsersParams) (*libregraph.User, error) {
|
||||
token, err := c.getToken(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
users, err := c.keycloak.GetUsers(ctx, token.AccessToken, realm, gocloak.GetUsersParams{
|
||||
Email: &mail,
|
||||
})
|
||||
users, err := c.keycloak.GetUsers(ctx, token.AccessToken, realm, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(users) == 0 {
|
||||
return nil, fmt.Errorf("no users found with mail address %s", mail)
|
||||
return nil, fmt.Errorf("no users found")
|
||||
}
|
||||
|
||||
if len(users) > 1 {
|
||||
return nil, fmt.Errorf("%d users found with mail address %s, expected 1", len(users), mail)
|
||||
return nil, fmt.Errorf("%d users found", len(users))
|
||||
}
|
||||
|
||||
return c.keycloakUserToLibregraph(users[0]), nil
|
||||
}
|
||||
|
||||
// GetUserByUsername looks up a user by username.
|
||||
func (c *ConcreteClient) GetUserByUsername(ctx context.Context, realm, username string) (*libregraph.User, error) {
|
||||
return c.getUserByParams(ctx, realm, gocloak.GetUsersParams{
|
||||
Username: &username,
|
||||
})
|
||||
}
|
||||
|
||||
// GetPIIReport returns a structure with all the PII for the user.
|
||||
func (c *ConcreteClient) GetPIIReport(ctx context.Context, realm string, email string) (*PIIReport, error) {
|
||||
u, err := c.GetUserByEmail(ctx, realm, email)
|
||||
func (c *ConcreteClient) GetPIIReport(ctx context.Context, realm, username string) (*PIIReport, error) {
|
||||
u, err := c.GetUserByUsername(ctx, realm, username)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -34,6 +34,6 @@ type PIIReport struct {
|
||||
type Client interface {
|
||||
CreateUser(ctx context.Context, realm string, user *libregraph.User, userActions []UserAction) (string, error)
|
||||
SendActionsMail(ctx context.Context, realm, userID string, userActions []UserAction) error
|
||||
GetUserByEmail(ctx context.Context, realm, email string) (*libregraph.User, error)
|
||||
GetPIIReport(ctx context.Context, realm string, email string) (*PIIReport, error)
|
||||
GetUserByUsername(ctx context.Context, realm, username string) (*libregraph.User, error)
|
||||
GetPIIReport(ctx context.Context, realm, username string) (*PIIReport, error)
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ func (g Graph) GatherPersonalData(usr *user.User, ref *provider.Reference, token
|
||||
|
||||
// Check if we have a keycloak client, and if so, get the keycloak export.
|
||||
if ctx != nil && g.keycloakClient != nil {
|
||||
kcd, err := g.keycloakClient.GetPIIReport(ctx, g.config.Keycloak.UserRealm, usr.GetMail())
|
||||
kcd, err := g.keycloakClient.GetPIIReport(ctx, g.config.Keycloak.UserRealm, usr.GetUsername())
|
||||
if err != nil {
|
||||
g.logger.Error().Err(err).Str("userID", usr.GetId().GetOpaqueId()).Msg("cannot get keycloak personal data")
|
||||
}
|
||||
|
||||
@@ -40,17 +40,17 @@ func (_m *Client) CreateUser(ctx context.Context, realm string, user *libregraph
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetPIIReport provides a mock function with given fields: ctx, realm, email
|
||||
func (_m *Client) GetPIIReport(ctx context.Context, realm string, email string) (*keycloak.PIIReport, error) {
|
||||
ret := _m.Called(ctx, realm, email)
|
||||
// GetPIIReport provides a mock function with given fields: ctx, realm, username
|
||||
func (_m *Client) GetPIIReport(ctx context.Context, realm string, username string) (*keycloak.PIIReport, error) {
|
||||
ret := _m.Called(ctx, realm, username)
|
||||
|
||||
var r0 *keycloak.PIIReport
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string, string) (*keycloak.PIIReport, error)); ok {
|
||||
return rf(ctx, realm, email)
|
||||
return rf(ctx, realm, username)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string, string) *keycloak.PIIReport); ok {
|
||||
r0 = rf(ctx, realm, email)
|
||||
r0 = rf(ctx, realm, username)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*keycloak.PIIReport)
|
||||
@@ -58,7 +58,7 @@ func (_m *Client) GetPIIReport(ctx context.Context, realm string, email string)
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok {
|
||||
r1 = rf(ctx, realm, email)
|
||||
r1 = rf(ctx, realm, username)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
@@ -66,17 +66,17 @@ func (_m *Client) GetPIIReport(ctx context.Context, realm string, email string)
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// GetUserByEmail provides a mock function with given fields: ctx, realm, email
|
||||
func (_m *Client) GetUserByEmail(ctx context.Context, realm string, email string) (*libregraph.User, error) {
|
||||
ret := _m.Called(ctx, realm, email)
|
||||
// GetUserByUsername provides a mock function with given fields: ctx, realm, username
|
||||
func (_m *Client) GetUserByUsername(ctx context.Context, realm string, username string) (*libregraph.User, error) {
|
||||
ret := _m.Called(ctx, realm, username)
|
||||
|
||||
var r0 *libregraph.User
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string, string) (*libregraph.User, error)); ok {
|
||||
return rf(ctx, realm, email)
|
||||
return rf(ctx, realm, username)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string, string) *libregraph.User); ok {
|
||||
r0 = rf(ctx, realm, email)
|
||||
r0 = rf(ctx, realm, username)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*libregraph.User)
|
||||
@@ -84,7 +84,7 @@ func (_m *Client) GetUserByEmail(ctx context.Context, realm string, email string
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok {
|
||||
r1 = rf(ctx, realm, email)
|
||||
r1 = rf(ctx, realm, username)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user