Compare commits
6 Commits
f372cbe8ab
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18c2f0f00b | ||
|
|
3a194f2616 | ||
|
|
2611ab62d5 | ||
|
|
748feabf24 | ||
|
|
14ea92dab9 | ||
|
|
92847e87aa |
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>backlib</artifactId>
|
<artifactId>backlib</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>23</maven.compiler.source>
|
<maven.compiler.source>23</maven.compiler.source>
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ import net.miarma.api.backlib.util.JsonUtil;
|
|||||||
* Maneja extracción de JWT y verificación básica.
|
* Maneja extracción de JWT y verificación básica.
|
||||||
* Los microservicios solo implementan getUserEntity y hasPermission.
|
* Los microservicios solo implementan getUserEntity y hasPermission.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked") // arreglar el warning de heap pollution de los arrays de genéricos
|
@SuppressWarnings("unchecked")
|
||||||
public abstract class AbstractAuthGuard<U, R extends Enum<R> & IUserRole> {
|
public abstract class AbstractAuthGuard<U, R extends Enum<R> & IUserRole> {
|
||||||
|
|
||||||
protected abstract R parseRole(String roleStr);
|
protected abstract R parseRole(String roleStr);
|
||||||
protected abstract void getUserEntity(int userId, RoutingContext ctx, Consumer<U> callback);
|
protected abstract void getUserEntity(int userId, RoutingContext ctx, Consumer<U> callback);
|
||||||
protected abstract boolean hasPermission(U user, R role, R... allowedRoles);
|
protected abstract boolean hasPermission(U user, R role);
|
||||||
|
|
||||||
public Handler<RoutingContext> check(R... allowedRoles) {
|
public Handler<RoutingContext> check(R... allowedRoles) {
|
||||||
return ctx -> {
|
return ctx -> {
|
||||||
@@ -30,6 +30,18 @@ public abstract class AbstractAuthGuard<U, R extends Enum<R> & IUserRole> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int userId = JWTManager.getInstance().extractUserId(token);
|
int userId = JWTManager.getInstance().extractUserId(token);
|
||||||
|
String roleStr = JWTManager.getInstance().extractRole(token);
|
||||||
|
|
||||||
|
R role;
|
||||||
|
try {
|
||||||
|
role = parseRole(roleStr);
|
||||||
|
} catch (Exception e) {
|
||||||
|
JsonUtil.sendJson(ctx, ApiStatus.UNAUTHORIZED, "Invalid role");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.put("userId", userId);
|
||||||
|
ctx.put("role", role);
|
||||||
|
|
||||||
getUserEntity(userId, ctx, entity -> {
|
getUserEntity(userId, ctx, entity -> {
|
||||||
if (entity == null) {
|
if (entity == null) {
|
||||||
@@ -37,9 +49,7 @@ public abstract class AbstractAuthGuard<U, R extends Enum<R> & IUserRole> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
R userRole = extractRoleFromEntity(entity);
|
if (allowedRoles.length == 0 || isRoleAllowed(role, allowedRoles)) {
|
||||||
|
|
||||||
if (allowedRoles.length == 0 || hasPermission(entity, userRole, allowedRoles)) {
|
|
||||||
ctx.put("userEntity", entity);
|
ctx.put("userEntity", entity);
|
||||||
ctx.next();
|
ctx.next();
|
||||||
} else {
|
} else {
|
||||||
@@ -49,15 +59,11 @@ public abstract class AbstractAuthGuard<U, R extends Enum<R> & IUserRole> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
protected R extractRoleFromEntity(U user) {
|
protected boolean isRoleAllowed(R role, R... allowedRoles) {
|
||||||
try {
|
for (R allowed : allowedRoles) if (role == allowed) return true; return false;
|
||||||
return (R) user.getClass().getMethod("getRole").invoke(user);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String extractToken(RoutingContext ctx) {
|
protected String extractToken(RoutingContext ctx) {
|
||||||
String authHeader = ctx.request().getHeader("Authorization");
|
String authHeader = ctx.request().getHeader("Authorization");
|
||||||
if (authHeader != null && authHeader.startsWith("Bearer ")) {
|
if (authHeader != null && authHeader.startsWith("Bearer ")) {
|
||||||
return authHeader.substring(7);
|
return authHeader.substring(7);
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>miarma-backend</artifactId>
|
<artifactId>miarma-ecosystem</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>bootstrap</artifactId>
|
<artifactId>bootstrap</artifactId>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>core</artifactId>
|
<artifactId>core</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>23</maven.compiler.source>
|
<maven.compiler.source>23</maven.compiler.source>
|
||||||
@@ -20,9 +20,8 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>backlib</artifactId>
|
<artifactId>backlib</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|||||||
@@ -29,10 +29,8 @@ public class CoreAuthGuard extends AbstractAuthGuard<UserEntity, CoreUserRole> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean hasPermission(UserEntity member, CoreUserRole userRole, CoreUserRole... allowedRoles) {
|
protected boolean hasPermission(UserEntity user, CoreUserRole userRole) {
|
||||||
if (member == null) return false;
|
return user.getGlobal_role() == CoreUserRole.ADMIN;
|
||||||
if (member.getGlobal_role() == CoreUserRole.ADMIN) return true;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>huertos</artifactId>
|
<artifactId>huertos</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>23</maven.compiler.source>
|
<maven.compiler.source>23</maven.compiler.source>
|
||||||
@@ -20,8 +20,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>backlib</artifactId>
|
<artifactId>backlib</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,18 @@ package net.miarma.api.microservices.huertos.routing.middlewares;
|
|||||||
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import io.vertx.core.Handler;
|
||||||
import io.vertx.ext.web.RoutingContext;
|
import io.vertx.ext.web.RoutingContext;
|
||||||
import net.miarma.api.backlib.Constants.HuertosUserRole;
|
import net.miarma.api.backlib.Constants.HuertosUserRole;
|
||||||
|
import net.miarma.api.backlib.http.ApiStatus;
|
||||||
import net.miarma.api.backlib.middlewares.AbstractAuthGuard;
|
import net.miarma.api.backlib.middlewares.AbstractAuthGuard;
|
||||||
|
import net.miarma.api.backlib.security.JWTManager;
|
||||||
|
import net.miarma.api.backlib.util.JsonUtil;
|
||||||
import net.miarma.api.microservices.huertos.entities.MemberEntity;
|
import net.miarma.api.microservices.huertos.entities.MemberEntity;
|
||||||
import net.miarma.api.microservices.huertos.services.MemberService;
|
import net.miarma.api.microservices.huertos.services.MemberService;
|
||||||
|
|
||||||
public class HuertosAuthGuard extends AbstractAuthGuard<MemberEntity, HuertosUserRole> {
|
public class HuertosAuthGuard extends AbstractAuthGuard<MemberEntity, HuertosUserRole> {
|
||||||
|
|
||||||
private final MemberService memberService;
|
private final MemberService memberService;
|
||||||
|
|
||||||
public HuertosAuthGuard(MemberService memberService) {
|
public HuertosAuthGuard(MemberService memberService) {
|
||||||
@@ -29,13 +34,43 @@ public class HuertosAuthGuard extends AbstractAuthGuard<MemberEntity, HuertosUse
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean hasPermission(MemberEntity member, HuertosUserRole userRole, HuertosUserRole... allowedRoles) {
|
protected boolean hasPermission(MemberEntity member, HuertosUserRole userRole) {
|
||||||
if (member == null) return false;
|
return member.getRole() == HuertosUserRole.ADMIN;
|
||||||
if (member.getRole() == HuertosUserRole.ADMIN || member.getRole() == HuertosUserRole.DEV) return true;
|
|
||||||
for (HuertosUserRole role : allowedRoles) {
|
|
||||||
if (member.getRole() == role) return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
@Override
|
||||||
|
public Handler<RoutingContext> check(HuertosUserRole... allowedRoles) {
|
||||||
|
return ctx -> {
|
||||||
|
String token = extractToken(ctx);
|
||||||
|
if (token == null || !JWTManager.getInstance().isValid(token)) {
|
||||||
|
JsonUtil.sendJson(ctx, ApiStatus.UNAUTHORIZED, "Invalid or missing token");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int userId = JWTManager.getInstance().extractUserId(token);
|
||||||
|
|
||||||
|
getUserEntity(userId, ctx, member -> {
|
||||||
|
if (member == null) {
|
||||||
|
JsonUtil.sendJson(ctx, ApiStatus.UNAUTHORIZED, "User not found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
HuertosUserRole role = HuertosUserRole.USER;
|
||||||
|
if (member.getRole() != null) {
|
||||||
|
role = member.getRole();
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.put("userId", userId);
|
||||||
|
ctx.put("role", role);
|
||||||
|
ctx.put("userEntity", member);
|
||||||
|
|
||||||
|
if (allowedRoles.length == 0 || isRoleAllowed(role, allowedRoles)) {
|
||||||
|
ctx.next();
|
||||||
|
} else {
|
||||||
|
JsonUtil.sendJson(ctx, ApiStatus.FORBIDDEN, "Forbidden");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>huertosdecine</artifactId>
|
<artifactId>huertosdecine</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>23</maven.compiler.source>
|
<maven.compiler.source>23</maven.compiler.source>
|
||||||
@@ -20,8 +20,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>backlib</artifactId>
|
<artifactId>backlib</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,8 @@ public class CineAuthGuard extends AbstractAuthGuard<ViewerEntity, CineUserRole>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean hasPermission(ViewerEntity member, CineUserRole userRole, CineUserRole... allowedRoles) {
|
protected boolean hasPermission(ViewerEntity user, CineUserRole userRole) {
|
||||||
if (member == null) return false;
|
return user.getRole() == CineUserRole.ADMIN;
|
||||||
if (member.getRole() == CineUserRole.ADMIN) return true;
|
|
||||||
for (CineUserRole role : allowedRoles) {
|
|
||||||
if (member.getRole() == role) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>miarmacraft</artifactId>
|
<artifactId>miarmacraft</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>23</maven.compiler.source>
|
<maven.compiler.source>23</maven.compiler.source>
|
||||||
@@ -20,8 +20,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>backlib</artifactId>
|
<artifactId>backlib</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -29,13 +29,8 @@ public class MMCAuthGuard extends AbstractAuthGuard<PlayerEntity, MMCUserRole> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean hasPermission(PlayerEntity member, MMCUserRole userRole, MMCUserRole... allowedRoles) {
|
protected boolean hasPermission(PlayerEntity user, MMCUserRole userRole) {
|
||||||
if (member == null) return false;
|
return user.getRole() == MMCUserRole.ADMIN;
|
||||||
if (member.getRole() == MMCUserRole.ADMIN) return true;
|
|
||||||
for (MMCUserRole role : allowedRoles) {
|
|
||||||
if (member.getRole() == role) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>mpaste</artifactId>
|
<artifactId>mpaste</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>23</maven.compiler.source>
|
<maven.compiler.source>23</maven.compiler.source>
|
||||||
@@ -20,8 +20,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>backlib</artifactId>
|
<artifactId>backlib</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
4
pom.xml
4
pom.xml
@@ -4,8 +4,8 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>net.miarma.api</groupId>
|
<groupId>net.miarma.api</groupId>
|
||||||
<artifactId>miarma-backend</artifactId>
|
<artifactId>miarma-ecosystem</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.1</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
|||||||
Reference in New Issue
Block a user