killbill-memoizeit

osgi: export SecurityApi to bundles Signed-off-by: Pierre-Alexandre

6/2/2014 11:31:35 AM

Details

diff --git a/osgi/src/main/java/org/killbill/billing/osgi/DefaultOSGIKillbill.java b/osgi/src/main/java/org/killbill/billing/osgi/DefaultOSGIKillbill.java
index b5dd39e..92639fc 100644
--- a/osgi/src/main/java/org/killbill/billing/osgi/DefaultOSGIKillbill.java
+++ b/osgi/src/main/java/org/killbill/billing/osgi/DefaultOSGIKillbill.java
@@ -28,6 +28,7 @@ import org.killbill.billing.invoice.api.InvoiceUserApi;
 import org.killbill.billing.osgi.api.OSGIKillbill;
 import org.killbill.billing.osgi.api.config.PluginConfigServiceApi;
 import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.security.api.SecurityApi;
 import org.killbill.billing.tenant.api.TenantUserApi;
 import org.killbill.billing.usage.api.UsageUserApi;
 import org.killbill.billing.util.api.AuditUserApi;
@@ -53,6 +54,7 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
     private final SubscriptionApi subscriptionApi;
     private final CurrencyConversionApi currencyConversionApi;
     private final RecordIdApi recordIdApi;
+    private final SecurityApi securityApi;
 
     private final PluginConfigServiceApi configServiceApi;
 
@@ -72,7 +74,8 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
                                final SubscriptionApi subscriptionApi,
                                final RecordIdApi recordIdApi,
                                final CurrencyConversionApi currencyConversionApi,
-                               final PluginConfigServiceApi configServiceApi) {
+                               final PluginConfigServiceApi configServiceApi,
+                               final SecurityApi securityApi) {
         this.accountUserApi = accountUserApi;
         this.catalogUserApi = catalogUserApi;
         this.invoicePaymentApi = invoicePaymentApi;
@@ -89,6 +92,7 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
         this.currencyConversionApi = currencyConversionApi;
         this.recordIdApi = recordIdApi;
         this.configServiceApi = configServiceApi;
+        this.securityApi = securityApi;
     }
 
     @Override
@@ -170,4 +174,9 @@ public class DefaultOSGIKillbill implements OSGIKillbill {
     public PluginConfigServiceApi getPluginConfigServiceApi() {
         return configServiceApi;
     }
+
+    @Override
+    public SecurityApi getSecurityApi() {
+        return securityApi;
+    }
 }
diff --git a/osgi-bundles/libs/killbill/src/main/java/org/killbill/killbill/osgi/libs/killbill/OSGIKillbillAPI.java b/osgi-bundles/libs/killbill/src/main/java/org/killbill/killbill/osgi/libs/killbill/OSGIKillbillAPI.java
index 2e41138..9a82604 100644
--- a/osgi-bundles/libs/killbill/src/main/java/org/killbill/killbill/osgi/libs/killbill/OSGIKillbillAPI.java
+++ b/osgi-bundles/libs/killbill/src/main/java/org/killbill/killbill/osgi/libs/killbill/OSGIKillbillAPI.java
@@ -26,6 +26,7 @@ import org.killbill.billing.invoice.api.InvoiceUserApi;
 import org.killbill.billing.osgi.api.OSGIKillbill;
 import org.killbill.billing.osgi.api.config.PluginConfigServiceApi;
 import org.killbill.billing.payment.api.PaymentApi;
+import org.killbill.billing.security.api.SecurityApi;
 import org.killbill.billing.tenant.api.TenantUserApi;
 import org.killbill.billing.usage.api.UsageUserApi;
 import org.killbill.billing.util.api.AuditUserApi;
@@ -212,4 +213,14 @@ public class OSGIKillbillAPI extends OSGIKillbillLibraryBase implements OSGIKill
             }
         });
     }
+
+    @Override
+    public SecurityApi getSecurityApi() {
+        return withServiceTracker(killbillTracker, new APICallback<SecurityApi, OSGIKillbill>(KILLBILL_SERVICE_NAME) {
+            @Override
+            public SecurityApi executeWithService(final OSGIKillbill service) {
+                return service.getSecurityApi();
+            }
+        });
+    }
 }

pom.xml 2(+1 -1)

diff --git a/pom.xml b/pom.xml
index ec22fad..fe428ac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,7 +19,7 @@
     <parent>
         <artifactId>killbill-oss-parent</artifactId>
         <groupId>org.kill-bill.billing</groupId>
-        <version>0.7.10</version>
+        <version>0.7.12-SNAPSHOT</version>
     </parent>
     <artifactId>killbill</artifactId>
     <version>0.11.5-SNAPSHOT</version>
diff --git a/util/src/main/java/org/killbill/billing/util/config/OSGIConfig.java b/util/src/main/java/org/killbill/billing/util/config/OSGIConfig.java
index f3d2738..5827a48 100644
--- a/util/src/main/java/org/killbill/billing/util/config/OSGIConfig.java
+++ b/util/src/main/java/org/killbill/billing/util/config/OSGIConfig.java
@@ -73,6 +73,7 @@ public interface OSGIConfig extends KillbillConfig {
              "org.killbill.billing.util.template.translation," +
              "org.killbill.billing.currency.plugin.api," +
              "org.killbill.billing.currency.api," +
+             "org.killbill.billing.security.api," +
 
              // Add export for all the com.sun.xml.internal.ws required to have apache-cxf working properly within a plugin environment.
              "com.sun.xml.internal.ws," +
diff --git a/util/src/main/java/org/killbill/billing/util/security/api/DefaultSecurityApi.java b/util/src/main/java/org/killbill/billing/util/security/api/DefaultSecurityApi.java
index c601350..8206cbd 100644
--- a/util/src/main/java/org/killbill/billing/util/security/api/DefaultSecurityApi.java
+++ b/util/src/main/java/org/killbill/billing/util/security/api/DefaultSecurityApi.java
@@ -21,9 +21,10 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.authz.AuthorizationException;
 import org.apache.shiro.subject.Subject;
-
 import org.killbill.billing.ErrorCode;
 import org.killbill.billing.security.Logical;
 import org.killbill.billing.security.Permission;
@@ -39,6 +40,30 @@ public class DefaultSecurityApi implements SecurityApi {
     private static final String[] allPermissions = new String[Permission.values().length];
 
     @Override
+    public void login(final Object principal, final Object credentials) {
+        final Subject currentUser = SecurityUtils.getSubject();
+
+        // UsernamePasswordToken is hardcoded in AuthenticatingRealm
+        if (principal instanceof String && credentials instanceof String) {
+            currentUser.login(new UsernamePasswordToken((String) principal, (String) credentials));
+        } else if (principal instanceof String && credentials instanceof char[]) {
+            currentUser.login(new UsernamePasswordToken((String) principal, (char[]) credentials));
+        } else {
+            currentUser.login(new AuthenticationToken() {
+                @Override
+                public Object getPrincipal() {
+                    return principal;
+                }
+
+                @Override
+                public Object getCredentials() {
+                    return credentials;
+                }
+            });
+        }
+    }
+
+    @Override
     public Set<Permission> getCurrentUserPermissions(final TenantContext context) {
         final Permission[] killbillPermissions = Permission.values();
         final String[] killbillPermissionsString = getAllPermissionsAsStrings();