import * as plugins from './smartacme.plugins.js'; import { SmartacmeCert } from './smartacme.classes.cert.js'; import { SmartAcme } from './smartacme.classes.smartacme.js'; import * as interfaces from './interfaces/index.js'; export class SmartacmeCertManager { // ========= // STATIC // ========= public static activeDB: plugins.smartdata.SmartdataDb; // ========= // INSTANCE // ========= private mongoDescriptor: plugins.smartdata.IMongoDescriptor; public smartdataDb: plugins.smartdata.SmartdataDb; public interestMap: plugins.lik.InterestMap; constructor( smartAcmeArg: SmartAcme, optionsArg: { mongoDescriptor: plugins.smartdata.IMongoDescriptor; } ) { this.mongoDescriptor = optionsArg.mongoDescriptor; } public async init() { // Smartdata DB this.smartdataDb = new plugins.smartdata.SmartdataDb(this.mongoDescriptor); await this.smartdataDb.init(); SmartacmeCertManager.activeDB = this.smartdataDb; // Pending Map this.interestMap = new plugins.lik.InterestMap((certName) => certName); } /** * retrieves a certificate * @returns the Cert class or null * @param certDomainNameArg the domain Name to retrieve the vcertificate for */ public async retrieveCertificate(certDomainNameArg: string): Promise { const existingCertificate: SmartacmeCert = await SmartacmeCert.getInstance({ domainName: certDomainNameArg, }); if (existingCertificate) { return existingCertificate; } else { return null; } } /** * stores the certificate * @param optionsArg */ public async storeCertificate(optionsArg: plugins.tsclass.network.ICert) { const cert = new SmartacmeCert(optionsArg); await cert.save(); const interest = this.interestMap.findInterest(cert.domainName); if (interest) { interest.fullfillInterest(cert); interest.markLost(); } } public async deleteCertificate(certDomainNameArg: string) { const cert: SmartacmeCert = await SmartacmeCert.getInstance({ domainName: certDomainNameArg, }); await cert.delete(); } }