// Uploads image to blob storage and posts CabinImage to DB
        public async Task <IActionResult> Upload(CabinImage cabinImage)
        {
            try
            {
                if (cabinImage.Files == null)
                {
                    return(RedirectToAction("Upload", new { cabinId = cabinImage.CabinId, errorMessage = true }));
                }

                var imageName = $"{Guid.NewGuid().ToString()}";

                cabinImage.ImageUrl = imageName;

                CloudBlockBlob blockBlob = _container.GetBlockBlobReference(imageName);
                blockBlob.Properties.ContentType = cabinImage.Files.ContentType;
                await using (var data = cabinImage.Files.OpenReadStream())
                {
                    await blockBlob.UploadFromStreamAsync(data);
                }

                cabinImage.Files = null;
                var postCabinImage = await _service.PostCabinImage(User, cabinImage);

                if (!postCabinImage)
                {
                    return(View("ErrorPage"));
                }

                return(RedirectToAction("Upload", new { cabinId = cabinImage.CabinId }));
            }
            catch
            {
                return(View("ErrorPage"));
            }
        }
        public async Task <ActionResult <CabinImage> > PostCabinImage(CabinImage cabinImage)
        {
            try
            {
                // If CabinOwner, check that he can create Cabin only by own PersonId
                if (User.IsInRole("CabinOwner"))
                {
                    var checkPerson = await _context.Person.Where(person => person.Email == User.Identity.Name).FirstOrDefaultAsync();

                    var cabin = await _context.Cabin.Where(cabin => cabin.CabinId == cabinImage.CabinId).FirstOrDefaultAsync();

                    if (cabin.PersonId != checkPerson.PersonId)
                    {
                        return(Unauthorized());
                    }
                }

                // Return BadRequest if cabin has already 4 images
                var cabinImages = await _context.CabinImage.Where(cImage => cImage.CabinId == cabinImage.CabinId).ToListAsync();

                if (cabinImages.Count() >= 4)
                {
                    return(BadRequest());
                }

                _context.CabinImage.Add(cabinImage);
                await _context.SaveChangesAsync();

                return(NoContent());
            }
            catch
            {
                return(StatusCode(500));
            }
        }
예제 #3
0
        //------------------------------------------------------------------------------------------------- Cabins End

        //------------------------------------------------------------------------------------------------- CabinImages

        // Executes API Post-Call by User and CabinImage
        // Returns true if CabinImage created success
        public async Task <bool> PostCabinImage(ClaimsPrincipal user, CabinImage cabinImage)
        {
            var token = GenerateToken(user);

            defaultClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            string url = ApiUrls.CabinImageBase;

            var response = await defaultClient.PostAsync(url, cabinImage, new JsonMediaTypeFormatter());

            return(response.IsSuccessStatusCode ? true : false);
        }