private List<DBObject> buildHierarchyLevelConditions(Map<String, String> hierarchyLevels) { List<DBObject> conditions = new ArrayList<>(); for (Entry<String, String> hierarchyLevel : hierarchyLevels.entrySet()) { QueryBuilder structure = new QueryBuilder().put("m.structures"); QueryBuilder hierarchyLevelQuery = QueryBuilder.start(); hierarchyLevelQuery.put("hierarchy").is(hierarchyLevel.getKey()); hierarchyLevelQuery.put("current.level").is(hierarchyLevel.getValue()); structure.elemMatch(hierarchyLevelQuery.get()); conditions.add(structure.get()); } return conditions; }
@Override public List<Policy> findDependentPolicies(String policyId, String resourceServerId) { DBObject query = new QueryBuilder() .and("resourceServerId").is(resourceServerId) .and("associatedPolicies").is(policyId) .get(); return getMongoStore().loadEntities(PolicyEntity.class, query, getInvocationContext()).stream() .map(policyEntity -> findById(policyEntity.getId(), resourceServerId)) .collect(toList()); }
@Override public List<Resource> findByOwner(String ownerId, String resourceServerId) { DBObject query = new QueryBuilder() .and("resourceServerId").is(resourceServerId) .and("owner").is(ownerId) .get(); return getMongoStore().loadEntities(ResourceEntity.class, query, getInvocationContext()).stream() .map(scope -> findById(scope.getId(), resourceServerId)).collect(toList()); }
@Override public Resource findByName(String name, String resourceServerId) { DBObject query = new QueryBuilder() .and("resourceServerId").is(resourceServerId) .and("name").is(name) .get(); return getMongoStore().loadEntities(ResourceEntity.class, query, getInvocationContext()).stream() .map(policyEntity -> findById(policyEntity.getId(), resourceServerId)).findFirst().orElse(null); }
@Override public CloseableIteration<Statement, QueryEvaluationException> queryInstantEqualsInstant( final TemporalInstant queryInstant, final StatementConstraints constraints) throws QueryEvaluationException { final QueryBuilder qb = QueryBuilder.start(INSTANT) .is(queryInstant.getAsDateTime().toDate()); return withConstraints(constraints, qb.get()); }
@Override public List<Scope> findByResourceServer(Map<String, String[]> attributes, String resourceServerId, int firstResult, int maxResult) { QueryBuilder queryBuilder = new QueryBuilder() .and("resourceServerId").is(resourceServerId); attributes.forEach((name, value) -> { queryBuilder.and(name).regex(Pattern.compile(".*" + value[0] + ".*", Pattern.CASE_INSENSITIVE)); }); DBObject sort = new BasicDBObject("name", 1); return getMongoStore().loadEntities(ScopeEntity.class, queryBuilder.get(), sort, firstResult, maxResult, invocationContext).stream() .map(scope -> findById(scope.getId(), scope.getResourceServerId())).collect(toList()); }
@Override public List<String> getUsersByUserAttribute(RealmModel realm, String name, String value) { QueryBuilder queryBuilder = new QueryBuilder() .and("realmId").is(realm.getId()); queryBuilder.and("attributes." + name).is(value); List<FederatedUser> users = getMongoStore().loadEntities(FederatedUser.class, queryBuilder.get(), invocationContext); List<String> ids = new LinkedList<>(); for (FederatedUser user : users) ids.add(user.getId()); return ids; }
@Override public UserModel getUserByEmail(String email, RealmModel realm) { DBObject query = new QueryBuilder() .and("email").is(email.toLowerCase()) .and("realmId").is(realm.getId()) .get(); List<MongoUserEntity> users = getMongoStore().loadEntities(MongoUserEntity.class, query, invocationContext); if (users.isEmpty()) return null; ensureEmailConstraint(users, realm); return new UserAdapter(session, realm, users.get(0), invocationContext); }
@Override public List<String> getMembership(RealmModel realm, GroupModel group, int firstResult, int max) { QueryBuilder queryBuilder = new QueryBuilder() .and("realmId").is(realm.getId()); queryBuilder.and("groupIds").is(group.getId()); List<FederatedUser> users = getMongoStore().loadEntities(FederatedUser.class, queryBuilder.get(), null, firstResult, max, invocationContext); List<String> ids = new LinkedList<>(); for (FederatedUser user : users) ids.add(user.getId()); return ids; }
@Override public List findByResourceServer(String resourceServerId) { DBObject query = new QueryBuilder() .and("resourceServerId").is(resourceServerId) .get(); return getMongoStore().loadEntities(ResourceEntity.class, query, getInvocationContext()).stream() .map(scope -> findById(scope.getId(), resourceServerId)).collect(toList()); }
@Override public List<Scope> findByResourceServer(String resourceServerId) { DBObject query = new QueryBuilder() .and("resourceServerId").is(resourceServerId) .get(); return getMongoStore().loadEntities(ScopeEntity.class, query, getInvocationContext()).stream() .map(scope -> findById(scope.getId(), scope.getResourceServerId())) .collect(toList()); }
@Override public List<UserModel> searchForUserByUserAttribute(String attrName, String attrValue, RealmModel realm) { QueryBuilder queryBuilder = new QueryBuilder() .and("realmId").is(realm.getId()); queryBuilder.and("attributes." + attrName).is(attrValue); List<MongoUserEntity> users = getMongoStore().loadEntities(MongoUserEntity.class, queryBuilder.get(), invocationContext); return convertUserEntities(realm, users); }
@Override public List<Resource> findByScope(List<String> id, String resourceServerId) { DBObject query = new QueryBuilder() .and("resourceServerId").is(resourceServerId) .and("scopes").in(id) .get(); return getMongoStore().loadEntities(ResourceEntity.class, query, getInvocationContext()).stream() .map(policyEntity -> findById(policyEntity.getId(), resourceServerId)) .collect(toList()); }
@Override public void grantToAllUsers(RealmModel realm, RoleModel role) { DBObject query = new QueryBuilder() .and("realmId").is(realm.getId()) .get(); DBObject update = new QueryBuilder() .and("$push").is(new BasicDBObject("roleIds", role.getId())) .get(); int count = getMongoStore().updateEntities(MongoUserEntity.class, query, update, invocationContext); }
@Override public void preRemove(RealmModel realm, GroupModel group) { // Remove this role from all users, which has it DBObject query = new QueryBuilder() .and("groupIds").is(group.getId()) .get(); DBObject pull = new BasicDBObject("$pull", query); getMongoStore().updateEntities(MongoUserEntity.class, query, pull, invocationContext); }
@Override public ClientModel getClientByClientId(String clientId, RealmModel realm) { DBObject query = new QueryBuilder() .and("realmId").is(realm.getId()) .and("clientId").is(clientId) .get(); MongoClientEntity appEntity = getMongoStore().loadSingleEntity(MongoClientEntity.class, query, invocationContext); if (appEntity == null) return null; return session.realms().getClientById(appEntity.getId(), realm); }
private void onUserRemoved(RealmModel realm, String userId) { DBObject query = new QueryBuilder() .and("userId").is(userId) .get(); getMongoStore().removeEntities(MongoOnlineUserSessionEntity.class, query, false, invocationContext); getMongoStore().removeEntities(MongoOfflineUserSessionEntity.class, query, false, invocationContext); }
@Override public RealmModel getRealmByName(String name) { DBObject query = new QueryBuilder() .and("name").is(name) .get(); MongoRealmEntity realm = getMongoStore().loadSingleEntity(MongoRealmEntity.class, query, invocationContext); if (realm == null) return null; return session.realms().getRealm(realm.getId()); }
private void addRealmCodeSecret() { DBCollection realms = db.getCollection("realms"); DBObject query = new QueryBuilder() .and("codeSecret").is(null).get(); DBCursor objects = realms.find(query); while (objects.hasNext()) { DBObject object = objects.next(); object.put("codeSecret", KeycloakModelUtils.generateCodeSecret()); realms.save(object); log.debugv("Added realm.codeSecret, id={0}", object.get("id")); } }