예제 #1
0
 public async Task <Organisation> GetOrganisationDetailsByOdsCode(string odsCode)
 {
     if (_spineOptionsDelegate.CurrentValue.SdsUseFhirApi)
     {
         return(await _fhirApiService.GetOrganisationDetailsByOdsCode(odsCode));
     }
     return(_ldapService.GetOrganisationDetailsByOdsCode(odsCode));
 }
예제 #2
0
        public Task ExecutionTokenValidation(TokenValidatedContext context)
        {
            try
            {
                if (context == null)
                {
                    throw new ArgumentNullException(nameof(context));
                }
                if (context.Principal == null)
                {
                    throw new ArgumentNullException(nameof(context.Principal));
                }

                var emailAddress        = StringExtensions.Coalesce(context.Principal.GetClaimValue("Email"), context.Principal.GetClaimValue("Email Address"));
                var odsCode             = context.Principal.GetClaimValue("ODS");
                var organisationDetails = _ldapService.GetOrganisationDetailsByOdsCode(odsCode);
                if (organisationDetails != null)
                {
                    var organisation = _applicationService.GetOrganisation(organisationDetails.ODSCode);
                    var loggedOnUser = _applicationService.LogonUser(new User
                    {
                        EmailAddress   = emailAddress,
                        DisplayName    = context.Principal.GetClaimValue("DisplayName"),
                        OrganisationId = organisation.OrganisationId
                    });

                    if (!loggedOnUser.IsAuthorised)
                    {
                        context.Response.Redirect("/AccessDenied");
                        context.HandleResponse();
                    }
                    else
                    {
                        if (context.Principal.Identity is ClaimsIdentity identity)
                        {
                            identity.AddOrReplaceClaimValue("Email", emailAddress);
                            identity.AddClaim(new Claim("OrganisationName", organisationDetails.OrganisationName));
                            identity.AddClaim(new Claim("UserSessionId", loggedOnUser.UserSessionId.ToString()));
                            identity.AddClaim(new Claim("UserId", loggedOnUser.UserId.ToString()));
                            identity.AddClaim(new Claim("ProviderODSCode", odsCode));
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                _logger.LogError(exc, "An error occurred attempting to authorise the user");
                throw;
            }
            return(Task.CompletedTask);
        }
예제 #3
0
        private async Task GetSearchResults()
        {
            try
            {
                var providerOrganisationDetails = _ldapService.GetOrganisationDetailsByOdsCode(ProviderODSCode);
                var consumerOrganisationDetails = _ldapService.GetOrganisationDetailsByOdsCode(ConsumerODSCode);

                _auditSearchParameters[0] = ConsumerODSCode;
                _auditSearchParameters[1] = ProviderODSCode;
                _auditSearchParameters[2] = SelectedDateRange;

                ProviderODSCodeFound = providerOrganisationDetails != null;
                ConsumerODSCodeFound = consumerOrganisationDetails != null;

                if (ProviderODSCodeFound && ConsumerODSCodeFound)
                {
                    //Step 2 - VALIDATE PROVIDER ODS CODE IN SPINE DIRECTORY
                    //Is ODS code configured in Spine Directory as an GP Connect Appointments provider system? / Retrieve provider endpoint and party key from Spine Directory
                    var providerGpConnectDetails = _ldapService.GetGpProviderEndpointAndPartyKeyByOdsCode(ProviderODSCode);
                    var consumerGpConnectDetails = _ldapService.GetGpProviderEndpointAndPartyKeyByOdsCode(ConsumerODSCode);

                    ProviderEnabledForGpConnectAppointmentManagement = providerGpConnectDetails != null;

                    if (ProviderEnabledForGpConnectAppointmentManagement && consumerOrganisationDetails != null)
                    {
                        var providerAsId = _ldapService.GetGpProviderAsIdByOdsCodeAndPartyKey(ProviderODSCode, providerGpConnectDetails.party_key);
                        ProviderASIDPresent = providerAsId != null;

                        if (ProviderASIDPresent)
                        {
                            ProviderPublisher             = providerAsId.product_name;
                            providerGpConnectDetails.asid = providerAsId.asid;
                            await PopulateSearchResults(providerGpConnectDetails, providerOrganisationDetails, consumerGpConnectDetails, consumerOrganisationDetails);

                            SearchAtResultsText         = $"{providerOrganisationDetails.OrganisationName} ({providerOrganisationDetails.ODSCode}) - {StringExtensions.AddressBuilder(providerOrganisationDetails.PostalAddressFields.ToList(), providerOrganisationDetails.PostalCode)}";
                            SearchOnBehalfOfResultsText = $"{consumerOrganisationDetails.OrganisationName} ({consumerOrganisationDetails.ODSCode}) - {StringExtensions.AddressBuilder(consumerOrganisationDetails.PostalAddressFields.ToList(), consumerOrganisationDetails.PostalCode)}";
                        }
                        else
                        {
                            _auditSearchIssues.Add(SearchConstants.ISSUEWITHGPCONNECTPROVIDERTEXT);
                        }
                    }
                    else
                    {
                        _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHGPCONNECTPROVIDERNOTENABLEDTEXT, ProviderODSCode));
                    }
                }
                else
                {
                    if (!ProviderODSCodeFound)
                    {
                        _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHPROVIDERODSCODETEXT, ProviderODSCode));
                    }
                    if (!ConsumerODSCodeFound)
                    {
                        _auditSearchIssues.Add(string.Format(SearchConstants.ISSUEWITHCONSUMERODSCODETEXT, ConsumerODSCode));
                    }
                }
            }
            catch (LdapException)
            {
                LdapErrorRaised = true;
                _auditSearchIssues.Add(SearchConstants.ISSUEWITHLDAPTEXT);
            }
        }