UNPKG

@sourceloop/ctrl-plane-tenant-management-service

Version:

Tenant Management microservice for SaaS control plane

92 lines 4.97 kB
"use strict"; 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