From 8d04c817228647dc4801d5ad3445a2e7b01d147a Mon Sep 17 00:00:00 2001
From: Vincent Zurczak
Date: Tue, 4 Apr 2017 19:28:15 +0200
Subject: [PATCH] #632 User authentication
---
.../dm/rest/commons/UrlConstants.java | 1 +
.../security/AuthenticationManager.java | 6 +-
core/roboconf-dm-rest-services/metadata.xml | 3 +
core/roboconf-dm-rest-services/pom.xml | 4 +-
.../services/internal/RestApplication.java | 14 ++
.../ServletRegistrationComponent.java | 86 +++++++++
.../filters/AuthenticationFilter.java | 146 ++++++++++++++
.../resources/IAuthenticationResource.java | 71 +++++++
.../impl/AuthenticationResource.java | 88 +++++++++
.../ServletRegistrationComponentTest.java | 156 ++++++++++++---
.../filters/AuthenticationFilterTest.java | 179 ++++++++++++++++++
.../impl/AuthenticationResourceTest.java | 84 ++++++++
.../impl/ManagementResourceTest.java | 8 +
...oboconf.dm.rest.services.configuration.cfg | 12 ++
.../resources/etc/org.ops4j.pax.logging.cfg | 1 +
15 files changed, 825 insertions(+), 34 deletions(-)
create mode 100644 core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/filters/AuthenticationFilter.java
create mode 100644 core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/resources/IAuthenticationResource.java
create mode 100644 core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/resources/impl/AuthenticationResource.java
create mode 100644 core/roboconf-dm-rest-services/src/test/java/net/roboconf/dm/rest/services/internal/filters/AuthenticationFilterTest.java
create mode 100644 core/roboconf-dm-rest-services/src/test/java/net/roboconf/dm/rest/services/internal/resources/impl/AuthenticationResourceTest.java
diff --git a/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/UrlConstants.java b/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/UrlConstants.java
index a2a00bcf..de3549d0 100644
--- a/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/UrlConstants.java
+++ b/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/UrlConstants.java
@@ -36,4 +36,5 @@ public interface UrlConstants {
String TARGETS = "targets";
String PREFERENCES = "preferences";
String SCHEDULER = "scheduler";
+ String AUTHENTICATION = "auth";
}
diff --git a/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/security/AuthenticationManager.java b/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/security/AuthenticationManager.java
index 04dff006..d257bc92 100644
--- a/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/security/AuthenticationManager.java
+++ b/core/roboconf-dm-rest-commons/src/main/java/net/roboconf/dm/rest/commons/security/AuthenticationManager.java
@@ -120,10 +120,10 @@ public String login( String user, String pwd ) {
/**
* Determines whether a session is valid.
* @param token a token
- * @param validityPeriod the validity period for a session (in seconds)
+ * @param validityPeriod the validity period for a session (in seconds, < 0 for unbound)
* @return true if the session is valid, false otherwise
*/
- public boolean isSessionValid( final String token, int validityPeriod ) {
+ public boolean isSessionValid( final String token, long validityPeriod ) {
boolean valid = false;
Long loginTime = null;
@@ -152,7 +152,7 @@ public boolean isSessionValid( final String token, int validityPeriod ) {
* No error is thrown if the session was already invalid.
*
*
- * @param token a token
+ * @param token a token (can be null)
*/
public void logout( String token ) {
if( token != null )
diff --git a/core/roboconf-dm-rest-services/metadata.xml b/core/roboconf-dm-rest-services/metadata.xml
index b5470548..93b02a0a 100644
--- a/core/roboconf-dm-rest-services/metadata.xml
+++ b/core/roboconf-dm-rest-services/metadata.xml
@@ -54,6 +54,9 @@
+
+
+
diff --git a/core/roboconf-dm-rest-services/pom.xml b/core/roboconf-dm-rest-services/pom.xml
index d63cb944..e43aff5e 100644
--- a/core/roboconf-dm-rest-services/pom.xml
+++ b/core/roboconf-dm-rest-services/pom.xml
@@ -122,9 +122,9 @@
- org.apache.felix
+ org.osgi
org.osgi.core
- 1.4.0
+ 6.0.0
provided
diff --git a/core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/RestApplication.java b/core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/RestApplication.java
index 424b8df2..ee5ad725 100644
--- a/core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/RestApplication.java
+++ b/core/roboconf-dm-rest-services/src/main/java/net/roboconf/dm/rest/services/internal/RestApplication.java
@@ -34,12 +34,14 @@
import com.sun.jersey.api.core.ResourceConfig;
import net.roboconf.dm.management.Manager;
+import net.roboconf.dm.rest.commons.security.AuthenticationManager;
import net.roboconf.dm.rest.services.cors.ResponseCorsFilter;
import net.roboconf.dm.rest.services.internal.resources.IApplicationResource;
import net.roboconf.dm.rest.services.internal.resources.IDebugResource;
import net.roboconf.dm.rest.services.internal.resources.IPreferencesResource;
import net.roboconf.dm.rest.services.internal.resources.ITargetResource;
import net.roboconf.dm.rest.services.internal.resources.impl.ApplicationResource;
+import net.roboconf.dm.rest.services.internal.resources.impl.AuthenticationResource;
import net.roboconf.dm.rest.services.internal.resources.impl.DebugResource;
import net.roboconf.dm.rest.services.internal.resources.impl.ManagementResource;
import net.roboconf.dm.rest.services.internal.resources.impl.PreferencesResource;
@@ -58,6 +60,7 @@ public class RestApplication extends DefaultResourceConfig {
private final IPreferencesResource preferencesResource;
private final ManagementResource managementResource;
private final SchedulerResource schedulerResource;
+ private final AuthenticationResource authenticationResource;
/**
@@ -73,6 +76,7 @@ public RestApplication( Manager manager ) {
this.targetResource = new TargetResource( manager );
this.preferencesResource = new PreferencesResource( manager );
this.schedulerResource = new SchedulerResource();
+ this.authenticationResource = new AuthenticationResource();
getFeatures().put( "com.sun.jersey.api.json.POJOMappingFeature", Boolean.TRUE );
getFeatures().put( ResourceConfig.FEATURE_DISABLE_WADL, Boolean.TRUE );
@@ -100,6 +104,7 @@ public Set