Creating tenants with REST API?

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-09-2013 08:11 PM
1 REPLY 1
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-11-2013 06:31 AM
We do not currently provide a REST API for Tenant Admin (out-of-the-box) however it would be very straightforward for you to wrap the existing TenantAdminService with one or more Java-backed web scripts (to create tenant etc).
Here's some example code (untested) to get you going:
tenant.post.desc.xml
tenant.post.json.ftl
TenantPost.java
You can also look at the "TenantInterpreter.java" code to see how it is done for the existing Alfresco Explorer Tenant Admin console page: http://localhost:8080/alfresco/faces/jsp/admin/tenantadmin-console.jsp
Regards,
Jan
Here's some example code (untested) to get you going:
tenant.post.desc.xml
<webscript> <shortname>Create Tenant</shortname> <description><![CDATA[ Create a tenant. <br />You must have "administrator" privileges to create a tenant. <dl> <dt>tenantDomain</dt> <dd> mandatory </dd> <dt>tenantAdminPassword</dt> <dd> mandatory </dd> <dt>tenantContentStoreRoot</dt> <dd> optional </dd> </dl> ]]> </description> <url>/api/tenants</url> <format default="json">argument</format> <authentication>admin</authentication> <transaction>required</transaction></webscript>
tenant.post.json.ftl
{ "tenantDomain": "${tenant.tenantDomain}", "enabled": "${tenant.enabled?string}", "contentRoot": "${tenant.rootContentStoreDir!""}" }
TenantPost.java
package org.changemetoyourorg;import java.io.IOException;import java.util.HashMap;import java.util.Map;import org.alfresco.repo.tenant.TenantAdminService;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;import org.springframework.extensions.webscripts.Cache;import org.springframework.extensions.webscripts.DeclarativeWebScript;import org.springframework.extensions.webscripts.Status;import org.springframework.extensions.webscripts.WebScriptException;import org.springframework.extensions.webscripts.WebScriptRequest;/** * REST API - create tenant * * @author janv * @since Experimental - not tested or support 🙂 */public class TenantPost extends DeclarativeWebScript{ protected static final Log logger = LogFactory.getLog(TenantPost.class); protected static final String TENANT_DOMAIN = "tenantDomain"; protected static final String TENANT_ADMIN_PASSWORD = "tenantAdminPassword"; protected static final String TENANT_CONTENT_STORE_ROOT = "tenantContentStoreRoot"; protected TenantAdminService tenantAdminService; public void setTenantAdminService(TenantAdminService tenantAdminService) { this.tenantAdminService = tenantAdminService; } @Override protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) { String tenantDomain = null; String tenantAdminPassword = null; String contentStoreRoot = null; try { JSONObject json = new JSONObject(new JSONTokener(req.getContent().getContent())); if (! json.has(TENANT_DOMAIN)) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not find required 'tenantDomain' parameter"); } tenantDomain = json.getString(TENANT_DOMAIN); if (! json.has(TENANT_ADMIN_PASSWORD)) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not find required 'tenantAdminPassword' parameter"); } tenantAdminPassword = json.getString(TENANT_ADMIN_PASSWORD); if (json.has(TENANT_CONTENT_STORE_ROOT)) { contentStoreRoot = json.getString(TENANT_CONTENT_STORE_ROOT); } } catch (IOException iox) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not read content from req.", iox); } catch (JSONException je) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Could not parse JSON from req.", je); } tenantAdminService.createTenant(tenantDomain, tenantAdminPassword.toCharArray(), contentStoreRoot); Map<String, Object> model = new HashMap<String, Object>(0); return model; }}
You can also look at the "TenantInterpreter.java" code to see how it is done for the existing Alfresco Explorer Tenant Admin console page: http://localhost:8080/alfresco/faces/jsp/admin/tenantadmin-console.jsp
Regards,
Jan
