fix(certificate-management): Fix loss of route update callback during dynamic route updates in certificate manager
This commit is contained in:
		| @@ -3,6 +3,6 @@ | ||||
|  */ | ||||
| export const commitinfo = { | ||||
|   name: '@push.rocks/smartproxy', | ||||
|   version: '19.2.2', | ||||
|   version: '19.2.3', | ||||
|   description: 'A powerful proxy package with unified route-based configuration for high traffic management. Features include SSL/TLS support, flexible routing patterns, WebSocket handling, advanced security options, and automatic ACME certificate management.' | ||||
| } | ||||
|   | ||||
| @@ -178,6 +178,36 @@ export class SmartProxy extends plugins.EventEmitter { | ||||
|    */ | ||||
|   public settings: ISmartProxyOptions; | ||||
|    | ||||
|   /** | ||||
|    * Helper method to create and configure certificate manager | ||||
|    * This ensures consistent setup including the required ACME callback | ||||
|    */ | ||||
|   private async createCertificateManager( | ||||
|     routes: IRouteConfig[], | ||||
|     certStore: string = './certs', | ||||
|     acmeOptions?: any | ||||
|   ): Promise<SmartCertManager> { | ||||
|     const certManager = new SmartCertManager(routes, certStore, acmeOptions); | ||||
|      | ||||
|     // Always set up the route update callback for ACME challenges | ||||
|     certManager.setUpdateRoutesCallback(async (routes) => { | ||||
|       await this.updateRoutes(routes); | ||||
|     }); | ||||
|      | ||||
|     // Connect with NetworkProxy if available | ||||
|     if (this.networkProxyBridge.getNetworkProxy()) { | ||||
|       certManager.setNetworkProxy(this.networkProxyBridge.getNetworkProxy()); | ||||
|     } | ||||
|      | ||||
|     // Pass down the global ACME config if available | ||||
|     if (this.settings.acme) { | ||||
|       certManager.setGlobalAcmeDefaults(this.settings.acme); | ||||
|     } | ||||
|      | ||||
|     await certManager.initialize(); | ||||
|     return certManager; | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * Initialize certificate manager | ||||
|    */ | ||||
| @@ -230,28 +260,12 @@ export class SmartProxy extends plugins.EventEmitter { | ||||
|       ); | ||||
|     } | ||||
|      | ||||
|     this.certManager = new SmartCertManager( | ||||
|     // Use the helper method to create and configure the certificate manager | ||||
|     this.certManager = await this.createCertificateManager( | ||||
|       this.settings.routes, | ||||
|       this.settings.acme?.certificateStore || './certs', | ||||
|       acmeOptions | ||||
|     ); | ||||
|      | ||||
|     // Pass down the global ACME config to the cert manager | ||||
|     if (this.settings.acme) { | ||||
|       this.certManager.setGlobalAcmeDefaults(this.settings.acme); | ||||
|     } | ||||
|      | ||||
|     // Connect with NetworkProxy | ||||
|     if (this.networkProxyBridge.getNetworkProxy()) { | ||||
|       this.certManager.setNetworkProxy(this.networkProxyBridge.getNetworkProxy()); | ||||
|     } | ||||
|      | ||||
|     // Set route update callback for ACME challenges | ||||
|     this.certManager.setUpdateRoutesCallback(async (routes) => { | ||||
|       await this.updateRoutes(routes); | ||||
|     }); | ||||
|      | ||||
|     await this.certManager.initialize(); | ||||
|   } | ||||
|    | ||||
|   /** | ||||
| @@ -520,19 +534,15 @@ export class SmartProxy extends plugins.EventEmitter { | ||||
|  | ||||
|     // Update certificate manager with new routes | ||||
|     if (this.certManager) { | ||||
|       const existingAcmeOptions = this.certManager.getAcmeOptions(); | ||||
|       await this.certManager.stop(); | ||||
|        | ||||
|       this.certManager = new SmartCertManager( | ||||
|       // Use the helper method to create and configure the certificate manager | ||||
|       this.certManager = await this.createCertificateManager( | ||||
|         newRoutes, | ||||
|         './certs', | ||||
|         this.certManager.getAcmeOptions() | ||||
|         existingAcmeOptions | ||||
|       ); | ||||
|        | ||||
|       if (this.networkProxyBridge.getNetworkProxy()) { | ||||
|         this.certManager.setNetworkProxy(this.networkProxyBridge.getNetworkProxy()); | ||||
|       } | ||||
|        | ||||
|       await this.certManager.initialize(); | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   | ||||
		Reference in New Issue
	
	Block a user