public static IApplicationBuilder UseCrpc(this IApplicationBuilder app, PathString baseUrl, Action <CrpcRegistrationOptions> opts) { if (app == null) { throw new ArgumentNullException(nameof(app)); } if (opts == null) { throw new ArgumentNullException(nameof(opts)); } var options = new CrpcRegistrationOptions(); opts.Invoke(options); app.Map("/system/health", builder => { builder.Run(async context => { context.Response.StatusCode = (int)HttpStatusCode.NoContent; }); }); setupMiddlewares(app, options); app.Map(baseUrl, builder => { builder.UseMiddleware <ExceptionMiddleware>(); builder.UseMiddleware <CorsMiddleware>(); builder.UseMiddleware <AuthMiddleware>(); builder.UseMiddleware <CrpcMiddleware>(); }); return(app); }
private static void setupMiddlewares(IApplicationBuilder app, CrpcRegistrationOptions options) { // Set the registration options on the CrpcMiddleware singleton var crpcMiddleware = app.ApplicationServices.GetService(typeof(CrpcMiddleware)) as CrpcMiddleware; crpcMiddleware.SetRegistrationOptions(options); // Set the authentication type on the AuthMiddleware singleton var authMiddleware = app.ApplicationServices.GetService(typeof(AuthMiddleware)) as AuthMiddleware; authMiddleware.SetAuthentication(options.Authentication); }
internal void SetRegistrationOptions(CrpcRegistrationOptions opts) { if (_registrationOptions != null) { throw new InvalidOperationException("registration options already set."); } var svt = opts.ServerType; _registrationOptions = opts; _server = _services.GetService(svt) ?? ActivatorUtilities.CreateInstance(_services, svt); }
public void TestValidateEndpoint(string endpoint, bool valid) { var options = new CrpcRegistrationOptions <TRS>(); if (valid) { options.ValidateEndpoint(endpoint); } else { Assert.Throws <FormatException>(() => options.ValidateEndpoint(endpoint)); } }
public void TestValidateVersion(string version, bool valid) { var options = new CrpcRegistrationOptions <TRS>(); if (valid) { options.ValidateVersion(version); } else { Assert.ThrowsAny <Exception>(() => options.ValidateVersion(version)); } }
public void TestRegistrationOptions() { var server = new TRS(); var options = new CrpcRegistrationOptions <TRS>(); options.Register("test", "2020-04-26", server.TestEndpoint); var ex = Assert.Throws <ArgumentException>( () => options.Register("test", "2020-04-26", server.TestEndpoint) ); Assert.StartsWith("Duplicate version found for 2020-04-26/test", ex.Message); }
internal CrpcRegistrationOptions <T> SetRegistrationOptions(Action <CrpcRegistrationOptions <T>, T> opts) { if (_registrationOptions != null) { throw new InvalidOperationException("Registration options already set"); } var serverType = typeof(T); var server = _services.GetService(serverType) ?? ActivatorUtilities.CreateInstance(_services, serverType); var options = new CrpcRegistrationOptions <T>(); opts.Invoke(options, server as T); _registrationOptions = options; _server = server as T; return(options); }