Author: ivol37 at gmail.com
Date: Tue Feb 1 10:07:35 2011
New Revision: 736
Log:
[AMDATU-84] Fixed proper tenant awareness of login service, login gadget and
useradmin REST services
Modified:
branches/amdatu-dispatcher/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
Modified:
branches/amdatu-dispatcher/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp
==============================================================================
---
branches/amdatu-dispatcher/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp
(original)
+++
branches/amdatu-dispatcher/amdatu-authorization/login-gadget/src/main/resources/jsp/LoginGadget.jsp
Tue Feb 1 10:07:35 2011
@@ -71,14 +71,14 @@
gadgets.window.adjustHeight();
}
- function showLogoutBox(username, hostname, hostip) {
+ function showLogoutBox(username, hostname, tenantid, tenantname) {
document.getElementById("login").style.visibility = "hidden";
document.getElementById("login").style.display = "none";
document.getElementById("logout").style.visibility = "";
document.getElementById("logout").style.display = "";
var userdiv = document.getElementById("logout");
userdiv.innerHTML = "<p>You are currently logged in as " + username +
- " on " + hostname + " (" + hostip + ")<br/><br/>" +
+ " on tenant '" + tenantname + "' (id: '" + tenantid + "')<br/><br/>"
+
"<input type='submit' value='Logout' onclick='javascript:logout()'
/></p>";
gadgets.window.adjustHeight();
}
@@ -98,7 +98,7 @@
async:true,
success: function(response) {
if (response.result != null && response.result == 'ok') {
- showLogoutBox(response.username, response.hostname,
response.hostid);
+ showLogoutBox(response.username, response.hostname,
response.tenantid, response.tenantname);
} else {
var errorMsg = "An unexpected error occurred";
if (response.msg) {
@@ -147,7 +147,7 @@
async:true,
success: function(response) {
if (response.username != null) {
- showLogoutBox(response.username, response.hostname,
response.hostid);
+ showLogoutBox(response.username, response.hostname,
response.tenantid, response.tenantname);
} else {
showLoginBox();
}
Modified:
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
(original)
+++
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
Tue Feb 1 10:07:35 2011
@@ -20,6 +20,7 @@
import org.amdatu.authorization.login.service.LoginService;
import org.amdatu.authorization.login.service.service.LoginServiceImpl;
import org.amdatu.core.tenant.Tenant;
+import org.amdatu.core.tenant.TenantManagementService;
import org.amdatu.libraries.utilities.osgi.ServiceDependentActivator;
import org.amdatu.web.httpcontext.HttpContextServiceFactory;
import org.amdatu.web.rest.jaxrs.JaxRsSpi;
@@ -57,7 +58,7 @@
.add(createServiceDependency().setService(HttpContextServiceFactory.class).setRequired(true))
.add(createServiceDependency().setService(TokenProvider.class).setRequired(true))
.add(createServiceDependency().setService(LogService.class).setRequired(true))
-
.add(createServiceDependency().setService(UserAdmin.class).setRequired(true)));
+
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true)));
}
@Override
Modified:
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
(original)
+++
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
Tue Feb 1 10:07:35 2011
@@ -42,6 +42,9 @@
import org.amdatu.authentication.tokenprovider.TokenProviderException;
import org.amdatu.authorization.login.service.LoginService;
import org.amdatu.authorization.login.service.osgi.Activator;
+import org.amdatu.core.tenant.Tenant;
+import org.amdatu.core.tenant.TenantException;
+import org.amdatu.core.tenant.TenantManagementService;
import org.amdatu.web.httpcontext.HttpContextServiceFactory;
import org.amdatu.web.httpcontext.ResourceProvider;
import org.apache.felix.dm.Component;
@@ -61,229 +64,242 @@
*/
@Path("authorization")
public class LoginServiceImpl implements ResourceProvider, LoginService {
- // Default Administrator user credentials
- private static final String DEFAULT_USERNAME = "Administrator";
- private static final String DEFAULT_PASSWORD = "Administrator";
- private static final String DEFAULT_ADMIN_GROUP = "Administrators";
-
- // Service dependencies, injected by the Felix dependency manager
- private volatile LogService m_logService;
- private volatile BundleContext m_bundleContext;
- private volatile HttpContextServiceFactory m_httpContextServiceFactory;
- private volatile UserAdmin m_userAdmin;
- private volatile TokenProvider m_tokenProvider;
-
- // The private HTTP context service for this bundle
- private Component m_httpContextComponent;
-
- // Disable HTTP caching in this REST interface
- private static CacheControl m_cacheControl;
- static {
- m_cacheControl = new CacheControl();
- m_cacheControl.setNoCache(true);
- }
-
- /**
- * The init() method is invoked by the Felix dependency manager.
- */
- public void init() {
- // Create our own http context service which registers static
resources and JSPs automatically
- m_httpContextComponent =
m_httpContextServiceFactory.create(m_bundleContext, this);
-
- m_logService.log(LogService.LOG_INFO, getClass().getName() + " service
initialized");
- }
-
- @SuppressWarnings("unchecked")
- public void start() {
- // If we don't have a user named 'Administrator' for this tenant, we
create one now.
- if (m_userAdmin.getRole(DEFAULT_USERNAME) == null) {
- User adminUser = (User) m_userAdmin.createRole(DEFAULT_USERNAME,
Role.USER);
- if (adminUser != null) {
- adminUser.getCredentials().put(PASSWORD_CREDENTIAL_KEY,
DEFAULT_PASSWORD);
- adminUser.getProperties().put(USER_NAME_CREDENTIAL_KEY,
DEFAULT_USERNAME);
- Group adminGroup = (Group)
m_userAdmin.createRole(DEFAULT_ADMIN_GROUP, Role.GROUP);
- adminGroup.addMember(adminUser);
- }
- else {
- m_logService.log(LogService.LOG_ERROR, "Failed to create
initial user " + DEFAULT_USERNAME);
- }
- }
- }
-
- // The destroy() method is automatically invoked by the Felix dependency
manager
- public void destroy() {
- // Stop the HTTP context service we created ourselves
- m_httpContextComponent.stop();
- }
-
- /**
- * This method can be used to check the availability of the Login Service.
- *
- * @return The text "Login service online"
- */
- @GET
- @Produces( { MediaType.TEXT_PLAIN })
- public String status() {
- return "Login service online";
- }
-
- /**
- * This REST service returns the current login status. Returns the
username of the current user is logged in or an
- * empty string if the user is not logged in.
- */
- @GET
- @Path("status")
- @Produces( { MediaType.APPLICATION_JSON })
- public Response getLoginStatus(@Context final HttpServletRequest request) {
- // TODO: here we have the authorization of this user, but to which
context should we bind
- // it? And what about oAuth? For now we just bind it to the http
session and use the
- // session info in the container. Note that we use our own http
session implementation
- // because of issue AMDATU-67.
- JSONObject jsonObject = new JSONObject();
- try {
- String userName = getUserName(request);
- if (userName != null) {
- jsonObject.append("username", userName);
- jsonObject.append("hostname", request.getServerName());
- jsonObject.append("hostid", request.getLocalAddr());
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl)
- .build();
- }
- }
- catch (JSONException e) {
- m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
- }
- catch (TokenProviderException e) {
- // If the token is invalid, the user is not logged in anymore,
ignore this error
- }
- catch (InvalidTokenException e) {
- // If the token is invalid, the user is not logged in anymore,
ignore this error
- }
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
- }
-
- /**
- * REST based login service with username/password.
- */
- @POST
- @Path("login")
- @Consumes("application/x-www-form-urlencoded")
- @Produces( { MediaType.APPLICATION_JSON })
- public Response login(@FormParam("username") final String username,
@FormParam("password") final String password,
- @Context final HttpServletRequest request) {
- m_logService.log(LogService.LOG_INFO, "Login requested for user: " +
username);
-
- // First retrieve the user with this username
- JSONObject jsonObject = new JSONObject();
- NewCookie cookie = null;
- try {
- Role userRole = m_userAdmin.getRole(username);
- if (userRole != null && userRole.getType() == Role.USER) {
- User user = (User) userRole;
- if (user.hasCredential(PASSWORD_CREDENTIAL_KEY, password)) {
- // Now generate a token for this user and write it to a
Set-Cookie header
- String token = generateToken(request, user);
- cookie = new NewCookie(TokenProvider.TOKEN_COOKIE_NAME,
token, "/", null, "Amdatu session", -1, false);
-
- m_logService.log(LogService.LOG_INFO, "User '" + username
+ "' logged in successfully");
- jsonObject.append("result", "ok");
- jsonObject.append("username", username);
- jsonObject.append("hostname", request.getServerName());
- jsonObject.append("hostid", request.getLocalAddr());
- jsonObject.append("msg", "User '" + username + "' logged
in successfully");
-
- }
- else {
- m_logService.log(LogService.LOG_INFO, "Incorrect password
provided for user '" + username + "'");
- jsonObject.append("result", "failed");
- jsonObject.append("msg", "Password is incorrect");
- }
- }
- else {
- m_logService.log(LogService.LOG_INFO, "Username '" + username
+ "' unknown");
- jsonObject.append("result", "failed");
- jsonObject.append("msg", "Username is unknown");
- }
- }
- catch (JSONException e) {
- m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
- throw new WebApplicationException(e,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- }
- catch (TokenProviderException e) {
- m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
- throw new WebApplicationException(e,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- }
-
- ResponseBuilder builder = Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE);
- builder.cacheControl(m_cacheControl);
- if (cookie != null) {
- builder.cookie(cookie);
- }
- return builder.build();
- }
-
- /**
- * REST based logout service with username/password.
- *
- * @return The result of the SPARQL query.
- */
- @POST
- @Path("logout")
- @Produces( { MediaType.APPLICATION_JSON })
- public Response logout(@Context final HttpServletRequest request) {
- // TODO: here we have the authorization of this user, but to which
context should we bind
- // it? And what about oAuth? For now we just bind it to the http
session and use the
- // session info in the container. Note that we use our own http
session implementation
- // because of issue AMDATU-67.
- JSONObject jsonObject = new JSONObject();
- String userName = null;
- try {
- userName = getUserName(request);
- invalidateToken(request);
- m_logService.log(LogService.LOG_INFO, "User '" + userName + "'
logged out successfully");
- jsonObject.append("result", "ok");
- }
- catch (JSONException e) {
- m_logService.log(LogService.LOG_ERROR, "Could not retrieve current
login status", e);
- }
- catch (TokenProviderException e) {
- m_logService.log(LogService.LOG_INFO, "User '" + userName + "'
could not be logged out");
- }
- catch (InvalidTokenException e) {
- m_logService.log(LogService.LOG_INFO, "User '" + userName + "' not
logged out, token was already invalid");
- }
- return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
- }
-
- public URL getResource(String name) {
- return null;
- }
-
- public String getResourceId() {
- return Activator.RESOURCE_ID;
- }
-
- private String generateToken(HttpServletRequest request, User user) throws
TokenProviderException {
- SortedMap<String, String> attributes = new TreeMap<String, String>();
- attributes.put("ip", request.getRemoteAddr());
- attributes.put(TokenProvider.USERNAME, user.getName());
- return m_tokenProvider.generateToken(attributes);
- }
-
- private String getUserName(HttpServletRequest request) throws
TokenProviderException, InvalidTokenException {
- String token = m_tokenProvider.getTokenFromRequest(request);
- if (token != null) {
- // Now decrypt to get the username and signature
- Map<String, String> attributes =
m_tokenProvider.verifyToken(token);
- if (attributes != null) {
- return attributes.get(TokenProvider.USERNAME);
- }
- }
-
- return null;
- }
-
- private void invalidateToken(HttpServletRequest request) {
-
m_tokenProvider.invalidateToken(m_tokenProvider.getTokenFromRequest(request));
- }
+ // Default Administrator user credentials
+ private static final String DEFAULT_USERNAME = "Administrator";
+ private static final String DEFAULT_PASSWORD = "Administrator";
+ private static final String DEFAULT_ADMIN_GROUP = "Administrators";
+
+ // Service dependencies, injected by the Felix dependency manager
+ private volatile LogService m_logService;
+ private volatile BundleContext m_bundleContext;
+ private volatile HttpContextServiceFactory m_httpContextServiceFactory;
+ private volatile UserAdmin m_userAdmin;
+ private volatile TokenProvider m_tokenProvider;
+ protected volatile TenantManagementService m_tenantManagementService;
+
+ // The private HTTP context service for this bundle
+ private Component m_httpContextComponent;
+ private Tenant m_tenant;
+
+ // Disable HTTP caching in this REST interface
+ private static CacheControl m_cacheControl;
+ static {
+ m_cacheControl = new CacheControl();
+ m_cacheControl.setNoCache(true);
+ }
+
+ /**
+ * The init() method is invoked by the Felix dependency manager.
+ * @throws TenantException
+ */
+ public void init(Component component) throws TenantException {
+ // Create our own http context service which registers static
resources and JSPs automatically
+ m_httpContextComponent =
m_httpContextServiceFactory.create(m_bundleContext, this);
+
+ // Retrieve the tenant
+ String tenantId = (String)
component.getServiceProperties().get("tenant_id");
+ m_tenant = m_tenantManagementService.getTenantById(tenantId);
+
+ m_logService.log(LogService.LOG_INFO, getClass().getName() + "
service initialized for tenant '" + tenantId + "'");
+ }
+
+ @SuppressWarnings("unchecked")
+ public void start() {
+ // If we don't have a user named 'Administrator' for this
tenant, we create one now.
+ if (m_userAdmin.getRole(DEFAULT_USERNAME) == null) {
+ User adminUser = (User)
m_userAdmin.createRole(DEFAULT_USERNAME, Role.USER);
+ if (adminUser != null) {
+
adminUser.getCredentials().put(PASSWORD_CREDENTIAL_KEY, DEFAULT_PASSWORD);
+
adminUser.getProperties().put(USER_NAME_CREDENTIAL_KEY, DEFAULT_USERNAME);
+ Group adminGroup = (Group)
m_userAdmin.createRole(DEFAULT_ADMIN_GROUP, Role.GROUP);
+ adminGroup.addMember(adminUser);
+ m_logService.log(LogService.LOG_INFO, "No users
available in tenant '" + m_tenant.getId()
+ + "'. Default user created!");
+ }
+ else {
+ m_logService.log(LogService.LOG_ERROR, "Failed
to create initial user " + DEFAULT_USERNAME);
+ }
+ }
+ }
+
+ // The destroy() method is automatically invoked by the Felix
dependency manager
+ public void destroy() {
+ // Stop the HTTP context service we created ourselves
+ m_httpContextComponent.stop();
+ }
+
+ /**
+ * This method can be used to check the availability of the Login
Service.
+ *
+ * @return The text "Login service online"
+ */
+ @GET
+ @Produces( { MediaType.TEXT_PLAIN })
+ public String status() {
+ return "Login service for tenant '" + m_tenant.getName() + "'
online";
+ }
+
+ /**
+ * This REST service returns the current login status. Returns the
username of the current user is logged in or an
+ * empty string if the user is not logged in.
+ */
+ @GET
+ @Path("status")
+ @Produces( { MediaType.APPLICATION_JSON })
+ public Response getLoginStatus(@Context final HttpServletRequest
request) {
+ // TODO: here we have the authorization of this user, but to
which context should we bind
+ // it? And what about oAuth? For now we just bind it to the
http session and use the
+ // session info in the container. Note that we use our own http
session implementation
+ // because of issue AMDATU-67.
+ JSONObject jsonObject = new JSONObject();
+ try {
+ String userName = getUserName(request);
+ if (userName != null) {
+ jsonObject.append("username", userName);
+ jsonObject.append("hostname",
request.getServerName());
+ jsonObject.append("hostid",
request.getLocalAddr());
+ jsonObject.append("tenantid", m_tenant.getId());
+ jsonObject.append("tenantname",
m_tenant.getName());
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl)
+ .build();
+ }
+ }
+ catch (JSONException e) {
+ m_logService.log(LogService.LOG_ERROR, "Could not
retrieve current login status", e);
+ }
+ catch (TokenProviderException e) {
+ // If the token is invalid, the user is not logged in
anymore, ignore this error
+ }
+ catch (InvalidTokenException e) {
+ // If the token is invalid, the user is not logged in
anymore, ignore this error
+ }
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
+ }
+
+ /**
+ * REST based login service with username/password.
+ */
+ @POST
+ @Path("login")
+ @Consumes("application/x-www-form-urlencoded")
+ @Produces( { MediaType.APPLICATION_JSON })
+ public Response login(@FormParam("username") final String username,
@FormParam("password") final String password,
+ @Context final HttpServletRequest request) {
+ m_logService.log(LogService.LOG_INFO, "Login requested for
user: " + username);
+
+ // First retrieve the user with this username
+ JSONObject jsonObject = new JSONObject();
+ NewCookie cookie = null;
+ try {
+ Role userRole = m_userAdmin.getRole(username);
+ if (userRole != null && userRole.getType() ==
Role.USER) {
+ User user = (User) userRole;
+ if (user.hasCredential(PASSWORD_CREDENTIAL_KEY,
password)) {
+ // Now generate a token for this user
and write it to a Set-Cookie header
+ String token = generateToken(request,
user);
+ cookie = new
NewCookie(TokenProvider.TOKEN_COOKIE_NAME, token, "/", null, "Amdatu session",
-1, false);
+
+ m_logService.log(LogService.LOG_INFO,
"User '" + username + "' logged in successfully");
+ jsonObject.append("result", "ok");
+ jsonObject.append("username", username);
+ jsonObject.append("hostname",
request.getServerName());
+ jsonObject.append("hostid",
request.getLocalAddr());
+ jsonObject.append("tenantid",
m_tenant.getId());
+ jsonObject.append("tenantname",
m_tenant.getName());
+ jsonObject.append("msg", "User '" +
username + "' logged in successfully");
+
+ }
+ else {
+ m_logService.log(LogService.LOG_INFO,
"Incorrect password provided for user '" + username + "'");
+ jsonObject.append("result", "failed");
+ jsonObject.append("msg", "Password is
incorrect");
+ }
+ }
+ else {
+ m_logService.log(LogService.LOG_INFO, "Username
'" + username + "' unknown");
+ jsonObject.append("result", "failed");
+ jsonObject.append("msg", "Username is unknown");
+ }
+ }
+ catch (JSONException e) {
+ m_logService.log(LogService.LOG_ERROR, "Could not
retrieve current login status", e);
+ throw new WebApplicationException(e,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ catch (TokenProviderException e) {
+ m_logService.log(LogService.LOG_ERROR, "Could not
retrieve current login status", e);
+ throw new WebApplicationException(e,
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+
+ ResponseBuilder builder = Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE);
+ builder.cacheControl(m_cacheControl);
+ if (cookie != null) {
+ builder.cookie(cookie);
+ }
+ return builder.build();
+ }
+
+ /**
+ * REST based logout service with username/password.
+ *
+ * @return The result of the SPARQL query.
+ */
+ @POST
+ @Path("logout")
+ @Produces( { MediaType.APPLICATION_JSON })
+ public Response logout(@Context final HttpServletRequest request) {
+ // TODO: here we have the authorization of this user, but to
which context should we bind
+ // it? And what about oAuth? For now we just bind it to the
http session and use the
+ // session info in the container. Note that we use our own http
session implementation
+ // because of issue AMDATU-67.
+ JSONObject jsonObject = new JSONObject();
+ String userName = null;
+ try {
+ userName = getUserName(request);
+ invalidateToken(request);
+ m_logService.log(LogService.LOG_INFO, "User '" +
userName + "' logged out successfully");
+ jsonObject.append("result", "ok");
+ }
+ catch (JSONException e) {
+ m_logService.log(LogService.LOG_ERROR, "Could not
retrieve current login status", e);
+ }
+ catch (TokenProviderException e) {
+ m_logService.log(LogService.LOG_INFO, "User '" +
userName + "' could not be logged out");
+ }
+ catch (InvalidTokenException e) {
+ m_logService.log(LogService.LOG_INFO, "User '" +
userName + "' not logged out, token was already invalid");
+ }
+ return Response.ok(jsonObject.toString(),
MediaType.APPLICATION_JSON_TYPE).cacheControl(m_cacheControl).build();
+ }
+
+ public URL getResource(String name) {
+ return null;
+ }
+
+ public String getResourceId() {
+ return Activator.RESOURCE_ID;
+ }
+
+ private String generateToken(HttpServletRequest request, User user)
throws TokenProviderException {
+ SortedMap<String, String> attributes = new TreeMap<String,
String>();
+ attributes.put("ip", request.getRemoteAddr());
+ attributes.put(TokenProvider.USERNAME, user.getName());
+ return m_tokenProvider.generateToken(attributes);
+ }
+
+ private String getUserName(HttpServletRequest request) throws
TokenProviderException, InvalidTokenException {
+ String token = m_tokenProvider.getTokenFromRequest(request);
+ if (token != null) {
+ // Now decrypt to get the username and signature
+ Map<String, String> attributes =
m_tokenProvider.verifyToken(token);
+ if (attributes != null) {
+ return attributes.get(TokenProvider.USERNAME);
+ }
+ }
+
+ return null;
+ }
+
+ private void invalidateToken(HttpServletRequest request) {
+
m_tokenProvider.invalidateToken(m_tokenProvider.getTokenFromRequest(request));
+ }
}
Modified:
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
(original)
+++
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
Tue Feb 1 10:07:35 2011
@@ -21,6 +21,7 @@
import org.amdatu.authorization.useradmin.rest.service.RolesResource;
import org.amdatu.authorization.useradmin.rest.service.UsersResource;
import org.amdatu.core.tenant.Tenant;
+import org.amdatu.core.tenant.TenantManagementService;
import org.amdatu.libraries.utilities.osgi.ServiceDependentActivator;
import org.amdatu.web.rest.jaxrs.JaxRsSpi;
import org.amdatu.web.rest.jaxrs.RESTService;
@@ -53,6 +54,7 @@
.setInterface(RESTService.class.getName(), null)
.setImplementation(UsersResource.class)
.add(createServiceDependency().setService(LogService.class).setRequired(true))
+
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
.add(createServiceDependency().setService(TokenProvider.class).setRequired(true)));
// Create the groups resource service and register it as REST service
@@ -61,7 +63,7 @@
.setImplementation(GroupsResource.class)
.add(createServiceDependency().setService(LogService.class).setRequired(true))
.add(createServiceDependency().setService(TokenProvider.class).setRequired(true))
-
.add(createServiceDependency().setService(UserAdmin.class).setRequired(true)));
+
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true)));
// Create the groups resource service and register it as REST service
manager.add(createAdapterService(UserAdmin.class, filter)
@@ -69,7 +71,7 @@
.setImplementation(RolesResource.class)
.add(createServiceDependency().setService(LogService.class).setRequired(true))
.add(createServiceDependency().setService(TokenProvider.class).setRequired(true))
-
.add(createServiceDependency().setService(UserAdmin.class).setRequired(true)));
+
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true)));
}
@Override
Modified:
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
(original)
+++
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
Tue Feb 1 10:07:35 2011
@@ -34,8 +34,12 @@
import org.amdatu.authentication.tokenprovider.TokenProviderException;
import org.amdatu.authorization.useradmin.rest.bean.RoleBean;
import org.amdatu.authorization.useradmin.rest.bean.SearchResultBean;
+import org.amdatu.core.tenant.Tenant;
+import org.amdatu.core.tenant.TenantException;
+import org.amdatu.core.tenant.TenantManagementService;
import org.amdatu.libraries.utilities.rest.AtomSyndicationLink;
import org.amdatu.web.rest.jaxrs.RESTService;
+import org.apache.felix.dm.Component;
import org.json.JSONObject;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.log.LogService;
@@ -52,6 +56,9 @@
protected volatile LogService m_logService;
protected volatile UserAdmin m_userAdmin;
protected volatile TokenProvider m_tokenProvider;
+ protected volatile TenantManagementService m_tenantManagementService;
+
+ protected Tenant m_tenant;
// Disable HTTP caching in this REST interface
private static CacheControl m_cacheControl;
@@ -59,6 +66,12 @@
m_cacheControl = new CacheControl();
m_cacheControl.setNoCache(true);
}
+
+ public void init(Component component) throws TenantException {
+ // Retrieve the tenant
+ String tenantId = (String)
component.getServiceProperties().get("tenant_id");
+ m_tenant = m_tenantManagementService.getTenantById(tenantId);
+ }
/**
* Returns the roles (users or groups) for the specified filter options.
Modified:
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
==============================================================================
---
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
(original)
+++
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
Tue Feb 1 10:07:35 2011
@@ -30,9 +30,13 @@
import org.osgi.service.useradmin.UserAdmin;
public class TenantUserAdminDecorator implements UserAdmin {
+ // Service dependencies injected by the dependency manager
private volatile UserAdmin m_userAdmin;
private volatile TenantManagementService m_tenantManagementService;
private volatile LogService m_logService;
+
+ // Private members
+ private Tenant m_tenant;
@SuppressWarnings("unchecked")
public void init(Component component) {
@@ -44,9 +48,9 @@
// by convention we postfix the storage provider id by _[tenant
id]. So we can retrieve the tenant id from
// this property.
String tenantId = pid.substring(pid.lastIndexOf("_") + 1);
- Tenant tenant = m_tenantManagementService.getTenantById(tenantId);
- properties.put(Tenant.SERVICE_PREFIX + "id", tenant.getId());
- properties.put(Tenant.SERVICE_PREFIX + "name", tenant.getName());
+ m_tenant = m_tenantManagementService.getTenantById(tenantId);
+ properties.put(Tenant.SERVICE_PREFIX + "id", m_tenant.getId());
+ properties.put(Tenant.SERVICE_PREFIX + "name", m_tenant.getName());
component.setServiceProperties(properties);
}
catch (TenantException e) {