Beispiel #1
0
        public async Task <IActionResult> Remove(int channelId)
        {
            var response = new StatusMessageModel();
            var user     = GetUser();

            if (user == null)
            {
                return(Unauthorized("User not found."));
            }
            if (!user.IsLogging(channelId))
            {
                response.Message = "You are not currently logging this channel.";
            }
            else
            {
                var userChannel = user.UserChannels.FirstOrDefault(x => x.Channel.Id == channelId);
                if (userChannel == null)
                {
                    response.Message = "You are not currently logging this channel.";
                }
                else
                {
                    Database.UserChannels.Remove(userChannel);
                    await Database.SaveChangesAsync();

                    response.Success = true;
                    response.Message = "Channel was removed!";
                }
            }
            return(Json(response));
        }
        public async Task <IActionResult> Update([FromBody] dynamic data)
        {
            var user = GetUser();

            if (user == null)
            {
                return(Unauthorized("User not found."));
            }
            var settings = JObject.Parse(data.ToString());
            var response = new StatusMessageModel();

            if (settings.ContainsKey("timezone"))
            {
                if (int.TryParse(settings["timezone"].ToString(), out int timezoneId))
                {
                    var timezone = Database.Timezones.FirstOrDefault(x => x.Id == timezoneId);
                    if (timezone != null)
                    {
                        user.Timezone = timezone;
                    }
                }
            }
            await Database.SaveChangesAsync();

            response.Success = true;
            response.Message = "Settings have been saved!";
            return(Json(response));
        }
Beispiel #3
0
 public static StatusMessageModel GetStatusMessageModel(this ITempDataDictionary tempData)
 {
     tempData.TryGetValue(WellKnownTempData.SuccessMessage, out var successMessage);
     tempData.TryGetValue(WellKnownTempData.ErrorMessage, out var errorMessage);
     tempData.TryGetValue("StatusMessageModel", out var model);
     if (successMessage != null || errorMessage != null)
     {
         var parsedModel = new StatusMessageModel();
         parsedModel.Message = (string)successMessage ?? (string)errorMessage;
         if (successMessage != null)
         {
             parsedModel.Severity = StatusMessageModel.StatusSeverity.Success;
         }
         else
         {
             parsedModel.Severity = StatusMessageModel.StatusSeverity.Error;
         }
         return(parsedModel);
     }
     else if (model != null && model is string str)
     {
         return(JObject.Parse(str).ToObject <StatusMessageModel>());
     }
     return(null);
 }
        public async Task <IActionResult> CreateApp(CreateAppViewModel vm)
        {
            var stores = await _AppService.GetOwnedStores(GetUserId());

            if (stores.Length == 0)
            {
                StatusMessage = new StatusMessageModel()
                {
                    Html =
                        $"Error: You need to create at least one store. <a href='{(Url.Action("CreateStore", "UserStores"))}'>Create store</a>",
                    Severity = StatusMessageModel.StatusSeverity.Error
                }.ToString();
                return(RedirectToAction(nameof(ListApps)));
            }
            var selectedStore = vm.SelectedStore;

            vm.SetStores(stores);
            vm.SelectedStore = selectedStore;

            if (!Enum.TryParse <AppType>(vm.SelectedAppType, out AppType appType))
            {
                ModelState.AddModelError(nameof(vm.SelectedAppType), "Invalid App Type");
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            if (!stores.Any(s => s.Id == selectedStore))
            {
                StatusMessage = "Error: You are not owner of this store";
                return(RedirectToAction(nameof(ListApps)));
            }
            var appData = new AppData
            {
                StoreDataId = selectedStore,
                Name        = vm.Name,
                AppType     = appType.ToString()
            };
            await _AppService.UpdateOrCreateApp(appData);

            StatusMessage = "App successfully created";
            CreatedAppId  = appData.Id;

            switch (appType)
            {
            case AppType.PointOfSale:
                return(RedirectToAction(nameof(UpdatePointOfSale), new { appId = appData.Id }));

            case AppType.Crowdfund:
                return(RedirectToAction(nameof(UpdateCrowdfund), new { appId = appData.Id }));

            default:
                return(RedirectToAction(nameof(ListApps)));
            }
        }
Beispiel #5
0
 public static void SetStatusMessageModel(this ITempDataDictionary tempData, StatusMessageModel statusMessage)
 {
     if (statusMessage == null)
     {
         tempData.Remove("StatusMessageModel");
         return;
     }
     tempData["StatusMessageModel"] = JObject.FromObject(statusMessage).ToString(Formatting.None);
 }
    public static void SetStatusMessageModel(this ITempDataDictionary tempData, StatusMessageModel statusMessage)
    {
        if (statusMessage == null)
        {
            tempData.Remove("StatusMessageModel");
            return;
        }

        tempData["StatusMessageModel"] = JsonSerializer.Serialize(statusMessage, new JsonSerializerOptions());
    }
Beispiel #7
0
        internal IWebElement FindAlertMessage(StatusMessageModel.StatusSeverity severity = StatusMessageModel.StatusSeverity.Success)
        {
            var el = Driver.FindElements(By.ClassName($"alert-{StatusMessageModel.ToString(severity)}")).FirstOrDefault(e => e.Displayed);

            if (el is null)
            {
                throw new NoSuchElementException($"Unable to find alert-{StatusMessageModel.ToString(severity)}");
            }
            return(el);
        }
Beispiel #8
0
        public async Task <IActionResult> Add(string channelName)
        {
            var response = new StatusMessageModel();
            var user     = GetUser();

            if (user == null)
            {
                return(Unauthorized("User not found."));
            }
            if (user.IsLogging(channelName))
            {
                response.Message = "You are already logging this channel.";
            }
            else
            {
                //Check enough credits.
                if (user.Credits >= 1)
                {
                    var channel = Database.Channels.FirstOrDefault(x => x.Name == channelName);
                    if (channel == null)
                    {
                        //No channel found, so add it.
                        var api = new TwitchAPI();
                        api.Settings.ClientId = "vrb2zs5y4cc94vknoalfgxygzacfcw";
                        var userChannel = (await api.V5.Users.GetUsersByNameAsync(new List <string> {
                            channelName
                        })).Matches.FirstOrDefault();
                        if (userChannel == null)
                        {
                            response.Message = "This channel does not exist.";
                            return(Json(response));
                        }
                        var newChannel = new Channel {
                            Name = channelName
                        };
                        Database.Channels.Add(newChannel);
                        Database.SaveChanges();
                        channel = newChannel;
                    }
                    //Add channel to user's logged channels.
                    Database.UserChannels.Add(new UserChannel {
                        Channel = channel, User = user
                    });
                    user.Credits--;
                    Database.SaveChanges();
                    response.Success = true;
                    response.Message = "Added channel to logs!";
                }
                else
                {
                    response.Message = "You don't have enough credits.";
                }
            }
            return(Json(response));
        }
Beispiel #9
0
        internal IWebElement FindAlertMessage(StatusMessageModel.StatusSeverity severity = StatusMessageModel.StatusSeverity.Success)
        {
            var className = $"alert-{StatusMessageModel.ToString(severity)}";
            var el        = Driver.FindElement(By.ClassName(className)) ?? Driver.WaitForElement(By.ClassName(className));

            if (el is null)
            {
                throw new NoSuchElementException($"Unable to find {className}");
            }
            return(el);
        }
 internal void AssertHappyMessage(StatusMessageModel.StatusSeverity severity = StatusMessageModel.StatusSeverity.Success)
 {
     using var cts = new CancellationTokenSource(20_000);
     while (!cts.IsCancellationRequested)
     {
         var success = Driver.FindElements(By.ClassName($"alert-{StatusMessageModel.ToString(severity)}")).Any(el => el.Displayed);
         if (success)
         {
             return;
         }
         Thread.Sleep(100);
     }
     Logs.Tester.LogInformation(this.Driver.PageSource);
     Assert.True(false, $"Should have shown {severity} message");
 }
Beispiel #11
0
        public async Task <IActionResult> CreateApp()
        {
            var stores = await _AppService.GetOwnedStores(GetUserId());

            if (stores.Length == 0)
            {
                StatusMessage = new StatusMessageModel()
                {
                    Html =
                        $"Error: Necesitas crear al menos una tienda.. <a href='{(Url.Action("CreateStore", "UserStores"))}'>Crear tienda</a>",
                    Severity = StatusMessageModel.StatusSeverity.Error
                }.ToString();
                return(RedirectToAction(nameof(ListApps)));
            }
            var vm = new CreateAppViewModel();

            vm.SetStores(stores);
            return(View(vm));
        }
        public async Task <IActionResult> CreateApp()
        {
            var stores = await _AppsHelper.GetOwnedStores(GetUserId());

            if (stores.Length == 0)
            {
                StatusMessage = new StatusMessageModel()
                {
                    Html =
                        $"Error: You must have created at least one store. <a href='{(Url.Action("CreateStore", "UserStores"))}'>Create store</a>",
                    Severity = StatusMessageModel.StatusSeverity.Error
                }.ToString();
                return(RedirectToAction(nameof(ListApps)));
            }
            var vm = new CreateAppViewModel();

            vm.SetStores(stores);
            return(View(vm));
        }
Beispiel #13
0
        public async Task <IActionResult> Disable2fa(StatusMessageModel model)
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            var disable2faResult = await _userManager.SetTwoFactorEnabledAsync(user, false);

            if (!disable2faResult.Succeeded)
            {
                throw new InvalidOperationException($"Unexpected error occurred disabling 2FA for user with ID '{_userManager.GetUserId(User)}'.");
            }

            _logger.LogInformation("User with ID '{UserId}' has disabled 2fa.", _userManager.GetUserId(User));
            model.StatusMessage = "2fa has been disabled. You can reenable 2fa when you setup an authenticator app";
            return(RedirectToAction("TwoFactorAuthentication"));
        }
Beispiel #14
0
        public async Task <IActionResult> ResetAuthenticator(StatusMessageModel model)
        {
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'."));
            }

            await _userManager.SetTwoFactorEnabledAsync(user, false);

            await _userManager.ResetAuthenticatorKeyAsync(user);

            _logger.LogInformation("User with ID '{UserId}' has reset their authentication app key.", user.Id);

            await _signInManager.RefreshSignInAsync(user);

            model.StatusMessage = "Your authenticator app key has been reset, you will need to configure your authenticator app using the new key.";

            return(RedirectToAction("EnableAuthenticator"));
        }
        private async Task <IActionResult> SaveStorageProvider(IBaseStorageConfiguration viewModel,
                                                               StorageProvider storageProvider)
        {
            if (!ModelState.IsValid)
            {
                return(View(viewModel));
            }

            var data = (await _SettingsRepository.GetSettingAsync <StorageSettings>()) ?? new StorageSettings();

            data.Provider      = storageProvider;
            data.Configuration = JObject.FromObject(viewModel);
            await _SettingsRepository.UpdateSetting(data);

            TempData["StatusMessage"] = new StatusMessageModel()
            {
                Severity = StatusMessageModel.StatusSeverity.Success,
                Message  = "Storage settings updated successfully"
            }.ToString();
            return(View(viewModel));
        }
        public async Task <IActionResult> ConfirmEmailChange(string userId, string email, string code)
        {
            var model = new StatusMessageModel();

            if (userId == null || email == null || code == null)
            {
                return(RedirectToAction("Index"));
            }

            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{userId}'."));
            }

            code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
            var result = await _userManager.ChangeEmailAsync(user, email, code);

            if (!result.Succeeded)
            {
                model.StatusMessage = "Error changing email.";
                return(View(model));
            }

            // In our UI email and user name are one and the same, so when we update the email
            // we need to update the user name.
            var setUserNameResult = await _userManager.SetUserNameAsync(user, email);

            if (!setUserNameResult.Succeeded)
            {
                model.StatusMessage = "Error changing user name.";
                return(View(model));
            }

            await _signInManager.RefreshSignInAsync(user);

            model.StatusMessage = "Thank you for confirming your email change.";
            return(View(model));
        }
        public async Task <IActionResult> ConfirmEmail(string userId, string code)
        {
            var model = new StatusMessageModel();

            if (userId == null || code == null)
            {
                return(RedirectToAction("Index"));
            }

            var user = await _userManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(NotFound($"Unable to load user with ID '{userId}'."));
            }

            code = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(code));
            var result = await _userManager.ConfirmEmailAsync(user, code);

            model.StatusMessage = result.Succeeded ? "Thank you for confirming your email." : "Error confirming your email.";
            return(View(model));
        }
Beispiel #18
0
 internal IWebElement FindAlertMessage(StatusMessageModel.StatusSeverity severity = StatusMessageModel.StatusSeverity.Success) =>
 Driver.FindElement(By.ClassName($"alert-{StatusMessageModel.ToString(severity)}"));
        #pragma warning disable 1998
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
        {
            BeginContext(14, 1, true);
            WriteLiteral("\n");
            EndContext();
#line 3 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
            if (!string.IsNullOrEmpty(Model))
            {
                var parsedModel = new StatusMessageModel(Model);

#line default
#line hidden
                BeginContext(104, 8, true);
                WriteLiteral("    <div");
                EndContext();
                BeginWriteAttribute("class", " class=\"", 112, "\"", 174, 4);
                WriteAttributeValue("", 120, "alert", 120, 5, true);
                WriteAttributeValue(" ", 125, "alert-", 126, 7, true);
#line 6 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                WriteAttributeValue("", 132, parsedModel.SeverityCSS, 132, 24, false);

#line default
#line hidden
                WriteAttributeValue(" ", 156, "alert-dismissible", 157, 18, true);
                EndWriteAttribute();
                BeginContext(175, 148, true);
                WriteLiteral(" role=\"alert\">\n        <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n");
                EndContext();
#line 8 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                if (!string.IsNullOrEmpty(parsedModel.Message))
                {
#line default
#line hidden
                    BeginContext(403, 19, false);
#line 10 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                    Write(parsedModel.Message);

#line default
#line hidden
                    EndContext();
#line 10 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                }

#line default
#line hidden
                BeginContext(433, 8, true);
                WriteLiteral("        ");
                EndContext();
#line 12 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                if (!string.IsNullOrEmpty(parsedModel.Html))
                {
#line default
#line hidden
                    BeginContext(510, 26, false);
#line 14 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                    Write(Html.Raw(parsedModel.Html));

#line default
#line hidden
                    EndContext();
#line 14 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                }

#line default
#line hidden
                BeginContext(547, 11, true);
                WriteLiteral("    </div>\n");
                EndContext();
#line 17 "C:\Users\Rolando\Desktop\BTCPAY\btcpayserver-master\btcpayserver-master\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
            }

#line default
#line hidden
        }
Beispiel #20
0
        internal IWebElement FindAlertMessage(params StatusMessageModel.StatusSeverity[] severity)
        {
            var className = string.Join(", ", severity.Select(statusSeverity => $".alert-{StatusMessageModel.ToString(statusSeverity)}"));
            var el        = Driver.FindElement(By.CssSelector(className)) ?? Driver.WaitForElement(By.CssSelector(className));

            if (el is null)
            {
                throw new NoSuchElementException($"Unable to find {className}");
            }
            return(el);
        }
        public async Task <IActionResult> CreateApp(CreateAppViewModel vm)
        {
            var stores = await _AppsHelper.GetOwnedStores(GetUserId());

            if (stores.Length == 0)
            {
                StatusMessage = new StatusMessageModel()
                {
                    Html =
                        $"Error: You must have created at least one store. <a href='{(Url.Action("CreateStore", "UserStores"))}'>Create store</a>",
                    Severity = StatusMessageModel.StatusSeverity.Error
                }.ToString();
                return(RedirectToAction(nameof(ListApps)));
            }
            var selectedStore = vm.SelectedStore;

            vm.SetStores(stores);
            vm.SelectedStore = selectedStore;

            if (!Enum.TryParse <AppType>(vm.SelectedAppType, out AppType appType))
            {
                ModelState.AddModelError(nameof(vm.SelectedAppType), "Invalid App Type");
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            if (!stores.Any(s => s.Id == selectedStore))
            {
                StatusMessage = "Error: You are not owner of this store";
                return(RedirectToAction(nameof(ListApps)));
            }
            var id = Encoders.Base58.EncodeData(RandomUtils.GetBytes(20));

            using (var ctx = _ContextFactory.CreateContext())
            {
                var appData = new AppData()
                {
                    Id = id
                };
                appData.StoreDataId = selectedStore;
                appData.Name        = vm.Name;
                appData.AppType     = appType.ToString();
                ctx.Apps.Add(appData);
                await ctx.SaveChangesAsync();
            }
            StatusMessage = "App successfully created";
            CreatedAppId  = id;

            switch (appType)
            {
            case AppType.PointOfSale:
                return(RedirectToAction(nameof(UpdatePointOfSale), new { appId = id }));

            case AppType.Crowdfund:
                return(RedirectToAction(nameof(UpdateCrowdfund), new { appId = id }));

            default:
                return(RedirectToAction(nameof(ListApps)));
            }
        }
        internal IWebElement FindAlertMessage(params StatusMessageModel.StatusSeverity[] severity)
        {
            var         className = string.Join(", ", severity.Select(statusSeverity => $".alert-{StatusMessageModel.ToString(statusSeverity)}"));
            IWebElement el;

            try
            {
                var elements = Driver.FindElements(By.CssSelector(className));
                el = elements.FirstOrDefault(e => e.Displayed);
                if (el is null)
                {
                    el = elements.FirstOrDefault();
                }
                if (el is null)
                {
                    el = Driver.WaitForElement(By.CssSelector(className));
                }
            }
            catch (NoSuchElementException)
            {
                el = Driver.WaitForElement(By.CssSelector(className));
            }
            if (el is null)
            {
                throw new NoSuchElementException($"Unable to find {className}");
            }
            if (!el.Displayed)
            {
                throw new ElementNotVisibleException($"{className} is present, but not displayed: {el.GetAttribute("id")} - Text: {el.Text}");
            }
            return(el);
        }
        #pragma warning disable 1998
        public async override global::System.Threading.Tasks.Task ExecuteAsync()
        {
            BeginContext(15, 2, true);
            WriteLiteral("\r\n");
            EndContext();
#line 3 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
            if (!string.IsNullOrEmpty(Model))
            {
                var parsedModel = new StatusMessageModel(Model);

#line default
#line hidden
                BeginContext(109, 8, true);
                WriteLiteral("    <div");
                EndContext();
                BeginWriteAttribute("class", " class=\"", 117, "\"", 179, 4);
                WriteAttributeValue("", 125, "alert", 125, 5, true);
                WriteAttributeValue(" ", 130, "alert-", 131, 7, true);
#line 6 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                WriteAttributeValue("", 137, parsedModel.SeverityCSS, 137, 24, false);

#line default
#line hidden
                WriteAttributeValue(" ", 161, "alert-dismissible", 162, 18, true);
                EndWriteAttribute();
                BeginContext(180, 150, true);
                WriteLiteral(" role=\"alert\">\r\n        <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\r\n");
                EndContext();
#line 8 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                if (!string.IsNullOrEmpty(parsedModel.Message))
                {
#line default
#line hidden
                    BeginContext(412, 19, false);
#line 10 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                    Write(parsedModel.Message);

#line default
#line hidden
                    EndContext();
#line 10 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                }

#line default
#line hidden
                BeginContext(444, 8, true);
                WriteLiteral("        ");
                EndContext();
#line 12 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                if (!string.IsNullOrEmpty(parsedModel.Html))
                {
#line default
#line hidden
                    BeginContext(523, 26, false);
#line 14 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                    Write(Html.Raw(parsedModel.Html));

#line default
#line hidden
                    EndContext();
#line 14 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
                }

#line default
#line hidden
                BeginContext(562, 12, true);
                WriteLiteral("    </div>\r\n");
                EndContext();
#line 17 "C:\Users\Rolando\Desktop\BTCPAY\banexcoinpay-master-github\banexcoinpay\BTCPayServer\Views\Shared\_StatusMessage.cshtml"
            }

#line default
#line hidden
        }
Beispiel #24
0
        private async Task CanUploadRemoveFiles(ServerController controller)
        {
            var fileContent          = "content";
            var uploadFormFileResult = Assert.IsType <RedirectToActionResult>(await controller.CreateFile(TestUtils.GetFormFile("uploadtestfile.txt", fileContent)));

            Assert.True(uploadFormFileResult.RouteValues.ContainsKey("fileId"));
            var fileId = uploadFormFileResult.RouteValues["fileId"].ToString();

            Assert.Equal("Files", uploadFormFileResult.ActionName);

            //check if file was uploaded and saved in db
            var viewFilesViewModel =
                Assert.IsType <ViewFilesViewModel>(Assert.IsType <ViewResult>(await controller.Files(fileId)).Model);

            Assert.NotEmpty(viewFilesViewModel.Files);
            Assert.Equal(fileId, viewFilesViewModel.SelectedFileId);
            Assert.NotEmpty(viewFilesViewModel.DirectFileUrl);


            //verify file is available and the same
            var net  = new System.Net.WebClient();
            var data = await net.DownloadStringTaskAsync(new Uri(viewFilesViewModel.DirectFileUrl));

            Assert.Equal(fileContent, data);

            //create a temporary link to file
            var tmpLinkGenerate = Assert.IsType <RedirectToActionResult>(await controller.CreateTemporaryFileUrl(fileId,
                                                                                                                 new ServerController.CreateTemporaryFileUrlViewModel()
            {
                IsDownload = true,
                TimeAmount = 1,
                TimeType   = ServerController.CreateTemporaryFileUrlViewModel.TmpFileTimeType.Minutes
            }));

            Assert.True(tmpLinkGenerate.RouteValues.ContainsKey("StatusMessage"));
            var statusMessageModel = new StatusMessageModel(tmpLinkGenerate.RouteValues["StatusMessage"].ToString());

            Assert.Equal(StatusMessageModel.StatusSeverity.Success, statusMessageModel.Severity);
            var index = statusMessageModel.Html.IndexOf("target='_blank'>");
            var url   = statusMessageModel.Html.Substring(index).ReplaceMultiple(new Dictionary <string, string>()
            {
                { "</a>", string.Empty }, { "target='_blank'>", string.Empty }
            });

            //verify tmpfile is available and the same
            data = await net.DownloadStringTaskAsync(new Uri(url));

            Assert.Equal(fileContent, data);


            //delete file
            Assert.Equal(StatusMessageModel.StatusSeverity.Success, new StatusMessageModel(Assert
                                                                                           .IsType <RedirectToActionResult>(await controller.DeleteFile(fileId))
                                                                                           .RouteValues["statusMessage"].ToString()).Severity);

            //attempt to fetch deleted file
            viewFilesViewModel =
                Assert.IsType <ViewFilesViewModel>(Assert.IsType <ViewResult>(await controller.Files(fileId)).Model);

            Assert.Null(viewFilesViewModel.DirectFileUrl);
            Assert.Null(viewFilesViewModel.SelectedFileId);
        }
Beispiel #25
0
        public async Task <IActionResult> CreateApp(CreateAppViewModel vm)
        {
            var stores = await _AppService.GetOwnedStores(GetUserId());

            if (stores.Length == 0)
            {
                StatusMessage = new StatusMessageModel()
                {
                    Html =
                        $"Error: Necesitas crear al menos una tienda. <a href='{(Url.Action("CreateStore", "UserStores"))}'>Crear tienda</a>",
                    Severity = StatusMessageModel.StatusSeverity.Error
                }.ToString();
                return(RedirectToAction(nameof(ListApps)));
            }
            var selectedStore = vm.SelectedStore;

            vm.SetStores(stores);
            vm.SelectedStore = selectedStore;

            if (!Enum.TryParse <AppType>(vm.SelectedAppType, out AppType appType))
            {
                ModelState.AddModelError(nameof(vm.SelectedAppType), "Tipo de aplicación no válido");
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            if (!stores.Any(s => s.Id == selectedStore))
            {
                StatusMessage = "Error: No eres propietario de esta tienda.";
                return(RedirectToAction(nameof(ListApps)));
            }
            var id = Encoders.Base58.EncodeData(RandomUtils.GetBytes(20));

            using (var ctx = _ContextFactory.CreateContext())
            {
                var appData = new AppData()
                {
                    Id = id
                };
                appData.StoreDataId = selectedStore;
                appData.Name        = vm.Name;
                appData.AppType     = appType.ToString();
                ctx.Apps.Add(appData);
                await ctx.SaveChangesAsync();
            }
            StatusMessage = "Aplicación creada con éxito";
            CreatedAppId  = id;

            switch (appType)
            {
            case AppType.PointOfSale:
                return(RedirectToAction(nameof(UpdatePointOfSale), new { appId = id }));

            case AppType.Crowdfund:
                return(RedirectToAction(nameof(UpdateCrowdfund), new { appId = id }));

            default:
                return(RedirectToAction(nameof(ListApps)));
            }
        }