From 53aa74b4932ba621a97e55513a44693889101333 Mon Sep 17 00:00:00 2001 From: andrea Date: Tue, 26 May 2015 23:11:55 +0200 Subject: [PATCH] Minor change, extracted some commonly used code --- .../spi/impl/security/Authorization.java | 6 ++++ .../security/AuthorizationsCollector.java | 30 +++++++++++-------- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/broker/src/main/java/org/eclipse/moquette/spi/impl/security/Authorization.java b/broker/src/main/java/org/eclipse/moquette/spi/impl/security/Authorization.java index 5cd844e6..f12b8cd3 100644 --- a/broker/src/main/java/org/eclipse/moquette/spi/impl/security/Authorization.java +++ b/broker/src/main/java/org/eclipse/moquette/spi/impl/security/Authorization.java @@ -15,6 +15,8 @@ */ package org.eclipse.moquette.spi.impl.security; +import static org.eclipse.moquette.spi.impl.security.Authorization.Permission.READWRITE; + /** * Carries the read/write authorization to topics for the users. * @@ -40,6 +42,10 @@ public class Authorization { this.permission = permission; } + public boolean grant(Permission desiredPermission) { + return permission == desiredPermission || permission == READWRITE; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/broker/src/main/java/org/eclipse/moquette/spi/impl/security/AuthorizationsCollector.java b/broker/src/main/java/org/eclipse/moquette/spi/impl/security/AuthorizationsCollector.java index 3f11785a..ac217e29 100644 --- a/broker/src/main/java/org/eclipse/moquette/spi/impl/security/AuthorizationsCollector.java +++ b/broker/src/main/java/org/eclipse/moquette/spi/impl/security/AuthorizationsCollector.java @@ -122,18 +122,14 @@ class AuthorizationsCollector implements IAuthorizator { } private boolean canDoOperation(String topic, Authorization.Permission permission, String username, String client) { - for (Authorization auth : m_globalAuthorizations) { - if (auth.permission == permission || auth.permission == READWRITE) { - if (SubscriptionsStore.matchTopics(topic, auth.topic)) { - return true; - } - } + if (matchACL(m_globalAuthorizations, topic, permission)) { + return true; } if (isNotEmpty(client) || isNotEmpty(username)) { for (Authorization auth : m_patternAuthorizations) { String substitutedTopic = auth.topic.replace("%c", client).replace("%u", username); - if (auth.permission == permission || auth.permission == READWRITE) { + if (auth.grant(permission)) { if (SubscriptionsStore.matchTopics(topic, substitutedTopic)) { return true; } @@ -143,12 +139,20 @@ class AuthorizationsCollector implements IAuthorizator { if (isNotEmpty(username)) { if (m_userAuthorizations.containsKey(username)) { - for (Authorization auth : m_userAuthorizations.get(username)) { - if (auth.permission == permission || auth.permission == READWRITE) { - if (SubscriptionsStore.matchTopics(topic, auth.topic)) { - return true; - } - } + List auths = m_userAuthorizations.get(username); + if (matchACL(auths, topic, permission)) { + return true; + } + } + } + return false; + } + + private boolean matchACL(List auths, String topic, Authorization.Permission permission) { + for (Authorization auth : auths) { + if (auth.grant(permission)) { + if (SubscriptionsStore.matchTopics(topic, auth.topic)) { + return true; } } }