All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.dsf.fhir.spring.config.AuthenticationConfig Maven / Gradle / Ivy

package dev.dsf.fhir.spring.config;

import org.hl7.fhir.r4.model.Coding;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import dev.dsf.common.auth.conf.IdentityProvider;
import dev.dsf.common.auth.conf.RoleConfig;
import dev.dsf.common.auth.conf.RoleConfigReader;
import dev.dsf.fhir.authentication.FhirServerRole;
import dev.dsf.fhir.authentication.IdentityProviderImpl;
import dev.dsf.fhir.authentication.OrganizationProvider;
import dev.dsf.fhir.authentication.OrganizationProviderImpl;

@Configuration
public class AuthenticationConfig
{
	private static final Logger logger = LoggerFactory.getLogger(AuthenticationConfig.class);

	@Autowired
	private DaoConfig daoConfig;

	@Autowired
	private HelperConfig helperConfig;

	@Autowired
	private PropertiesConfig propertiesConfig;

	@Bean
	public OrganizationProvider organizationProvider()
	{
		return new OrganizationProviderImpl(daoConfig.organizationDao(), helperConfig.exceptionHandler(),
				propertiesConfig.getOrganizationIdentifierValue());
	}

	@Bean
	public IdentityProvider identityProvider()
	{
		return new IdentityProviderImpl(roleConfig(), organizationProvider(),
				propertiesConfig.getOrganizationIdentifierValue());
	}

	@Bean
	public RoleConfig roleConfig()
	{
		RoleConfig config = new RoleConfigReader().read(propertiesConfig.getRoleConfig(),
				role -> FhirServerRole.isValid(role) ? FhirServerRole.valueOf(role) : null,
				this::practionerRoleFactory);

		logger.info("Role config: {}", config.toString());
		return config;
	}

	// TODO implement role factory that only allows existing roles
	private Coding practionerRoleFactory(String role)
	{
		if (role != null)
		{
			String[] roleParts = role.split("\\|");
			if (roleParts.length == 2)
				return new Coding().setSystem(roleParts[0]).setCode(roleParts[1]);
		}

		return null;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy