public IActionResult ActionAccessRequest(int accessRequestId) { // Include instructs EF to also retrieve data that's connected with a foreign key // With ThenInclude you can also retrieve relations of relations var request = _context.AccessRequests .Include(accessRequest => accessRequest.Requester) .ThenInclude(requester => requester.OrganisationUsers) .ThenInclude(x => x.Organisation) .SingleOrDefault(x => x.Id == accessRequestId); if (request == null) { return(NotFound()); } var requestedEmail = request.EmailAddress.ToLower(); // if a user gets recreated, this breaks the FK relation to mcUser, so we try to // recover by finding the new user by email var requesterUser = request.Requester ?? _context.Users.Include(x => x.OrganisationUsers).ThenInclude(x => x.Organisation).SingleOrDefault(x => x.Email == request.RequesterEmail); if (requesterUser == null) { return(NotFound()); } UpdateAccessRights(requestedEmail, request.FirstName, request.LastName, requesterUser); request.Status = RequestStatus.Completed; _context.Save(); return(Ok()); }
public void LogAccessRequest(AccessRequest request, string requesterEmail) { _context.RunInRetryableTransaction(() => { var requester = _context .GetUsers(requesterEmail) .Include(x => x.OrganisationUsers) .ThenInclude(x => x.Organisation) .Single(); var requestedIfExists = _context .GetUsers(request.EmailAddress) .Include(x => x.OrganisationUsers) .ThenInclude(x => x.Organisation) .SingleOrDefault(); var entity = _context.AccessRequests.Add(new Domain.Models.AccessRequest() { RequestDateUtc = DateTime.UtcNow, Requester = requester, RequesterEmail = requester.Email, FirstName = request.FirstName, LastName = request.LastName, EmailAddress = request.EmailAddress, Organisation = request.Organisation, Reason = request.Reason, Status = Domain.Models.AccessRequest.RequestStatus.Requested }); _context.Save(); _emailService.SendAccessRequestEmailToSupport(entity.Entity, requester, requestedIfExists); }); }
/// <inheritdoc /> public async Task <User> GetAndUpdateUserAsync(JsonUserDetails userDetails) { var mcUser = await _context.Users.SingleOrDefaultAsync(u => u.SignInUserId == userDetails.Subject); if (mcUser == null) { // fall back to email address for users where we don't yet know their sign-in id mcUser = await _context.GetUsers(userDetails.Email).SingleOrDefaultAsync(); if (mcUser != null) { // record the sign-in id and use that in future mcUser.SignInUserId = userDetails.Subject; } } if (mcUser == null) { throw new McUserNotFoundException(); } UpdateMcUserFromSignIn(mcUser, userDetails); _context.Save(); return(mcUser); }
public void Invite(string email) { var mcUser = _context.GetUsers(email).SingleOrDefault(); if (mcUser == null) { throw new McUserNotFoundException(); } var inviteEmailModel = new InviteEmailModel(mcUser); _inviteEmailService.Send(inviteEmailModel); if (mcUser.InviteDateUtc == null) { mcUser.InviteDateUtc = _clock.UtcNow; _context.Save(); } }
public void UpdateNewCourse(string providerCode, string courseCode, string email) { var optedInNewCourse = _context.GetCourse(providerCode, courseCode, email) .FirstOrDefault(c => c.Provider.OptedIn && c.CourseSites != null && c.CourseSites.Any(OnlyNewOrRunningAndUnpublished)); if (optedInNewCourse != null) { foreach (var cs in optedInNewCourse.CourseSites.Where(OnlyNewOrRunningAndUnpublished)) { cs.Publish = "Y"; cs.Status = "R"; } _context.Save(); } }
public IActionResult Index() { var email = this.HttpContext.User.Identity.Name; if (string.IsNullOrWhiteSpace(email)) { throw new InvalidOperationException($"Accept terms attempted on unauthorised user"); } var user = context.GetUsers(email).SingleOrDefault(); if (user == null) { return(NotFound()); } user.AcceptTermsDateUtc = DateTime.UtcNow; context.Save(); return(Ok()); }
/// <summary> /// This is an upsert. /// If a draft record exists then update it. /// If a draft record does not exist then add a new one. /// If a new draft record is created then: ///check for the existence of a previous published record and get the last pulished date /// </summary> /// <param name="model">holds the enriched data</param> /// <param name="providerCode">the provider code for the enrichment data</param> /// <param name="email">the email of the user</param> public void SaveProviderEnrichment(UcasProviderEnrichmentPostModel model, string providerCode, string email) { var userProvider = ValidateUserOrg(email, providerCode); providerCode = providerCode.ToUpperInvariant(); var provider = _context.Providers .Include(p => p.ProviderEnrichments) .SingleOrDefault(p => p.ProviderCode == providerCode && p.RecruitmentCycle.Year == RecruitmentCycle.CurrentYear); if (provider == null) { throw new Exception($"Provider {RecruitmentCycle.CurrentYear}/{providerCode} not found"); } var enrichmentDraftRecord = provider.ProviderEnrichments .Where(ie => ie.Status == EnumStatus.Draft) .OrderByDescending(x => x.Id) .FirstOrDefault(); // when saving enforce the region code is being saved. if (!model.EnrichmentModel.RegionCode.HasValue) { model.EnrichmentModel.RegionCode = provider.RegionCode; } string content = _converter.ConvertToJson(model); if (enrichmentDraftRecord != null) { //update enrichmentDraftRecord.UpdatedAt = DateTime.UtcNow; enrichmentDraftRecord.UpdatedByUser = userProvider.User; enrichmentDraftRecord.JsonData = content; } else { //insert var enrichmentPublishRecord = provider.ProviderEnrichments .Where(ie => ie.Status == EnumStatus.Published) .OrderByDescending(x => x.Id) .FirstOrDefault(); DateTime?lastPublishedDate = null; if (enrichmentPublishRecord != null) { lastPublishedDate = enrichmentPublishRecord.LastPublishedAt; } var enrichment = new ProviderEnrichment { ProviderCode = userProvider.UcasProviderCode, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow, LastPublishedAt = lastPublishedDate, CreatedByUser = userProvider.User, UpdatedByUser = userProvider.User, Status = EnumStatus.Draft, JsonData = content, }; provider.ProviderEnrichments.Add(enrichment); } _context.Save(); }