use of io.gravitee.common.http.HttpHeader in project gravitee-access-management by gravitee-io.
the class HttpUserProvider method create.
@Override
public Single<User> create(User user) {
try {
// prepare request
final HttpUsersResourceConfiguration usersResourceConfiguration = configuration.getUsersResource();
final HttpResourceConfiguration createResourceConfiguration = usersResourceConfiguration.getPaths().getCreateResource();
final String createUserURI = usersResourceConfiguration.getBaseURL() + createResourceConfiguration.getBaseURL();
final HttpMethod createUserHttpMethod = HttpMethod.valueOf(createResourceConfiguration.getHttpMethod().toString());
final List<HttpHeader> createUserHttpHeaders = createResourceConfiguration.getHttpHeaders();
final String createUserBody = createResourceConfiguration.getHttpBody();
// prepare context
AuthenticationContext authenticationContext = new SimpleAuthenticationContext();
TemplateEngine templateEngine = authenticationContext.getTemplateEngine();
// sanitize password
if (!StringUtils.isEmpty(user.getCredentials())) {
((DefaultUser) user).setCredentials(SanitizeUtils.sanitize(passwordEncoder.encode(user.getCredentials()), createUserBody, createUserHttpHeaders));
}
templateEngine.getTemplateContext().setVariable(USER_CONTEXT_KEY, user);
// process request
final Single<HttpResponse<Buffer>> requestHandler = processRequest(templateEngine, createUserURI, createUserHttpMethod, createUserHttpHeaders, createUserBody);
return requestHandler.map(httpResponse -> {
final List<HttpResponseErrorCondition> errorConditions = createResourceConfiguration.getHttpResponseErrorConditions();
Map<String, Object> userAttributes = processResponse(templateEngine, errorConditions, httpResponse);
return convert(user.getUsername(), userAttributes);
}).onErrorResumeNext(ex -> {
if (ex instanceof AbstractManagementException) {
return Single.error(ex);
}
LOGGER.error("An error has occurred while creating user {} from the remote HTTP identity provider", user.getUsername(), ex);
return Single.error(new TechnicalManagementException("An error has occurred while creating user from the remote HTTP identity provider", ex));
});
} catch (Exception ex) {
LOGGER.error("An error has occurred while creating the user {}", user.getUsername(), ex);
return Single.error(new TechnicalManagementException("An error has occurred while creating the user", ex));
}
}
use of io.gravitee.common.http.HttpHeader in project gravitee-access-management by gravitee-io.
the class HttpUserProvider method findByUser.
private Maybe<User> findByUser(HttpUsersResourceConfiguration usersResourceConfiguration, HttpResourceConfiguration readResourceConfiguration, User user) {
try {
// prepare context
AuthenticationContext authenticationContext = new SimpleAuthenticationContext();
TemplateEngine templateEngine = authenticationContext.getTemplateEngine();
templateEngine.getTemplateContext().setVariable(USER_CONTEXT_KEY, user);
// prepare request
final String readUserURI = usersResourceConfiguration.getBaseURL() + readResourceConfiguration.getBaseURL();
final HttpMethod readUserHttpMethod = HttpMethod.valueOf(readResourceConfiguration.getHttpMethod().toString());
final List<HttpHeader> readUserHttpHeaders = readResourceConfiguration.getHttpHeaders();
final String readUserBody = readResourceConfiguration.getHttpBody();
final Single<HttpResponse<Buffer>> requestHandler = processRequest(templateEngine, readUserURI, readUserHttpMethod, readUserHttpHeaders, readUserBody);
return requestHandler.toMaybe().map(httpResponse -> {
final List<HttpResponseErrorCondition> errorConditions = readResourceConfiguration.getHttpResponseErrorConditions();
Map<String, Object> userAttributes = processResponse(templateEngine, errorConditions, httpResponse);
return convert(user.getUsername(), userAttributes);
}).onErrorResumeNext(ex -> {
if (ex instanceof AbstractManagementException) {
return Maybe.error(ex);
}
LOGGER.error("An error has occurred while searching user {} from the remote HTTP identity provider", user.getUsername() != null ? user.getUsername() : user.getEmail(), ex);
return Maybe.error(new TechnicalManagementException("An error has occurred while searching user from the remote HTTP identity provider", ex));
});
} catch (Exception ex) {
LOGGER.error("An error has occurred while searching the user {}", user.getUsername() != null ? user.getUsername() : user.getEmail(), ex);
return Maybe.error(new TechnicalManagementException("An error has occurred while searching the user", ex));
}
}
use of io.gravitee.common.http.HttpHeader in project gravitee-access-management by gravitee-io.
the class HttpAuthenticationProvider method loadByUsername0.
private Maybe<User> loadByUsername0(AuthenticationContext authenticationContext, User user) {
// prepare request
final HttpAuthResourcePathsConfiguration authResourceConfiguration = configuration.getAuthenticationResource().getPaths();
if (authResourceConfiguration == null) {
return Maybe.empty();
}
if (authResourceConfiguration.getLoadPreAuthUserResource() == null) {
return Maybe.empty();
}
final HttpResourceConfiguration readResourceConfiguration = authResourceConfiguration.getLoadPreAuthUserResource();
if (readResourceConfiguration.getBaseURL() == null) {
LOGGER.warn("Missing pre-authenticated user resource base URL");
return Maybe.empty();
}
if (readResourceConfiguration.getHttpMethod() == null) {
LOGGER.warn("Missing pre-authenticated user resource HTTP method");
return Maybe.empty();
}
try {
// prepare context
TemplateEngine templateEngine = authenticationContext.getTemplateEngine();
templateEngine.getTemplateContext().setVariable(USER_CONTEXT_KEY, user);
// prepare request
final String readUserURI = readResourceConfiguration.getBaseURL();
final HttpMethod readUserHttpMethod = HttpMethod.valueOf(readResourceConfiguration.getHttpMethod().toString());
final List<HttpHeader> readUserHttpHeaders = readResourceConfiguration.getHttpHeaders();
final String readUserBody = readResourceConfiguration.getHttpBody();
final Single<HttpResponse<Buffer>> requestHandler = processRequest(templateEngine, readUserURI, readUserHttpMethod, readUserHttpHeaders, readUserBody);
return requestHandler.toMaybe().map(httpResponse -> {
final List<HttpResponseErrorCondition> errorConditions = readResourceConfiguration.getHttpResponseErrorConditions();
Map<String, Object> userAttributes = processResponse(templateEngine, errorConditions, httpResponse);
return createUser(authenticationContext, userAttributes);
}).onErrorResumeNext(ex -> {
if (ex instanceof AbstractManagementException) {
return Maybe.error(ex);
}
LOGGER.error("An error has occurred when loading pre-authenticated user {} from the remote HTTP identity provider", user.getUsername() != null ? user.getUsername() : user.getEmail(), ex);
return Maybe.error(new TechnicalManagementException("An error has occurred when loading pre-authenticated user from the remote HTTP identity provider", ex));
});
} catch (Exception ex) {
LOGGER.error("An error has occurred when loading pre-authenticated user {}", user.getUsername() != null ? user.getUsername() : user.getEmail(), ex);
return Maybe.error(new TechnicalManagementException("An error has occurred when when loading pre-authenticated user", ex));
}
}
use of io.gravitee.common.http.HttpHeader in project gravitee-access-management by gravitee-io.
the class HttpUserProviderTestConfiguration method httpIdentityProviderConfiguration.
@Bean
public HttpIdentityProviderConfiguration httpIdentityProviderConfiguration() {
HttpIdentityProviderConfiguration configuration = new HttpIdentityProviderConfiguration();
HttpResourceConfiguration createResource = new HttpResourceConfiguration();
createResource.setBaseURL("/users");
createResource.setHttpMethod(HttpMethod.POST);
HttpHeader createHttpHeader = new HttpHeader();
createHttpHeader.setName("Content-Type");
createHttpHeader.setValue("application/json");
createResource.setHttpHeaders(Collections.singletonList(createHttpHeader));
JsonObject createJsonObject = new JsonObject();
createJsonObject.put("username", "{#user.username}");
createResource.setHttpBody(createJsonObject.encode());
HttpResponseErrorCondition createErrorCondition = new HttpResponseErrorCondition();
createErrorCondition.setValue("{#usersResponse.status == 400}");
createErrorCondition.setException("io.gravitee.am.service.exception.UserAlreadyExistsException");
createResource.setHttpResponseErrorConditions(Arrays.asList(createErrorCondition));
HttpResourceConfiguration readResource = new HttpResourceConfiguration();
readResource.setBaseURL("/users?username={#user.username}");
readResource.setHttpMethod(HttpMethod.GET);
HttpResponseErrorCondition readErrorCondition = new HttpResponseErrorCondition();
readErrorCondition.setValue("{#usersResponse.status == 404}");
readErrorCondition.setException("io.gravitee.am.service.exception.UserNotFoundException");
readResource.setHttpResponseErrorConditions(Arrays.asList(readErrorCondition));
HttpResourceConfiguration readByEmailResource = new HttpResourceConfiguration();
readByEmailResource.setBaseURL("/users?email={#user.email}");
readByEmailResource.setHttpMethod(HttpMethod.GET);
HttpResponseErrorCondition readByEmailErrorCondition = new HttpResponseErrorCondition();
readByEmailErrorCondition.setValue("{#usersResponse.status == 404}");
readByEmailErrorCondition.setException("io.gravitee.am.service.exception.UserNotFoundException");
readByEmailResource.setHttpResponseErrorConditions(Arrays.asList(readByEmailErrorCondition));
HttpResourceConfiguration updateResource = new HttpResourceConfiguration();
updateResource.setBaseURL("/users/{#user.id}");
updateResource.setHttpMethod(HttpMethod.PUT);
HttpHeader updateHttpHeader = new HttpHeader();
updateHttpHeader.setName("Content-Type");
updateHttpHeader.setValue("application/json");
updateResource.setHttpHeaders(Collections.singletonList(updateHttpHeader));
JsonObject updateJsonObject = new JsonObject();
createJsonObject.put("username", "{#user.username}");
updateResource.setHttpBody(updateJsonObject.encode());
HttpResponseErrorCondition updateErrorCondition = new HttpResponseErrorCondition();
updateErrorCondition.setValue("{#usersResponse.status == 404}");
updateErrorCondition.setException("io.gravitee.am.service.exception.UserNotFoundException");
updateResource.setHttpResponseErrorConditions(Arrays.asList(updateErrorCondition));
HttpResourceConfiguration deleteResource = new HttpResourceConfiguration();
deleteResource.setBaseURL("/users/{#user.id}");
deleteResource.setHttpMethod(HttpMethod.DELETE);
HttpResponseErrorCondition deleteErrorCondition = new HttpResponseErrorCondition();
deleteErrorCondition.setValue("{#usersResponse.status == 404}");
deleteErrorCondition.setException("io.gravitee.am.service.exception.UserNotFoundException");
deleteResource.setHttpResponseErrorConditions(Arrays.asList(deleteErrorCondition));
HttpUsersResourceConfiguration usersResourceConfiguration = new HttpUsersResourceConfiguration();
usersResourceConfiguration.setBaseURL("http://localhost:19998/api");
usersResourceConfiguration.setIdentifierAttribute("id");
HttpUsersResourcePathsConfiguration pathsConfiguration = new HttpUsersResourcePathsConfiguration();
pathsConfiguration.setCreateResource(createResource);
pathsConfiguration.setReadResource(readResource);
pathsConfiguration.setReadResourceByEmail(readByEmailResource);
pathsConfiguration.setUpdateResource(updateResource);
pathsConfiguration.setDeleteResource(deleteResource);
usersResourceConfiguration.setPaths(pathsConfiguration);
configuration.setUsersResource(usersResourceConfiguration);
return configuration;
}
use of io.gravitee.common.http.HttpHeader in project gravitee-api-management by gravitee-io.
the class AlertMapper method createAlertWebhookNotifications.
private List<Notification> createAlertWebhookNotifications(AlertInput alertInput) {
if (alertInput.getWebhook() != null) {
try {
WebhookNotifierConfiguration webhookConfig = new WebhookNotifierConfiguration(alertInput.getWebhook().getHttpMethod().getValue(), alertInput.getWebhook().getUrl().strip());
if (alertInput.getWebhook().getHttpMethod() == HttpMethod.PUT || alertInput.getWebhook().getHttpMethod() == HttpMethod.POST || alertInput.getWebhook().getHttpMethod() == HttpMethod.PATCH) {
webhookConfig.getHeaders().add(new HttpHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON));
webhookConfig.setBody(objectMapper.writeValueAsString(alertInput));
}
Notification webhookNotification = new Notification();
webhookNotification.setType(DEFAULT_WEBHOOK_NOTIFIER);
webhookNotification.setConfiguration(objectMapper.writeValueAsString(webhookConfig));
return List.of(webhookNotification);
} catch (JsonProcessingException e) {
LOGGER.error("Failed to convert AlertWebhook to List<Notification>", e);
}
}
return Collections.emptyList();
}
Aggregations