/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at: * * http://opensource.org/licenses/ecl2.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package org.opencastproject.index.service.resources.list.provider; import org.opencastproject.index.service.resources.list.api.ResourceListProvider; import org.opencastproject.index.service.resources.list.api.ResourceListQuery; import org.opencastproject.security.api.Organization; import org.opencastproject.security.api.Role; import org.opencastproject.security.api.User; import org.opencastproject.security.api.UserDirectoryService; import org.apache.commons.lang3.StringUtils; import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class UsersListProvider implements ResourceListProvider { private static final String PROVIDER_PREFIX = "USERS"; public static final String DEFAULT = PROVIDER_PREFIX; public static final String USERNAME = PROVIDER_PREFIX + ".USERNAME"; public static final String NAME = PROVIDER_PREFIX + ".NAME"; public static final String EMAIL = PROVIDER_PREFIX + ".EMAIL"; public static final String ROLE = PROVIDER_PREFIX + ".ROLE"; public static final String INVERSE = PROVIDER_PREFIX + ".INVERSE"; public static final String USERDIRECTORY = PROVIDER_PREFIX + ".USERDIRECTORY"; protected static final String[] NAMES = { PROVIDER_PREFIX, USERNAME, NAME, EMAIL, ROLE, USERDIRECTORY, INVERSE }; private static final Logger logger = LoggerFactory.getLogger(UsersListProvider.class); private UserDirectoryService userDirectoryService; protected void activate(BundleContext bundleContext) { logger.info("Users list provider activated!"); } /** OSGi callback for users services. */ public void setUserDirectoryService(UserDirectoryService userDirectoryService) { this.userDirectoryService = userDirectoryService; } @Override public String[] getListNames() { return NAMES; } @Override public Map<String, String> getList(String listName, ResourceListQuery query, Organization organization) { Map<String, String> usersList = new HashMap<String, String>(); int offset = 0; int limit = 0; if (query != null) { if (query.getLimit().isSome()) limit = query.getLimit().get(); if (query.getOffset().isSome()) offset = query.getOffset().get(); } Iterator<User> users = userDirectoryService.findUsers("%", offset, limit); while (users.hasNext()) { User u = users.next(); if (EMAIL.equals(listName) && StringUtils.isNotBlank(u.getEmail())) { usersList.put(u.getEmail(), u.getEmail()); } else if (USERNAME.equals(listName) && StringUtils.isNotBlank(u.getUsername())) { usersList.put(u.getUsername(), u.getUsername()); } else if (USERDIRECTORY.equals(listName) && StringUtils.isNotBlank(u.getProvider())) { usersList.put(u.getProvider(), u.getProvider()); } else if (NAME.equals(listName) && StringUtils.isNotBlank(u.getName())) { usersList.put(u.getName(), u.getName()); } else if (INVERSE.equals(listName)) { String name = u.getName(); usersList.put(StringUtils.isBlank(name) ? u.getUsername() : name, u.getUsername()); } else if (DEFAULT.equals(listName)) { String name = u.getName(); usersList.put(u.getUsername(), StringUtils.isBlank(name) ? u.getUsername() : name); } else if (ROLE.equals(listName) && u.getRoles().size() > 0) { for (Role role : u.getRoles()) { usersList.put(role.getName(), role.getName()); } } } return usersList; } }