Exemplo n.º 1
0
        public async Task <IActionResult> Stats()
        {
            const int back = 30;

            var data = new StatsComposite()
            {
                CurrentUser = CurrentUser, Back = back
            };
            await DataHandler.Execute(data);

            var meetingDays = new DayDisplay <MeetingDisplay>()
            {
                DateFrom = DateHelper.FormatDayStart(DateTime.UtcNow.AddDays(-back)),
                Days     = back,
                Source   = data.Result.Meetings
            };
            await LogicHandler.Execute(meetingDays);

            var msgDays = new DayDisplay <MsgDisplay>()
            {
                DateFrom = DateHelper.FormatDayStart(DateTime.UtcNow.AddDays(-back)),
                Days     = back,
                Source   = data.Result.Msgs
            };
            await LogicHandler.Execute(msgDays);

            return(Ok(new StatsViewModel()
            {
                Meetings = meetingDays.Result,
                Messages = msgDays.Result,
                Tenant = data.Result.Tenant,
                Success = true
            }));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Delete(string id)
        {
            var query = new Loader <VisibleFile> {
                Id = id
            };
            await DataHandler.Execute(query);

            if (query.Result != null && AuthoriseWrite(query.Result))
            {
                var delete = new FileDelete {
                    CloudHandler = CloudHandler, File = query.Result
                };
                await LogicHandler.Execute(delete);

                if (delete.Result.Success)
                {
                    await DataHandler.Commit();

                    return(Ok(ConfirmViewModel.CreateSuccess(id)));
                }

                return(Ok(ConfirmViewModel.CreateFailure("Failed to delete file")));
            }

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

            if (AuthoriseWrite(model))
            {
                model.Participants = viewModel.Attendees.Select(f => f.Id).ToList();

                var attendCheck = new AttendCheck()
                {
                    CurrentUser  = CurrentUser,
                    DataHandler  = DataHandler,
                    LogicHandler = LogicHandler,
                    Meeting      = model
                };
                await LogicHandler.Execute(attendCheck);

                if (attendCheck.Result)
                {
                    await DataHandler.Commit();

                    return(Ok(ConfirmViewModel.CreateSuccess(attendCheck.Meeting)));
                }
                else
                {
                    return(Ok(ConfirmViewModel.CreateFailure("Failed to save Meeting")));
                }
            }

            return(Unauthorized());
        }
Exemplo n.º 5
0
        public override async Task Execute()
        {
            var token = new WriteToken {
                UserId = Login.Id, JwtKey = Settings.Value.JwtKey
            };
            await LogicHandler.Execute(token);

            if (token.Result)
            {
                Result.Success      = true;
                Result.Id           = Login.Id;
                Result.Verification = token.Verification;
                Result.Config       = Config;
                Result.Key          = EncryptHelper.Encrypt(Login.Id + Keys.Salty);

                Result.User.Id              = Login.Id;
                Result.User.Name            = Login.Name;
                Result.User.Email           = Login.Email;
                Result.User.HasProfile      = Login.HasProfile;
                Result.User.HasPhone        = !string.IsNullOrEmpty(Login.EncryptedPhone);
                Result.User.ProfileThumbUrl = Login.ProfileThumbUrl;
                Result.Right   = Login.Right;
                Result.Success = true;

                if (Tenant != null)
                {
                    Result.User.TenantId              = Tenant.Id;
                    Result.User.ClientHasProfile      = Tenant.HasProfile;
                    Result.User.TenantName            = Tenant.Name;
                    Result.User.ClientProfileThumbUrl = Tenant.ProfileThumbUrl;
                }
            }

            await Task.CompletedTask;
        }
Exemplo n.º 6
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"
            }));
        }
Exemplo n.º 7
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"
            }));
        }
Exemplo n.º 8
0
 public async Task LogicHandlerTestInit()
 {
     var command = new FakeLogicCommand();
     var logic   = new LogicHandler()
     {
         User = StandardUser
     };
     await logic.Execute(command);
 }
Exemplo n.º 9
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.º 10
0
        public void LogicHandlerTestInvalid()
        {
            var command = new TenantByEntryKey();
            var logic   = new LogicHandler()
            {
                User = StandardUser
            };

            Assert.That(() => logic.Execute(command), Throws.TypeOf <ArgumentException>());
        }
Exemplo n.º 11
0
        public async Task LogicHandlerTestInitData()
        {
            var command = new FakeLogicCommand();
            var data    = new FakeApiDataEntityHandler <Tenant>();
            var logic   = new LogicHandler()
            {
                DataHandler = data, User = StandardUser
            };
            await logic.Execute(command);

            logic.User.Id.Should().Be(StandardUser.Id);
        }
Exemplo n.º 12
0
        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"
            }));
        }
Exemplo n.º 13
0
        public async Task <IActionResult> Upload([FromForm] IFormFile file)
        {
            var process = new ProcessFile {
                CloudHandler = CloudHandler, CurrentUser = CurrentUser, Source = file
            };
            await LogicHandler.Execute(process);

            if (process.Result.Success)
            {
                await DataHandler.Commit();

                var result = Mapper.Map <VisibleViewModel>(process.Model);
                return(Json(result));
            }

            return(NotFound());
        }
Exemplo n.º 14
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.º 15
0
        public async Task <IActionResult> Set(string key, string value)
        {
            var logic = new ChangeConfig
            {
                CurrentUser = CurrentUser, ResultConfig = CurrentConfig, UserId = CurrentUser.Id, Key = key,
                Value       = value
            };
            await LogicHandler.Execute(logic);

            if (logic.Result)
            {
                await DataHandler.Commit();
            }

            return(Ok(new ConfigViewModel()
            {
                Config = logic.ResultConfig, Key = key, Success = logic.Result
            }));
        }
Exemplo n.º 16
0
        public override async Task <IActionResult> Post([FromBody] TenantViewModel viewModel)
        {
            var name = string.Empty;

            if (!string.IsNullOrEmpty(viewModel.Id))
            {
                var original = await Load(viewModel.Id);

                name = original.Name;
            }

            var model = await Parse(viewModel);

            if (AuthoriseWrite(model))
            {
                if (string.IsNullOrEmpty(model.Id))
                {
                    model.AuthorId   = CurrentUser.Id;
                    model.AuthorName = CurrentUser.Name;
                    model.EntryKey   = StringHelper.GenerateCode(10).ToLower();
                }

                var image = new CheckProfileImage {
                    Model = model
                };
                await LogicHandler.Execute(image);

                var persist = new TenantSave {
                    Model = model, Original = name
                };
                await DataHandler.Execute(persist);

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

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

            return(Unauthorized());
        }
Exemplo n.º 17
0
        public override async Task <IActionResult> Post([FromBody] UserViewModel viewModel)
        {
            var name = string.Empty;

            if (!string.IsNullOrEmpty(viewModel.Id))
            {
                var original = await Load(viewModel.Id);

                name = original.Name;
            }

            var model = await Parse(viewModel);

            if (AuthoriseWrite(model))
            {
                if (!string.IsNullOrEmpty(viewModel.Password))
                {
                    model.EncryptedPwd = EncryptHelper.Encrypt(viewModel.Password);
                }

                model.EncryptedPhone = viewModel.Phone;

                var image = new CheckProfileImage {
                    Model = model
                };
                await LogicHandler.Execute(image);

                var persist = new UserSave {
                    Model = model, Original = name
                };
                await DataHandler.Execute(persist);

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

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

            return(Unauthorized());
        }
Exemplo n.º 18
0
        public async Task <IActionResult> Home()
        {
            const int forward = 8;

            var data = new HomeComposite()
            {
                CurrentUser = CurrentUser, Forward = forward
            };
            await DataHandler.Execute(data);

            var days = new DayDisplay <AttendanceDisplay>()
            {
                DateFrom = DateTime.UtcNow, Days = forward, Source = data.Result.Attendances
            };
            await LogicHandler.Execute(days);

            return(Ok(new HomeViewModel()
            {
                Attendance = days.Result, Msg = data.Result.Msgs, Success = true
            }));
        }
Exemplo n.º 19
0
        public override async Task Execute()
        {
            IProcessCommand processor = null;

            if (IsImage())
            {
                processor = new ProcessImage
                {
                    Source      = Source, CurrentUser = CurrentUser, LoadType = "File Upload", CloudHandler = CloudHandler,
                    DataHandler = DataHandler
                };
            }

            else if (IsVideo())
            {
            }

            else if (IsDocument())
            {
            }

            if (processor != null)
            {
                await LogicHandler.Execute(processor);

                if (processor.Result != null && processor.Result.Success)
                {
                    Model  = processor.Result.Value as VisibleFile;
                    Result = processor.Result;
                }
                else
                {
                    Result = ActionConfirm.CreateFailure("File " + Source.FileName + " -> failed to load");
                }
            }
            else
            {
                Result = ActionConfirm.CreateFailure("File " + Source.FileName + " -> type not supported");
            }
        }
Exemplo n.º 20
0
        public async Task <IActionResult> Recur([FromBody] RecurViewModel viewModel)
        {
            var loader = new Loader <Meeting>()
            {
                Id = viewModel.MeetingId
            };
            await DataHandler.Execute(loader);

            if (loader.Result == null)
            {
                return(NotFound());
            }

            if (loader.Result.AuthorId == CurrentUser.Id ||
                (loader.Result.TenantId == CurrentUser.TenantId &&
                 (CurrentUser.Right.CanAdmin || CurrentUser.Right.CanAuth)) || CurrentUser.Right.CanSuperuser)
            {
                var model = new Meeting()
                {
                    Participants  = loader.Result.Participants,
                    AuthorId      = CurrentUser.Id,
                    AuthorName    = CurrentUser.Name,
                    TenantId      = CurrentUser.TenantId,
                    TenantName    = CurrentUser.TenantName,
                    MeetingTypeId = loader.Result.MeetingTypeId,
                    RegionKey     = CurrentUser.RegionKey,
                    Text          = loader.Result.Text,
                    Name          = loader.Result.Name,
                    IsPrivate     = loader.Result.IsPrivate,
                    When          = viewModel.When,
                    PreviousId    = loader.Result.Id,
                    ForceNotify   = false
                };

                var attendCheck = new AttendCheck()
                {
                    CurrentUser  = CurrentUser,
                    DataHandler  = DataHandler,
                    LogicHandler = LogicHandler,
                    Meeting      = model
                };

                await LogicHandler.Execute(attendCheck);

                if (attendCheck.Result)
                {
                    loader.Result.NextId     = attendCheck.Meeting.Id;
                    loader.Result.IsComplete = true;

                    var persist = new Persist <Meeting> {
                        Model = loader.Result
                    };
                    await DataHandler.Execute(persist);

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

                        return(Ok(ConfirmViewModel.CreateSuccess(attendCheck.Meeting)));
                    }
                }

                return(Ok(ConfirmViewModel.CreateFailure("Failed to save Meeting")));
            }

            return(Unauthorized());
        }
Exemplo n.º 21
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"
            }));
        }
Exemplo n.º 22
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");
            }
        }