public async Task <IActionResult> Upload([FromForm] IFormFile file, [FromForm] string name, [FromRoute] ulong server, [FromForm] List <uint> categories) { var token = new CancellationTokenSource(TimeSpan.FromSeconds(30)).Token; var authEntry = HttpContext.GetAuthEntry(); if (authEntry is null) { return(Redirect("/login")); } var userGuilds = await userService.GetAllowedUserGuilds(authEntry); if (!userGuilds.Any(x => x.Id == server)) { return(Unauthorized()); } if (!IsValidName(name, out var cleanedName)) { return(BadRequest("Invalid quote name")); } var audio_owner = await audioProcessingService.Upload(file, server, authEntry.UserId, cleanedName, token); foreach (var categoryId in categories) { var category = await categoryRepo.GetCategory(categoryId); if (category != null && category.OwnerId == server) { await audioCategoryRepo.Create(audio_owner.Id, category.Id); } } return(RedirectToAction("Index", new { server })); }
public async Task <IActionResult> Create([FromQuery(Name = "audio")] uint audioOwnerId, [FromQuery(Name = "category")] uint categoryId, string redirect = null) { var authEntry = HttpContext.GetAuthEntry(); if (authEntry is null) { return(Redirect("/login")); } var audioOwner = await audioOwnerRepo.GetById(audioOwnerId); var category = await categoryRepo.GetCategory(categoryId); // Ensure that audioOwner and category have the same ownerId if (audioOwner.OwnerId != category.OwnerId) { return(BadRequest()); } // ensure the user has permissions to edit the guild var userGuilds = await userService.GetAllowedUserGuilds(authEntry); if (!userGuilds.Any(x => x.Id == audioOwner.OwnerId)) { return(Unauthorized()); } await audioCategoryRepo.Create(audioOwnerId, categoryId); return(string.IsNullOrWhiteSpace(redirect) ? LocalRedirect("/") : LocalRedirect(redirect)); }