@sourceloop/ctrl-plane-tenant-management-service
Version:
Tenant Management microservice for SaaS control plane
92 lines • 4.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LeadAuthenticator = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@loopback/core");
const core_2 = require("@sourceloop/core");
const permissions_1 = require("../permissions");
const notifications_1 = require("./notifications");
const crypto_helper_service_1 = require("./crypto-helper.service");
const repository_1 = require("@loopback/repository");
const repositories_1 = require("../repositories");
/**
* Helper service for authenticating leads.
*/
let LeadAuthenticator = class LeadAuthenticator {
/**
* Constructs a new instance of the LeadAuthenticatorService.
* @param {NotificationService} notificationService - Service for sending notifications.
* @param {CryptoHelperService} cryptoHelperService - Service for cryptographic operations.
* @param {ILogger} logger - Logger service for logging messages.
*/
constructor(notificationService, cryptoHelperService, leadTokenRepository, logger) {
this.notificationService = notificationService;
this.cryptoHelperService = cryptoHelperService;
this.leadTokenRepository = leadTokenRepository;
this.logger = logger;
}
/**
* The function `triggerValidationMail` sends a validation email to a lead with a
* generated temporary token to validate his email id.
* @param {Lead} lead - The `lead` parameter is an object that represents a lead.
* It likely contains information about a potential customer or user, such as their
* name, email address, and other relevant details.
*/
async triggerValidationMail(lead) {
const token = this._generateTempToken(lead, [
permissions_1.PermissionKey.CreateTenant,
permissions_1.PermissionKey.ProvisionTenant,
permissions_1.PermissionKey.ViewLead,
permissions_1.PermissionKey.ViewPlan,
permissions_1.PermissionKey.ViewSubscription,
permissions_1.PermissionKey.CreateInvoice,
permissions_1.PermissionKey.CreateBillingCustomer,
permissions_1.PermissionKey.CreateBillingPaymentSource,
permissions_1.PermissionKey.CreateBillingInvoice,
permissions_1.PermissionKey.GetBillingCustomer,
permissions_1.PermissionKey.GetBillingPaymentSource,
permissions_1.PermissionKey.GetBillingInvoice,
permissions_1.PermissionKey.UpdateBillingCustomer,
permissions_1.PermissionKey.UpdateBillingPaymentSource,
permissions_1.PermissionKey.UpdateBillingInvoice,
permissions_1.PermissionKey.DeleteBillingCustomer,
permissions_1.PermissionKey.DeleteBillingPaymentSource,
permissions_1.PermissionKey.DeleteBillingInvoice,
permissions_1.PermissionKey.CreateTenantConfig,
permissions_1.PermissionKey.ViewTenantConfig,
permissions_1.PermissionKey.DeleteTenantConfig,
permissions_1.PermissionKey.UpdateTenantConfig,
]);
const randomKey = this.cryptoHelperService.generateRandomString(+process.env.LEAD_KEY_LENGTH);
await this.leadTokenRepository.set(randomKey, { token });
await this.leadTokenRepository.expire(randomKey, +process.env.VALIDATION_TOKEN_EXPIRY);
return randomKey;
}
/**
* The function `_generateTempToken` generates a temporary token for a lead with
* specified permissions.
* @param {Lead} lead - The `lead` parameter is an object that represents a lead.
* It contains properties such as `id`, `userTenantId`, and `email`. These
* properties are used to generate a temporary token.
* @param {string[]} permissions - The `permissions` parameter is an optional array
* of strings that represents the permissions associated with the lead. These
* permissions determine what actions the lead is allowed to perform within the
* system using the generated token
* @returns a signed token.
*/
_generateTempToken(lead, permissions = []) {
return this.cryptoHelperService.generateTempTokenForLead(lead, permissions);
}
};
exports.LeadAuthenticator = LeadAuthenticator;
exports.LeadAuthenticator = LeadAuthenticator = tslib_1.__decorate([
(0, core_1.injectable)({ scope: core_1.BindingScope.SINGLETON }),
tslib_1.__param(0, (0, core_1.service)(notifications_1.NotificationService)),
tslib_1.__param(1, (0, core_1.service)(crypto_helper_service_1.CryptoHelperService)),
tslib_1.__param(2, (0, repository_1.repository)(repositories_1.LeadTokenRepository)),
tslib_1.__param(3, (0, core_1.inject)(core_2.LOGGER.LOGGER_INJECT)),
tslib_1.__metadata("design:paramtypes", [notifications_1.NotificationService,
crypto_helper_service_1.CryptoHelperService,
repositories_1.LeadTokenRepository, Object])
], LeadAuthenticator);
//# sourceMappingURL=lead-authenticator.service.js.map