Exemplo n.º 1
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"
            }));
        }
Exemplo n.º 2
0
        public override async Task <IActionResult> Post([FromBody] MsgViewModel viewModel)
        {
            var model = await Parse(viewModel);

            if (AuthoriseWrite(model))
            {
                model.Files      = viewModel.Files.Select(f => f.Id).ToList();
                model.Recipients = viewModel.Recipients.Select(f => f.Id).ToList();

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

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

                if (string.IsNullOrEmpty(viewModel.Id) || viewModel.ForceNotify)
                {
                    foreach (var recipient in model.Recipients)
                    {
                        var loader = new UserById()
                        {
                            Id = recipient
                        };
                        await DataHandler.Execute(loader);

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

                return(Ok(ConfirmViewModel.CreateFromConfirm(persist.Confirm)));
            }

            return(Unauthorized());
        }
Exemplo n.º 3
0
        public override async Task Execute()
        {
            var regionKey = "GLA";
            var tenant    = new Tenant()
            {
                Name       = Input.TenantName, TenantName = Input.TenantName, EntryKey = StringHelper.GenerateCode(16),
                AuthorName = Input.Name, RegionKey = regionKey
            };
            var isNew = true;

            if (string.IsNullOrEmpty(Input.TenantId))
            {
                var persistClient = new Persist <Tenant>()
                {
                    Model = tenant
                };
                await DataHandler.Execute(persistClient);

                tenant = persistClient.Model;
            }
            else
            {
                var loaderClient = new Loader <Tenant>()
                {
                    Id = Input.TenantId
                };
                await DataHandler.Execute(loaderClient);

                tenant = loaderClient.Result;
                isNew  = false;
            }

            if (tenant != null && !string.IsNullOrEmpty(tenant.Id))
            {
                var user = new User()
                {
                    TenantId     = tenant.Id, TenantName = Input.TenantName, Name = Input.Name, Email = Input.Email,
                    EncryptedPwd = EncryptHelper.Encrypt(Input.Pwd), AuthorName = Input.Name,
                    Right        = new UserRight()
                    {
                        CanAuth = isNew, CanAdmin = isNew, CanSuperuser = false
                    },
                    RegionKey = regionKey
                };

                var persistUser = new UserSave {
                    Model = user
                };
                await DataHandler.Execute(persistUser);

                if (persistUser.Confirm.Success)
                {
                    if (isNew)
                    {
                        tenant.AuthorId = persistUser.Model.Id;
                        tenant.TenantId = tenant.Id;

                        var persistClient = new Persist <Tenant>()
                        {
                            Model = tenant
                        };
                        await DataHandler.Execute(persistClient);

                        tenant = persistClient.Model;

                        var meetingType = new MeetingType()
                        {
                            TenantId = tenant.Id, TenantName = tenant.Name, Name = "Standard", IsRecur = false,
                            Pretext  = "Standard Meeting Type", RegionKey = regionKey, Prename = "Meeting",
                            AuthorId = persistUser.Model.Id, AuthorName = persistUser.Model.Name
                        };
                        var persistType = new Persist <MeetingType>()
                        {
                            Model = meetingType
                        };
                        await DataHandler.Execute(persistType);
                    }

                    persistUser.Model.AuthorId = persistUser.Model.Id;
                    await DataHandler.Execute(persistUser);

                    await DataHandler.Commit();

                    var signin = new SigninAuth()
                    {
                        Tenant      = tenant, Login = persistUser.Model, LogicHandler = LogicHandler,
                        DataHandler = DataHandler, Config = persistUser.ResultConfig, Settings = CloudHandler.Settings
                    };
                    await LogicHandler.Execute(signin);

                    ResultAuth = signin.Result;

                    Result = ActionConfirm.CreateSuccess(persistUser.Model);

                    var notify = new SimpleNotify
                    {
                        CloudHandler = CloudHandler, DataHandler = DataHandler, CurrentUser = persistUser.Model,
                        LogicHandler = LogicHandler, Model = persistUser.Model,
                        TemplateName = isNew ? "welcomeclient" : "welcomeuser"
                    };
                    await LogicHandler.Execute(notify);
                }
                else
                {
                    Result = ActionConfirm.CreateFailure(persistUser.Confirm.Message);
                }
            }
            else
            {
                Result = ActionConfirm.CreateFailure("Error connecting organisation");
            }
        }
Exemplo n.º 4
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"
            }));
        }