Skip to content

Commit a466394

Browse files
docs(tenant-management): update the readme
GH-109
1 parent f87f036 commit a466394

File tree

3 files changed

+36
-48
lines changed

3 files changed

+36
-48
lines changed

services/subscription-service/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ $ [npm install | yarn add] @sourceloop/ctrl-plane-subscription-service
6262
// add Component for subscription-service
6363
this.component(SubscriptionServiceComponent);
6464
```
65+
- If you uses Sequelize as the ORM, make sure to use the Sequelize-compatible components,else use the respective default components.
66+
```ts
67+
this.component(SubscriptionSequelizeServiceComponent);
68+
```
6569
- Set up a [Loopback4 Datasource](https://loopback.io/doc/en/lb4/DataSource.html) with `dataSourceName` property set to
6670
`SubscriptionDB`. You can see an example datasource [here](#setting-up-a-datasource).
6771
- This component internally uses [FeatureToggleServiceComponent](https://www.npmjs.com/package/@sourceloop/feature-toggle-service) that requires a datasource binding with the name 'FeatureToggleDB'. Make sure to create a datasource for it.

services/tenant-management-service/README.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ $ [npm install | yarn add] @sourceloop/ctrl-plane-tenant-management-service
4242
// add Component for TenantManagementService
4343
this.component(TenantManagementServiceComponent);
4444
```
45-
45+
- If you uses Sequelize as the ORM, make sure to use the Sequelize-compatible components,else use the respective default components.
46+
```ts
47+
this.component(TenantManagementSequelizeServiceComponent);
48+
```
4649
This microservice uses [loopback4-authentication](https://www.npmjs.com/package/loopback4-authentication) and [@sourceloop/core](https://www.npmjs.com/package/@sourceloop/core) and that uses asymmetric token encryption and decryption by default for that setup please refer [their](https://www.npmjs.com/package/@sourceloop/authentication-service) documentation but if you wish to override and use symmetric encryption add the following to your `application.ts` file along with other config values.
4750

4851
```typecript
@@ -66,8 +69,14 @@ this.bind(TenantManagementServiceBindings.Config).to({
6669
- The front end application first calls the `/leads/{id}/verify` which updates the validated status of the lead in the DB and returns a new JWT Token that can be used for subsequent calls
6770
- If the token is validated in the previous step, the UI should call the `/leads/{id}/tenants` endpoint with the necessary payload(as per swagger documentation).
6871
- This endpoint would onboard the tenant in the DB, and its success you should trigger the relevant events using the `/tenants/{id}/provision` endpoint.
69-
- The provisioning endpoint will invoke the publish method on the `EventConnector`. This connector's purpose is to provide a place for consumer to write the event publishing logic. And your custom service can be bound to the key `EventConnectorBinding` exported by the service.
7072

73+
## Direct Tenant Onboarding
74+
75+
In addition to the lead-based onboarding flow, a new tenant can also be onboarded directly without creating a lead first.
76+
This capability is designed specifically for control plane administrators, who can create and provision tenants directly through the management APIs.
77+
78+
To ensure security and operational control, only users with control plane admin privileges are allowed to perform direct tenant onboarding.
79+
Regular users or leads cannot bypass the standard lead creation and verification process.
7180
## Event Publishing
7281

7382
The service supports pluggable event strategies — EventBridge, SQS, and BullMQ — through the loopback4-message-bus-connector.
@@ -151,6 +160,25 @@ app
151160
.bind(TenantManagementServiceBindings.IDP_AUTH0)
152161
.toProvider(Auth0IdpProvider);
153162
```
163+
### Keycloak IdP Provider
164+
165+
The Keycloak IdP Provider automatically sets up and configures all the required Keycloak resources for a new tenant during onboarding.
166+
167+
It eliminates manual setup and ensures each tenant has a secure, isolated identity environment.
168+
169+
When a new tenant is provisioned, the provider automatically:
170+
- Creates a Realm in Keycloak for that tenant.
171+
(Each tenant gets its own isolated authentication space.)
172+
173+
- Configures SMTP (Email) settings in the realm using AWS SES for password reset and notification emails.
174+
175+
- Creates a Client inside the realm for the tenant’s application with the correct redirect URIs and credentials.
176+
177+
- Creates an Admin User for the tenant with a temporary password and triggers a password reset email.
178+
179+
- Returns the admin user’s ID (authId) after successful setup.
180+
181+
This setup ensures that every tenant has a ready-to-use Keycloak environment, complete with its own realm, client, and admin user, enabling secure login and user management from day one.
154182

155183
## Webhook Integration
156184

@@ -585,3 +613,5 @@ The major tables in the schema are briefly described below -
585613
**Leads** - this model represents a lead that could eventually be a tenant in the system
586614

587615
**Tenants** - main model of the service that represents a tenant in the system, either pooled or siloed
616+
617+
**TenantsConfig** - to save any tenant specific data related to idP

services/tenant-management-service/src/models/tenant-config.model.ts

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)