Skip to content

Commit

Permalink
integrate auth0
Browse files Browse the repository at this point in the history
  • Loading branch information
Surbhi-sharma1 committed Sep 27, 2024
1 parent 830c939 commit 2a217a8
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 45 deletions.
18 changes: 1 addition & 17 deletions services/tenant-management-service/src/component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ import {
LEAD_TOKEN_VERIFIER,
SYSTEM_USER,
TenantManagementServiceBindings,
WEBHOOK_CONFIG,
WEBHOOK_VERIFIER,
} from './keys';
import {ITenantManagementServiceConfig} from './types';
import {InvoiceController} from './controllers/invoice.controller';
Expand Down Expand Up @@ -88,14 +86,6 @@ import {
ProvisioningService,
} from './services';
import {IdpController} from './controllers/idp.controller';
import {Auth0IdpProvider, KeycloakIdpProvider} from './providers/idp';
import {WebhookVerifierProvider} from './interceptors';
import {
DEFAULT_SIGNATURE_HEADER,
DEFAULT_TIMESTAMP_HEADER,
DEFAULT_TIMESTAMP_TOLERANCE,
} from './utils';
import {ProvisioningWebhookHandler} from './services/webhook';

export class TenantManagementServiceComponent implements Component {
constructor(
Expand Down Expand Up @@ -172,19 +162,13 @@ export class TenantManagementServiceComponent implements Component {
this.bindings = [
Binding.bind(LEAD_TOKEN_VERIFIER).toProvider(LeadTokenVerifierProvider),
Binding.bind(SYSTEM_USER).toProvider(SystemUserProvider),
Binding.bind(TenantManagementServiceBindings.IDP_KEYCLOAK).toProvider(
KeycloakIdpProvider,
),
Binding.bind(TenantManagementServiceBindings.IDP_AUTH0).toProvider(
Auth0IdpProvider,
),

createServiceBinding(ProvisioningService),
createServiceBinding(OnboardingService),
createServiceBinding(LeadAuthenticator),
createServiceBinding(CryptoHelperService),
Binding.bind('services.NotificationService').toClass(NotificationService),
createServiceBinding(InvoicePDFGenerator),

];

this.addClassBindingIfNotPresent(EventConnectorBinding.key, EventConnector);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import {TenantConfigRepository} from '../../repositories/tenant-config.repositor
import {repository} from '@loopback/repository';

import {HttpErrors} from '@loopback/rest';

const STATUS_OK = 200;
const STATUS_NOT_FOUND = 404;
export class Auth0IdpProvider
implements Provider<ConfigureIdpFunc<Auth0Response>>
{
Expand Down Expand Up @@ -41,12 +42,6 @@ export class Auth0IdpProvider
);
}
const configValue: ConfigValue = tenantConfig.configValue;
if (!configValue) {
throw new HttpErrors.NotFound(
`Tenant configuration not found for tenant: ${tenant.id}`,
);
}

const organizationData: OrganizationData = {
name: tenant.name,
// eslint-disable-next-line
Expand Down Expand Up @@ -97,11 +92,11 @@ export class Auth0IdpProvider
const organizationResponse =
await this.management.organizations.getByName({name: tenant.name});

if (organizationResponse.status === 200) {
if (organizationResponse.status === STATUS_OK) {
organizationId = organizationResponse.data.id;
}
} catch (error) {
if (error.statusCode === 404) {
if (error.statusCode === STATUS_NOT_FOUND) {
const organization = await this.createOrganization(organizationData);
organizationId = organization.data.id;
} else {
Expand Down Expand Up @@ -165,4 +160,12 @@ export class Auth0IdpProvider
throw new Error(`Error adding member to organization: ${error.message}`);
}
}
initManagementClient(): ManagementClient {
return new ManagementClient({
domain: process.env.AUTH0_DOMAIN ?? '',
clientId: process.env.AUTH0_CLIENT_ID ?? '',
clientSecret: process.env.AUTH0_CLIENT_SECRET ?? '',
audience: process.env.AUTH0_AUDIENCE,
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,7 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
const adminUsername = `${tenant.key}-admin`; // Customize this as needed
const adminPassword = 'your-secure-password'; // This can be dynamic or set in the environment
await this.createUser(tenant.key, adminUsername, adminPassword, token);

console.log(
`Successfully configured Keycloak for tenant: ${tenant.name}`,
);
} catch (error) {
console.error(
`Error configuring Keycloak for tenant: ${tenant.name}`,
error,
);
throw new Error(
`Failed to configure Keycloak for tenant: ${tenant.name}`,
);
Expand Down Expand Up @@ -75,7 +67,7 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
async createRealm(realmName: string, token: string): Promise<void> {
// const token = await this.authenticateAdmin();

const response = await axios.post(
await axios.post(
`${process.env.KEYCLOAK_HOST}/admin/realms`,
{
realm: realmName,
Expand All @@ -87,8 +79,6 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
},
},
);

console.log('Realm created:', response.data);
}

async createClient(
Expand All @@ -98,7 +88,7 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
): Promise<void> {
// const token = await this.authenticateAdmin();

const response = await axios.post(
await axios.post(
`${process.env.KEYCLOAK_HOST}/admin/realms/${realmName}/clients`,
{
clientId: clientId,
Expand All @@ -113,8 +103,6 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
},
},
);

console.log('Client created:', response.data);
}

async createUser(
Expand All @@ -125,7 +113,7 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
): Promise<void> {
// const token = await this.authenticateAdmin();

const response = await axios.post(
await axios.post(
`${process.env.KEYCLOAK_HOST}/admin/realms/${realmName}/users`,
{
username: username,
Expand All @@ -144,7 +132,5 @@ export class KeycloakIdpProvider implements Provider<ConfigureIdpFunc<void>> {
},
},
);

console.log('User created:', response.data);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ export interface UserData {
// eslint-disable-next-line
phone_number?: string;
// eslint-disable-next-line
user_metadata?: {[key: string]: any};
user_metadata?: {[key: string]: any}; //NOSONAR
blocked?: boolean;
// eslint-disable-next-line
email_verified?: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ import {
import {ProvisioningWebhookHandler} from './services/webhook';
import {KeycloakIdpProvider} from './providers/idp/idp-keycloak.provider';
import {IdpController} from './controllers/idp.controller';
import { Auth0IdpProvider } from './providers/idp';
import {Auth0IdpProvider} from './providers/idp';

export class WebhookTenantManagementServiceComponent implements Component {
constructor(
Expand Down

0 comments on commit 2a217a8

Please sign in to comment.