You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2013/10/05 02:28:57 UTC
svn commit: r1529362 - in /qpid/trunk/qpid/java:
broker-core/src/main/java/org/apache/qpid/server/model/
broker-core/src/main/java/org/apache/qpid/server/model/adapter/
broker-core/src/test/java/org/apache/qpid/server/model/adapter/
broker-plugins/mana...
Author: orudyy
Date: Sat Oct 5 00:28:57 2013
New Revision: 1529362
URL: http://svn.apache.org/r1529362
Log:
QPID-5138: Change preferences provider to allow deletion of preferences for multiple users
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java
qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/PreferencesProvider.java Sat Oct 5 00:28:57 2013
@@ -69,11 +69,11 @@ public interface PreferencesProvider ext
Map<String, Object> setPreferences(String userId, Map<String, Object> preferences);
/**
- * Delete preferences for a given user ID
- * @param userId user ID to delete preferences for
- * @return user preferences before the deletion
+ * Delete preferences for given user IDs
+ * @param userIDs user IDs to delete preferences for
+ * @return user an array with user IDs having preferences deleted
*/
- Map<String, Object> deletePreferences(String userId);
+ String[] deletePreferences(String... userIDs);
/**
* Returns set of the user IDs having preferences set
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/User.java Sat Oct 5 00:28:57 2013
@@ -61,5 +61,5 @@ public interface User extends Configured
public Map<String, Object> setPreferences(Map<String, Object> preferences);
- public Map<String, Object> replacePreferences(Map<String, Object> newPreferences);
+ public boolean deletePreferences();
}
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/AuthenticationProviderAdapter.java Sat Oct 5 00:28:57 2013
@@ -803,16 +803,15 @@ public abstract class AuthenticationProv
}
@Override
- public Map<String, Object> replacePreferences(Map<String, Object> newPreferences)
+ public boolean deletePreferences()
{
PreferencesProvider preferencesProvider = getPreferencesProvider();
if (preferencesProvider == null)
{
- return null;
+ return false;
}
- Map<String, Object> preferences = preferencesProvider.deletePreferences(this.getName());
- preferencesProvider.setPreferences(this.getName(), newPreferences);
- return preferences;
+ String[] deleted = preferencesProvider.deletePreferences(this.getName());
+ return deleted.length == 1;
}
private PreferencesProvider getPreferencesProvider()
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProvider.java Sat Oct 5 00:28:57 2013
@@ -35,6 +35,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
@@ -301,9 +302,9 @@ public class FileSystemPreferencesProvid
}
@Override
- public Map<String, Object> deletePreferences(String userId)
+ public String[] deletePreferences(String... userIDs)
{
- return _store.deletePreferences(userId);
+ return _store.deletePreferences(userIDs);
}
@Override
@@ -566,19 +567,26 @@ public class FileSystemPreferencesProvid
return userPreferences;
}
- public Map<String, Object> deletePreferences(String userId)
+ public String[] deletePreferences(String... userIDs)
{
checkStoreOpened();
- Map<String, Object> userPreferences = null;
+ Set<String> deletedUsers = new HashSet<String>();
synchronized (_preferences)
{
- if (_preferences.containsKey(userId))
+ for (String id : userIDs)
+ {
+ if (_preferences.containsKey(id))
+ {
+ _preferences.remove(id);
+ deletedUsers.add(id);
+ }
+ }
+ if (!deletedUsers.isEmpty())
{
- userPreferences = _preferences.remove(userId);
save();
}
}
- return userPreferences;
+ return deletedUsers.toArray(new String[deletedUsers.size()]);
}
public Set<String> listUserIDs()
Modified: qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/test/java/org/apache/qpid/server/model/adapter/FileSystemPreferencesProviderTest.java Sat Oct 5 00:28:57 2013
@@ -210,7 +210,7 @@ public class FileSystemPreferencesProvid
String user3 = "user3";
Map<String, Object> preferences3 = _preferencesProvider.getPreferences(user3);
- assertTrue("No preference found for user3", preferences3.isEmpty());
+ assertTrue("Unexpected preferences found for user3", preferences3.isEmpty());
}
public void testDeletePrefernces()
@@ -218,6 +218,9 @@ public class FileSystemPreferencesProvid
_preferencesProvider = createPreferencesProvider();
_preferencesProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
+ assertUser1Preferences(_preferencesProvider.getPreferences(_user1));
+ assertUser2Preferences(_preferencesProvider.getPreferences(_user2));
+
_preferencesProvider.deletePreferences(_user1);
_preferencesProvider.setDesiredState(State.ACTIVE, State.STOPPED);
@@ -231,6 +234,30 @@ public class FileSystemPreferencesProvid
String user3 = "user3";
Map<String, Object> preferences3 = _preferencesProvider.getPreferences(user3);
+ assertTrue("Unexpected preferences found for user3", preferences3.isEmpty());
+ }
+
+ public void testDeleteMultipleUsersPrefernces()
+ {
+ _preferencesProvider = createPreferencesProvider();
+ _preferencesProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
+
+ assertUser1Preferences(_preferencesProvider.getPreferences(_user1));
+ assertUser2Preferences(_preferencesProvider.getPreferences(_user2));
+
+ _preferencesProvider.deletePreferences(_user1, _user2);
+ _preferencesProvider.setDesiredState(State.ACTIVE, State.STOPPED);
+
+ _preferencesProvider = createPreferencesProvider();
+ _preferencesProvider.setDesiredState(State.INITIALISING, State.ACTIVE);
+ Map<String, Object> preferences1 = _preferencesProvider.getPreferences(_user1);
+ assertTrue("Preferences should not be set for user 1", preferences1.isEmpty());
+
+ Map<String, Object> preferences2 = _preferencesProvider.getPreferences(_user2);
+ assertTrue("Preferences should not be set for user 2", preferences2.isEmpty());
+
+ String user3 = "user3";
+ Map<String, Object> preferences3 = _preferencesProvider.getPreferences(user3);
assertTrue("No preference found for user3", preferences3.isEmpty());
}
Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/UserPreferencesServlet.java Sat Oct 5 00:28:57 2013
@@ -25,7 +25,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -157,53 +157,75 @@ public class UserPreferencesServlet exte
@Override
protected void doDeleteWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws IOException
{
- final List<String[]> userData = new ArrayList<String[]>();
- for (String name : request.getParameterValues("user"))
+ Broker broker = getBroker();
+ Collection<AuthenticationProvider> authenticationProviders = broker.getAuthenticationProviders();
+ Map<String, Set<String>> providerUsers = new HashMap<String, Set<String>>();
+ Map<String, AuthenticationProvider> requestProviders = new HashMap<String, AuthenticationProvider>();
+ for (String path : request.getParameterValues("user"))
{
- String[] elements = name.split("/");
+ String[] elements = path.split("/");
if (elements.length != 2)
{
- throw new IllegalArgumentException("Illegal parameter");
+ throw new IllegalArgumentException("Illegal user parameter " + path);
+ }
+
+ String userId = elements[1];
+
+ if (!userPreferencesOperationAuthorized(userId))
+ {
+ response.sendError(HttpServletResponse.SC_FORBIDDEN, "Deletion of preferences is not allowed");
+ return;
}
- userData.add(elements);
+ String providerName = elements[0];
+ Set<String> users = providerUsers.get(providerName);
+
+ if (users == null)
+ {
+ AuthenticationProvider provider = findAuthenticationProviderByName(providerName, authenticationProviders);
+ if (provider == null)
+ {
+ throw new IllegalArgumentException("Cannot find provider with name '" + providerName + "'");
+ }
+ users = new HashSet<String>();
+ providerUsers.put(providerName, users);
+ requestProviders.put(providerName, provider);
+ }
+ users.add(userId);
}
- if (!userData.isEmpty())
+ if (!providerUsers.isEmpty())
{
- Broker broker = getBroker();
- Collection<AuthenticationProvider> authenticationProviders = broker.getAuthenticationProviders();
- for (Iterator<String[]> it = userData.iterator(); it.hasNext();)
+ for (Map.Entry<String, Set<String>> entry : providerUsers.entrySet())
{
- String[] data = (String[]) it.next();
- String authenticationProviderName = data[0];
- String userId = data[1];
+ String providerName = entry.getKey();
+ AuthenticationProvider provider = requestProviders.get(providerName);
+ Set<String> usersToDelete = entry.getValue();
+ PreferencesProvider preferencesProvider = provider.getPreferencesProvider();
- for (AuthenticationProvider authenticationProvider : authenticationProviders)
+ if (preferencesProvider != null && !usersToDelete.isEmpty())
{
- if (authenticationProviderName.equals(authenticationProvider.getName()))
- {
- PreferencesProvider preferencesProvider = authenticationProvider.getPreferencesProvider();
- if (preferencesProvider != null)
- {
- Set<String> usernames = preferencesProvider.listUserIDs();
- if (usernames.contains(userId))
- {
- if (!userPreferencesOperationAuthorized(userId))
- {
- response.sendError(HttpServletResponse.SC_FORBIDDEN, "Deletion of preferences is not allowed");
- return;
- }
- preferencesProvider.deletePreferences(userId);
- }
- }
- break;
- }
+ String[] users = usersToDelete.toArray(new String[usersToDelete.size()]);
+ preferencesProvider.deletePreferences(users);
}
}
}
}
+ protected AuthenticationProvider findAuthenticationProviderByName(String providerName, Collection<AuthenticationProvider> authenticationProviders)
+ {
+ AuthenticationProvider provider = null;
+ for (AuthenticationProvider authenticationProvider : authenticationProviders)
+ {
+ if(authenticationProvider.getName().equals(providerName))
+ {
+ provider = authenticationProvider;
+ break;
+ }
+ }
+ return provider;
+ }
+
private boolean userPreferencesOperationAuthorized(String userId)
{
return getBroker().getSecurityManager().authoriseUserOperation(Operation.UPDATE, userId);
Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java?rev=1529362&r1=1529361&r2=1529362&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/UserPreferencesRestTest.java Sat Oct 5 00:28:57 2013
@@ -125,6 +125,17 @@ public class UserPreferencesRestTest ext
assertNull("User webadmin is found", findUser("webadmin", users));
}
+ public void testDeleteMultipleUser() throws Exception
+ {
+ int status = getRestTestHelper().submitRequest("/rest/userpreferences?user="
+ + URLEncoder.encode(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/webadmin", "UTF-8")
+ + "&user=" + URLEncoder.encode(TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/admin", "UTF-8"),
+ "DELETE", null);
+ assertEquals("Unexpected status ", 200, status);
+ List<Map<String, Object>> users = getRestTestHelper().getJsonAsList("/rest/userpreferences");
+ assertEquals("Unexpected number of users", 0, users.size());
+ }
+
private Map<String, Object> findUser(String userName, List<Map<String, Object>> users)
{
for (Map<String, Object> map : users)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org