// Auth Server Module for the project unit Auth.Server.Module; interface uses System.SysUtils, System.Classes, System.Generics.Collections, Aurelius.Comp.Connection, Aurelius.Drivers.Interfaces, XData.Aurelius.ConnectionPool, XData.Server.Module, XData.Comp.ConnectionPool, Sparkle.Comp.Server, Sparkle.Comp.JwtMiddleware, XData.Comp.Server, Sparkle.Comp.HttpSysDispatcher, Sparkle.Comp.CompressMiddleware, Sparkle.Comp.CorsMiddleware, Sparkle.HttpServer.Module, Sparkle.HttpServer.Context, Sparkle.Comp.GenericMiddleware; type TAuthServerModule = class(TDataModule) SparkleHttpSysDispatcher: TSparkleHttpSysDispatcher; XDataServer: TXDataServer; XDataServerLogging: TSparkleGenericMiddleware; XDataServerCORS: TSparkleCorsMiddleware; XDataServerCompress: TSparkleCompressMiddleware; procedure XDataServerLoggingMiddlewareCreate(Sender: TObject; var Middleware: IHttpServerMiddleware); private { Private declarations } public { Public declarations } procedure StartAuthServer(ABaseUrl: string; AModelName: string); end; const SERVER_PATH_SEGMENT = 'auth'; var AuthServerModule: TAuthServerModule; implementation uses Sparkle.Middleware.Cors, Sparkle.Middleware.Compress, XData.OpenApi.Service, Common.Logging, Common.Middleware.Logging; {%CLASSGROUP 'Vcl.Controls.TControl'} {$R *.dfm} { TAuthServerModule } procedure TAuthServerModule.StartAuthServer(ABaseUrl: string; AModelName: string); var Url: string; begin RegisterOpenApiService; Url := ABaseUrl; if not Url.EndsWith('/') then Url := Url + '/'; Url := Url + SERVER_PATH_SEGMENT; XDataServer.BaseUrl := Url; XDataServer.ModelName := AModelName; SparkleHttpSysDispatcher.Start; Logger.Log(1, Format('Auth server module listening at "%s"', [XDataServer.BaseUrl])); end; procedure TAuthServerModule.XDataServerLoggingMiddlewareCreate(Sender: TObject; var Middleware: IHttpServerMiddleware); begin Middleware := TLoggingMiddleware.Create(Logger); end; end.