update
This commit is contained in:
		| @@ -69,16 +69,13 @@ export class SmartCertManager { | ||||
|     ); | ||||
|      | ||||
|     if (hasAcmeRoutes && this.acmeOptions?.email) { | ||||
|       // Create SmartAcme instance with our challenge handler | ||||
|       // Create SmartAcme instance with built-in MemoryCertManager | ||||
|       this.smartAcme = new plugins.smartacme.SmartAcme({ | ||||
|         accountEmail: this.acmeOptions.email, | ||||
|         environment: this.acmeOptions.useProduction ? 'production' : 'integration', | ||||
|         certManager: new InMemoryCertManager() | ||||
|         certManager: new plugins.smartacme.certmanagers.MemoryCertManager() | ||||
|       }); | ||||
|        | ||||
|       // The challenge handler is now embedded in the SmartAcme config above | ||||
|       // SmartAcme will handle the challenge internally | ||||
|        | ||||
|       await this.smartAcme.start(); | ||||
|     } | ||||
|      | ||||
| @@ -163,13 +160,18 @@ export class SmartCertManager { | ||||
|       // Use smartacme to get certificate | ||||
|       const cert = await this.smartAcme.getCertificateForDomain(primaryDomain); | ||||
|        | ||||
|       // smartacme returns a Cert object with these properties | ||||
|       // SmartAcme's Cert object has these properties: | ||||
|       // - certPem: The certificate PEM string | ||||
|       // - privateKeyPem: The private key PEM string | ||||
|       // - csr: Certificate signing request | ||||
|       // - validUntil: Expiry date as Date object | ||||
|       // - domainName: The domain name | ||||
|       const certData: ICertificateData = { | ||||
|         cert: cert.publicKey, | ||||
|         key: cert.privateKey, | ||||
|         ca: cert.publicKey, // Use same as cert for now | ||||
|         expiryDate: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000), // 90 days | ||||
|         issueDate: new Date() | ||||
|         cert: cert.certPem, | ||||
|         key: cert.privateKeyPem, | ||||
|         ca: cert.certPem, // Use same as cert for now | ||||
|         expiryDate: cert.validUntil, | ||||
|         issueDate: new Date() // SmartAcme doesn't provide issue date | ||||
|       }; | ||||
|        | ||||
|       await this.certStore.saveCertificate(routeName, certData); | ||||
| @@ -473,45 +475,3 @@ export class SmartCertManager { | ||||
|   } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Simple in-memory certificate manager for SmartAcme | ||||
|  * We only use this to satisfy SmartAcme's interface - actual storage is handled by CertStore | ||||
|  */ | ||||
| class InMemoryCertManager implements plugins.smartacme.ICertManager { | ||||
|   private store = new Map<string, any>(); | ||||
|    | ||||
|   // Required methods from ICertManager interface | ||||
|   public async init(): Promise<void> { | ||||
|     // Initialization if needed | ||||
|   } | ||||
|    | ||||
|   public async retrieveCertificate(domainName: string): Promise<plugins.smartacme.Cert | null> { | ||||
|     return this.store.get(domainName) || null; | ||||
|   } | ||||
|    | ||||
|   public async storeCertificate(cert: plugins.smartacme.Cert): Promise<void> { | ||||
|     this.store.set(cert.domainName, cert); | ||||
|   } | ||||
|    | ||||
|   public async deleteCertificate(domainName: string): Promise<void> { | ||||
|     this.store.delete(domainName); | ||||
|   } | ||||
|    | ||||
|   public async getCertificates(): Promise<plugins.smartacme.Cert[]> { | ||||
|     return Array.from(this.store.values()); | ||||
|   } | ||||
|    | ||||
|   public async stop(): Promise<void> { | ||||
|     // Cleanup if needed | ||||
|   } | ||||
|    | ||||
|   public async close(): Promise<void> { | ||||
|     // Required by interface | ||||
|     await this.stop(); | ||||
|   } | ||||
|    | ||||
|   public async wipe(): Promise<void> { | ||||
|     // Required by interface | ||||
|     this.store.clear(); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user