package com.github.aesteve.vertx.nubes.handlers.impl;
import com.github.aesteve.vertx.nubes.annotations.auth.Auth;
import com.github.aesteve.vertx.nubes.handlers.AnnotationProcessor;
import io.vertx.ext.auth.User;
import io.vertx.ext.web.RoutingContext;
public class CheckAuthorityProcessor extends NoopAfterAllProcessor implements AnnotationProcessor<Auth> {
private final Auth annotation;
public CheckAuthorityProcessor(Auth annotation) {
this.annotation = annotation;
}
@Override
public void preHandle(RoutingContext context) {
User user = context.user();
if (user == null) {
context.fail(401);
return;
}
user.isAuthorised(annotation.authority(), result -> {
if (!result.result()) {
context.fail(403);
} else {
context.next();
}
});
}
@Override
public void postHandle(RoutingContext context) {
context.next();
}
}