How to configure the URLs to allow users to have the same username.
Before you begin
To enable this feature, see Configuring reseller root domains.
Configuring Identity
- Locate the STS\Web.config file, usually located in C:\Program Files (x86)\Atomia\Identity\STS.
 - Set 
<add key="UniqueUserMultipleReseller" value="false" />totrue. - Locate the 
<membership>section in the configuration and add the following element to each extra reseller root domain. 
<add name="reseller2.com" connectionStringName="UserManagementConectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="reseller2.com" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="10" minRequiredPasswordLength="3" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- Locate the 
<roleManager>section in the configuration and add the following element. - Locate the UserAPI\web.config file, usually located in C:\Program Files (x86)\Atomia\Identity\UserAPI.
 - Repeat the above steps for the STS configuration.
 
<add connectionStringName="UserManagementConectionString" applicationName="reseller2.com" name="reseller2.com" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
Configuring account API and Billing API
- Locate the AccountAPI\Web.config file usually located in C:\Program Files (x86)\Atomia\BillingAPIs\AccountApi.
 - Locate the BillingApi\Web.config file usually located in C:\Program Files (x86)\Atomia\BillingAPIs\BillingApi.
 - Set 
<add key="UniqueUserMultipleReseller" value="false" />totrue. - Add a new key for each extra reseller root domain. Don’t add the key for the domain that you have been using for your main installation.
 
<add key="reseller2.com" value="true" />
Configuring the Automation Server
- Locate the web.config in C:\Program Files (x86)\Atomia\AutomationServer\Web.
 - Set 
<add key="UniqueUserMultipleReseller" value="false" />totrue. 
Configuring the Billing Customer Panel and Hosting Control Panel
- Locate the appConfig.config file in C:\Program Files (x86)\Atomia\BillingCustomerPanel\App_Data.
 - Set 
<add key="UniqueUserMultipleReseller" value="false" />totrue. - Locate the appConfig.config file in C:\Program Files (x86)\Atomia\HostingControlPanel\App_Data.
 - Set 
<add key="UniqueUserMultipleReseller" value="false" />totrue. 
Database changes
- Start SQL Server Management Studio and execute the following query.
 
  insert into AtomiaUserManagement.dbo.aspnet_Applications
  (ApplicationName, LoweredApplicationName, ApplicationId)
  values ('reseller2.com', 'reseller2.com', NEWID())
- To migrate existing users, modify the following SQL script to fit your needs.
 
 -- Variables
  DECLARE @current_application_id UNIQUEIDENTIFIER
  DECLARE @new_application_id UNIQUEIDENTIFIER
  DECLARE @user_id UNIQUEIDENTIFIER
  DECLARE @current_reseller_root_domain NVARCHAR(255)
  DECLARE @new_reseller_root_domain NVARCHAR(255)
  DECLARE @name NVARCHAR(255)
  DECLARE @username NVARCHAR(255)
  DECLARE @accounts TABLE(name NVARCHAR(255))
  DECLARE @usernames TABLE (username NVARCHAR(255))
  -- The reseller root domain that the users have right now, before migration. If you are migrating from the default reseller/root domain this should be NULL
  SET @current_reseller_root_domain = NULL
  -- The reseller root domain that the users should have after migration
  SET @new_reseller_root_domain = 'reseller2.com'
  -- List of accounts that should be migrated
  INSERT INTO @accounts VALUES('100130')
  INSERT INTO @accounts VALUES('100131')
  --
  -- Nothing below this line should have to be changed
  --
  -- Let's create new application if it doesn't exist
  IF @new_reseller_root_domain IS NOT NULL AND NOT EXISTS (SELECT 1 FROM AtomiaUserManagement.dbo.aspnet_Applications WHERE ApplicationName = @new_reseller_root_domain)
  BEGIN
      INSERT INTO AtomiaUserManagement.dbo.aspnet_Applications
      (ApplicationId, ApplicationName, Description, LoweredApplicationName)
      VALUES(NEWID(), @new_reseller_root_domain, @new_reseller_root_domain, @new_reseller_root_domain)
  END
  -- Get current application id
  IF @current_reseller_root_domain IS NULL
  BEGIN
      SELECT @current_application_id = ApplicationId
      FROM AtomiaUserManagement.dbo.aspnet_Applications
      WHERE ApplicationName = 'AtomiaIdentityStS'
  END
  ELSE
  BEGIN
      SELECT @current_application_id = ApplicationId
      FROM AtomiaUserManagement.dbo.aspnet_Applications
      WHERE ApplicationName = @current_reseller_root_domain
  END
  -- Get new application id
  IF @new_reseller_root_domain IS NULL
  BEGIN
      SELECT @new_application_id = ApplicationId
      FROM AtomiaUserManagement.dbo.aspnet_Applications
      WHERE ApplicationName = 'AtomiaIdentityStS'
  END
  ELSE
  BEGIN
      SELECT @new_application_id = ApplicationId
      FROM AtomiaUserManagement.dbo.aspnet_Applications
      WHERE ApplicationName = @new_reseller_root_domain
  END
  -- Make sure the application has all the needed roles
  IF NOT EXISTS (SELECT 1 FROM AtomiaUserManagement.dbo.aspnet_Roles WHERE ApplicationId = @new_application_id AND RoleName = 'AccountOwner')
  BEGIN
      INSERT INTO AtomiaUserManagement.dbo.aspnet_Roles (ApplicationId, RoleId, RoleName, LoweredRoleName)
      VALUES (@new_application_id, NEWID(), 'AccountOwner', 'accountowner')
  END
  IF NOT EXISTS (SELECT 1 FROM AtomiaUserManagement.dbo.aspnet_Roles WHERE ApplicationId = @new_application_id AND RoleName = 'AccountUser')
  BEGIN
      INSERT INTO AtomiaUserManagement.dbo.aspnet_Roles (ApplicationId, RoleId, RoleName, LoweredRoleName)
      VALUES (@new_application_id, NEWID(), 'AccountUser', 'accountuser')
  END
  IF NOT EXISTS (SELECT 1 FROM AtomiaUserManagement.dbo.aspnet_Roles WHERE ApplicationId = @new_application_id AND RoleName = 'Administrators')
  BEGIN
      INSERT INTO AtomiaUserManagement.dbo.aspnet_Roles (ApplicationId, RoleId, RoleName, LoweredRoleName)
      VALUES (@new_application_id, NEWID(), 'Administrators', 'administrators')
  END
  IF NOT EXISTS (SELECT 1 FROM AtomiaUserManagement.dbo.aspnet_Roles WHERE ApplicationId = @new_application_id AND RoleName = 'Reseller')
  BEGIN
      INSERT INTO AtomiaUserManagement.dbo.aspnet_Roles (ApplicationId, RoleId, RoleName, LoweredRoleName)
      VALUES (@new_application_id, NEWID(), 'Reseller', 'reseller')
  END
  -- Get all usernames for the accounts
  DECLARE cur CURSOR FOR
  SELECT name
  FROM @accounts
  OPEN cur
  FETCH NEXT FROM cur INTO @name
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
      -- Store users for the account name in the usernames table
      INSERT INTO @usernames
      SELECT l.username
      FROM AtomiaAccount.dbo.account a
      INNER JOIN AtomiaAccount.dbo.login l ON l.fk_account_id = a.id
      WHERE a.name = @name
      FETCH NEXT FROM cur INTO @name
  END
  CLOSE cur
  DEALLOCATE cur
  -- Iterate over the usernames
  DECLARE cur CURSOR FOR
  SELECT username
  FROM @usernames
  OPEN cur
  FETCH NEXT FROM cur INTO @username
  WHILE (@@FETCH_STATUS = 0)
  BEGIN
      -- Set reseller root domain in the login table
      print 'Set reseller root domain in the login table'
      IF @current_reseller_root_domain IS NULL
      BEGIN
          UPDATE AtomiaAccount.dbo.login
          SET reseller_root_domain = @new_reseller_root_domain
          WHERE username = @username AND (reseller_root_domain IS NULL OR reseller_root_domain = '')
      END
      ELSE
      BEGIN
          UPDATE AtomiaAccount.dbo.login
          SET reseller_root_domain = @new_reseller_root_domain
          WHERE username = @username AND reseller_root_domain = @current_reseller_root_domain
      END
      -- Set identity properties
      print 'Set identity properties'
      IF @current_reseller_root_domain IS NULL
      BEGIN
          UPDATE AtomiaIdentity.dbo.identity_properties
          SET value = @new_reseller_root_domain
          WHERE username = @username AND (reseller_root_domain IS NULL OR reseller_root_domain = '') AND property = 'resellerRootDomain'
          UPDATE AtomiaIdentity.dbo.identity_properties
          SET reseller_root_domain = @new_reseller_root_domain
          WHERE username = @username AND (reseller_root_domain IS NULL OR reseller_root_domain = '')
      END
      ELSE
      BEGIN
          UPDATE AtomiaIdentity.dbo.identity_properties
          SET value = @new_reseller_root_domain
          WHERE username = @username AND reseller_root_domain = @current_reseller_root_domain AND property = 'resellerRootDomain'
          UPDATE AtomiaIdentity.dbo.identity_properties
          SET reseller_root_domain = @new_reseller_root_domain
          WHERE username = @username AND reseller_root_domain = @current_reseller_root_domain
      END
      -- Get user id for the username
      print 'Get user id for the username'
      SELECT @user_id = UserId
      FROM AtomiaUserManagement.dbo.aspnet_Users
      WHERE UserName = @username AND ApplicationId = @current_application_id
      -- Change application id for the user
      print 'Change application id for the user'
      UPDATE AtomiaUserManagement.dbo.aspnet_Users
      SET ApplicationId = @new_application_id
      WHERE UserId = @user_id
      UPDATE AtomiaUserManagement.dbo.aspnet_Membership
      SET ApplicationId = @new_application_id
      WHERE UserId = @user_id
      -- Change roles for the user
      print 'Change roles for the user'
      UPDATE uir
      SET uir.RoleId = nr.RoleId
      FROM AtomiaUserManagement.dbo.aspnet_UsersInRoles uir
      INNER JOIN AtomiaUserManagement.dbo.aspnet_Roles cr ON cr.RoleId = uir.RoleId
      INNER JOIN AtomiaUserManagement.dbo.aspnet_Roles nr ON nr.RoleName = cr.RoleName AND nr.ApplicationId = @new_application_id
      WHERE uir.UserId = @user_id
      FETCH NEXT FROM cur INTO @username
  END
  CLOSE cur
  DEALLOCATE cur