コード例 #1
0
        public async Task SendProvisionerLinkAsync(string[] recipients, EnrolmentCertificateAccessToken token, string provisionerName = null)
        {
            if (!AreValidEmails(recipients))
            {
                // TODO Log invalid email, cannot send
                throw new ArgumentException("Cannot send provisioner link, supplied email address(es) are invalid.");
            }

            if (token.Enrollee == null)
            {
                await _context.Entry(token).Reference(t => t.Enrollee).LoadAsync();
            }

            // Always send a copy to the enrollee
            var ccEmails = new List <string>()
            {
                token.Enrollee.ContactEmail
            };

            string subject  = "New Access Request";
            string viewName = string.IsNullOrEmpty(provisionerName)
                ? "/Views/Emails/OfficeManagerEmail.cshtml"
                : "/Views/Emails/VendorEmail.cshtml";
            string emailBody = await _razorConverterService.RenderViewToStringAsync(viewName, new EmailParams(token, provisionerName));

            await Send(PRIME_EMAIL, recipients, ccEmails, subject, emailBody, Enumerable.Empty <(string Filename, byte[] Content)>());
        }
コード例 #2
0
        public async void testHappyPathCertificateAccess()
        {
            Enrollee enrollee = TestDb.Has(TestUtils.EnrolleeFaker.Generate());
            var      service  = CreateWithMocks(enrollee);

            EnrolmentCertificateAccessToken token = await service.CreateCertificateAccessTokenAsync(enrollee);

            Assert.NotNull(token);

            EnrolmentCertificate cert = await service.GetEnrolmentCertificateAsync(token.Id);

            Assert.NotNull(cert);
            Assert.Equal(enrollee.GPID, cert.GPID);
        }
コード例 #3
0
        public async void testExpiryDate()
        {
            TimeSpan tokenLifespan = TimeSpan.FromDays(7);
            TimeSpan tolerance     = TimeSpan.FromSeconds(1);
            Enrollee enrollee      = TestDb.Has(TestUtils.EnrolleeFaker.Generate());
            var      service       = CreateWithMocks(enrollee);

            EnrolmentCertificateAccessToken token = await service.CreateCertificateAccessTokenAsync(enrollee);

            Assert.NotNull(token);
            // Assert that the difference between the computed and actual expiry date is less than some tolerance.
            Assert.True((DateTimeOffset.Now.Add(tokenLifespan) - token.Expires).Duration() < tolerance);

            token.Expires = DateTimeOffset.Now.AddHours(-1);
            Assert.Null(await service.GetEnrolmentCertificateAsync(token.Id));
        }
コード例 #4
0
        public async void testMaxViews()
        {
            int      tokenMaxViews = 3;
            Enrollee enrollee      = TestDb.Has(TestUtils.EnrolleeFaker.Generate());
            var      service       = CreateService();

            EnrolmentCertificateAccessToken token = await service.CreateCertificateAccessTokenAsync(enrollee);

            Assert.NotNull(token);
            Assert.Equal(0, token.ViewCount);

            for (int view = 1; view <= tokenMaxViews; view++)
            {
                Assert.NotNull(await service.GetEnrolmentCertificateAsync(token.Id));
                Assert.Equal(view, token.ViewCount);
            }

            Assert.Null(await service.GetEnrolmentCertificateAsync(token.Id));
        }
コード例 #5
0
        public async Task <EnrolmentCertificateAccessToken> CreateCertificateAccessTokenAsync(int enrolleeId)
        {
            EnrolmentCertificateAccessToken token = new EnrolmentCertificateAccessToken()
            {
                EnrolleeId = enrolleeId,
                ViewCount  = 0,
                Expires    = DateTimeOffset.Now.Add(EnrolmentCertificateAccessToken.Lifespan),
                Active     = true
            };

            _context.EnrolmentCertificateAccessTokens.Add(token);

            if (await _context.SaveChangesAsync() < 1)
            {
                throw new InvalidOperationException("Could not create Enrolment Certificate access token.");
            }

            return(token);
        }
コード例 #6
0
        public async Task <EnrolmentCertificateAccessToken> CreateCertificateAccessTokenAsync(Enrollee enrollee)
        {
            EnrolmentCertificateAccessToken token = new EnrolmentCertificateAccessToken()
            {
                Enrollee  = enrollee,
                ViewCount = 0,
                Active    = true
            };

            _context.EnrolmentCertificateAccessTokens.Add(token);

            var created = await _context.SaveChangesAsync();

            if (created < 1)
            {
                throw new InvalidOperationException("Could not create Enrolment Certificate access token.");
            }

            return(token);
        }
コード例 #7
0
        public async Task SendProvisionerLinkAsync(string[] recipients, EnrolmentCertificateAccessToken token, int careSettingCode)
        {
            if (!AreValidEmails(recipients))
            {
                // TODO Log invalid email, cannot send
                throw new ArgumentException("Cannot send provisioner link, supplied email address(es) are invalid.");
            }

            if (token.Enrollee == null)
            {
                await _context.Entry(token).Reference(t => t.Enrollee).LoadAsync();
            }

            // Always send a copy to the enrollee
            var ccEmails = new List <string>()
            {
                token.Enrollee.Email
            };

            string subject  = "New Access Request";
            string viewName = null;

            switch (careSettingCode)
            {
            case (int)CareSettingType.CommunityPharmacy:
                viewName = "/Views/Emails/CommunityPharmacyManagerEmail.cshtml";
                break;

            case (int)CareSettingType.HealthAuthority:
                viewName = "/Views/Emails/HealthAuthorityEmail.cshtml";
                break;

            default:
                viewName = "/Views/Emails/OfficeManagerEmail.cshtml";
                break;
            }

            string emailBody = await _razorConverterService.RenderViewToStringAsync(viewName, new EmailParams(token));

            await Send(PRIME_EMAIL, recipients, ccEmails, subject, emailBody, Enumerable.Empty <(string Filename, byte[] Content)>());
        }
コード例 #8
0
        private async Task UpdateTokenMetadataAsync(EnrolmentCertificateAccessToken token)
        {
            if (!token.Active)
            {
                return;
            }

            // TODO: View limit has been removed temporarily
            if (/*token.ViewCount >= MAX_VIEWS ||*/ DateTimeOffset.Now > token.Expires)
            {
                token.Active = false;
            }
            else
            {
                token.ViewCount++;
            }

            if (await _context.SaveChangesAsync() < 1)
            {
                throw new InvalidOperationException("Could not update Enrolment Certificate access token.");
            }
        }
コード例 #9
0
        public async Task SendProvisionerLinkAsync(IEnumerable <string> emails, EnrolmentCertificateAccessToken token, int careSettingCode)
        {
            var enrolleeDto = await _context.Enrollees
                              .Where(e => e.Id == token.EnrolleeId)
                              .Select(e => new
            {
                e.FirstName,
                e.LastName,
                e.Email
            })
                              .SingleAsync();

            var viewModel = new ProvisionerAccessEmailViewModel
            {
                EnrolleeFullName = $"{enrolleeDto.FirstName} {enrolleeDto.LastName}",
                TokenUrl         = token.FrontendUrl,
                ExpiresInDays    = EnrolmentCertificateAccessToken.Lifespan.Days
            };

            var email = await _emailRenderingService.RenderProvisionerLinkEmailAsync(emails, enrolleeDto.Email, (CareSettingType)careSettingCode, viewModel);

            await Send(email);
        }
コード例 #10
0
ファイル: EmailServiceMock.cs プロジェクト: esune/moh-prime
 public Task SendProvisionerLinkAsync(string[] recipients, EnrolmentCertificateAccessToken token, string provisionerName = null)
 {
     throw new System.NotImplementedException();
 }