use of io.micronaut.core.annotation.AnnotationMetadataProvider in project micronaut-security by micronaut-projects.
the class ClientCredentialsHeaderPropagatorEnabled method matches.
@Override
public boolean matches(ConditionContext context) {
AnnotationMetadataProvider component = context.getComponent();
BeanContext beanContext = context.getBeanContext();
if (beanContext instanceof ApplicationContext && component instanceof ValueResolver) {
Optional<String> optional = ((ValueResolver) component).get(Named.class.getName(), String.class);
if (optional.isPresent()) {
String name = optional.get();
OauthClientConfiguration clientConfiguration = beanContext.getBean(OauthClientConfiguration.class, Qualifiers.byName(name));
Optional<ClientCredentialsHeaderTokenPropagatorConfiguration> headerTokenConfiguration = clientConfiguration.getClientCredentials().flatMap(ClientCredentialsConfiguration::getHeaderPropagation);
if (headerTokenConfiguration.isPresent()) {
if (headerTokenConfiguration.get().isEnabled()) {
return true;
} else {
context.fail("Client credentials header token handler is disabled");
return false;
}
} else {
context.fail("Client credentials header token handler disabled due to a lack of configuration");
return false;
}
}
}
return true;
}
use of io.micronaut.core.annotation.AnnotationMetadataProvider in project micronaut-security by micronaut-projects.
the class OauthClientCondition method matches.
@Override
public boolean matches(ConditionContext context) {
AnnotationMetadataProvider component = context.getComponent();
BeanContext beanContext = context.getBeanContext();
if (beanContext instanceof ApplicationContext && component instanceof ValueResolver) {
Optional<String> optional = ((ValueResolver) component).get(Named.class.getName(), String.class);
if (optional.isPresent()) {
String name = optional.get();
OauthClientConfiguration clientConfiguration = beanContext.getBean(OauthClientConfiguration.class, Qualifiers.byName(name));
String failureMsgPrefix = "Skipped client creation for provider [" + name;
if (clientConfiguration.isEnabled()) {
if (clientConfiguration.getAuthorization().flatMap(EndpointConfiguration::getUrl).isPresent()) {
if (clientConfiguration.getToken().flatMap(EndpointConfiguration::getUrl).isPresent()) {
if (clientConfiguration.getGrantType() == GrantType.AUTHORIZATION_CODE) {
return true;
} else {
context.fail(failureMsgPrefix + "] because grant type is not authorization code");
}
} else {
context.fail(failureMsgPrefix + "] because no token endpoint is configured");
}
} else {
context.fail(failureMsgPrefix + "] because no authorization endpoint is configured");
}
} else {
context.fail(failureMsgPrefix + "] because the configuration is disabled");
}
return false;
}
}
return true;
}
use of io.micronaut.core.annotation.AnnotationMetadataProvider in project micronaut-security by micronaut-projects.
the class ClientCredentialsEnabled method matches.
@Override
public boolean matches(ConditionContext context) {
AnnotationMetadataProvider component = context.getComponent();
BeanContext beanContext = context.getBeanContext();
if (beanContext instanceof ApplicationContext && component instanceof ValueResolver) {
Optional<String> optional = ((ValueResolver) component).get(Named.class.getName(), String.class);
if (optional.isPresent()) {
String name = optional.get();
OauthClientConfiguration clientConfiguration = beanContext.getBean(OauthClientConfiguration.class, Qualifiers.byName(name));
String failureMessage = "Client credentials is disabled for the client [" + name + "]";
if (clientConfiguration.isEnabled()) {
Optional<ClientCredentialsConfiguration> clientCredentialsConfiguration = clientConfiguration.getClientCredentials();
if (!clientCredentialsConfiguration.isPresent() || clientCredentialsConfiguration.get().isEnabled()) {
return true;
} else {
context.fail(failureMessage);
return false;
}
} else {
context.fail(failureMessage);
return false;
}
}
}
return true;
}
use of io.micronaut.core.annotation.AnnotationMetadataProvider in project micronaut-security by micronaut-projects.
the class PasswordGrantCondition method matches.
@Override
public boolean matches(ConditionContext context) {
AnnotationMetadataProvider component = context.getComponent();
BeanContext beanContext = context.getBeanContext();
if (beanContext instanceof ApplicationContext && component instanceof ValueResolver) {
Optional<String> optional = ((ValueResolver) component).get(Named.class.getName(), String.class);
if (optional.isPresent()) {
String name = optional.get();
OauthClientConfiguration clientConfiguration = beanContext.getBean(OauthClientConfiguration.class, Qualifiers.byName(name));
String failureMsgPrefix = "Skipped password grant flow for provider [" + name;
if (clientConfiguration.isEnabled()) {
if (clientConfiguration.getGrantType() == GrantType.PASSWORD) {
if (clientConfiguration.getToken().isPresent()) {
if (beanContext.containsBean(OauthAuthenticationMapper.class, Qualifiers.byName(name))) {
return true;
} else {
context.fail(failureMsgPrefix + "] because no user details mapper could be found");
}
} else if (clientConfiguration.getOpenid().isPresent()) {
boolean hasOpenIdProviderMetadata = beanContext.containsBean(OpenIdProviderMetadata.class, Qualifiers.byName(name));
boolean hasTokenResponseValidator = beanContext.containsBean(OpenIdTokenResponseValidator.class);
if (hasOpenIdProviderMetadata && hasTokenResponseValidator) {
boolean hasAuthenticationMapper = beanContext.containsBean(OpenIdAuthenticationMapper.class, Qualifiers.byName(name));
if (!hasAuthenticationMapper) {
hasAuthenticationMapper = beanContext.containsBean(DefaultOpenIdAuthenticationMapper.class);
}
if (hasAuthenticationMapper) {
return true;
} else {
context.fail(failureMsgPrefix + "] because no user details mapper could be found");
}
} else {
context.fail(failureMsgPrefix + "] because no provider metadata and token validator could be found");
}
} else {
context.fail(failureMsgPrefix + "] because no token endpoint or openid configuration was found");
}
} else {
context.fail(failureMsgPrefix + "] because the grant type is not 'password'");
}
} else {
context.fail(failureMsgPrefix + "] because the configuration is disabled");
}
return false;
}
}
return true;
}
use of io.micronaut.core.annotation.AnnotationMetadataProvider in project micronaut-security by micronaut-projects.
the class OpenIdClientCondition method matches.
@Override
public boolean matches(ConditionContext context) {
AnnotationMetadataProvider component = context.getComponent();
BeanContext beanContext = context.getBeanContext();
if (beanContext instanceof ApplicationContext && component instanceof ValueResolver) {
Optional<String> optional = ((ValueResolver) component).get(Named.class.getName(), String.class);
if (optional.isPresent()) {
String name = optional.get();
OauthClientConfiguration clientConfiguration = beanContext.getBean(OauthClientConfiguration.class, Qualifiers.byName(name));
OpenIdClientConfiguration openIdClientConfiguration = clientConfiguration.getOpenid().get();
String failureMessagePrefix = "Skipped OpenID client creation for provider [" + name;
if (clientConfiguration.isEnabled()) {
if (openIdClientConfiguration.getIssuer().isPresent() || endpointsManuallyConfigured(openIdClientConfiguration)) {
if (clientConfiguration.getGrantType() == GrantType.AUTHORIZATION_CODE) {
Optional<AuthorizationEndpointConfiguration> authorization = openIdClientConfiguration.getAuthorization();
if (!authorization.isPresent() || authorization.get().getResponseType() == ResponseType.CODE) {
return true;
} else {
context.fail(failureMessagePrefix + "] because the response type is not 'code'");
}
} else {
context.fail(failureMessagePrefix + "] because the grant type is not 'authorization-code'");
}
} else {
context.fail(failureMessagePrefix + "] because no issuer is configured");
}
} else {
context.fail(failureMessagePrefix + "] because the configuration is disabled");
}
return false;
}
}
return true;
}
Aggregations