public async Task <IActionResult> Get(int id)
        {
            // TODO: need to check if user can get unpublished or not
            return(await TryOk(async() => {
                var program = await _slideDeckProgramRepo.GetFirst(id);

                var activeAvatar = await _userAvatar.GetActiveInContext();

                if (program.AccessLevel == Shared.Models.Enums.AccessLevel.Premium &&
                    (_userService.GetAccessLevel() != Shared.Models.Enums.UserRole.Premium ||
                     activeAvatar.PersonalProgramAccess.Count(x => x.SlideDeckProgramId == program.Id) == 0))
                {
                    // does not have access. return dummy deck!
                    var dummy = await RepoBase.Get(10);
                    dummy.Title = program.Title;
                    dummy.Description = program.Description + Environment.NewLine + Environment.NewLine + dummy.Description;

                    return dummy;
                }
                return program;
            }));

            //return await Get<SlideDeckProgram>(_slideDeckProgramRepo.GetFirst(id));
        }
예제 #2
0
        public async Task <IActionResult> Get(int id)
        {
            // TODO: need to check if user can get unpublished or not

            //return await TryOk(() => _slideDeckRepo.Get(id));
            return(await TryOk(async() => {
                var deck = await _slideDeckRepo.Get(id);

                var activeAvatar = await _userAvatar.GetActiveInContext();

                if (deck.AccessLevel == Shared.Models.Enums.AccessLevel.Premium &&
                    (_userService.GetAccessLevel() != Shared.Models.Enums.UserRole.Premium))
                //|| activeAvatar.PersonalProgramAccess.Count(x => x.SlideDeckProgramId == deck.Id) == 0)
                {
                    // does not have access. return dummy deck!
                    var dummy = await _slideDeckRepo.Get(10);
                    dummy.Title = deck.Title;
                    dummy.Description = deck.Description + Environment.NewLine + Environment.NewLine + dummy.Description;

                    return dummy;
                }
                foreach (var slide in deck.Slides.Where(s => !string.IsNullOrWhiteSpace(s.TextContent)))
                {
                    var k = slide.TextContent.Split("scr=");
                    for (int i = 1; i < k.Length; i++)
                    {
                        var url = k[i].Split(" ").First().Replace("\"", "");
                        var sasurl = _azureRepo.GetSasUriForBlob(new Uri(url)).ToString();
                        //.Replace("&", "&amp;");
                        k[i] = "scr=" + k[i].Replace(url, sasurl);
                    }
                    slide.TextContent = string.Join(null, k);
                }
                return deck;
            }));
        }
 public async Task <IActionResult> GetActiveForUser()
 {
     return(await TryOk(() => _userAvatarRepo.GetActiveInContext()));
 }
예제 #4
0
        public async Task <IActionResult> ReceiveFile()
        {
            if (!MultipartRequestHelper.IsMultipartContentType(Request.ContentType))
            {
                throw new Exception("Not a multipart request");
            }

            var boundary = MultipartRequestHelper.GetBoundary(MediaTypeHeaderValue.Parse(Request.ContentType), _defaultFormOptions.MultipartBoundaryLengthLimit);
            var reader   = new MultipartReader(boundary, Request.Body);

            // note: this is for a single file, you could also process multiple files
            var section = await reader.ReadNextSectionAsync();

            if (section == null)
            {
                return(BadRequest());
            }

            Request.Headers.TryGetValue("CompletedSlideDeckProgram", out Microsoft.Extensions.Primitives.StringValues programIdStringValue);
            var reviewable = new CompletedProgramReviewable();

            reviewable.CompletedSlideDeckProgramId = int.Parse(programIdStringValue.ToString());
            var activeUserAvatar = await _userAvatarRepo.GetActiveInContext();

            reviewable.UserAvatarId = activeUserAvatar.Id;

            var i = 0;

            do
            {
                if (!ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out var contentDisposition))
                {
                    throw new Exception("No content disposition in multipart defined");
                }

                var fileName2 = contentDisposition.FileNameStar.ToString();
                if (string.IsNullOrEmpty(fileName2))
                {
                    fileName2 = contentDisposition.FileName.ToString();
                }

                var fileName = _userService.GetUserId().ToString() + "_" + programIdStringValue.ToString() + "_" + activeUserAvatar.Id + "_" + i + "." + fileName2.Split('.').Last();
                if (string.IsNullOrEmpty(fileName2))
                {
                    throw new Exception("No filename defined.");
                }

                using var fileStream = section.Body;

                var uri = await _azureRepo.NewBlobFromStream(fileStream, "dfghdfh", fileName);


                reviewable.Content.Add(new Shared.DbModels.AzureBlob()
                {
                    Uri = uri.ToString(), Name = fileName2, Mime = contentDisposition.Name.ToString()
                });
                i++;
                section = await reader.ReadNextSectionAsync();
            } while (section != null);



            await _dbContext.CompletedProgramReviewables.AddAsync(reviewable);

            await _dbContext.SaveChangesAsync();

            //await SendFileSomewhere(fileStream);

            return(Ok());
        }