ToolJet/server/migrations/1650485473528-PopulateSSOConfigs.ts
Midhun G S 0545528504
Support for multiple workspaces 🚀 (#2778)
* multi org changes

* Initial changes

* changes

* manage sso page

* Multi-organization changes

* Multi organization changes

* multi-org changes

* multi-org changes

* multi-org changes

* multi-org fixes

* env variables app.json changes

* multi-org-fix

* user invitation token fix

* multi-org group permission fix

* multi-org app privilege

* google oauth fix

* Remove enable signup for form login

* Multi organization fixes

* multi-org user invite flow changes

* multi-org sign up fix

* rebase and multi-org fixes

* revert testing logs

* test logs revert

* migration changes

* migration file fix

* error message changes

* git login for private email fix

* dropdown fix

* test cases

* e2e test cases added

* test cases fix

* documentation changes

* testcases fix

* testcases added

* replace findOne with findOneOrFail

* accept invite testcases

* login page fixes

* added encrypted tag

* review comments

* migration fixes

* improvements

* manage sso loading fix

* review comments

* migration file changes

* new organization creation bug fix

* added e2e testcases

* added testcases

* Update data_sources.controller.ts
2022-05-05 12:38:42 +05:30

105 lines
3.5 KiB
TypeScript

import { Organization } from 'src/entities/organization.entity';
import { SSOConfigs } from 'src/entities/sso_config.entity';
import { MigrationInterface, QueryRunner } from 'typeorm';
import { EncryptionService } from 'src/services/encryption.service';
export class PopulateSSOConfigs1650485473528 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
const entityManager = queryRunner.manager;
const encryptionService = new EncryptionService();
const OrganizationRepository = entityManager.getRepository(Organization);
const isSingleOrganization = process.env.MULTI_ORGANIZATION !== 'true';
const enableSignUp = process.env.SSO_DISABLE_SIGNUP !== 'true';
const domain = process.env.SSO_RESTRICTED_DOMAIN;
const googleEnabled = !!process.env.SSO_GOOGLE_OAUTH2_CLIENT_ID;
const googleConfigs = {
clientId: process.env.SSO_GOOGLE_OAUTH2_CLIENT_ID,
};
const gitEnabled = !!process.env.SSO_GIT_OAUTH2_CLIENT_ID;
const gitConfigs = {
clientId: process.env.SSO_GIT_OAUTH2_CLIENT_ID,
clientSecret:
process.env.SSO_GIT_OAUTH2_CLIENT_SECRET &&
(await encryptionService.encryptColumnValue(
'ssoConfigs',
'clientSecret',
process.env.SSO_GIT_OAUTH2_CLIENT_SECRET
)),
};
const passwordEnabled = process.env.DISABLE_PASSWORD_LOGIN !== 'true';
const organizations: Organization[] = await OrganizationRepository.find({
relations: ['ssoConfigs'],
select: ['ssoConfigs', 'id'],
});
if (organizations && organizations.length > 0) {
for (const organization of organizations) {
await OrganizationRepository.update({ id: organization.id }, { enableSignUp, ...(domain ? { domain } : {}) });
// adding form configs for organizations which does not have any
if (
!organization.ssoConfigs?.some((og) => {
og?.sso === 'form';
})
) {
await entityManager
.createQueryBuilder()
.insert()
.into(SSOConfigs, ['organizationId', 'sso', 'enabled'])
.values({
organizationId: organization.id,
sso: 'form',
enabled: !isSingleOrganization ? true : passwordEnabled,
})
.execute();
}
if (
isSingleOrganization &&
googleEnabled &&
!organization.ssoConfigs?.some((og) => {
og?.sso === 'google';
})
) {
await entityManager
.createQueryBuilder()
.insert()
.into(SSOConfigs, ['organizationId', 'sso', 'enabled', 'configs'])
.values({
organizationId: organization.id,
sso: 'google',
enabled: googleEnabled,
configs: googleConfigs,
})
.execute();
}
if (
isSingleOrganization &&
gitEnabled &&
!organization.ssoConfigs?.some((og) => {
og?.sso === 'git';
})
) {
await entityManager
.createQueryBuilder()
.insert()
.into(SSOConfigs, ['organizationId', 'sso', 'enabled', 'configs'])
.values({
organizationId: organization.id,
sso: 'git',
enabled: gitEnabled,
configs: gitConfigs,
})
.execute();
}
}
}
}
public async down(queryRunner: QueryRunner): Promise<void> {}
}