예제 #1
0
        public UserAccountModule(ICommandDispatcher commandDispatcher, IPasswordEncryptor passwordEncryptor)
        {
            Post["/register"] =
                _ =>
                    {
                        var req = this.Bind<NewUserRequest>();
                        commandDispatcher.Dispatch(this.UserSession(),
                                                   new CreateUser(req.Email, passwordEncryptor.Encrypt(req.Password), req.Name, req.PhoneNumber));
                        return null;
                    };

            Post["/password/requestReset"] =
                _ =>
                {
                    var req = this.Bind<ResetPasswordRequest>();
                    commandDispatcher.Dispatch(this.UserSession(),
                                               new CreatePasswordResetToken(req.Email) );
                    return null;
                };

            Put["/password/reset/{token}"] =
                _ =>
                {
                    return null;
                };
        }
예제 #2
0
        public LoginModule(
            IReadOnlyRepository readOnlyRepository, 
            IPasswordEncryptor passwordEncryptor,
            IUserSessionFactory userSessionFactory)
        {
            
            Post["/login"] =
                r =>
                    {
                        var loginInfo = this.Bind<LoginRequest>();

                        EncryptedPassword encryptedPassword = passwordEncryptor.Encrypt(loginInfo.Password);

                        try
                        {
                            var user =
                            readOnlyRepository.First<User>(
                                x => x.Email == loginInfo.Email && x.EncryptedPassword == encryptedPassword.Password);

                            if (!user.Activated) return new Response().WithStatusCode(HttpStatusCode.Forbidden);

                            var userSession = userSessionFactory.Create(user);

                            return new SuccessfulLoginResponse<Guid>(userSession.Id, userSession.Expires);
                        }
                        catch (ItemNotFoundException<User> ex)
                        {
                            return new Response().WithStatusCode(HttpStatusCode.Unauthorized);
                        }
                    };
        }
예제 #3
0
 public void Setup()
 {
     _webSiteRepository  = Substitute.For <IRepository <WebSite> >();
     _webSiteManagerData = Substitute.For <IWebSiteManagerData>();
     _passwordEncryptor  = Substitute.For <IPasswordEncryptor>();
     _webSiteService     = new WebSiteService(_webSiteManagerData, _passwordEncryptor);
 }
예제 #4
0
        public NewUserModule(IPasswordEncryptor passwordEncryptor, ICommandDispatcher commandDispatcher,
                             IReadOnlyRepository readOnlyRepository)
        {
            Post["/user/facebook"] = r =>
                                         {
                                             var newUserRequest = this.Bind<NewUserRequest>();
                                             CheckForExistingFacebookUser(readOnlyRepository, newUserRequest);
                                             DispatchCommand(commandDispatcher, newUserRequest);
                                             return new Response().WithStatusCode(HttpStatusCode.OK);
                                         };

            Post["/user"] = r =>
                                {
                                    var newUserRequest = this.Bind<NewUserRequest>();
                                    CheckForExistingUser(readOnlyRepository, newUserRequest);
                                    commandDispatcher.Dispatch(this.VisitorSession(), new NewUserCommand
                                                                                          {
                                                                                              Email =
                                                                                                  newUserRequest.Email,
                                                                                              EncryptedPassword =
                                                                                                  passwordEncryptor.
                                                                                                  Encrypt(
                                                                                                      newUserRequest.
                                                                                                          Password)
                                                                                          });
                                    return new Response().WithStatusCode(HttpStatusCode.OK);
                                };
        }
예제 #5
0
        public UserAccountModule(IDispatcherFactory dispatcherFactory, IPasswordEncryptor passwordEncryptor)
        {
            Post["/register"] =
                _ =>
                    {
                        var req = this.Bind<NewUserRequest>();
                        var command = new CreateUser(req.Email, passwordEncryptor.Encrypt(req.Password), req.Name, req.PhoneNumber);
                        dispatcherFactory.Create(this.UserSession(), command)
                            .Dispatch(this.UserSession(), command);
                        return null;
                    };

            Post["/password/requestReset"] =
                _ =>
                {
                    var req = this.Bind<ResetPasswordRequest>();
                    var command = new CreatePasswordResetToken(req.Email);
                    dispatcherFactory.Create(this.UserSession(), command)
                        .Dispatch(this.UserSession(),
                                               command );
                    return null;
                };

            Put["/password/reset/{token}"] =
                p =>
                {
                    var newPasswordRequest = this.Bind<NewPasswordRequest>();
                    var token = Guid.Parse((string)p.token);
                    var command = new ResetPassword(token, passwordEncryptor.Encrypt(newPasswordRequest.Password));
                    dispatcherFactory.Create(this.UserSession(), command)
                        .Dispatch(this.UserSession(), command);
                    return null;
                };
        }
예제 #6
0
        public LoginModule(IPasswordEncryptor passwordEncryptor, IReadOnlyRepository readOnlyRepository,
            IUserSessionFactory userSessionFactory)
        {
            Post["/login"] =
                _ =>
                {
                    var loginInfo = this.Bind<LoginRequest>();
                    if (loginInfo.Email == null) throw new UserInputPropertyMissingException("Email");
                    if (loginInfo.Password == null) throw new UserInputPropertyMissingException("Password");

                    EncryptedPassword encryptedPassword = passwordEncryptor.Encrypt(loginInfo.Password);

                    try
                    {
                        var user =
                            readOnlyRepository.First<User>(
                                x => x.Email == loginInfo.Email && x.EncryptedPassword == encryptedPassword.Password);

                        UserLoginSession userLoginSession = userSessionFactory.Create(user);

                        return new SuccessfulLoginResponse<Guid>(userLoginSession.Id, user.Id, user.Name,
                            userLoginSession.Expires);
                    }
                    catch (ItemNotFoundException<User>)
                    {
                        throw new UnauthorizedAccessException();
                    }
                };
        }
예제 #7
0
 public CustomerMembershipService(ICustomerProvider customerProvider
    , ICustomerService customerService, IPasswordEncryptor passwordEncryptor)
 {
     this.CustomerProvider = customerProvider;
     this.CustomerService = customerService;
     this.PasswordEncryptor = passwordEncryptor;
 }
예제 #8
0
        public void Setup()
        {
            repository        = A.Fake <IRepository>();
            passwordEncryptor = A.Fake <IPasswordEncryptor>();
            passwordGenerator = A.Fake <IPasswordGenerator>();

            staffDomainService = new StaffDomainService(repository, passwordEncryptor, passwordGenerator);
        }
 public CreateUserCommandHandler(MonumentsDbContext dbContext,
                                 IPasswordEncryptor passwordEncryptor,
                                 IEmailSender emailSender)
 {
     _dbContext         = dbContext;
     _passwordEncryptor = passwordEncryptor;
     _emailSender       = emailSender;
 }
예제 #10
0
 public UserService(IRepository repository, INotificationService notificationService,
     IResourceService resourceService, IPasswordEncryptor passwordEncryptor)
 {
     this.repository = repository;
     this.resourceService = resourceService;
     this.notificationService = notificationService;
     this.passwordEncryptor = passwordEncryptor;
 }
예제 #11
0
        public void Setup()
        {
            repository = A.Fake <IRepository>();
            var emailManager = A.Fake <IEmailManager>();

            passwordEncryptor = A.Fake <IPasswordEncryptor>();
            passwordGenerator = A.Fake <IPasswordGenerator>();

            waiterService = new WaiterService(repository, emailManager, passwordEncryptor, passwordGenerator);
        }
예제 #12
0
 public NewUserModule(IPasswordEncryptor passwordEncryptor, ICommandDispatcher commandDispatcher,
                      IReadOnlyRepository readOnlyRepository)
 {
     Post["/user"] = r =>
                         {
                             var newUserRequest = this.Bind<NewUserRequest>();
                             CheckForExistingUser(readOnlyRepository, newUserRequest);
                             DispatchCommand(passwordEncryptor, commandDispatcher, newUserRequest);
                             return new Response().WithStatusCode(HttpStatusCode.OK);
                         };
 }
예제 #13
0
 static void DispatchCommand(IPasswordEncryptor passwordEncryptor, ICommandDispatcher commandDispatcher,
                             NewUserRequest newUserRequest)
 {
     commandDispatcher.Dispatch(new NewUserCommand
                                    {
                                        Email = newUserRequest.Email,
                                        EncryptedPassword =
                                            passwordEncryptor.Encrypt(
                                                newUserRequest.Password),
                                        AgreementVersion =
                                            newUserRequest.AgreementVersion
                                    });
 }
예제 #14
0
        public PasswordManager(IPasswordEncryptor defaultPasswordEncryptor,
                               IList <IPasswordEncryptor> customPasswordChecker)
        {
            // add default password encryptors for password checking
            // for Camunda 7.6 and earlier
            AddPasswordCheckerAndThrowErrorIfAlreadyAvailable(new ShaHashDigest());
            // from Camunda 7.7
            AddPasswordCheckerAndThrowErrorIfAlreadyAvailable(new Sha512HashDigest());

            // add custom encryptors
            AddAllPasswordChecker(customPasswordChecker);

            AddDefaultEncryptor(defaultPasswordEncryptor);
        }
예제 #15
0
        public AuthenticationModule( IDatabase database, IPasswordEncryptor passwordEncryptor )
        {
            Get[Route.Login] = o => View[Route.Login, new LoginRequest()];

            Post[Route.Login] = o =>
            {
                var request = this.Bind<LoginRequest>();

                try
                {
                    // TODO: Use validation attributes, or call Validate on LoginRequest

                    if ( string.IsNullOrWhiteSpace(request.UserName) || string.IsNullOrWhiteSpace(request.Password) )
                    {
                        throw new Exception("Username and password are required");
                    }

                    var user = database.GetUserByName( request.UserName );

                    if ( null == user )
                    {
                        throw new Exception( LoginFailureMessage );
                    }

                    var credentials = database.GetUserCredentialsByUserId( user.Id );

                    if ( passwordEncryptor.Encrypt(request.Password) != credentials.EncryptedPassword )
                    {
                        throw new Exception( LoginFailureMessage );
                    }

                    var expiry = DateTime.MaxValue;

                    return this.LoginAndRedirect( credentials.AuthId, expiry, Route.Home );
                }
                catch ( Exception exception )
                {
                    this.AddUserMessage(exception.Message);

                    return View[Route.Login, request];
                }
            };

            Get[Route.Logout] = o =>
            {
            //				this.AddUserMessage("You have been logged out");

                return this.LogoutAndRedirect( Route.Login );
            };
        }
예제 #16
0
        public RegistrationModule( IDatabase database, IEmailAddressFormatValidator emailAddressFormatValidator, IPasswordEncryptor passwordEncryptor )
        {
            this.database = database;
            this.passwordEncryptor = passwordEncryptor;

            Get[Route.Register] = o =>
            {
                var model = new RegistrationRequest();

                return View[Route.Register, model];
            };

            Post[Route.Register] = o =>
            {
                RegistrationRequest request = this.Bind<RegistrationRequest>();

                try
                {
                    if ( string.IsNullOrWhiteSpace(request.UserName) || !App.Settings.UserNameSizeRange.Contains( request.UserName.Length ) )
                    {
                        throw new Exception( string.Format( "User name must be between {0} and {1} characters long", App.Settings.UserNameSizeRange.Min, App.Settings.UserNameSizeRange.Max ) );
                    }

                    if ( !request.UserName.IsAlphanumeric() )
                    {
                        throw new Exception( "User name can contain only alphanumeric characters" );
                    }

                    if ( null != database.GetUserByName( request.UserName ) )
                    {
                        throw new Exception("An account with that name already exists");
                    }

            //					if ( !emailAddressFormatValidator.IsValidFormat(request.EmailAddress) )
            //					{
            //						throw new Exception("Invalid email address");
            //					}
            //
            //					if ( null != database.GetUserCredentialsByEmailAddress( request.EmailAddress ) )
            //					{
            //						throw new Exception("That email address is already in use");
            //					}

                    var result = PasswordValidator.Validate( request.Password1 );
                    if ( !result.IsValid )
                    {
                        throw new Exception( string.Join( ", ", result.ValidationErrors ) );
                    }

                    if ( request.Password1 != request.Password2 )
                    {
                        throw new Exception( "Passwords do not match" );
                    }

                    AddUserFor( request );
                }
                catch ( Exception e )
                {
                    this.AddUserMessage(e.Message);
                    return View[Route.Register, request];
                }

                this.AddUserMessage("Registration successful");
                return Response.AsRedirect( Route.SelectGames );
            };
        }
 public AuthenticationService(IUserService userService, IPasswordEncryptor passwordEncryptor)
 {
     this.userService = userService;
     this.passwordEncryptor = passwordEncryptor;
 }
예제 #18
0
        public LoginModule(
            IReadOnlyRepository readOnlyRepository,
            IUserSessionFactory userSessionFactory, IPasswordEncryptor passwordEncryptor)
        {
            Post["/login/facebook"] =
                r =>
                    {
                        var loginInfo = this.Bind<FacebookLoginRequest>();
                        try
                        {
                            var user =
                                readOnlyRepository.First<User>(x => x.FacebookId == loginInfo.FacebookId);

                            //if (!user.Verified) return new Response().WithStatusCode(HttpStatusCode.Forbidden);

                            UserSession userSession = userSessionFactory.Create(user);

                            return new SuccessfulLoginResponse<Guid>(userSession.Id, userSession.Expires);
                        }
                        catch (ItemNotFoundException<User> ex)
                        {
                            return new Response().WithStatusCode(HttpStatusCode.Unauthorized);
                        }
                    };

            Post["/login"] =
                r =>
                    {
                        var loginInfo = this.Bind<BasicLoginRequest>();
                        if (loginInfo.Email == null) throw new UserInputPropertyMissingException("Email");
                        if (loginInfo.Password == null) throw new UserInputPropertyMissingException("Password");

                        EncryptedPassword encryptedPassword = passwordEncryptor.Encrypt(loginInfo.Password);

                        try
                        {
                            var user =
                                readOnlyRepository.First<User>(
                                    x => x.Email == loginInfo.Email && x.EncryptedPassword == encryptedPassword.Password);

                            //if (!user.Activated) throw new ForbiddenRequestException();

                            UserSession userSession = userSessionFactory.Create(user);

                            return new SuccessfulLoginResponse<Guid>(userSession.Id, userSession.Expires);
                        }
                        catch (ItemNotFoundException<User>)
                        {
                            throw new UnauthorizedAccessException();
                        }
                    };

            Post["/logout"] =
                r =>
                    {
                        var loginInfo = this.Bind<FacebookLoginRequest>();
                        try
                        {
                            var session =
                                readOnlyRepository.First<UserSession>(x => x.User.FacebookId == loginInfo.FacebookId);

                            userSessionFactory.Delete(session.Id);

                            return new Response().WithStatusCode(HttpStatusCode.OK);
                        }
                        catch (ItemNotFoundException<UserSession> ex)
                        {
                            return new Response().WithStatusCode(HttpStatusCode.Unauthorized);
                        }
                    };
        }
예제 #19
0
        public UserAccountModule(IReadOnlyRepository readOnlyRepository,ICommandDispatcher commandDispatcher, IPasswordEncryptor passwordEncryptor, IMappingEngine mappingEngine)
        {
            Post["/register"] =
                _ =>
                    {
                        var req = this.Bind<NewUserRequest>();
                        var abilities = mappingEngine.Map<IEnumerable<UserAbilityRequest>, IEnumerable<UserAbility>>(req.Abilities);
                        commandDispatcher.Dispatch(this.UserSession(),
                                                   new CreateEmailLoginUser(req.Email, passwordEncryptor.Encrypt(req.Password), req.Name, req.PhoneNumber, abilities));
                        return null;
                    };


            Post["/register/facebook"] =
                _ =>
                    {
                        var req = this.Bind<FacebookRegisterRequest>();
                        commandDispatcher.Dispatch(this.UserSession(), new CreateFacebookLoginUser(req.id,req.email, req.first_name, req.last_name,req.link,req.name,req.url_image));
                        return null;
                    };

            Post["/register/google"] =
                _ =>
                    {
                        var req = this.Bind<GoogleRegisterRequest>();
                        commandDispatcher.Dispatch(this.UserSession(), new CreateGoogleLoginUser(req.id,req.email,req.name.givenName,req.name.familyName,req.url,req.displayName,req.image.url));
                        return null;
                    };

            Post["/password/requestReset"] =
                _ =>
                {
                    var req = this.Bind<ResetPasswordRequest>();
                    commandDispatcher.Dispatch(this.UserSession(),
                                               new CreatePasswordResetToken(req.Email) );
                    return null;
                };

            Put["/password/reset/{token}"] =
                p =>
                {
                    var newPasswordRequest = this.Bind<NewPasswordRequest>();
                    var token = Guid.Parse((string)p.token);
                    commandDispatcher.Dispatch(this.UserSession(),
                                               new ResetPassword(token, passwordEncryptor.Encrypt(newPasswordRequest.Password)));
                    return null;
                };

            Post["/user/abilites"] = p =>
            {

                var requestAbilites = this.Bind<UserAbilitiesRequest>();
                commandDispatcher.Dispatch(this.UserSession(), new AddAbilitiesToUser(requestAbilites.UserId, requestAbilites.Abilities.Select(x => x.Id)));

                return null;


            };

            Get["/abilities"] = _ =>
            {
                var abilites = readOnlyRepository.GetAll<UserAbility>();

                var mappedAbilites = mappingEngine.Map<IEnumerable<UserAbility>, IEnumerable<UserAbilityRequest>>(abilites);

                return mappedAbilites;
            };
        }
예제 #20
0
 public EGUserAccessManager(DbObjectOperator op, IPasswordEncryptor encryptor) : base(op)
 {
     base.AccountManager.PasswordEncryptor = encryptor;
 }
예제 #21
0
        public UserProfileModule( IDatabase database, IPasswordEncryptor passwordEncryptor )
            : base(database)
        {
            this.passwordEncryptor = passwordEncryptor;

            this.RequiresAuthentication();

            Get[Route.UserProfile] = o =>
            {
                return View[Route.UserProfile];
            };

            Get[Route.ChangePassword] = o =>
            {
                return View[Route.ChangePassword];
            };

            Post[Route.ChangePassword] = o =>
            {
                var request = this.Bind<ChangePasswordRequest>();

                var user = this.CurrentUser;

                try
                {
                    var userCredentials = database.GetUserCredentialsByUserId( user.Id );

                    if ( string.IsNullOrWhiteSpace( request.CurrentPassword ) )
                    {
                        throw new Exception( "Incorrect password" );
                    }

                    if ( passwordEncryptor.Encrypt( request.CurrentPassword ) != userCredentials.EncryptedPassword )
                    {
                        throw new Exception( "Incorrect password" );
                    }

                    if ( request.NewPassword1 != request.NewPassword2 )
                    {
                        throw new Exception( "Passwords don't match" );
                    }

                    var result = PasswordValidator.Validate( request.NewPassword1 );
                    if ( !result.IsValid )
                    {
                        throw new Exception( string.Join( ", ", result.ValidationErrors ) );
                    }

                    userCredentials.EncryptedPassword = passwordEncryptor.Encrypt( request.NewPassword1 );

                    database.UpdateUserCredentials( userCredentials );
                }
                catch ( Exception ex )
                {
                    this.AddUserMessage( ex.Message );
                    return View[Route.ChangePassword];
                }

                this.AddUserMessage( "Your password has been changed" );
                return View[Route.UserProfile];
            };

            Get[Route.SelectGames] = o =>
            {
                var model = new SelectGamesViewModel();

                var availableGames = database.GetGames();
                var gamesPlayedByUser = database.GetGamesPlayedByUser( ((UserIdentity)Context.CurrentUser).UserId );

                foreach ( var availableGame in availableGames )
                {
                    model.SelectableGames.Add( new Selectable<Game>
                    {
                        Item = availableGame,
                        IsSelected = gamesPlayedByUser.Any( game => game.Id == availableGame.Id )
                    } );
                }

                return View[Route.SelectGames, model];
            };

            Post[Route.SelectGames] = o =>
            {
                var request = this.Bind<SelectGamesRequest>();

                database.SetGamesPlayedByUser(((UserIdentity)Context.CurrentUser).UserId, request.GameIds);

                return Response.AsRedirect( Route.Home );
            };
        }
예제 #22
0
 public TestDatabase( IPasswordEncryptor passwordEncryptor )
 {
     new TestDatabasePopulator(this, passwordEncryptor).Populate();
 }
예제 #23
0
 public TestDatabasePopulator( TestDatabase database, IPasswordEncryptor passwordEncryptor )
 {
     this.database = database;
     this.passwordEncryptor = passwordEncryptor;
 }