/* * Copyright (c) OSGi Alliance (2009, 2012). All Rights Reserved. * * Licensed under the Apache 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://www.apache.org/licenses/LICENSE-2.0 * * 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.osgi.jmx.service.useradmin; import java.io.IOException; import javax.management.openmbean.CompositeData; import javax.management.openmbean.CompositeType; import javax.management.openmbean.SimpleType; import javax.management.openmbean.TabularData; import org.osgi.jmx.Item; import org.osgi.jmx.JmxConstants; /** * This MBean provides the management interface to the OSGi User Manager Service * * @version $Id: 08b1bb0c33e5266fe66917197cf52c8f157a0843 $ * @ThreadSafe */ public interface UserAdminMBean { /** * User Admin MBean object name. */ String OBJECTNAME = JmxConstants.OSGI_COMPENDIUM + ":service=useradmin,version=1.1"; /** * The key NAME, used in {@link #NAME_ITEM}. */ String NAME = "Name"; /** * The item for the user name for an authorization object. The key is * {@link #NAME} and the type is {@link SimpleType#STRING}. */ Item NAME_ITEM = new Item(NAME, "The user name for this authorization object", SimpleType.STRING); /** * The key ROLES, used in {@link #ROLES_ITEM}. */ String ROLES = "Roles"; /** * The item containing the roles for this authorization object. The key is * {@link #ROLES}. and the type is {@link JmxConstants#STRING_ARRAY_TYPE}. */ Item ROLES_ITEM = new Item(ROLES, "The names of the roles encapsulated by this auth object", JmxConstants.STRING_ARRAY_TYPE); /** * The Composite Type for an Authorization object. It consists of the * {@link #NAME_ITEM} and {@link #ROLES_ITEM} items. */ CompositeType AUTORIZATION_TYPE = Item.compositeType("AUTHORIZATION", "An authorization object defines which roles has a user got", NAME_ITEM, ROLES_ITEM); /** * The Role TYPE key, used in {@link #TYPE_ITEM}. */ String TYPE = "Type"; /** * The item containing the type of the roles encapsulated by this * authorization object. The key is {@link #TYPE} and the type is * {@link SimpleType#INTEGER}. */ Item TYPE_ITEM = new Item(TYPE, "An integer representing type of the role: {0=Role,1=user,2=group}", SimpleType.INTEGER); /** * The PROPERTIES key, used in {@link #PROPERTIES_ITEM}. */ String PROPERTIES = "Properties"; /** * The item containing the properties of a Role. The key is * {@link #PROPERTIES} and the type is {@link JmxConstants#PROPERTIES_TYPE}. */ Item PROPERTIES_ITEM = new Item(PROPERTIES, "A properties as defined by org.osgi.service.useradmin.Role", JmxConstants.PROPERTIES_TYPE); /** * The Composite Type for a Role. It contains the following items: * <ul> * <li>{@link #NAME}</li> * <li>{@link #TYPE}</li> * <li>{@link #PROPERTIES}</li> * </ul> * */ CompositeType ROLE_TYPE = Item.compositeType("ROLE", "Mapping of org.osgi.service.useradmin.Role for remote management purposes. User and Group extend Role", NAME_ITEM, TYPE_ITEM); /** * The CREDENTIALS key, used in {@link #CREDENTIALS_ITEM}. */ String CREDENTIALS = "Credentials"; /** * The item containing the credentials of a user. The key is * {@link #CREDENTIALS} and the type is {@link JmxConstants#PROPERTIES_TYPE} * . */ Item CREDENTIALS_ITEM = new Item(CREDENTIALS, "The credentials for this user", JmxConstants.PROPERTIES_TYPE); /** * A Composite Type for a User. A User contains its Role description and * adds the credentials. It extends {@link #ROLE_TYPE} and adds * {@link #CREDENTIALS_ITEM}. * * This type extends the {@link #ROLE_TYPE}. It adds: * <ul> * <li>{@link #CREDENTIALS}</li> * </ul> */ CompositeType USER_TYPE = Item.extend(ROLE_TYPE, "USER", "Mapping of org.osgi.service.useradmin.User for remote management purposes. User extends Role"); /** * The MEMBERS key, used in {@link #MEMBERS_ITEM}. */ String MEMBERS = "Members"; /** * The item containing the members of a group. The key is {@link #MEMBERS} * and the type is {@link JmxConstants#STRING_ARRAY_TYPE}. It is used in * {@link #GROUP_TYPE}. */ Item MEMBERS_ITEM = new Item(MEMBERS, "The members of this group", JmxConstants.STRING_ARRAY_TYPE); /** * The REQUIRED_MEMBERS key, used in {@link #REQUIRED_MEMBERS_ITEM}. */ String REQUIRED_MEMBERS = "RequiredMembers"; /** * The item containing the required members of a group. The key is * {@link #REQUIRED_MEMBERS} and the type is * {@link JmxConstants#STRING_ARRAY_TYPE}. It is used in {@link #GROUP_TYPE} * . */ Item REQUIRED_MEMBERS_ITEM = new Item(REQUIRED_MEMBERS, "The required members of this group", JmxConstants.STRING_ARRAY_TYPE); /** * The Composite Type for a Group. It extends {@link #USER_TYPE} and adds * {@link #MEMBERS_ITEM}, and {@link #REQUIRED_MEMBERS_ITEM}. * * This type extends the {@link #USER_TYPE}. It adds: * <ul> * <li>{@link #MEMBERS}</li> * <li>{@link #REQUIRED_MEMBERS}</li> * </ul> * If there are no members or required members an empty array is returned in * the respective items. */ CompositeType GROUP_TYPE = Item.extend(USER_TYPE, "GROUP", "Mapping of org.osgi.service.useradmin.Group for remote management purposes. Group extends User which in turn extends Role", MEMBERS_ITEM, REQUIRED_MEMBERS_ITEM); /** * Add credentials to a user, associated with the supplied key * * @param key The key of the credential to add * @param value The value of the credential to add * @param username The name of the user that gets the credential. * @throws IOException if the operation fails * @throws IllegalArgumentException if the username is not a User */ void addCredential(String key, byte[] value, String username) throws IOException; /** * Add credentials to a user, associated with the supplied key * * @param key The key of the credential to add * @param value The value of the credential to add * @param username The name of the user that gets the credential. * @throws IOException if the operation fails * @throws IllegalArgumentException if the username is not a User */ void addCredentialString(String key, String value, String username) throws IOException; /** * Add a member to the group. * * @param groupname The group name that receives the {@code rolename} as * member. * @param rolename The {@code rolename} (User or Group) that must be added. * @return {@code true} if the role was added to the group * @throws IOException if the operation fails * @throws IllegalArgumentException if an invalid group name or role name is * specified * */ boolean addMember(String groupname, String rolename) throws IOException; /** * Add or update a property on a role * * @param key The key of the property to add * @param value The value of the property to add ({@code String}) * @param rolename The role name * @throws IOException if the operation fails * @throws IllegalArgumentException if an invalid role name is specified */ void addPropertyString(String key, String value, String rolename) throws IOException; /** * Add or update a property on a role. * * @param key The added property key * @param value The added byte[] property value * @param rolename The role name that receives the property * @throws IOException if the operation fails * @throws IllegalArgumentException if an invalid role name is specified */ void addProperty(String key, byte[] value, String rolename) throws IOException; /** * Add a required member to the group * * @param groupname The group name that is addded * @param rolename The role that * @return true if the role was added to the group * @throws IOException if the operation fails * @throws IllegalArgumentException if an invalid group name or role name is * specified */ boolean addRequiredMember(String groupname, String rolename) throws IOException; /** * Create a User * * @param name Name of the user to create * @throws IOException if the operation fails */ void createUser(String name) throws IOException; /** * Create a Group * * @param name Name of the group to create * @throws IOException if the operation fails */ void createGroup(String name) throws IOException; /** * This method was specified in error and must not be used. * * @param name Ignored. * @throws IOException This method will throw an exception if called. * @deprecated This method was specified in error. It does not function and * must not be used. Use either {@link #createUser(String)} or * {@link #createGroup(String)}. */ void createRole(String name) throws IOException; /** * Answer the authorization for the user name. * * The Composite Data is typed by {@link #AUTORIZATION_TYPE}. * * @param user The user name * @return the Authorization typed by {@link #AUTORIZATION_TYPE}. * @throws IOException if the operation fails * @throws IllegalArgumentException if the user name is not a User */ CompositeData getAuthorization(String user) throws IOException; /** * Answer the credentials associated with a user. * * The returned Tabular Data is typed by * {@link JmxConstants#PROPERTIES_TYPE}. * * @param username The user name * @return the credentials associated with the user, see * {@link JmxConstants#PROPERTIES_TYPE} * @throws IOException if the operation fails * @throws IllegalArgumentException if the user name is not a User */ TabularData getCredentials(String username) throws IOException; /** * Answer the Group associated with the group name. * * The returned Composite Data is typed by {@link #GROUP_TYPE} * * @param groupname The group name * @return the Group, see {@link #GROUP_TYPE} * @throws IOException if the operation fails * @throws IllegalArgumentException if the group name is not a Group */ CompositeData getGroup(String groupname) throws IOException; /** * Answer the list of group names * * @return The list of group names * @throws IOException if the operation fails */ String[] listGroups() throws IOException; /** * Answer the list of group names * * @param filter The filter to apply * @return The list of group names * @throws IOException if the operation fails */ String[] getGroups(String filter) throws IOException; /** * Answer the list of implied roles for a user * * @param username The name of the user that has the implied roles * @return The list of role names * @throws IOException if the operation fails * @throws IllegalArgumentException if the username is not a User */ String[] getImpliedRoles(String username) throws IOException; /** * Answer the the user names which are members of the group * * @param groupname The name of the group to get the members from * @return The list of user names * @throws IOException if the operation fails * @throws IllegalArgumentException if the groupname is not a Group */ String[] getMembers(String groupname) throws IOException; /** * Answer the properties associated with a role. * * The returned Tabular Data is typed by * {@link JmxConstants#PROPERTIES_TYPE}. * * @param rolename The name of the role to get properties from * @return the properties associated with the role, see * {@link JmxConstants#PROPERTIES_TYPE} * @throws IOException if the operation fails * @throws IllegalArgumentException if the rolename is not a role */ TabularData getProperties(String rolename) throws IOException; /** * Answer the list of user names which are required members of this group * * @param groupname The name of the group to get the required members from * @return The list of user names * @throws IOException if the operation fails * @throws IllegalArgumentException if the group name is not a Group */ String[] getRequiredMembers(String groupname) throws IOException; /** * Answer the role associated with a name. * * The returned Composite Data is typed by {@link #ROLE_TYPE}. * * @param name The name of the role to get the data from * @return the Role, see {@link #ROLE_TYPE} * @throws IOException if the operation fails * @throws IllegalArgumentException if the name is not a role */ CompositeData getRole(String name) throws IOException; /** * Answer the list of role names in the User Admin database * * @return The list of role names * @throws IOException if the operation fails */ String[] listRoles() throws IOException; /** * Answer the list of role names which match the supplied filter * * @param filter The string representation of the * {@code org.osgi.framework.Filter} that is used to filter the roles * by applying to the properties, if {@code null} all roles are * returned. * * @return The list the role names * @throws IOException if the operation fails */ String[] getRoles(String filter) throws IOException; /** * Answer the User associated with the user name. * * The returned Composite Data is typed by {@link #USER_TYPE}. * * @param username The name of the requested user * @return The User, see {@link #USER_TYPE} * @throws IOException if the operation fails * @throws IllegalArgumentException if the username is not a User */ CompositeData getUser(String username) throws IOException; /** * Answer the user name with the given property key-value pair from the User * Admin service database. * * @param key The key to compare * @param value The value to compare * @return The User * @throws IOException if the operation fails */ String getUserWithProperty(String key, String value) throws IOException; /** * Answer the list of user names in the User Admin database * * @return The list of user names * @throws IOException if the operation fails */ String[] listUsers() throws IOException; /** * Answer the list of user names in the User Admin database * * @param filter The filter to apply * @return The list of user names * @throws IOException if the operation fails */ String[] getUsers(String filter) throws IOException; /** * Remove the credential associated with the given user * * @param key The key of the credential to remove * @param username The name of the user for which the credential must be * removed * @throws IOException if the operation fails * @throws IllegalArgumentException if the username is not a User */ void removeCredential(String key, String username) throws IOException; /** * Remove a role from the group * * @param groupname The group name * @param rolename * @return true if the role was removed from the group * @throws IOException if the operation fails * @throws IllegalArgumentException if the groupname is not a Group */ boolean removeMember(String groupname, String rolename) throws IOException; /** * Remove a property from a role * * @param key * @param rolename * @throws IOException if the operation fails * @throws IllegalArgumentException if the rolename is not a role */ void removeProperty(String key, String rolename) throws IOException; /** * Remove the Role associated with the name * * @param name * @return true if the remove succeeded * @throws IOException if the operation fails * @throws IllegalArgumentException if the name is not a role */ boolean removeRole(String name) throws IOException; /** * Remove the Group associated with the name * * @param name * @return true if the remove succeeded * @throws IOException if the operation fails * @throws IllegalArgumentException if the name is not a Group */ boolean removeGroup(String name) throws IOException; /** * Remove the User associated with the name * * @param name * @return true if the remove succeeded * @throws IOException if the operation fails * @throws IllegalArgumentException if the name is not a User */ boolean removeUser(String name) throws IOException; }