use of oap.http.HttpResponse in project oap by oaplatform.
the class Login2WS method login.
private HttpResponse login(Optional<Token2> optionalToken) {
if (optionalToken.isPresent()) {
final Token2 token = optionalToken.get();
final HttpResponse ok = HttpResponse.ok(token);
return withAuthorization(ok, token);
} else {
return HttpResponse.status(HTTP_UNAUTHORIZED, "Username or password is invalid");
}
}
use of oap.http.HttpResponse in project oap by oaplatform.
the class SecurityInterceptor2 method intercept.
@Override
public Optional<HttpResponse> intercept(Request request, Session session, Reflection.Method method, Function<Reflection.Parameter, Object> getParameterValueFunc) {
log.trace("intercept method={}, request={}", method, request.requestLine);
val annotation = method.findAnnotation(WsSecurity2.class).orElse(null);
if (annotation == null)
return Optional.empty();
if (session == null) {
final HttpResponse httpResponse = HttpResponse.status(500, "Session doesn't exist; check if service is session aware");
log.error(httpResponse.toString());
return Optional.of(httpResponse);
}
val sessionToken = Interceptor.getSessionToken(request);
if (sessionToken == null) {
final HttpResponse httpResponse = HttpResponse.status(401, "Session token is missing in header or cookie");
log.debug(httpResponse.toString());
return Optional.of(httpResponse);
}
var userId = (String) session.get(USER_ID).orElse(null);
if (userId == null) {
val token = tokenService.getToken(sessionToken).orElse(null);
if (token == null) {
final HttpResponse httpResponse = HttpResponse.status(401, format("Token id [%s] expired or was " + "not created", sessionToken));
log.debug(httpResponse.toString());
return Optional.of(httpResponse);
}
userId = token.userId;
session.set(USER_ID, userId);
} else {
log.trace("User [{}] found in session", userId);
}
if (!annotation.object().isEmpty() && !annotation.permission().isEmpty()) {
val objectId = getObjectId(method, annotation, getParameterValueFunc);
if (!aclService.checkOne(objectId, userId, annotation.permission())) {
val httpResponse = HttpResponse.status(403, String.format("User [%s] has no access to method [%s]", userId, method.name()));
log.debug(httpResponse.toString());
return Optional.of(httpResponse);
}
}
return Optional.empty();
}
use of oap.http.HttpResponse in project oap by oaplatform.
the class CatApiTest method testTable.
@Test
public void testTable() throws Exception {
final HttpResponse table = table(Lists.of("1", "test23"), Lists.of("bbbb", "2"));
assertString(Strings.readString(table.contentEntity.getContent())).isEqualTo("1 test23\n" + "bbbb 2 \n");
}
use of oap.http.HttpResponse in project oap by oaplatform.
the class WsService method handleInternal.
private void handleInternal(Request request, Response response, Reflection.Method method, Name name, Pair<String, Session> session) {
log.trace("{}: Internal session status: [{}]", service(), session);
Optional<WsMethod> wsMethod = method.findAnnotation(WsMethod.class);
Function<Reflection.Parameter, Object> func = (p) -> {
val ret = getValue(session, request, wsMethod, p).orElse(Optional.empty());
if (ret instanceof Optional)
return ((Optional<?>) ret).orElse(null);
return ret;
};
HttpResponse interceptorResponse = session != null ? runInterceptors(request, session._2, method, func) : null;
if (interceptorResponse != null) {
response.respond(interceptorResponse);
} else {
Metrics.measureTimer(name, () -> {
List<Reflection.Parameter> parameters = method.parameters;
LinkedHashMap<Reflection.Parameter, Object> originalValues = getOriginalValues(session, parameters, request, wsMethod);
ValidationErrors paramValidation = ValidationErrors.empty();
originalValues.forEach((parameter, value) -> paramValidation.merge(Validators.forParameter(method, parameter, impl, true).validate(value, originalValues)));
paramValidation.throwIfInvalid();
Validators.forMethod(method, impl, true).validate(originalValues.values().toArray(new Object[originalValues.size()]), originalValues).throwIfInvalid();
LinkedHashMap<Reflection.Parameter, Object> values = getValues(originalValues);
Object[] paramValues = values.values().toArray(new Object[values.size()]);
values.forEach((parameter, value) -> paramValidation.merge(Validators.forParameter(method, parameter, impl, false).validate(value, values)));
paramValidation.throwIfInvalid();
Validators.forMethod(method, impl, false).validate(paramValues, values).throwIfInvalid();
Object result = method.invoke(impl, paramValues);
Boolean isRaw = wsMethod.map(WsMethod::raw).orElse(false);
ContentType produces = wsMethod.map(wsm -> ContentType.create(wsm.produces()).withCharset(UTF_8)).orElse(APPLICATION_JSON);
String cookie = session != null ? new HttpResponse.CookieBuilder().withSID(session._1).withPath(sessionManager.cookiePath).withExpires(DateTime.now().plusMinutes(sessionManager.cookieExpiration)).withDomain(sessionManager.cookieDomain).withDomain(sessionManager.cookieDomain).build() : null;
if (method.isVoid())
response.respond(NO_CONTENT);
else if (result instanceof HttpResponse)
response.respond(((HttpResponse) result).withCookie(cookie));
else if (result instanceof Optional<?>) {
response.respond(((Optional<?>) result).map(r -> HttpResponse.ok(runPostInterceptors(r, session, method), isRaw, produces).withCookie(cookie)).orElse(NOT_FOUND));
} else if (result instanceof Result<?, ?>) {
Result<HttpResponse, HttpResponse> resp = ((Result<?, ?>) result).mapSuccess(r -> HttpResponse.ok(r, isRaw, produces).withCookie(cookie)).mapFailure(r -> HttpResponse.status(HTTP_INTERNAL_ERROR, "", r).withCookie(cookie));
response.respond(resp.isSuccess() ? ((Result<?, ?>) result).mapSuccess(r -> HttpResponse.ok(runPostInterceptors(r, session, method), isRaw, produces).withCookie(cookie)).successValue : ((Result<?, ?>) result).mapFailure(r -> HttpResponse.status(HTTP_INTERNAL_ERROR, "", r).withCookie(cookie)).failureValue);
} else if (result instanceof Stream<?>) {
response.respond(HttpResponse.stream(((Stream<?>) result).map(v -> runPostInterceptors(v, session, method)), isRaw, produces).withCookie(cookie));
} else
response.respond(HttpResponse.ok(runPostInterceptors(result, session, method), isRaw, produces).withCookie(cookie));
});
}
}
use of oap.http.HttpResponse in project oap by oaplatform.
the class SecurityInterceptorTest method testShouldVerifyUserIfPresentInSession.
@Test
public void testShouldVerifyUserIfPresentInSession() {
final Reflection.Method methodWithAnnotation = REFLECTION.method(method -> method.name().equals("methodWithAnnotation")).get();
final User user = new DefaultUser(Role.ADMIN, "org", "test@test.com");
final Session session = new Session();
session.set("user", user);
final Optional<HttpResponse> httpResponse = securityInterceptor.intercept(null, session, methodWithAnnotation, (p) -> null);
assertFalse(httpResponse.isPresent());
}
Aggregations