Example #1
0
        public async Task <IActionResult> Cancel([FromBody] ForgotViewModel viewModel)
        {
            var query = new UserByEmail {
                Email = viewModel.Email
            };
            await DataHandler.Execute(query);

            if (query.Result != null && query.Result.IsActive &&
                (query.ResultTenant == null || query.ResultTenant.IsActive))
            {
                var config = query.ResultConfig;

                config.ResetAuth  = string.Empty;
                config.ResetCode  = string.Empty;
                config.ForgotCode = string.Empty;

                var persistConfig = new Persist <UserConfig>()
                {
                    Model = config
                };
                await DataHandler.Execute(persistConfig);

                if (persistConfig.Confirm.Success)
                {
                    await DataHandler.Commit();
                }

                return(Ok(true));
            }

            return(Ok(new FailViewModel {
                Message = "Email not found"
            }));
        }
Example #2
0
        public async Task <IActionResult> Post([FromBody] SignupViewModel viewModel)
        {
            var query = new UserByEmail {
                Email = viewModel.Email
            };
            await DataHandler.Execute(query);

            if (query.Result == null)
            {
                var signup = new SignupUser()
                {
                    DataHandler  = DataHandler,
                    Input        = viewModel,
                    LogicHandler = LogicHandler,
                    CloudHandler = CloudHandler
                };

                await LogicHandler.Execute(signup);

                return(Ok(signup.ResultAuth));
            }

            return(Ok(new FailViewModel {
                Message = "Email already in use"
            }));
        }
Example #3
0
        public async Task <IActionResult> Reset([FromBody] ForgotResetViewModel viewModel)
        {
            var query = new UserByEmail {
                Email = viewModel.Email
            };
            await DataHandler.Execute(query);

            if (query.Result != null && query.Result.IsActive &&
                (query.ResultTenant == null || query.ResultTenant.IsActive))
            {
                var config = query.ResultConfig;

                if (!string.IsNullOrEmpty(config.ForgotCode) && !string.IsNullOrEmpty(config.ResetCode) && config.ForgotCode == viewModel.Code && config.ResetCode == viewModel.ResetCode)
                {
                    var user = query.Result;
                    user.EncryptedPwd = EncryptHelper.Encrypt(viewModel.ResetPassword);

                    config.ResetAuth     = string.Empty;
                    config.ResetCode     = string.Empty;
                    config.ForgotCode    = string.Empty;
                    config.ForgotCounter = 0;

                    var persistUser = new Persist <User>()
                    {
                        Model = user
                    };
                    await DataHandler.Execute(persistUser);

                    var persistConfig = new Persist <UserConfig>()
                    {
                        Model = config
                    };
                    await DataHandler.Execute(persistConfig);

                    if (persistUser.Confirm.Success)
                    {
                        await DataHandler.Commit();
                    }

                    var logic = new SigninAuth
                    {
                        Login    = query.Result,
                        Config   = query.ResultConfig,
                        Tenant   = query.ResultTenant,
                        Settings = CloudHandler.Settings
                    };
                    await LogicHandler.Execute(logic);

                    return(Ok(logic.Result));
                }

                return(Ok(new FailViewModel {
                    Message = "Code does not match"
                }));
            }

            return(Ok(new FailViewModel {
                Message = "Email not found"
            }));
        }
        public void should_be_culture_agnostic_sv_SE()
        {
            var query = new UserByEmail(_capitalARing);
            _user.Email = _aRing;

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("sv-SE");

            query.Expression.Compile()(_user).ShouldBeTrue();
        }
Example #5
0
        public async Task <IActionResult> Code([FromBody] ForgotViewModel viewModel)
        {
            var query = new UserByEmail {
                Email = viewModel.Email
            };
            await DataHandler.Execute(query);

            if (query.Result != null && query.Result.IsActive &&
                (query.ResultTenant == null || query.ResultTenant.IsActive))
            {
                var config = query.ResultConfig;

                if (config.ForgotCounter < 10)
                {
                    config.ForgotCode     = StringHelper.GenerateCode(12);
                    config.ResetAuth      = Convert.ToString(EncryptHelper.Randomizer(100000, 999999));
                    config.ForgotCounter += 1;

                    var persist = new Persist <UserConfig>()
                    {
                        Model = config
                    };
                    await DataHandler.Execute(persist);

                    if (persist.Confirm.Success)
                    {
                        await DataHandler.Commit();
                    }

                    var notify = new SimpleNotify
                    {
                        CloudHandler = CloudHandler,
                        DataHandler  = DataHandler,
                        CurrentUser  = query.Result,
                        LogicHandler = LogicHandler,
                        Model        = persist.Model,
                        TemplateName = "forgot"
                    };

                    await LogicHandler.Execute(notify);

                    return(Ok(new ForgotCodeViewModel()
                    {
                        Email = viewModel.Email, Code = config.ForgotCode, Success = true
                    }));
                }

                return(Ok(new FailViewModel {
                    Message = "Too many Forgot Password attempts -> " + config.ForgotCounter
                }));
            }

            return(Ok(new FailViewModel {
                Message = "Email not found"
            }));
        }
Example #6
0
        public void should_be_culture_agnostic_sv_SE()
        {
            var query = new UserByEmail(_capitalARing);

            _user.Email = _aRing;

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("sv-SE");

            query.Expression.Compile()(_user).ShouldBeTrue();
        }
Example #7
0
        public async Task UserByEmailDataTest()
        {
            using var store   = GetDocumentStore();
            using var session = store.OpenAsyncSession();

            var loader = new UserByEmail {
                Session = session, Email = UserData.GetFirst().Email
            };
            await loader.Execute();

            loader.Result.Should().NotBeNull();
            loader.Result.Id.Should().Be(UserData.FirstId);
        }
Example #8
0
        public async Task <IActionResult> Reply([FromBody] ForgotReplyViewModel viewModel)
        {
            var query = new UserByEmail {
                Email = viewModel.Email
            };
            await DataHandler.Execute(query);

            if (query.Result != null && query.Result.IsActive &&
                (query.ResultTenant == null || query.ResultTenant.IsActive))
            {
                var config = query.ResultConfig;

                if (!string.IsNullOrEmpty(config.ForgotCode) && !string.IsNullOrEmpty(config.ResetAuth) && config.ForgotCode == viewModel.Code && config.ResetAuth == viewModel.ResetAuth)
                {
                    config.ForgotCode = StringHelper.GenerateCode(12);
                    config.ResetCode  = StringHelper.GenerateCode(20);

                    var persist = new Persist <UserConfig>()
                    {
                        Model = config
                    };
                    await DataHandler.Execute(persist);

                    if (persist.Confirm.Success)
                    {
                        await DataHandler.Commit();
                    }

                    return(Ok(new ForgotResetViewModel()
                    {
                        Email = viewModel.Email,
                        Code = config.ForgotCode,
                        Success = true,
                        ResetCode = config.ResetCode
                    }));
                }

                return(Ok(new FailViewModel {
                    Message = "Code does not match"
                }));
            }

            return(Ok(new FailViewModel {
                Message = "Email not found"
            }));
        }
Example #9
0
        public async Task <IActionResult> Auth([FromBody] LoginViewModel viewModel)
        {
            var query = new UserByEmail {
                Email = viewModel.Email
            };
            await DataHandler.Execute(query);

            if (query.Result != null && query.Result.IsActive &&
                (query.ResultTenant == null || query.ResultTenant.IsActive))
            {
                if (query.Result.EncryptedPwd.Equals(EncryptHelper.Encrypt(viewModel.Pwd)))
                {
                    if (query.ResultConfig.IsTwoFactor)
                    {
                        query.ResultConfig.TwoFactorAuth     = Convert.ToString(EncryptHelper.Randomizer(100000, 999999));
                        query.ResultConfig.IsTwoFactorActive = true;

                        var persist = new Persist <UserConfig>()
                        {
                            Model = query.ResultConfig
                        };
                        await DataHandler.Execute(persist);

                        if (persist.Confirm.Success)
                        {
                            await DataHandler.Commit();
                        }

                        var notify = new SimpleNotify
                        {
                            CloudHandler = CloudHandler,
                            DataHandler  = DataHandler,
                            CurrentUser  = query.Result,
                            LogicHandler = LogicHandler,
                            Model        = persist.Model,
                            TemplateName = "twofactor"
                        };
                        await LogicHandler.Execute(notify);

                        return(Ok(new AuthViewModel()
                        {
                            Id = query.Result.Id, IsTwoFactor = true
                        }));
                    }
                    else
                    {
                        var logic = new SigninAuth
                        {
                            Login    = query.Result,
                            Config   = query.ResultConfig,
                            Tenant   = query.ResultTenant,
                            Settings = CloudHandler.Settings
                        };
                        await LogicHandler.Execute(logic);

                        return(Ok(logic.Result));
                    }
                }
            }

            return(Ok(new FailViewModel {
                Message = "Login failed"
            }));
        }