private string GetProtectedUrl(int jobId, RequestRoles requestRole, FeedbackRating?feedbackRating)
        {
            string encodedJobId           = Base64Utils.Base64Encode(jobId.ToString());
            string encodedRequestRoleType = Base64Utils.Base64Encode((int)requestRole);

            string tailUrl = $"/Feedback/PostTaskFeedbackCapture?j={encodedJobId}&r={encodedRequestRoleType}";

            if (feedbackRating.HasValue)
            {
                tailUrl += $"&f={Base64Utils.Base64Encode((int)feedbackRating)}";
            }
            var token = _linkRepository.CreateLink(tailUrl, _linkConfig.Value.ExpiryDays).Result;

            return(_sendGridConfig.Value.BaseUrl + "/link/" + token);
        }
Esempio n. 2
0
        public IHttpActionResult CreateLink(CreateLink link)
        {
            var result = _linkRepository.CreateLink(link.SymbolicName, link.UserName);

            // TODO: Fill route
            return(Created("", result));
        }
 public async Task <CreateLinkResponse> Handle(CreateLinkRequest request, CancellationToken cancellationToken)
 {
     return(new CreateLinkResponse()
     {
         Token = await _linkRepository.CreateLink(request.LinkDestination, request.ExpiryDays)
     });
 }
        private string GetJobUrl(int jobId, int requestId, int jobCount)
        {
            string baseUrl   = _sendGridConfig.Value.BaseUrl;
            string encodedId = jobCount == 1 ? Base64Utils.Base64Encode(jobId.ToString()) : Base64Utils.Base64Encode(requestId.ToString());

            string tailUrl = jobCount == 1 ? $"/link/j/{encodedId}" : $"/link/r/{encodedId}";
            var    token   = _linkRepository.CreateLink(tailUrl, _linkConfig.Value.ExpiryDays).Result;

            return($"{baseUrl}/link/{token}");
        }
Esempio n. 5
0
        private IList <Guid> CreateLinkFakes(int multiplier)
        {
            var fixture = new Fixture();
            var links   = fixture.Build <Link>()
                          .OmitAutoProperties()
                          .With(p => p.SymbolicName)
                          .With(p => p.UserName)
                          .CreateMany(10 * multiplier);

            return(links.Select(link => _linkRepository.CreateLink(link.SymbolicName, link.UserName).Id).ToList());
        }
Esempio n. 6
0
        public IActionResult Create(Link link)
        {
            if (ModelState.IsValid)
            {
                link.ShortLink = _hasher.GetHash(link.OriginalLink);
                _linkRepository.CreateLink(link);
                return(Redirect("Index"));
            }

            var links = _linkRepository.GetLinks().ToList();

            return(View("Index", links));
        }
Esempio n. 7
0
        public IActionResult CreateLink([FromBody] CreateLinkRequest linkToCreate)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Link link = linkToCreate.GetLink();

            link.ShortLink = _hasher.GetHash(link.OriginalLink);

            return(Ok(_linkRepository.CreateLink(link) != null));
        }
Esempio n. 8
0
        public void CreateLink_DomainExist_OneArtistExist()
        {
            var domain = Builder <Domain> .CreateNew()
                         .With(d => d.Id, Guid.NewGuid())
                         .With(d => d.Name, "domain")
                         .Build();

            var artists = Builder <Artist> .CreateListOfSize(2)
                          .All()
                          .Do(x => x.Id = Guid.NewGuid())
                          .Build().ToList();

            // imitates existing entries
            using (var contex = new Context())
            {
                contex.Domains.Add(domain);
                contex.Artists.Add(artists.First());
                contex.SaveChanges();
            }

            var link = Builder <Link> .CreateNew()
                       .With(x => x.Id, Guid.NewGuid())
                       .With(x => x.Domain, domain)
                       .With(x => x.DomainId, domain.Id)
                       .With(x => x.Artists, artists)
                       .Build();

            var entity = _repository.CreateLink(link);

            var saved = _context.Links.Find(entity.Id);

            Assert.IsTrue(entity.IsActive);

            Assert.IsNotNull(saved);
            Assert.AreEqual(link.Artists.Count, saved.Artists.Count);
        }
        private IList <Guid> CreateLinkFakes(int multiplier)
        {
            var result  = new List <Guid>();
            var fixture = new Fixture();
            var links   = fixture.Build <Link>()
                          .OmitAutoProperties()
                          .With(p => p.SymbolicName)
                          .With(p => p.UserName)
                          .CreateMany(10 * multiplier);

            foreach (var link in links)
            {
                result.Add(_linkRepository.CreateLink(link.SymbolicName, link.UserName).Id);
            }

            return(result);
        }
Esempio n. 10
0
        public async Task <EmailBuildData> PrepareTemplateData(Guid batchId, int?recipientUserId, int?jobId, int?groupId, int?requestId, Dictionary <string, string> additionalParameters, string templateName)
        {
            var requestDetails = await _connectRequestService.GetRequestDetailsAsync(requestId.Value);

            if (requestDetails == null)
            {
                throw new Exception($"Unable to return request details for requestId {requestId.Value}");
            }

            var user = await _connectUserService.GetUserByIdAsync(recipientUserId.Value);

            var group = await _connectGroupService.GetGroup(requestDetails.RequestSummary.ReferringGroupID);

            string encodedRequestId = Base64Utils.Base64Encode(requestDetails.RequestSummary.RequestID.ToString());

            if (requestDetails != null && user?.UserPersonalDetails != null && group?.Group != null)
            {
                var token = await _linkRepository.CreateLink($"/link/r/{encodedRequestId}", _linkConfig.Value.ExpiryDays);

                return(new EmailBuildData()
                {
                    BaseDynamicData = new NewTaskPendingApprovalData
                                      (
                        user.UserPersonalDetails.FirstName,
                        group.Group.GroupName,
                        token
                                      ),
                    EmailToAddress = user.UserPersonalDetails.EmailAddress,
                    EmailToName = $"{user.UserPersonalDetails.FirstName} {user.UserPersonalDetails.LastName}",
                    RequestID = requestDetails.RequestSummary.RequestID,
                    GroupID = requestDetails.RequestSummary.ReferringGroupID,
                    ReferencedJobs = new List <ReferencedJob>()
                    {
                        new ReferencedJob()
                        {
                            G = requestDetails.RequestSummary.ReferringGroupID,
                            R = requestDetails.RequestSummary.RequestID,
                        }
                    }
                });
            }
            throw new Exception("Unable to retrieve necessary details to build email");
        }
        public async Task <EmailBuildData> PrepareTemplateData(Guid batchId, int?recipientUserId, int?jobId, int?groupId, int?requestId, Dictionary <string, string> additionalParameters, string templateName)
        {
            var request = await _connectRequestService.GetRequestDetailsAsync(requestId.Value);

            var user = await _connectUserService.GetUserByIdAsync(recipientUserId.Value);

            var job      = request.RequestSummary.JobBasics.Where(x => x.JobID == jobId.Value).FirstOrDefault();
            var location = await _connectAddressService.GetLocationDetails(request.RequestSummary.Shift.Location, CancellationToken.None);

            string encodedJobId = Base64Utils.Base64Encode(jobId.Value.ToString());
            var    joburlToken  = await _linkRepository.CreateLink($"/link/j/{encodedJobId}", _linkConfig.Value.ExpiryDays);

            return(new EmailBuildData()
            {
                BaseDynamicData = new ShiftReminderMessageData(
                    title: "Volunteer shift reminder",
                    subject: "Volunteer shift reminder",
                    firstname: user.UserPersonalDetails.FirstName,
                    activity: job.SupportActivity.FriendlyNameShort(),
                    location: location.Name,
                    shiftStartDateString: FormatDate(request.RequestSummary.Shift.StartDate),
                    shiftEndDateString: FormatDate(request.RequestSummary.Shift.EndDate),
                    locationAddress: string.Empty,
                    joburlToken: joburlToken
                    ),
                EmailToAddress = user.UserPersonalDetails.EmailAddress,
                EmailToName = $"{user.UserPersonalDetails.FirstName} {user.UserPersonalDetails.LastName}",
                RequestID = requestId,
                JobID = jobId,
                ReferencedJobs = new List <ReferencedJob>()
                {
                    new ReferencedJob()
                    {
                        G = request.RequestSummary.ReferringGroupID,
                        R = requestId,
                        J = jobId
                    }
                }
            });
        }
        public LinkModel Execute(CreateLinkArgument argument)
        {
            var domain = _domainRepository.GetDomain(argument.Link.DomainId);

            var code = argument.Link.Code;

            if (!String.IsNullOrEmpty(code))
            {
                if (!LinkHelper.IsValidLinkCode(_storageService, domain.Name, argument.Link.Code))
                {
                    throw new ArgumentException($"Shortlink {domain.Name}/{argument.Link.Code} is already in use.");
                }
            }
            else
            {
                code = LinkHelper.GetUniqueLinkShortCode(_storageService, domain.Name);
            }

            Repository.Entities.Link dbLink;

            switch (argument.Link.MediaType)
            {
            case MediaType.Music:
                var uniqMediaServiceIds =
                    argument.MusicDestinations.SelectMany(x => x.Value.Select(d => d.MediaServiceId)).Distinct().ToList();
                var mediaServices = _mediaServiceRepository.GetMediaServices().Where(x => uniqMediaServiceIds.Contains(x.Id)).ToList();

                var    shortLink       = LinkHelper.ShortLinkTemplate(domain.Name, code);
                string generalLinkPath = LinkHelper.LinkGeneralFilenameTemplate(shortLink);

                dbLink = _linkRepository.CreateLink(new Repository.Entities.Link()
                {
                    Code      = code,
                    Domain    = domain,
                    DomainId  = domain.Id,
                    Id        = argument.Link.Id,
                    IsActive  = argument.Link.IsActive,
                    MediaType = argument.Link.MediaType,
                    Title     = argument.Link.Title,
                    Url       = argument.Link.Url,
                    Artists   = argument.Link.Artists?.Any() == true
                                                        ? argument.Link.Artists.Select(x => new Artist()
                    {
                        Id    = x.Id,
                        Name  = x.Name,
                        Label = x.Label
                    }).ToList()
                                                        : null
                });

                _storageService.Save(generalLinkPath, new StorageModel()
                {
                    Id           = argument.Link.Id,
                    MediaType    = argument.Link.MediaType,
                    Url          = argument.Link.Url,
                    Title        = argument.Link.Title,
                    Destinations = argument.MusicDestinations.ToDictionary(
                        md => md.Key,
                        md => md.Value.Where(d => mediaServices.Select(m => m.Id).Contains(d.MediaServiceId)).Select(d => new DestinationStorageModel()
                    {
                        MediaServiceId = d.MediaServiceId,
                        TrackingInfo   = new TrackingStorageModel()
                        {
                            MediaServiceName = mediaServices.First(m => m.Id == d.MediaServiceId).Name,

                            Artist    = d.TrackingInfo?.Artist,
                            Album     = d.TrackingInfo?.Album,
                            SongTitle = d.TrackingInfo?.SongTitle,

                            Mobile = d.TrackingInfo?.Mobile,
                            Web    = d.TrackingInfo?.Web,
                        }
                    }).ToList())
                });

                break;

            case MediaType.Ticket:

                var    shortLinkTicket       = LinkHelper.ShortLinkTemplate(domain.Name, code);
                string generalLinkPathTicket = LinkHelper.LinkGeneralFilenameTemplate(shortLinkTicket);

                dbLink = _linkRepository.CreateLink(new Repository.Entities.Link()
                {
                    Id        = argument.Link.Id,
                    Code      = code,
                    Domain    = domain,
                    DomainId  = domain.Id,
                    IsActive  = true,
                    MediaType = argument.Link.MediaType,
                    Title     = argument.Link.Title,
                    Url       = argument.Link.Url,
                    Artists   = argument.Link.Artists?.Any() == true
                                                        ? argument.Link.Artists.Select(x => new Artist()
                    {
                        Id    = x.Id,
                        Name  = x.Name,
                        Label = x.Label
                    }).ToList()
                                                        : null
                });

                _storageService.Save(generalLinkPathTicket, new Models.StorageModel.Ticket.StorageModel()
                {
                    Id           = argument.Link.Id,
                    MediaType    = argument.Link.MediaType,
                    Url          = argument.Link.Url,
                    Title        = argument.Link.Title,
                    Destinations = argument.TicketDestinations.ToDictionary(
                        md => md.Key,
                        md => md.Value.Select(d => new Models.StorageModel.Ticket.DestinationStorageModel()
                    {
                        ShowId         = d.ShowId,
                        MediaServiceId = d.MediaServiceId,
                        Url            = d.Url,
                        Date           = d.Date,
                        Location       = d.Location,
                        Venue          = d.Venue
                    }).ToList())
                });
                break;

            default:
                throw new NotSupportedException($"Link type {argument.Link.MediaType} is not supported.");
            }

            return(new LinkModel()
            {
                Id = dbLink.Id,
                Code = code,
                DomainId = domain.Id,
                IsActive = dbLink.IsActive,
                MediaType = dbLink.MediaType,
                Title = dbLink.Title,
                Url = dbLink.Url,
                Artists = dbLink.Artists?.Any() == true
                                        ? dbLink.Artists.Select(x => new ArtistModel()
                {
                    Id = x.Id,
                    Name = x.Name,
                    Label = x.Label
                }).ToList()
                                        : null
            });
        }
Esempio n. 13
0
 public bool CreateLink(Link link)
 {
     _linkRepository.CreateLink(link);
     return(true);
 }