keycloak
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.models.jpa.JpaUserProvider クラス
org.keycloak.models.jpa.JpaUserProvider の継承関係図
Inheritance graph
org.keycloak.models.jpa.JpaUserProvider 連携図
Collaboration graph

公開メンバ関数

 JpaUserProvider (KeycloakSession session, EntityManager em)
 
UserModel addUser (RealmModel realm, String id, String username, boolean addDefaultRoles, boolean addDefaultRequiredActions)
 
UserModel addUser (RealmModel realm, String username)
 
boolean removeUser (RealmModel realm, UserModel user)
 
void addFederatedIdentity (RealmModel realm, UserModel user, FederatedIdentityModel identity)
 
void updateFederatedIdentity (RealmModel realm, UserModel federatedUser, FederatedIdentityModel federatedIdentityModel)
 
boolean removeFederatedIdentity (RealmModel realm, UserModel user, String identityProvider)
 
void addConsent (RealmModel realm, String userId, UserConsentModel consent)
 
UserConsentModel getConsentByClient (RealmModel realm, String userId, String clientId)
 
List< UserConsentModelgetConsents (RealmModel realm, String userId)
 
void updateConsent (RealmModel realm, String userId, UserConsentModel consent)
 
boolean revokeConsentForClient (RealmModel realm, String userId, String clientId)
 
void setNotBeforeForUser (RealmModel realm, UserModel user, int notBefore)
 
int getNotBeforeOfUser (RealmModel realm, UserModel user)
 
void grantToAllUsers (RealmModel realm, RoleModel role)
 
void preRemove (RealmModel realm)
 
void removeImportedUsers (RealmModel realm, String storageProviderId)
 
void unlinkUsers (RealmModel realm, String storageProviderId)
 
void preRemove (RealmModel realm, RoleModel role)
 
void preRemove (RealmModel realm, ClientModel client)
 
void preRemove (ProtocolMapperModel protocolMapper)
 
void preRemove (ClientScopeModel clientScope)
 
List< UserModelgetGroupMembers (RealmModel realm, GroupModel group)
 
List< UserModelgetRoleMembers (RealmModel realm, RoleModel role)
 
void preRemove (RealmModel realm, GroupModel group)
 
UserModel getUserById (String id, RealmModel realm)
 
UserModel getUserByUsername (String username, RealmModel realm)
 
UserModel getUserByEmail (String email, RealmModel realm)
 
void close ()
 
UserModel getUserByFederatedIdentity (FederatedIdentityModel identity, RealmModel realm)
 
UserModel getServiceAccount (ClientModel client)
 
List< UserModelgetUsers (RealmModel realm, boolean includeServiceAccounts)
 
int getUsersCount (RealmModel realm, boolean includeServiceAccount)
 
int getUsersCount (RealmModel realm)
 
List< UserModelgetUsers (RealmModel realm)
 
List< UserModelgetUsers (RealmModel realm, int firstResult, int maxResults)
 
List< UserModelgetUsers (RealmModel realm, int firstResult, int maxResults, boolean includeServiceAccounts)
 
List< UserModelgetGroupMembers (RealmModel realm, GroupModel group, int firstResult, int maxResults)
 
List< UserModelgetRoleMembers (RealmModel realm, RoleModel role, int firstResult, int maxResults)
 
List< UserModelsearchForUser (String search, RealmModel realm)
 
List< UserModelsearchForUser (String search, RealmModel realm, int firstResult, int maxResults)
 
List< UserModelsearchForUser (Map< String, String > attributes, RealmModel realm)
 
List< UserModelsearchForUser (Map< String, String > attributes, RealmModel realm, int firstResult, int maxResults)
 
List< UserModelsearchForUserByUserAttribute (String attrName, String attrValue, RealmModel realm)
 
Set< FederatedIdentityModelgetFederatedIdentities (UserModel user, RealmModel realm)
 
FederatedIdentityModel getFederatedIdentity (UserModel user, String identityProvider, RealmModel realm)
 
void preRemove (RealmModel realm, ComponentModel component)
 
void updateCredential (RealmModel realm, UserModel user, CredentialModel cred)
 
CredentialModel createCredential (RealmModel realm, UserModel user, CredentialModel cred)
 
boolean removeStoredCredential (RealmModel realm, UserModel user, String id)
 
CredentialModel getStoredCredentialById (RealmModel realm, UserModel user, String id)
 
List< CredentialModelgetStoredCredentials (RealmModel realm, UserModel user)
 
List< CredentialModelgetStoredCredentialsByType (RealmModel realm, UserModel user, String type)
 
CredentialModel getStoredCredentialByNameAndType (RealmModel realm, UserModel user, String name, String type)
 

限定公開メンバ関数

void removeConsentByClientStorageProvider (RealmModel realm, String providerId)
 
CredentialModel toModel (CredentialEntity entity)
 
void ensureEmailConstraint (List< UserEntity > users, RealmModel realm)
 

限定公開変数類

EntityManager em
 

非公開メンバ関数

void removeUser (UserEntity user)
 
UserConsentEntity getGrantedConsentEntity (String userId, String clientId)
 
UserConsentModel toConsentModel (RealmModel realm, UserConsentEntity entity)
 
void updateGrantedConsentEntity (UserConsentEntity consentEntity, UserConsentModel consentModel)
 
FederatedIdentityEntity findFederatedIdentity (UserModel user, String identityProvider)
 
UserEntity userInEntityManagerContext (String id)
 

非公開変数類

final KeycloakSession session
 

静的非公開変数類

static final String EMAIL = "email"
 
static final String USERNAME = "username"
 
static final String FIRST_NAME = "firstName"
 
static final String LAST_NAME = "lastName"
 

詳解

著者
Bill Burke
バージョン
Revision
1

構築子と解体子

◆ JpaUserProvider()

org.keycloak.models.jpa.JpaUserProvider.JpaUserProvider ( KeycloakSession  session,
EntityManager  em 
)
inline
77  {
78  this.session = session;
79  this.em = em;
80  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

関数詳解

◆ addConsent()

void org.keycloak.models.jpa.JpaUserProvider.addConsent ( RealmModel  realm,
String  userId,
UserConsentModel  consent 
)
inline

org.keycloak.models.UserProviderを実装しています。

185  {
186  String clientId = consent.getClient().getId();
187 
188  UserConsentEntity consentEntity = getGrantedConsentEntity(userId, clientId);
189  if (consentEntity != null) {
190  throw new ModelDuplicateException("Consent already exists for client [" + clientId + "] and user [" + userId + "]");
191  }
192 
193  long currentTime = Time.currentTimeMillis();
194 
195  consentEntity = new UserConsentEntity();
196  consentEntity.setId(KeycloakModelUtils.generateId());
197  consentEntity.setUser(em.getReference(UserEntity.class, userId));
198  StorageId clientStorageId = new StorageId(clientId);
199  if (clientStorageId.isLocal()) {
200  consentEntity.setClientId(clientId);
201  } else {
202  consentEntity.setClientStorageProvider(clientStorageId.getProviderId());
203  consentEntity.setExternalClientId(clientStorageId.getExternalId());
204  }
205 
206  consentEntity.setCreatedDate(currentTime);
207  consentEntity.setLastUpdatedDate(currentTime);
208  em.persist(consentEntity);
209  em.flush();
210 
211  updateGrantedConsentEntity(consentEntity, consent);
212  }
EntityManager em
Definition: JpaUserProvider.java:75
UserConsentEntity getGrantedConsentEntity(String userId, String clientId)
Definition: JpaUserProvider.java:256
void updateGrantedConsentEntity(UserConsentEntity consentEntity, UserConsentModel consentModel)
Definition: JpaUserProvider.java:312

◆ addFederatedIdentity()

void org.keycloak.models.jpa.JpaUserProvider.addFederatedIdentity ( RealmModel  realm,
UserModel  user,
FederatedIdentityModel  identity 
)
inline

org.keycloak.models.UserProviderを実装しています。

149  {
150  FederatedIdentityEntity entity = new FederatedIdentityEntity();
151  entity.setRealmId(realm.getId());
152  entity.setIdentityProvider(identity.getIdentityProvider());
153  entity.setUserId(identity.getUserId());
154  entity.setUserName(identity.getUserName().toLowerCase());
155  entity.setToken(identity.getToken());
156  UserEntity userEntity = em.getReference(UserEntity.class, user.getId());
157  entity.setUser(userEntity);
158  em.persist(entity);
159  em.flush();
160  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ addUser() [1/2]

UserModel org.keycloak.models.jpa.JpaUserProvider.addUser ( RealmModel  realm,
String  id,
String  username,
boolean  addDefaultRoles,
boolean  addDefaultRequiredActions 
)
inline

org.keycloak.models.UserProviderを実装しています。

83  {
84  if (id == null) {
85  id = KeycloakModelUtils.generateId();
86  }
87 
88  UserEntity entity = new UserEntity();
89  entity.setId(id);
90  entity.setCreatedTimestamp(System.currentTimeMillis());
91  entity.setUsername(username.toLowerCase());
92  entity.setRealmId(realm.getId());
93  em.persist(entity);
94  em.flush();
95  UserAdapter userModel = new UserAdapter(session, realm, em, entity);
96 
97  if (addDefaultRoles) {
98  DefaultRoles.addDefaultRoles(realm, userModel);
99 
100  for (GroupModel g : realm.getDefaultGroups()) {
101  userModel.joinGroupImpl(g); // No need to check if user has group as it's new user
102  }
103  }
104 
105  if (addDefaultRequiredActions){
106  for (RequiredActionProviderModel r : realm.getRequiredActionProviders()) {
107  if (r.isEnabled() && r.isDefaultAction()) {
108  userModel.addRequiredAction(r.getAlias());
109  }
110  }
111  }
112 
113  return userModel;
114  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ addUser() [2/2]

UserModel org.keycloak.models.jpa.JpaUserProvider.addUser ( RealmModel  realm,
String  username 
)
inline

org.keycloak.storage.user.UserRegistrationProviderを実装しています。

117  {
118  return addUser(realm, KeycloakModelUtils.generateId(), username.toLowerCase(), true, true);
119  }
UserModel addUser(RealmModel realm, String id, String username, boolean addDefaultRoles, boolean addDefaultRequiredActions)
Definition: JpaUserProvider.java:83

◆ close()

void org.keycloak.models.jpa.JpaUserProvider.close ( )
inline

org.keycloak.models.UserProviderを実装しています。

546  {
547  }

◆ createCredential()

CredentialModel org.keycloak.models.jpa.JpaUserProvider.createCredential ( RealmModel  realm,
UserModel  user,
CredentialModel  cred 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

872  {
873  CredentialEntity entity = new CredentialEntity();
874  String id = cred.getId() == null ? KeycloakModelUtils.generateId() : cred.getId();
875  entity.setId(id);
876  entity.setAlgorithm(cred.getAlgorithm());
877  entity.setCounter(cred.getCounter());
878  entity.setCreatedDate(cred.getCreatedDate());
879  entity.setDevice(cred.getDevice());
880  entity.setDigits(cred.getDigits());
881  entity.setHashIterations(cred.getHashIterations());
882  entity.setPeriod(cred.getPeriod());
883  entity.setSalt(cred.getSalt());
884  entity.setType(cred.getType());
885  entity.setValue(cred.getValue());
886  UserEntity userRef = em.getReference(UserEntity.class, user.getId());
887  entity.setUser(userRef);
888  em.persist(entity);
889 
890  MultivaluedHashMap<String, String> config = cred.getConfig();
891  if (config != null && !config.isEmpty()) {
892 
893  for (String key : config.keySet()) {
894  List<String> values = config.getList(key);
895  for (String val : values) {
896  CredentialAttributeEntity attr = new CredentialAttributeEntity();
897  attr.setId(KeycloakModelUtils.generateId());
898  attr.setValue(val);
899  attr.setName(key);
900  attr.setCredential(entity);
901  em.persist(attr);
902  entity.getCredentialAttributes().add(attr);
903  }
904  }
905 
906  }
907 
908  UserEntity userEntity = userInEntityManagerContext(user.getId());
909  if (userEntity != null) {
910  userEntity.getCredentials().add(entity);
911  }
912  return toModel(entity);
913  }
Collection< CredentialEntity > getCredentials()
Definition: UserEntity.java:220
EntityManager em
Definition: JpaUserProvider.java:75
CredentialModel toModel(CredentialEntity entity)
Definition: JpaUserProvider.java:935
UserEntity userInEntityManagerContext(String id)
Definition: JpaUserProvider.java:1025

◆ ensureEmailConstraint()

void org.keycloak.models.jpa.JpaUserProvider.ensureEmailConstraint ( List< UserEntity users,
RealmModel  realm 
)
inlineprotected
1004  {
1005  UserEntity user = users.get(0);
1006 
1007  if (users.size() > 1) {
1008  // Realm settings have been changed from allowing duplicate emails to not allowing them
1009  // but duplicates haven't been removed.
1010  throw new ModelDuplicateException("Multiple users with email '" + user.getEmail() + "' exist in Keycloak.");
1011  }
1012 
1013  if (realm.isDuplicateEmailsAllowed()) {
1014  return;
1015  }
1016 
1017  if (user.getEmail() != null && !user.getEmail().equals(user.getEmailConstraint())) {
1018  // Realm settings have been changed from allowing duplicate emails to not allowing them.
1019  // We need to update the email constraint to reflect this change in the user entities.
1020  user.setEmailConstraint(user.getEmail());
1021  em.persist(user);
1022  }
1023  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ findFederatedIdentity()

FederatedIdentityEntity org.keycloak.models.jpa.JpaUserProvider.findFederatedIdentity ( UserModel  user,
String  identityProvider 
)
inlineprivate
769  {
770  TypedQuery<FederatedIdentityEntity> query = em.createNamedQuery("findFederatedIdentityByUserAndProvider", FederatedIdentityEntity.class);
771  UserEntity userEntity = em.getReference(UserEntity.class, user.getId());
772  query.setParameter("user", userEntity);
773  query.setParameter("identityProvider", identityProvider);
774  List<FederatedIdentityEntity> results = query.getResultList();
775  return results.size() > 0 ? results.get(0) : null;
776  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ getConsentByClient()

UserConsentModel org.keycloak.models.jpa.JpaUserProvider.getConsentByClient ( RealmModel  realm,
String  userId,
String  clientId 
)
inline

org.keycloak.models.UserProviderを実装しています。

215  {
216  UserConsentEntity entity = getGrantedConsentEntity(userId, clientId);
217  return toConsentModel(realm, entity);
218  }
UserConsentModel toConsentModel(RealmModel realm, UserConsentEntity entity)
Definition: JpaUserProvider.java:278
UserConsentEntity getGrantedConsentEntity(String userId, String clientId)
Definition: JpaUserProvider.java:256

◆ getConsents()

List<UserConsentModel> org.keycloak.models.jpa.JpaUserProvider.getConsents ( RealmModel  realm,
String  userId 
)
inline

org.keycloak.models.UserProviderを実装しています。

221  {
222  TypedQuery<UserConsentEntity> query = em.createNamedQuery("userConsentsByUser", UserConsentEntity.class);
223  query.setParameter("userId", userId);
224  List<UserConsentEntity> results = query.getResultList();
225 
226  List<UserConsentModel> consents = new ArrayList<UserConsentModel>();
227  for (UserConsentEntity entity : results) {
228  UserConsentModel model = toConsentModel(realm, entity);
229  consents.add(model);
230  }
231  return consents;
232  }
EntityManager em
Definition: JpaUserProvider.java:75
UserConsentModel toConsentModel(RealmModel realm, UserConsentEntity entity)
Definition: JpaUserProvider.java:278

◆ getFederatedIdentities()

Set<FederatedIdentityModel> org.keycloak.models.jpa.JpaUserProvider.getFederatedIdentities ( UserModel  user,
RealmModel  realm 
)
inline

org.keycloak.models.UserProviderを実装しています。

780  {
781  TypedQuery<FederatedIdentityEntity> query = em.createNamedQuery("findFederatedIdentityByUser", FederatedIdentityEntity.class);
782  UserEntity userEntity = em.getReference(UserEntity.class, user.getId());
783  query.setParameter("user", userEntity);
784  List<FederatedIdentityEntity> results = query.getResultList();
785  Set<FederatedIdentityModel> set = new HashSet<FederatedIdentityModel>();
786  for (FederatedIdentityEntity entity : results) {
787  set.add(new FederatedIdentityModel(entity.getIdentityProvider(), entity.getUserId(), entity.getUserName(), entity.getToken()));
788  }
789  return set;
790  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ getFederatedIdentity()

FederatedIdentityModel org.keycloak.models.jpa.JpaUserProvider.getFederatedIdentity ( UserModel  user,
String  identityProvider,
RealmModel  realm 
)
inline

org.keycloak.models.UserProviderを実装しています。

793  {
794  FederatedIdentityEntity entity = findFederatedIdentity(user, identityProvider);
795  return (entity != null) ? new FederatedIdentityModel(entity.getIdentityProvider(), entity.getUserId(), entity.getUserName(), entity.getToken()) : null;
796  }
FederatedIdentityEntity findFederatedIdentity(UserModel user, String identityProvider)
Definition: JpaUserProvider.java:769

◆ getGrantedConsentEntity()

UserConsentEntity org.keycloak.models.jpa.JpaUserProvider.getGrantedConsentEntity ( String  userId,
String  clientId 
)
inlineprivate
256  {
257  StorageId clientStorageId = new StorageId(clientId);
258  String queryName = clientStorageId.isLocal() ? "userConsentByUserAndClient" : "userConsentByUserAndExternalClient";
259  TypedQuery<UserConsentEntity> query = em.createNamedQuery(queryName, UserConsentEntity.class);
260  query.setParameter("userId", userId);
261  if (clientStorageId.isLocal()) {
262  query.setParameter("clientId", clientId);
263  } else {
264  query.setParameter("clientStorageProvider", clientStorageId.getProviderId());
265  query.setParameter("externalClientId", clientStorageId.getExternalId());
266  }
267  List<UserConsentEntity> results = query.getResultList();
268  if (results.size() > 1) {
269  throw new ModelException("More results found for user [" + userId + "] and client [" + clientId + "]");
270  } else if (results.size() == 1) {
271  return results.get(0);
272  } else {
273  return null;
274  }
275 
276  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ getGroupMembers() [1/2]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getGroupMembers ( RealmModel  realm,
GroupModel  group 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

479  {
480  TypedQuery<UserEntity> query = em.createNamedQuery("groupMembership", UserEntity.class);
481  query.setParameter("groupId", group.getId());
482  List<UserEntity> results = query.getResultList();
483 
484  List<UserModel> users = new ArrayList<UserModel>();
485  for (UserEntity user : results) {
486  users.add(new UserAdapter(session, realm, em, user));
487  }
488  return users;
489  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getGroupMembers() [2/2]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getGroupMembers ( RealmModel  realm,
GroupModel  group,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

637  {
638  TypedQuery<UserEntity> query = em.createNamedQuery("groupMembership", UserEntity.class);
639  query.setParameter("groupId", group.getId());
640  if (firstResult != -1) {
641  query.setFirstResult(firstResult);
642  }
643  if (maxResults != -1) {
644  query.setMaxResults(maxResults);
645  }
646  List<UserEntity> results = query.getResultList();
647 
648  List<UserModel> users = new LinkedList<>();
649  for (UserEntity user : results) {
650  users.add(new UserAdapter(session, realm, em, user));
651  }
652  return users;
653  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getNotBeforeOfUser()

int org.keycloak.models.jpa.JpaUserProvider.getNotBeforeOfUser ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.models.UserProviderを実装しています。

349  {
350  UserEntity entity = em.getReference(UserEntity.class, user.getId());
351  return entity.getNotBefore();
352  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ getRoleMembers() [1/2]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getRoleMembers ( RealmModel  realm,
RoleModel  role 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

492  {
493  TypedQuery<UserEntity> query = em.createNamedQuery("usersInRole", UserEntity.class);
494  query.setParameter("roleId", role.getId());
495  List<UserEntity> results = query.getResultList();
496 
497  List<UserModel> users = new ArrayList<UserModel>();
498  for (UserEntity user : results) {
499  users.add(new UserAdapter(session, realm, em, user));
500  }
501  return users;
502  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getRoleMembers() [2/2]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getRoleMembers ( RealmModel  realm,
RoleModel  role,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

656  {
657  TypedQuery<UserEntity> query = em.createNamedQuery("usersInRole", UserEntity.class);
658  query.setParameter("roleId", role.getId());
659  if (firstResult != -1) {
660  query.setFirstResult(firstResult);
661  }
662  if (maxResults != -1) {
663  query.setMaxResults(maxResults);
664  }
665  List<UserEntity> results = query.getResultList();
666 
667  List<UserModel> users = new LinkedList<>();
668  for (UserEntity user : results) {
669  users.add(new UserAdapter(session, realm, em, user));
670  }
671  return users;
672  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getServiceAccount()

UserModel org.keycloak.models.jpa.JpaUserProvider.getServiceAccount ( ClientModel  client)
inline

org.keycloak.models.UserProviderを実装しています。

568  {
569  TypedQuery<UserEntity> query = em.createNamedQuery("getRealmUserByServiceAccount", UserEntity.class);
570  query.setParameter("realmId", client.getRealm().getId());
571  query.setParameter("clientInternalId", client.getId());
572  List<UserEntity> results = query.getResultList();
573  if (results.isEmpty()) {
574  return null;
575  } else if (results.size() > 1) {
576  throw new IllegalStateException("More service account linked users found for client=" + client.getClientId() +
577  ", results=" + results);
578  } else {
579  UserEntity user = results.get(0);
580  return new UserAdapter(session, client.getRealm(), em, user);
581  }
582  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getStoredCredentialById()

CredentialModel org.keycloak.models.jpa.JpaUserProvider.getStoredCredentialById ( RealmModel  realm,
UserModel  user,
String  id 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

928  {
929  CredentialEntity entity = em.find(CredentialEntity.class, id);
930  if (entity == null) return null;
931  CredentialModel model = toModel(entity);
932  return model;
933  }
EntityManager em
Definition: JpaUserProvider.java:75
CredentialModel toModel(CredentialEntity entity)
Definition: JpaUserProvider.java:935

◆ getStoredCredentialByNameAndType()

CredentialModel org.keycloak.models.jpa.JpaUserProvider.getStoredCredentialByNameAndType ( RealmModel  realm,
UserModel  user,
String  name,
String  type 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

992  {
993  UserEntity userEntity = em.getReference(UserEntity.class, user.getId());
994  TypedQuery<CredentialEntity> query = em.createNamedQuery("credentialByNameAndType", CredentialEntity.class)
995  .setParameter("type", type)
996  .setParameter("device", name)
997  .setParameter("user", userEntity);
998  List<CredentialEntity> results = query.getResultList();
999  if (results.isEmpty()) return null;
1000  return toModel(results.get(0));
1001  }
EntityManager em
Definition: JpaUserProvider.java:75
CredentialModel toModel(CredentialEntity entity)
Definition: JpaUserProvider.java:935

◆ getStoredCredentials()

List<CredentialModel> org.keycloak.models.jpa.JpaUserProvider.getStoredCredentials ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

957  {
958  UserEntity userEntity = em.getReference(UserEntity.class, user.getId());
959  TypedQuery<CredentialEntity> query = em.createNamedQuery("credentialByUser", CredentialEntity.class)
960  .setParameter("user", userEntity);
961  List<CredentialEntity> results = query.getResultList();
962  List<CredentialModel> rtn = new LinkedList<>();
963  for (CredentialEntity entity : results) {
964  rtn.add(toModel(entity));
965  }
966  return rtn;
967  }
EntityManager em
Definition: JpaUserProvider.java:75
CredentialModel toModel(CredentialEntity entity)
Definition: JpaUserProvider.java:935

◆ getStoredCredentialsByType()

List<CredentialModel> org.keycloak.models.jpa.JpaUserProvider.getStoredCredentialsByType ( RealmModel  realm,
UserModel  user,
String  type 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

970  {
971  List<CredentialEntity> results;
972  UserEntity userEntity = userInEntityManagerContext(user.getId());
973  if (userEntity != null) {
974 
975  // user already in persistence context, no need to execute a query
976  results = userEntity.getCredentials().stream().filter(it -> it.getType().equals(type)).collect(Collectors.toList());
977  } else {
978  userEntity = em.getReference(UserEntity.class, user.getId());
979  TypedQuery<CredentialEntity> query = em.createNamedQuery("credentialByUserAndType", CredentialEntity.class)
980  .setParameter("type", type)
981  .setParameter("user", userEntity);
982  results = query.getResultList();
983  }
984  List<CredentialModel> rtn = new LinkedList<>();
985  for (CredentialEntity entity : results) {
986  rtn.add(toModel(entity));
987  }
988  return rtn;
989  }
Collection< CredentialEntity > getCredentials()
Definition: UserEntity.java:220
EntityManager em
Definition: JpaUserProvider.java:75
CredentialModel toModel(CredentialEntity entity)
Definition: JpaUserProvider.java:935
UserEntity userInEntityManagerContext(String id)
Definition: JpaUserProvider.java:1025

◆ getUserByEmail()

UserModel org.keycloak.models.jpa.JpaUserProvider.getUserByEmail ( String  email,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserLookupProviderを実装しています。

532  {
533  TypedQuery<UserEntity> query = em.createNamedQuery("getRealmUserByEmail", UserEntity.class);
534  query.setParameter("email", email.toLowerCase());
535  query.setParameter("realmId", realm.getId());
536  List<UserEntity> results = query.getResultList();
537 
538  if (results.isEmpty()) return null;
539 
540  ensureEmailConstraint(results, realm);
541 
542  return new UserAdapter(session, realm, em, results.get(0));
543  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
void ensureEmailConstraint(List< UserEntity > users, RealmModel realm)
Definition: JpaUserProvider.java:1004
EntityManager em
Definition: JpaUserProvider.java:75

◆ getUserByFederatedIdentity()

UserModel org.keycloak.models.jpa.JpaUserProvider.getUserByFederatedIdentity ( FederatedIdentityModel  identity,
RealmModel  realm 
)
inline

org.keycloak.models.UserProviderを実装しています。

550  {
551  TypedQuery<UserEntity> query = em.createNamedQuery("findUserByFederatedIdentityAndRealm", UserEntity.class);
552  query.setParameter("realmId", realm.getId());
553  query.setParameter("identityProvider", identity.getIdentityProvider());
554  query.setParameter("userId", identity.getUserId());
555  List<UserEntity> results = query.getResultList();
556  if (results.isEmpty()) {
557  return null;
558  } else if (results.size() > 1) {
559  throw new IllegalStateException("More results found for identityProvider=" + identity.getIdentityProvider() +
560  ", userId=" + identity.getUserId() + ", results=" + results);
561  } else {
562  UserEntity user = results.get(0);
563  return new UserAdapter(session, realm, em, user);
564  }
565  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getUserById()

UserModel org.keycloak.models.jpa.JpaUserProvider.getUserById ( String  id,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserLookupProviderを実装しています。

512  {
513  TypedQuery<UserEntity> query = em.createNamedQuery("getRealmUserById", UserEntity.class);
514  query.setParameter("id", id);
515  query.setParameter("realmId", realm.getId());
516  List<UserEntity> entities = query.getResultList();
517  if (entities.size() == 0) return null;
518  return new UserAdapter(session, realm, em, entities.get(0));
519  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getUserByUsername()

UserModel org.keycloak.models.jpa.JpaUserProvider.getUserByUsername ( String  username,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserLookupProviderを実装しています。

522  {
523  TypedQuery<UserEntity> query = em.createNamedQuery("getRealmUserByUsername", UserEntity.class);
524  query.setParameter("username", username.toLowerCase());
525  query.setParameter("realmId", realm.getId());
526  List<UserEntity> results = query.getResultList();
527  if (results.size() == 0) return null;
528  return new UserAdapter(session, realm, em, results.get(0));
529  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getUsers() [1/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getUsers ( RealmModel  realm,
boolean  includeServiceAccounts 
)
inline

org.keycloak.models.UserProviderを実装しています。

585  {
586  return getUsers(realm, -1, -1, includeServiceAccounts);
587  }
List< UserModel > getUsers(RealmModel realm, boolean includeServiceAccounts)
Definition: JpaUserProvider.java:585

◆ getUsers() [2/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getUsers ( RealmModel  realm)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

609  {
610  return getUsers(realm, false);
611  }
List< UserModel > getUsers(RealmModel realm, boolean includeServiceAccounts)
Definition: JpaUserProvider.java:585

◆ getUsers() [3/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getUsers ( RealmModel  realm,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

614  {
615  return getUsers(realm, firstResult, maxResults, false);
616  }
List< UserModel > getUsers(RealmModel realm, boolean includeServiceAccounts)
Definition: JpaUserProvider.java:585

◆ getUsers() [4/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.getUsers ( RealmModel  realm,
int  firstResult,
int  maxResults,
boolean  includeServiceAccounts 
)
inline

org.keycloak.models.UserProviderを実装しています。

619  {
620  String queryName = includeServiceAccounts ? "getAllUsersByRealm" : "getAllUsersByRealmExcludeServiceAccount" ;
621 
622  TypedQuery<UserEntity> query = em.createNamedQuery(queryName, UserEntity.class);
623  query.setParameter("realmId", realm.getId());
624  if (firstResult != -1) {
625  query.setFirstResult(firstResult);
626  }
627  if (maxResults != -1) {
628  query.setMaxResults(maxResults);
629  }
630  List<UserEntity> results = query.getResultList();
631  List<UserModel> users = new LinkedList<>();
632  for (UserEntity entity : results) users.add(new UserAdapter(session, realm, em, entity));
633  return users;
634  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ getUsersCount() [1/2]

int org.keycloak.models.jpa.JpaUserProvider.getUsersCount ( RealmModel  realm,
boolean  includeServiceAccount 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

590  {
591  String namedQuery = "getRealmUserCountExcludeServiceAccount";
592 
593  if (includeServiceAccount) {
594  namedQuery = "getRealmUserCount";
595  }
596 
597  Object count = em.createNamedQuery(namedQuery)
598  .setParameter("realmId", realm.getId())
599  .getSingleResult();
600  return ((Number)count).intValue();
601  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ getUsersCount() [2/2]

int org.keycloak.models.jpa.JpaUserProvider.getUsersCount ( RealmModel  realm)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

604  {
605  return getUsersCount(realm, false);
606  }
int getUsersCount(RealmModel realm, boolean includeServiceAccount)
Definition: JpaUserProvider.java:590

◆ grantToAllUsers()

void org.keycloak.models.jpa.JpaUserProvider.grantToAllUsers ( RealmModel  realm,
RoleModel  role 
)
inline

org.keycloak.storage.user.UserBulkUpdateProviderを実装しています。

355  {
356  int num = em.createNamedQuery("grantRoleToAllUsers")
357  .setParameter("realmId", realm.getId())
358  .setParameter("roleId", role.getId())
359  .executeUpdate();
360  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ preRemove() [1/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( RealmModel  realm)
inline

org.keycloak.models.UserProviderを実装しています。

363  {
364  int num = em.createNamedQuery("deleteUserConsentClientScopesByRealm")
365  .setParameter("realmId", realm.getId()).executeUpdate();
366  num = em.createNamedQuery("deleteUserConsentsByRealm")
367  .setParameter("realmId", realm.getId()).executeUpdate();
368  num = em.createNamedQuery("deleteUserRoleMappingsByRealm")
369  .setParameter("realmId", realm.getId()).executeUpdate();
370  num = em.createNamedQuery("deleteUserRequiredActionsByRealm")
371  .setParameter("realmId", realm.getId()).executeUpdate();
372  num = em.createNamedQuery("deleteFederatedIdentityByRealm")
373  .setParameter("realmId", realm.getId()).executeUpdate();
374  num = em.createNamedQuery("deleteCredentialAttributeByRealm")
375  .setParameter("realmId", realm.getId()).executeUpdate();
376  num = em.createNamedQuery("deleteCredentialsByRealm")
377  .setParameter("realmId", realm.getId()).executeUpdate();
378  num = em.createNamedQuery("deleteUserAttributesByRealm")
379  .setParameter("realmId", realm.getId()).executeUpdate();
380  num = em.createNamedQuery("deleteUserGroupMembershipByRealm")
381  .setParameter("realmId", realm.getId()).executeUpdate();
382  num = em.createNamedQuery("deleteUsersByRealm")
383  .setParameter("realmId", realm.getId()).executeUpdate();
384  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ preRemove() [2/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( RealmModel  realm,
RoleModel  role 
)
inline

org.keycloak.models.UserProviderを実装しています。

439  {
440  em.createNamedQuery("deleteUserRoleMappingsByRole").setParameter("roleId", role.getId()).executeUpdate();
441  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ preRemove() [3/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( RealmModel  realm,
ClientModel  client 
)
inline

org.keycloak.models.UserProviderを実装しています。

444  {
445  StorageId clientStorageId = new StorageId(client.getId());
446  if (clientStorageId.isLocal()) {
447  int num = em.createNamedQuery("deleteUserConsentClientScopesByClient")
448  .setParameter("clientId", client.getId())
449  .executeUpdate();
450  num = em.createNamedQuery("deleteUserConsentsByClient")
451  .setParameter("clientId", client.getId())
452  .executeUpdate();
453  } else {
454  em.createNamedQuery("deleteUserConsentClientScopesByExternalClient")
455  .setParameter("clientStorageProvider", clientStorageId.getProviderId())
456  .setParameter("externalClientId", clientStorageId.getExternalId())
457  .executeUpdate();
458  em.createNamedQuery("deleteUserConsentsByExternalClient")
459  .setParameter("clientStorageProvider", clientStorageId.getProviderId())
460  .setParameter("externalClientId", clientStorageId.getExternalId())
461  .executeUpdate();
462 
463  }
464  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ preRemove() [4/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( ProtocolMapperModel  protocolMapper)
inline

org.keycloak.models.UserProviderを実装しています。

467  {
468  // No-op
469  }

◆ preRemove() [5/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( ClientScopeModel  clientScope)
inline

org.keycloak.models.UserProviderを実装しています。

472  {
473  em.createNamedQuery("deleteUserConsentClientScopesByClientScope")
474  .setParameter("scopeId", clientScope.getId())
475  .executeUpdate();
476  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ preRemove() [6/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( RealmModel  realm,
GroupModel  group 
)
inline

org.keycloak.models.UserProviderを実装しています。

506  {
507  em.createNamedQuery("deleteUserGroupMembershipsByGroup").setParameter("groupId", group.getId()).executeUpdate();
508 
509  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ preRemove() [7/7]

void org.keycloak.models.jpa.JpaUserProvider.preRemove ( RealmModel  realm,
ComponentModel  component 
)
inline

org.keycloak.models.UserProviderを実装しています。

799  {
800  if (component.getProviderType().equals(UserStorageProvider.class.getName())) {
801  removeImportedUsers(realm, component.getId());
802  }
803  if (component.getProviderType().equals(ClientStorageProvider.class.getName())) {
804  removeConsentByClientStorageProvider(realm, component.getId());
805  }
806  }
void removeConsentByClientStorageProvider(RealmModel realm, String providerId)
Definition: JpaUserProvider.java:808
void removeImportedUsers(RealmModel realm, String storageProviderId)
Definition: JpaUserProvider.java:387

◆ removeConsentByClientStorageProvider()

void org.keycloak.models.jpa.JpaUserProvider.removeConsentByClientStorageProvider ( RealmModel  realm,
String  providerId 
)
inlineprotected
808  {
809  em.createNamedQuery("deleteUserConsentClientScopesByClientStorageProvider")
810  .setParameter("clientStorageProvider", providerId)
811  .executeUpdate();
812  em.createNamedQuery("deleteUserConsentsByClientStorageProvider")
813  .setParameter("clientStorageProvider", providerId)
814  .executeUpdate();
815 
816  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ removeFederatedIdentity()

boolean org.keycloak.models.jpa.JpaUserProvider.removeFederatedIdentity ( RealmModel  realm,
UserModel  user,
String  identityProvider 
)
inline

org.keycloak.models.UserProviderを実装しています。

173  {
174  FederatedIdentityEntity entity = findFederatedIdentity(user, identityProvider);
175  if (entity != null) {
176  em.remove(entity);
177  em.flush();
178  return true;
179  } else {
180  return false;
181  }
182  }
EntityManager em
Definition: JpaUserProvider.java:75
FederatedIdentityEntity findFederatedIdentity(UserModel user, String identityProvider)
Definition: JpaUserProvider.java:769

◆ removeImportedUsers()

void org.keycloak.models.jpa.JpaUserProvider.removeImportedUsers ( RealmModel  realm,
String  storageProviderId 
)
inline

org.keycloak.models.UserProviderを実装しています。

387  {
388  int num = em.createNamedQuery("deleteUserRoleMappingsByRealmAndLink")
389  .setParameter("realmId", realm.getId())
390  .setParameter("link", storageProviderId)
391  .executeUpdate();
392  num = em.createNamedQuery("deleteUserRequiredActionsByRealmAndLink")
393  .setParameter("realmId", realm.getId())
394  .setParameter("link", storageProviderId)
395  .executeUpdate();
396  num = em.createNamedQuery("deleteFederatedIdentityByRealmAndLink")
397  .setParameter("realmId", realm.getId())
398  .setParameter("link", storageProviderId)
399  .executeUpdate();
400  num = em.createNamedQuery("deleteCredentialAttributeByRealmAndLink")
401  .setParameter("realmId", realm.getId())
402  .setParameter("link", storageProviderId)
403  .executeUpdate();
404  num = em.createNamedQuery("deleteCredentialsByRealmAndLink")
405  .setParameter("realmId", realm.getId())
406  .setParameter("link", storageProviderId)
407  .executeUpdate();
408  num = em.createNamedQuery("deleteUserAttributesByRealmAndLink")
409  .setParameter("realmId", realm.getId())
410  .setParameter("link", storageProviderId)
411  .executeUpdate();
412  num = em.createNamedQuery("deleteUserGroupMembershipsByRealmAndLink")
413  .setParameter("realmId", realm.getId())
414  .setParameter("link", storageProviderId)
415  .executeUpdate();
416  num = em.createNamedQuery("deleteUserConsentClientScopesByRealmAndLink")
417  .setParameter("realmId", realm.getId())
418  .setParameter("link", storageProviderId)
419  .executeUpdate();
420  num = em.createNamedQuery("deleteUserConsentsByRealmAndLink")
421  .setParameter("realmId", realm.getId())
422  .setParameter("link", storageProviderId)
423  .executeUpdate();
424  num = em.createNamedQuery("deleteUsersByRealmAndLink")
425  .setParameter("realmId", realm.getId())
426  .setParameter("link", storageProviderId)
427  .executeUpdate();
428  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ removeStoredCredential()

boolean org.keycloak.models.jpa.JpaUserProvider.removeStoredCredential ( RealmModel  realm,
UserModel  user,
String  id 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

916  {
917  CredentialEntity entity = em.find(CredentialEntity.class, id);
918  if (entity == null) return false;
919  em.remove(entity);
920  UserEntity userEntity = userInEntityManagerContext(user.getId());
921  if (userEntity != null) {
922  userEntity.getCredentials().remove(entity);
923  }
924  return true;
925  }
Collection< CredentialEntity > getCredentials()
Definition: UserEntity.java:220
EntityManager em
Definition: JpaUserProvider.java:75
UserEntity userInEntityManagerContext(String id)
Definition: JpaUserProvider.java:1025

◆ removeUser() [1/2]

boolean org.keycloak.models.jpa.JpaUserProvider.removeUser ( RealmModel  realm,
UserModel  user 
)
inline

org.keycloak.storage.user.UserRegistrationProviderを実装しています。

122  {
123  UserEntity userEntity = em.find(UserEntity.class, user.getId());
124  if (userEntity == null) return false;
125  removeUser(userEntity);
126  return true;
127  }
boolean removeUser(RealmModel realm, UserModel user)
Definition: JpaUserProvider.java:122
EntityManager em
Definition: JpaUserProvider.java:75

◆ removeUser() [2/2]

void org.keycloak.models.jpa.JpaUserProvider.removeUser ( UserEntity  user)
inlineprivate
129  {
130  String id = user.getId();
131  em.createNamedQuery("deleteUserRoleMappingsByUser").setParameter("user", user).executeUpdate();
132  em.createNamedQuery("deleteUserGroupMembershipsByUser").setParameter("user", user).executeUpdate();
133  em.createNamedQuery("deleteFederatedIdentityByUser").setParameter("user", user).executeUpdate();
134  em.createNamedQuery("deleteUserConsentClientScopesByUser").setParameter("user", user).executeUpdate();
135  em.createNamedQuery("deleteUserConsentsByUser").setParameter("user", user).executeUpdate();
136  em.flush();
137  // not sure why i have to do a clear() here. I was getting some messed up errors that Hibernate couldn't
138  // un-delete the UserEntity.
139  em.clear();
140  user = em.find(UserEntity.class, id);
141  if (user != null) {
142  em.remove(user);
143  }
144 
145  em.flush();
146  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ revokeConsentForClient()

boolean org.keycloak.models.jpa.JpaUserProvider.revokeConsentForClient ( RealmModel  realm,
String  userId,
String  clientId 
)
inline

org.keycloak.models.UserProviderを実装しています。

246  {
247  UserConsentEntity consentEntity = getGrantedConsentEntity(userId, clientId);
248  if (consentEntity == null) return false;
249 
250  em.remove(consentEntity);
251  em.flush();
252  return true;
253  }
EntityManager em
Definition: JpaUserProvider.java:75
UserConsentEntity getGrantedConsentEntity(String userId, String clientId)
Definition: JpaUserProvider.java:256

◆ searchForUser() [1/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.searchForUser ( String  search,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

675  {
676  return searchForUser(search, realm, -1, -1);
677  }
List< UserModel > searchForUser(String search, RealmModel realm)
Definition: JpaUserProvider.java:675

◆ searchForUser() [2/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.searchForUser ( String  search,
RealmModel  realm,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

680  {
681  TypedQuery<UserEntity> query = em.createNamedQuery("searchForUser", UserEntity.class);
682  query.setParameter("realmId", realm.getId());
683  query.setParameter("search", "%" + search.toLowerCase() + "%");
684  if (firstResult != -1) {
685  query.setFirstResult(firstResult);
686  }
687  if (maxResults != -1) {
688  query.setMaxResults(maxResults);
689  }
690  List<UserEntity> results = query.getResultList();
691  List<UserModel> users = new LinkedList<>();
692  for (UserEntity entity : results) users.add(new UserAdapter(session, realm, em, entity));
693  return users;
694  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ searchForUser() [3/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.searchForUser ( Map< String, String >  attributes,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

697  {
698  return searchForUser(attributes, realm, -1, -1);
699  }
List< UserModel > searchForUser(String search, RealmModel realm)
Definition: JpaUserProvider.java:675

◆ searchForUser() [4/4]

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.searchForUser ( Map< String, String >  attributes,
RealmModel  realm,
int  firstResult,
int  maxResults 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

702  {
703  StringBuilder builder = new StringBuilder("select u from UserEntity u where u.realmId = :realmId");
704  for (Map.Entry<String, String> entry : attributes.entrySet()) {
705  String attribute = null;
706  String parameterName = null;
707  if (entry.getKey().equals(UserModel.USERNAME)) {
708  attribute = "lower(u.username)";
709  parameterName = JpaUserProvider.USERNAME;
710  } else if (entry.getKey().equalsIgnoreCase(UserModel.FIRST_NAME)) {
711  attribute = "lower(u.firstName)";
712  parameterName = JpaUserProvider.FIRST_NAME;
713  } else if (entry.getKey().equalsIgnoreCase(UserModel.LAST_NAME)) {
714  attribute = "lower(u.lastName)";
715  parameterName = JpaUserProvider.LAST_NAME;
716  } else if (entry.getKey().equalsIgnoreCase(UserModel.EMAIL)) {
717  attribute = "lower(u.email)";
718  parameterName = JpaUserProvider.EMAIL;
719  }
720  if (attribute == null) continue;
721  builder.append(" and ");
722  builder.append(attribute).append(" like :").append(parameterName);
723  }
724  builder.append(" order by u.username");
725  String q = builder.toString();
726  TypedQuery<UserEntity> query = em.createQuery(q, UserEntity.class);
727  query.setParameter("realmId", realm.getId());
728  for (Map.Entry<String, String> entry : attributes.entrySet()) {
729  String parameterName = null;
730  if (entry.getKey().equals(UserModel.USERNAME)) {
731  parameterName = JpaUserProvider.USERNAME;
732  } else if (entry.getKey().equalsIgnoreCase(UserModel.FIRST_NAME)) {
733  parameterName = JpaUserProvider.FIRST_NAME;
734  } else if (entry.getKey().equalsIgnoreCase(UserModel.LAST_NAME)) {
735  parameterName = JpaUserProvider.LAST_NAME;
736  } else if (entry.getKey().equalsIgnoreCase(UserModel.EMAIL)) {
737  parameterName = JpaUserProvider.EMAIL;
738  }
739  if (parameterName == null) continue;
740  query.setParameter(parameterName, "%" + entry.getValue().toLowerCase() + "%");
741  }
742  if (firstResult != -1) {
743  query.setFirstResult(firstResult);
744  }
745  if (maxResults != -1) {
746  query.setMaxResults(maxResults);
747  }
748  List<UserEntity> results = query.getResultList();
749  List<UserModel> users = new ArrayList<UserModel>();
750  for (UserEntity entity : results) users.add(new UserAdapter(session, realm, em, entity));
751  return users;
752  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75
JpaUserProvider(KeycloakSession session, EntityManager em)
Definition: JpaUserProvider.java:77

◆ searchForUserByUserAttribute()

List<UserModel> org.keycloak.models.jpa.JpaUserProvider.searchForUserByUserAttribute ( String  attrName,
String  attrValue,
RealmModel  realm 
)
inline

org.keycloak.storage.user.UserQueryProviderを実装しています。

755  {
756  TypedQuery<UserEntity> query = em.createNamedQuery("getRealmUsersByAttributeNameAndValue", UserEntity.class);
757  query.setParameter("name", attrName);
758  query.setParameter("value", attrValue);
759  query.setParameter("realmId", realm.getId());
760  List<UserEntity> results = query.getResultList();
761 
762  List<UserModel> users = new ArrayList<UserModel>();
763  for (UserEntity user : results) {
764  users.add(new UserAdapter(session, realm, em, user));
765  }
766  return users;
767  }
final KeycloakSession session
Definition: JpaUserProvider.java:74
EntityManager em
Definition: JpaUserProvider.java:75

◆ setNotBeforeForUser()

void org.keycloak.models.jpa.JpaUserProvider.setNotBeforeForUser ( RealmModel  realm,
UserModel  user,
int  notBefore 
)
inline

org.keycloak.models.UserProviderを実装しています。

343  {
344  UserEntity entity = em.getReference(UserEntity.class, user.getId());
345  entity.setNotBefore(notBefore);
346  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ toConsentModel()

UserConsentModel org.keycloak.models.jpa.JpaUserProvider.toConsentModel ( RealmModel  realm,
UserConsentEntity  entity 
)
inlineprivate
278  {
279  if (entity == null) {
280  return null;
281  }
282 
283  StorageId clientStorageId = null;
284  if ( entity.getClientId() == null) {
285  clientStorageId = new StorageId(entity.getClientStorageProvider(), entity.getExternalClientId());
286  } else {
287  clientStorageId = new StorageId(entity.getClientId());
288  }
289 
290  ClientModel client = realm.getClientById(clientStorageId.getId());
291  if (client == null) {
292  throw new ModelException("Client with id " + clientStorageId.getId() + " is not available");
293  }
294  UserConsentModel model = new UserConsentModel(client);
295  model.setCreatedDate(entity.getCreatedDate());
296  model.setLastUpdatedDate(entity.getLastUpdatedDate());
297 
298  Collection<UserConsentClientScopeEntity> grantedClientScopeEntities = entity.getGrantedClientScopes();
299  if (grantedClientScopeEntities != null) {
300  for (UserConsentClientScopeEntity grantedClientScope : grantedClientScopeEntities) {
301  ClientScopeModel grantedClientScopeModel = KeycloakModelUtils.findClientScopeById(realm, grantedClientScope.getScopeId());
302  if (grantedClientScopeModel != null) {
303  model.addGrantedClientScope(grantedClientScopeModel);
304  }
305  }
306  }
307 
308  return model;
309  }

◆ toModel()

CredentialModel org.keycloak.models.jpa.JpaUserProvider.toModel ( CredentialEntity  entity)
inlineprotected
935  {
936  CredentialModel model = new CredentialModel();
937  model.setId(entity.getId());
938  model.setType(entity.getType());
939  model.setValue(entity.getValue());
940  model.setAlgorithm(entity.getAlgorithm());
941  model.setSalt(entity.getSalt());
942  model.setPeriod(entity.getPeriod());
943  model.setCounter(entity.getCounter());
944  model.setCreatedDate(entity.getCreatedDate());
945  model.setDevice(entity.getDevice());
946  model.setDigits(entity.getDigits());
947  model.setHashIterations(entity.getHashIterations());
948  MultivaluedHashMap<String, String> config = new MultivaluedHashMap<>();
949  model.setConfig(config);
950  for (CredentialAttributeEntity attr : entity.getCredentialAttributes()) {
951  config.add(attr.getName(), attr.getValue());
952  }
953  return model;
954  }

◆ unlinkUsers()

void org.keycloak.models.jpa.JpaUserProvider.unlinkUsers ( RealmModel  realm,
String  storageProviderId 
)
inline

org.keycloak.models.UserProviderを実装しています。

431  {
432  em.createNamedQuery("unlinkUsers")
433  .setParameter("realmId", realm.getId())
434  .setParameter("link", storageProviderId)
435  .executeUpdate();
436  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ updateConsent()

void org.keycloak.models.jpa.JpaUserProvider.updateConsent ( RealmModel  realm,
String  userId,
UserConsentModel  consent 
)
inline

org.keycloak.models.UserProviderを実装しています。

235  {
236  String clientId = consent.getClient().getId();
237 
238  UserConsentEntity consentEntity = getGrantedConsentEntity(userId, clientId);
239  if (consentEntity == null) {
240  throw new ModelException("Consent not found for client [" + clientId + "] and user [" + userId + "]");
241  }
242 
243  updateGrantedConsentEntity(consentEntity, consent);
244  }
UserConsentEntity getGrantedConsentEntity(String userId, String clientId)
Definition: JpaUserProvider.java:256
void updateGrantedConsentEntity(UserConsentEntity consentEntity, UserConsentModel consentModel)
Definition: JpaUserProvider.java:312

◆ updateCredential()

void org.keycloak.models.jpa.JpaUserProvider.updateCredential ( RealmModel  realm,
UserModel  user,
CredentialModel  cred 
)
inline

org.keycloak.credential.UserCredentialStoreを実装しています。

819  {
820  CredentialEntity entity = em.find(CredentialEntity.class, cred.getId());
821  if (entity == null) return;
822  entity.setAlgorithm(cred.getAlgorithm());
823  entity.setCounter(cred.getCounter());
824  entity.setCreatedDate(cred.getCreatedDate());
825  entity.setDevice(cred.getDevice());
826  entity.setDigits(cred.getDigits());
827  entity.setHashIterations(cred.getHashIterations());
828  entity.setPeriod(cred.getPeriod());
829  entity.setSalt(cred.getSalt());
830  entity.setType(cred.getType());
831  entity.setValue(cred.getValue());
832  if (entity.getCredentialAttributes().isEmpty() && (cred.getConfig() == null || cred.getConfig().isEmpty())) {
833 
834  } else {
835  MultivaluedHashMap<String, String> attrs = cred.getConfig();
836  MultivaluedHashMap<String, String> config = cred.getConfig();
837  if (config == null) config = new MultivaluedHashMap<>();
838 
839  Iterator<CredentialAttributeEntity> it = entity.getCredentialAttributes().iterator();
840  while (it.hasNext()) {
841  CredentialAttributeEntity attr = it.next();
842  List<String> values = config.getList(attr.getName());
843  if (values == null || !values.contains(attr.getValue())) {
844  em.remove(attr);
845  it.remove();
846  } else {
847  attrs.add(attr.getName(), attr.getValue());
848  }
849 
850  }
851  for (String key : config.keySet()) {
852  List<String> values = config.getList(key);
853  List<String> attrValues = attrs.getList(key);
854  for (String val : values) {
855  if (attrValues == null || !attrValues.contains(val)) {
856  CredentialAttributeEntity attr = new CredentialAttributeEntity();
857  attr.setId(KeycloakModelUtils.generateId());
858  attr.setValue(val);
859  attr.setName(key);
860  attr.setCredential(entity);
861  em.persist(attr);
862  entity.getCredentialAttributes().add(attr);
863  }
864  }
865  }
866 
867  }
868 
869  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ updateFederatedIdentity()

void org.keycloak.models.jpa.JpaUserProvider.updateFederatedIdentity ( RealmModel  realm,
UserModel  federatedUser,
FederatedIdentityModel  federatedIdentityModel 
)
inline

org.keycloak.models.UserProviderを実装しています。

163  {
164  FederatedIdentityEntity federatedIdentity = findFederatedIdentity(federatedUser, federatedIdentityModel.getIdentityProvider());
165 
166  federatedIdentity.setToken(federatedIdentityModel.getToken());
167 
168  em.persist(federatedIdentity);
169  em.flush();
170  }
EntityManager em
Definition: JpaUserProvider.java:75
FederatedIdentityEntity findFederatedIdentity(UserModel user, String identityProvider)
Definition: JpaUserProvider.java:769
void setToken(String token)
Definition: FederatedIdentityEntity.java:108

◆ updateGrantedConsentEntity()

void org.keycloak.models.jpa.JpaUserProvider.updateGrantedConsentEntity ( UserConsentEntity  consentEntity,
UserConsentModel  consentModel 
)
inlineprivate
312  {
313  Collection<UserConsentClientScopeEntity> grantedClientScopeEntities = consentEntity.getGrantedClientScopes();
314  Collection<UserConsentClientScopeEntity> scopesToRemove = new HashSet<>(grantedClientScopeEntities);
315 
316  for (ClientScopeModel clientScope : consentModel.getGrantedClientScopes()) {
317  UserConsentClientScopeEntity grantedClientScopeEntity = new UserConsentClientScopeEntity();
318  grantedClientScopeEntity.setUserConsent(consentEntity);
319  grantedClientScopeEntity.setScopeId(clientScope.getId());
320 
321  // Check if it's already there
322  if (!grantedClientScopeEntities.contains(grantedClientScopeEntity)) {
323  em.persist(grantedClientScopeEntity);
324  em.flush();
325  grantedClientScopeEntities.add(grantedClientScopeEntity);
326  } else {
327  scopesToRemove.remove(grantedClientScopeEntity);
328  }
329  }
330  // Those client scopes were no longer on consentModel and will be removed
331  for (UserConsentClientScopeEntity toRemove : scopesToRemove) {
332  grantedClientScopeEntities.remove(toRemove);
333  em.remove(toRemove);
334  }
335 
336  consentEntity.setLastUpdatedDate(Time.currentTimeMillis());
337 
338  em.flush();
339  }
EntityManager em
Definition: JpaUserProvider.java:75

◆ userInEntityManagerContext()

UserEntity org.keycloak.models.jpa.JpaUserProvider.userInEntityManagerContext ( String  id)
inlineprivate
1025  {
1026  UserEntity user = em.getReference(UserEntity.class, id);
1027  boolean isLoaded = em.getEntityManagerFactory().getPersistenceUnitUtil().isLoaded(user);
1028  return isLoaded ? user : null;
1029  }
EntityManager em
Definition: JpaUserProvider.java:75

メンバ詳解

◆ em

EntityManager org.keycloak.models.jpa.JpaUserProvider.em
protected

◆ EMAIL

final String org.keycloak.models.jpa.JpaUserProvider.EMAIL = "email"
staticprivate

◆ FIRST_NAME

final String org.keycloak.models.jpa.JpaUserProvider.FIRST_NAME = "firstName"
staticprivate

◆ LAST_NAME

final String org.keycloak.models.jpa.JpaUserProvider.LAST_NAME = "lastName"
staticprivate

◆ session

final KeycloakSession org.keycloak.models.jpa.JpaUserProvider.session
private

◆ USERNAME

final String org.keycloak.models.jpa.JpaUserProvider.USERNAME = "username"
staticprivate

このクラス詳解は次のファイルから抽出されました: