コード例 #1
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"
            }));
        }
コード例 #2
0
ファイル: LoginController.cs プロジェクト: rog1039/crux
        public async Task <IActionResult> Reconnect([FromBody] ReconnectViewModel viewModel)
        {
            if (viewModel.Key.Equals(EncryptHelper.Encrypt(viewModel.Id + Keys.Salty)))
            {
                var query = new UserById {
                    Id = viewModel.Id
                };
                await DataHandler.Execute(query);

                if (query.Result != null && query.Result.IsActive &&
                    (query.ResultTenant == null || query.ResultTenant.IsActive))
                {
                    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 = "Reconnect failed"
            }));
        }
コード例 #3
0
ファイル: SigninAuthTest.cs プロジェクト: rog1039/crux
        public async Task SigninAuthLogicSignup()
        {
            var logic = new CoreApiLogicHandler();

            logic.Result.Setup(m => m.Execute(It.IsAny <WriteToken>())).Returns(true);

            var command = new SigninAuth
            {
                LogicHandler = logic,
                Login        = StandardUser,
                Config       = UserConfigData.GetFirst(),
                Tenant       = TenantData.GetFirst(),
                Settings     = new FakeSettings()
            };

            await command.Execute();

            logic.HasExecuted.Should().BeTrue();
            logic.Result.Should().NotBeNull();

            command.Result.Verification.Should().BeNullOrEmpty();
            command.Result.Key.Should().NotBeNullOrEmpty();
            command.Result.Message.Should().BeNullOrEmpty();
            command.Result.Config.Should().NotBeNull();
            command.Result.Id.Should().NotBeNullOrEmpty();
            command.Result.Success.Should().BeTrue();
        }
コード例 #4
0
ファイル: LoginController.cs プロジェクト: rog1039/crux
        public async Task <IActionResult> TwoFactor([FromBody] TwoFactorViewModel viewModel)
        {
            var query = new UserById {
                Id = viewModel.Id
            };
            await DataHandler.Execute(query);

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

                if (config.TwoFactorAuth == viewModel.Auth && config.IsTwoFactorActive && config.IsTwoFactor)
                {
                    config.IsTwoFactorActive = false;
                    config.TwoFactorAuth     = string.Empty;

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

                    if (persist.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 = "Identity not found"
            }));
        }
コード例 #5
0
ファイル: LoginController.cs プロジェクト: rog1039/crux
        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"
            }));
        }