Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #7
0
        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);
        }