public AuthenticationModule(IServiceAuthenticatorHost serviceAuthenticatorHost,
                                    IAuthenticationService authenticationService,
                                    IUserService userService,
                                    IJwtTokenHandler jwtTokenHandler,
                                    ICommandHandler <SignIn> signInHandler,
                                    ICommandHandler <RefreshUserSession> refreshSessionHandler)
            : base(requireAuthentication: false)
        {
            _authenticationService = authenticationService;
            _userService           = userService;
            _jwtTokenHandler       = jwtTokenHandler;

            Post("authenticate", args =>
            {
                var credentials = BindRequest <Credentials>();
                var token       = serviceAuthenticatorHost.CreateToken(credentials);
                if (token.HasNoValue)
                {
                    return(HttpStatusCode.Unauthorized);
                }

                return(token.Value);
            });

            Post("sign-in", async args =>
            {
                var command = BindRequest <SignIn>();
                await signInHandler.HandleAsync(command);
                var session = await HandleSessionAsync(command.SessionId);
                if (session.HasNoValue)
                {
                    return(HttpStatusCode.Unauthorized);
                }

                return(session.Value);
            });

            Post("sessions", async args =>
            {
                var command = BindRequest <RefreshUserSession>();
                await refreshSessionHandler.HandleAsync(command);
                var session = await HandleSessionAsync(command.NewSessionId);
                if (session.HasNoValue)
                {
                    return(HttpStatusCode.Forbidden);
                }

                return(session.Value);
            });
        }
        public AuthenticationModule(IServiceAuthenticatorHost serviceAuthenticatorHost)
            : base(requireAuthentication: false)
        {
            Post("authenticate", args =>
            {
                var credentials = this.BindRequest <Credentials>();
                var token       = serviceAuthenticatorHost.CreateToken(credentials);
                if (token.HasNoValue)
                {
                    return(HttpStatusCode.Unauthorized);
                }

                return(token.Value);
            });
        }