public ActivationViewModel Activate(ActivationViewModel model, Guid candidateId)
        {
            _logger.Info(
                "Calling CandidateServiceProvider to activate user with Id={0}",
                candidateId);

            try
            {
                _candidateService.Activate(model.EmailAddress, model.ActivationCode);
                _authenticationTicketService.SetAuthenticationCookie(_httpContext.Response.Cookies,
                                                                     candidateId.ToString(),
                                                                     UserRoleNames.Activated);

                return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.Activated));
            }
            catch (CustomException e)
            {
                switch (e.Code)
                {
                case Domain.Entities.ErrorCodes.EntityStateError:
                    _logger.Error("Candidate was in an invalid state for activation:" + model.EmailAddress, e);
                    return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.Error, ActivationPageMessages.ActivationFailed));

                default:
                    _logger.Info("Candidate activation failed for " + model.EmailAddress, e);
                    return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.InvalidCode, ActivationPageMessages.ActivationCodeIncorrect));
                }
            }
            catch (Exception e)
            {
                _logger.Error("Candidate activation failed for " + model.EmailAddress, e);
                return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.Error, ActivationPageMessages.ActivationFailed));
            }
        }
        public ActivationViewModel Activate(ActivationViewModel model, Guid candidateId)
        {
            _logger.Info(
                "Calling CandidateServiceProvider to activate user with Id={0}",
                candidateId);

            try
            {
                var user = _userAccountService.GetUser(candidateId);
                if (user.Status == UserStatuses.Active)
                {
                    _authenticationTicketService.SetAuthenticationCookie(candidateId.ToString(), UserRoleNames.Activated);

                    return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.AlreadyActivated));
                }

                var candidate = _candidateService.GetCandidate(candidateId);
                if (!String.Equals(candidate.RegistrationDetails.EmailAddress, model.EmailAddress, StringComparison.CurrentCultureIgnoreCase))
                {
                    _logger.Warn("Candidate email address {0} does not match supplied email address {1}", candidate.RegistrationDetails.EmailAddress, model.EmailAddress);
                }

                _candidateService.Activate(candidateId, model.ActivationCode);
                _authenticationTicketService.SetAuthenticationCookie(candidateId.ToString(), UserRoleNames.Activated);

                return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.Activated));
            }
            catch (CustomException e)
            {
                switch (e.Code)
                {
                case Domain.Entities.ErrorCodes.EntityStateError:
                    _logger.Error("Candidate was in an invalid state for activation:" + model.EmailAddress, e);
                    return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.Error, ActivationPageMessages.ActivationFailed));

                default:
                    _logger.Info("Candidate activation failed for " + model.EmailAddress, e);
                    return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.InvalidCode, ActivationPageMessages.ActivationCodeIncorrect));
                }
            }
            catch (Exception e)
            {
                _logger.Error("Candidate activation failed for " + model.EmailAddress, e);
                return(new ActivationViewModel(model.EmailAddress, model.ActivationCode, ActivateUserState.Error, ActivationPageMessages.ActivationFailed));
            }
        }