MT - extra validation when creating/importing new tenants

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@8239 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jan Vonka
2008-02-11 10:07:06 +00:00
parent 83ab25f486
commit 1041c6ceb0

View File

@@ -280,63 +280,43 @@ public class MultiTAdminServiceImpl extends AbstractLifecycleBean implements Ten
* @see TenantAdminService.createTenant() * @see TenantAdminService.createTenant()
*/ */
public void createTenant(final String tenantDomain, final char[] tenantAdminRawPassword, String rootContentStoreDir) public void createTenant(final String tenantDomain, final char[] tenantAdminRawPassword, String rootContentStoreDir)
{ {
// Check that all the passed values are not null
ParameterCheck.mandatory("tenantDomain", tenantDomain);
ParameterCheck.mandatory("tenantAdminRawPassword", tenantAdminRawPassword); ParameterCheck.mandatory("tenantAdminRawPassword", tenantAdminRawPassword);
validateTenantName(tenantDomain); initTenant(tenantDomain, rootContentStoreDir);
if (existsTenant(tenantDomain))
{
throw new AlfrescoRuntimeException("Tenant already exists: " + tenantDomain);
}
else
{
authenticationComponent.setSystemUserAsCurrentUser();
if (rootContentStoreDir == null) AuthenticationUtil.runAs(new RunAsWork<Object>()
{ {
rootContentStoreDir = tenantFileContentStore.getDefaultRootDir(); public Object doWork()
} {
dictionaryComponent.init();
// init - need to enable tenant (including tenant service) before stores bootstrap tenantFileContentStore.init();
Tenant tenant = new Tenant(tenantDomain, true, rootContentStoreDir);
putTenantAttributes(tenantDomain, tenant); // create tenant-specific stores
ImporterBootstrap userImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("userBootstrap");
AuthenticationUtil.runAs(new RunAsWork<Object>() bootstrapUserTenantStore(userImporterBootstrap, tenantDomain, tenantAdminRawPassword);
{
public Object doWork() ImporterBootstrap systemImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("systemBootstrap");
{ bootstrapSystemTenantStore(systemImporterBootstrap, tenantDomain);
dictionaryComponent.init();
tenantFileContentStore.init();
// create tenant-specific stores
ImporterBootstrap userImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("userBootstrap");
bootstrapUserTenantStore(userImporterBootstrap, tenantDomain, tenantAdminRawPassword);
ImporterBootstrap systemImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("systemBootstrap");
bootstrapSystemTenantStore(systemImporterBootstrap, tenantDomain);
ImporterBootstrap versionImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("versionBootstrap"); ImporterBootstrap versionImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("versionBootstrap");
bootstrapVersionTenantStore(versionImporterBootstrap, tenantDomain); bootstrapVersionTenantStore(versionImporterBootstrap, tenantDomain);
ImporterBootstrap spacesArchiveImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("spacesArchiveBootstrap"); ImporterBootstrap spacesArchiveImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("spacesArchiveBootstrap");
bootstrapSpacesArchiveTenantStore(spacesArchiveImporterBootstrap, tenantDomain); bootstrapSpacesArchiveTenantStore(spacesArchiveImporterBootstrap, tenantDomain);
ImporterBootstrap spacesImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("spacesBootstrap"); ImporterBootstrap spacesImporterBootstrap = (ImporterBootstrap)getApplicationContext().getBean("spacesBootstrap");
bootstrapSpacesTenantStore(spacesImporterBootstrap, tenantDomain); bootstrapSpacesTenantStore(spacesImporterBootstrap, tenantDomain);
// notify listeners that tenant has been created & hence enabled // notify listeners that tenant has been created & hence enabled
for (TenantDeployer tenantDeployer : tenantDeployers) for (TenantDeployer tenantDeployer : tenantDeployers)
{ {
tenantDeployer.onEnableTenant(); tenantDeployer.onEnableTenant();
} }
return null; return null;
} }
}, getSystemUser(tenantDomain)); }, getSystemUser(tenantDomain));
}
logger.info("Tenant created: " + tenantDomain); logger.info("Tenant created: " + tenantDomain);
} }
@@ -363,53 +343,32 @@ public class MultiTAdminServiceImpl extends AbstractLifecycleBean implements Ten
*/ */
public void importTenant(final String tenantDomain, final File directorySource, String rootContentStoreDir) public void importTenant(final String tenantDomain, final File directorySource, String rootContentStoreDir)
{ {
// Check that all the passed values are not null initTenant(tenantDomain, rootContentStoreDir);
ParameterCheck.mandatory("tenantDomain", tenantDomain);
validateTenantName(tenantDomain); AuthenticationUtil.runAs(new RunAsWork<Object>()
{
if (existsTenant(tenantDomain)) public Object doWork()
{ {
throw new AlfrescoRuntimeException("Tenant already exists: " + tenantDomain); dictionaryComponent.init();
} tenantFileContentStore.init();
else
{ // import tenant-specific stores
authenticationComponent.setSystemUserAsCurrentUser(); importBootstrapUserTenantStore(tenantDomain, directorySource);
importBootstrapSystemTenantStore(tenantDomain, directorySource);
if (rootContentStoreDir == null) importBootstrapVersionTenantStore(tenantDomain, directorySource);
{ importBootstrapSpacesArchiveTenantStore(tenantDomain, directorySource);
rootContentStoreDir = tenantFileContentStore.getDefaultRootDir(); importBootstrapSpacesModelsTenantStore(tenantDomain, directorySource);
} importBootstrapSpacesTenantStore(tenantDomain, directorySource);
// init - need to enable tenant (including tenant service) before stores bootstrap // notify listeners that tenant has been created & hence enabled
Tenant tenant = new Tenant(tenantDomain, true, rootContentStoreDir); for (TenantDeployer tenantDeployer : tenantDeployers)
putTenantAttributes(tenantDomain, tenant); {
tenantDeployer.onEnableTenant();
AuthenticationUtil.runAs(new RunAsWork<Object>() }
{
public Object doWork() return null;
{ }
dictionaryComponent.init(); }, getSystemUser(tenantDomain));
tenantFileContentStore.init();
// import tenant-specific stores
importBootstrapUserTenantStore(tenantDomain, directorySource);
importBootstrapSystemTenantStore(tenantDomain, directorySource);
importBootstrapVersionTenantStore(tenantDomain, directorySource);
importBootstrapSpacesArchiveTenantStore(tenantDomain, directorySource);
importBootstrapSpacesModelsTenantStore(tenantDomain, directorySource);
importBootstrapSpacesTenantStore(tenantDomain, directorySource);
// notify listeners that tenant has been created & hence enabled
for (TenantDeployer tenantDeployer : tenantDeployers)
{
tenantDeployer.onEnableTenant();
}
return null;
}
}, getSystemUser(tenantDomain));
}
logger.info("Tenant imported: " + tenantDomain); logger.info("Tenant imported: " + tenantDomain);
} }
@@ -1078,8 +1037,37 @@ public class MultiTAdminServiceImpl extends AbstractLifecycleBean implements Ten
} }
} }
private void initTenant(String tenantDomain, String rootContentStoreDir)
{
validateTenantName(tenantDomain);
if (existsTenant(tenantDomain))
{
throw new AlfrescoRuntimeException("Tenant already exists: " + tenantDomain);
}
if (rootContentStoreDir == null)
{
rootContentStoreDir = tenantFileContentStore.getDefaultRootDir();
}
else
{
File tenantRootDir = new File(rootContentStoreDir);
if ((tenantRootDir.exists()) && (tenantRootDir.list().length != 0))
{
throw new AlfrescoRuntimeException("Tenant root directory is not empty: " + rootContentStoreDir);
}
}
// init - need to enable tenant (including tenant service) before stores bootstrap
Tenant tenant = new Tenant(tenantDomain, true, rootContentStoreDir);
putTenantAttributes(tenantDomain, tenant);
}
private void validateTenantName(String tenantDomain) private void validateTenantName(String tenantDomain)
{ {
ParameterCheck.mandatory("tenantDomain", tenantDomain);
if (tenantDomain.length() > MAX_LEN) if (tenantDomain.length() > MAX_LEN)
{ {
throw new IllegalArgumentException(tenantDomain + " is not a valid tenant name (must be less than " + MAX_LEN + " characters)"); throw new IllegalArgumentException(tenantDomain + " is not a valid tenant name (must be less than " + MAX_LEN + " characters)");