
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