Ejemplo n.º 1
0
        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);
            });
        }
        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 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());
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var exemption = (context.ActionDescriptor as ControllerActionDescriptor).MethodInfo.CustomAttributes.FirstOrDefault(x => x.AttributeType == typeof(ExemptFromAcceptTermsAttribute));

            if (exemption != null)
            {
                // leave out the AcceptTerms POST
                return;
            }

            var userEmail = context.HttpContext.User.Identity.Name;

            if (string.IsNullOrWhiteSpace(userEmail))
            {
                throw new InvalidOperationException("AcceptTermsFilter invoked without a user being authenticated");
            }

            var users = dbContext.GetUsers(userEmail).ToList();

            if (users.Count > 1)
            {
                throw new InvalidOperationException($"multiple users found for {userEmail}");
            }
            if (users.Count == 0)
            {
                throw new InvalidOperationException("user not found");
            }

            if (users[0].AcceptTermsDateUtc == null)
            {
                // consent hasn't been given, return a status code in order to supress Action execution.
                context.Result = new StatusCodeResult(451);
            }

            // otherwise consent has been given, just return to proceed to the Action
        }