diff --git a/.gitignore b/.gitignore
index cb561bb..fb09f47 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,4 +25,5 @@ hs_err_pid*
replay_pid*
-target/
\ No newline at end of file
+target/
+logs/
\ No newline at end of file
diff --git a/README.md b/README.md
index b030a11..42e442f 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,15 @@
+# Funcionamiento
+
+```
+compilar con ./mvnw package -Dquarkus.package.type=uber-jar
+
+ejecutar con java
+
+
+
+
+```
+
# api-menu-playa Project
This project uses Quarkus, the Supersonic Subatomic Java Framework.
@@ -60,3 +72,8 @@ If you want to learn more about building native executables, please consult http
Easily start your Reactive RESTful Web Services
[Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources)
+
+
+
+
+./mvnw package -Pnative -Dquarkus.native.container-build=true -Dquarkus.profile=prod
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d56d54f..d739550 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
4.0.0
api.menu.playa
api-menu-playa
- 1.1.1
+ 1.1.2
3.10.1
11
@@ -62,10 +62,6 @@
io.quarkus
quarkus-smallrye-jwt
-
- io.quarkus
- quarkus-smallrye-jwt-build
-
diff --git a/src/main/java/api/menu/playa/annotation/Roles.java b/src/main/java/api/menu/playa/annotation/Roles.java
new file mode 100644
index 0000000..451c002
--- /dev/null
+++ b/src/main/java/api/menu/playa/annotation/Roles.java
@@ -0,0 +1,13 @@
+package api.menu.playa.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface Roles {
+ public String[] rols();
+}
diff --git a/src/main/java/api/menu/playa/controller/LoginController.java b/src/main/java/api/menu/playa/controller/LoginController.java
index 0980e4d..de80bbc 100644
--- a/src/main/java/api/menu/playa/controller/LoginController.java
+++ b/src/main/java/api/menu/playa/controller/LoginController.java
@@ -1,17 +1,22 @@
package api.menu.playa.controller;
-import javax.annotation.security.PermitAll;
+import java.util.Collections;
+
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.eclipse.microprofile.jwt.JsonWebToken;
import org.jboss.logging.Logger;
+import org.jboss.resteasy.reactive.RestHeader;
+import api.menu.playa.enums.RolesEnum;
import api.menu.playa.exceptions.NegocioException;
import api.menu.playa.helper.LoginHelper;
import api.menu.playa.vo.RegistroVO;
@@ -30,12 +35,14 @@ public class LoginController {
@Inject
Logger logger;
+ @Inject
+ JsonWebToken jwt;
+
@Inject
LoginHelper loginHelper;
@POST
@Path("login")
- @PermitAll
public Response login(UsuarioVO request) {
try {
@@ -51,7 +58,6 @@ public class LoginController {
@POST
@Path("register")
- @PermitAll
public Response register(RegistroVO request) {
try {
@@ -68,6 +74,42 @@ public class LoginController {
}
+
+ @GET
+ @Path("token")
+ public Response token() {
+
+ try {
+
+
+ String token = loginHelper.tokenGenerator("darroyo", Collections.singleton(RolesEnum.USER), 3600L, "www.vodorod.cl");
+
+ return Response.ok(new ResponseGlobal<>(0, SUCCESS, token)).build();
+ } catch (NegocioException e) {
+ return Response.ok(new ResponseGlobal<>(e.getCode(), e.getMessage())).build();
+ } catch (Exception e) {
+ return Response.ok(new ResponseGlobal<>(1, ERROR)).build();
+ }
+
+ }
+
+ /* @GET
+ @Path("valida")
+ public Response validaToken(@RestHeader("Authorization") String token) {
+
+ try {
+
+
+ String user = loginHelper.validaToken(token);
+
+ return Response.ok(new ResponseGlobal<>(0, SUCCESS, user)).build();
+
+ } catch (Exception e) {
+ return Response.ok(new ResponseGlobal<>(1, ERROR)).build();
+ }
+
+ } */
+
private void validacionPassword(RegistroVO request) throws NegocioException {
if (request.getUser() == null || request.getUser().isEmpty()) {
diff --git a/src/main/java/api/menu/playa/controller/OrdenController.java b/src/main/java/api/menu/playa/controller/OrdenController.java
index 8a4087a..67a0efa 100644
--- a/src/main/java/api/menu/playa/controller/OrdenController.java
+++ b/src/main/java/api/menu/playa/controller/OrdenController.java
@@ -3,6 +3,8 @@ package api.menu.playa.controller;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.eclipse.microprofile.jwt.JsonWebToken;
+
import api.menu.playa.exceptions.NegocioException;
import api.menu.playa.helper.OrdenHelper;
import api.menu.playa.vo.CambioCantidadVO;
@@ -32,6 +34,8 @@ public class OrdenController {
private static final String SUCCESS = "SUCCESS";
//private static final String ERROR = "ERROR";
+
+
@Inject
OrdenHelper ordenHelper;
@@ -39,7 +43,7 @@ public class OrdenController {
* Creacion de orden
*/
- @RolesAllowed({"USER", "ADMIN"})
+ //@RolesAllowed({"USER", "ADMIN"})
@GET
@Path("/create")
public Response create() {
diff --git a/src/main/java/api/menu/playa/dao/UsuarioDAO.java b/src/main/java/api/menu/playa/dao/UsuarioDAO.java
index ebb83f0..7e0d396 100644
--- a/src/main/java/api/menu/playa/dao/UsuarioDAO.java
+++ b/src/main/java/api/menu/playa/dao/UsuarioDAO.java
@@ -10,6 +10,6 @@ import api.menu.playa.model.Usuario;
public interface UsuarioDAO extends JpaRepository {
- @Query("select u from Usuario u where u.usuario = :usuario")
- Usuario encontrarUsuario(@Param("usuario") String usuario);
+ @Query("select u from Usuario u where u.user = :usuario")
+ Optional encontrarUsuario(@Param("usuario") String usuario);
}
diff --git a/src/main/java/api/menu/playa/helper/LoginHelper.java b/src/main/java/api/menu/playa/helper/LoginHelper.java
index c1d411f..990d53b 100644
--- a/src/main/java/api/menu/playa/helper/LoginHelper.java
+++ b/src/main/java/api/menu/playa/helper/LoginHelper.java
@@ -1,15 +1,27 @@
package api.menu.playa.helper;
+import java.io.InputStream;
import java.security.Key;
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
import java.util.Collections;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
+import org.eclipse.microprofile.jwt.Claims;
+import org.eclipse.microprofile.jwt.JsonWebToken;
import org.jboss.logging.Logger;
+import org.jose4j.jwk.JsonWebKey;
+import org.jose4j.jws.JsonWebSignature;
+import org.jose4j.keys.resolvers.JwksVerificationKeyResolver;
import api.menu.playa.dao.UsuarioDAO;
import api.menu.playa.enums.RolesEnum;
@@ -18,6 +30,9 @@ import api.menu.playa.model.Usuario;
import api.menu.playa.util.TokenUtils;
import api.menu.playa.vo.RegistroVO;
import api.menu.playa.vo.UsuarioVO;
+import io.smallrye.jwt.auth.principal.DefaultJWTParser;
+import io.smallrye.jwt.build.Jwt;
+import io.smallrye.jwt.build.JwtSignature;
@ApplicationScoped
public class LoginHelper {
@@ -28,18 +43,21 @@ public class LoginHelper {
@Inject
UsuarioDAO usuarioDAO;
+ @Inject
+ TokenService tokenService;
+
public void registrarUsuario(RegistroVO request) throws Exception {
- Usuario user = usuarioDAO.encontrarUsuario(request.getUser());
+ Optional user = usuarioDAO.encontrarUsuario(request.getUser());
- if (user != null) {
+ if (user.isPresent()) {
throw new NegocioException("El usuario ya existe", 2);
}
Usuario usuario = new Usuario();
usuario.setActivo(false);
- usuario.setUsuario(request.getUser());
+ usuario.setUser(request.getUser());
usuario.setPass(encript(request.getPass()));
usuario.setRol(RolesEnum.USER);
usuario.setNombre(request.getUser());
@@ -49,12 +67,12 @@ public class LoginHelper {
public String validarUsuario(UsuarioVO request) throws Exception {
- Usuario user = usuarioDAO.encontrarUsuario(request.getUser());
+ Optional user = usuarioDAO.encontrarUsuario(request.getUser());
logger.info("Usuario");
logger.info(user);
- if (user == null) {
+ if (user.isEmpty()) {
throw new NegocioException("Usuario no existe en el sistema", 2);
}
@@ -63,19 +81,22 @@ public class LoginHelper {
logger.info("Password encriptado");
logger.info(password);
- if (!user.getActivo()) {
+ if (Boolean.FALSE.equals(user.get().getActivo())) {
throw new NegocioException("Usuario no se encuentra activo", 2);
}
- if (!password.equals(user.getPass())) {
+ if (!password.equals(user.get().getPass())) {
throw new NegocioException("Usuario o contraseƱa es incorrecto", 2);
}
- String token = TokenUtils.generateToken(user.getUsuario(), Collections.singleton(user.getRol()), 36000L, "https://vodorod.cl");
+ return tokenService.generate(user.get().getNombre(), user.get().getUser(), user.get().getFecha(), user.get().getRol());
+ //return TokenUtils.generateToken(user.get().getUser(), Collections.singleton(user.get().getRol()), 36000L, "https://vodorod.cl");
+
+
- //String token = tokenGenerator(user);
- return token;
+
+ //return tokenGenerator(user.get().getUser(), Collections.singleton(user.get().getRol()), 36000L, "https://vodorod.cl");
}
private static String ENCRYPT_KEY = "clave-compartida-no-reveloar-nun";
@@ -108,4 +129,21 @@ public class LoginHelper {
long currentTimeMS = System.currentTimeMillis();
return (int) (currentTimeMS / 1000);
}
+
+ public String tokenGenerator(String username, Set roles, Long duration, String issuer) throws Exception {
+
+ Set groups = new HashSet<>();
+ for (RolesEnum role : roles) groups.add(role.toString());
+
+ return Jwt.claims()
+ .issuer(issuer)
+ .issuedAt(currentTimeInSecs())
+ .expiresAt(currentTimeInSecs() + duration)
+ .groups(groups)
+ .claim("nombre", username).jws()
+ .signWithSecret("issuer11111111111111111111111111");
+ }
+
+
+
}
diff --git a/src/main/java/api/menu/playa/helper/TokenService.java b/src/main/java/api/menu/playa/helper/TokenService.java
new file mode 100644
index 0000000..8f9ca6f
--- /dev/null
+++ b/src/main/java/api/menu/playa/helper/TokenService.java
@@ -0,0 +1,43 @@
+package api.menu.playa.helper;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+
+import javax.enterprise.context.RequestScoped;
+
+import org.eclipse.microprofile.jwt.Claims;
+import org.jose4j.jwt.JwtClaims;
+
+import api.menu.playa.enums.RolesEnum;
+import api.menu.playa.util.TokenUtils;
+
+@RequestScoped
+public class TokenService {
+
+ public String generate(String nombre, String username, LocalDateTime birthdate, RolesEnum rol) {
+ try {
+ System.out.println("creating account");
+
+ JwtClaims jwtClaims = new JwtClaims();
+ jwtClaims.setIssuer("https://vodorod.cl");
+ jwtClaims.setJwtId("a-123");
+ jwtClaims.setSubject(nombre);
+ jwtClaims.setClaim(Claims.upn.name(), nombre);
+ jwtClaims.setClaim(Claims.preferred_username.name(), username);
+ jwtClaims.setClaim(Claims.birthdate.name(), birthdate);
+ jwtClaims.setClaim(Claims.groups.name(), Arrays.asList(rol));
+ jwtClaims.setAudience("using-jwt");
+ jwtClaims.setExpirationTimeMinutesInTheFuture(720);
+
+ String token = TokenUtils.generateTokenString(jwtClaims);
+
+ System.out.println(token);
+
+ return token;
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("Oops!");
+ }
+
+ }
+}
diff --git a/src/main/java/api/menu/playa/model/Usuario.java b/src/main/java/api/menu/playa/model/Usuario.java
index d12a19e..f503b6d 100644
--- a/src/main/java/api/menu/playa/model/Usuario.java
+++ b/src/main/java/api/menu/playa/model/Usuario.java
@@ -25,7 +25,7 @@ public class Usuario {
private Long id;
@Column(name = "usuario", unique = true)
- private String usuario;
+ private String user;
@Column(name = "pass")
private String pass;
@@ -60,14 +60,6 @@ public class Usuario {
this.pass = pass;
}
- public String getUsuario() {
- return usuario;
- }
-
- public void setUsuario(String usuario) {
- this.usuario = usuario;
- }
-
public RolesEnum getRol() {
return rol;
}
@@ -100,5 +92,13 @@ public class Usuario {
this.nombre = nombre;
}
+ public String getUser() {
+ return user;
+ }
+
+ public void setUser(String user) {
+ this.user = user;
+ }
+
}
diff --git a/src/main/java/api/menu/playa/util/TokenUtils.java b/src/main/java/api/menu/playa/util/TokenUtils.java
index 14d6e19..f2feadd 100644
--- a/src/main/java/api/menu/playa/util/TokenUtils.java
+++ b/src/main/java/api/menu/playa/util/TokenUtils.java
@@ -5,45 +5,78 @@ import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.Map;
import javax.enterprise.context.ApplicationScoped;
-import api.menu.playa.enums.RolesEnum;
-import io.smallrye.jwt.build.Jwt;
-import io.smallrye.jwt.build.JwtClaimsBuilder;
+import org.eclipse.microprofile.config.ConfigProvider;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+import org.eclipse.microprofile.jwt.Claims;
+import org.jose4j.jws.AlgorithmIdentifiers;
+import org.jose4j.jws.JsonWebSignature;
+import org.jose4j.jwt.JwtClaims;
+import org.jose4j.jwt.NumericDate;
@ApplicationScoped
public class TokenUtils {
- public static String generateToken(String username, Set roles, Long duration, String issuer) throws Exception {
- String privateKeyLocation = "/privatekey.pem";
- PrivateKey privateKey = readPrivateKey(privateKeyLocation);
-
- JwtClaimsBuilder claimsBuilder = Jwt.claims();
+ //@ConfigProperty(name = "config.private.key")
+ private static String privateKey = ConfigProvider.getConfig().getValue("config.private.key",String.class);;
+
+ private TokenUtils() {
+ }
+
+ public static String generateTokenString(JwtClaims claims) throws Exception {
+ // Use the private key associated with the public key for a valid signature
+ PrivateKey pk = readPrivateKey(privateKey);
+
+ return generateTokenString(pk, privateKey, claims);
+ }
+
+ private static String generateTokenString(PrivateKey privateKey, String kid, JwtClaims claims) throws Exception {
+
long currentTimeInSecs = currentTimeInSecs();
-
- Set groups = new HashSet<>();
- for (RolesEnum role : roles) groups.add(role.toString());
- claimsBuilder.issuer(issuer);
- claimsBuilder.subject(username);
- claimsBuilder.issuedAt(currentTimeInSecs);
- claimsBuilder.expiresAt(currentTimeInSecs + duration);
- claimsBuilder.groups(groups);
+ claims.setIssuedAt(NumericDate.fromSeconds(currentTimeInSecs));
+ claims.setClaim(Claims.auth_time.name(), NumericDate.fromSeconds(currentTimeInSecs));
+
+ for (Map.Entry entry : claims.getClaimsMap().entrySet()) {
+ System.out.printf("\tAdded claim: %s, value: %s\n", entry.getKey(), entry.getValue());
+ }
+
+ JsonWebSignature jws = new JsonWebSignature();
+ jws.setPayload(claims.toJson());
+ jws.setKey(privateKey);
+ jws.setKeyIdHeaderValue(kid);
+ jws.setHeader("typ", "JWT");
+ jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
- return claimsBuilder.jws().keyId(privateKeyLocation).sign(privateKey);
+
+
+ return jws.getCompactSerialization();
}
+ /**
+ * Read a PEM encoded private key from the classpath
+ *
+ * @param pemResName - key file resource name
+ * @return PrivateKey
+ * @throws Exception on decode failure
+ */
public static PrivateKey readPrivateKey(final String pemResName) throws Exception {
- try (InputStream contentIS = TokenUtils.class.getResourceAsStream(pemResName)) {
- byte[] tmp = new byte[4096];
- int length = contentIS.read(tmp);
- return decodePrivateKey(new String(tmp, 0, length, "UTF-8"));
- }
+ InputStream contentIS = TokenUtils.class.getResourceAsStream(pemResName);
+ byte[] tmp = new byte[4096];
+ int length = contentIS.read(tmp);
+ return decodePrivateKey(new String(tmp, 0, length, "UTF-8"));
}
+ /**
+ * Decode a PEM encoded private key string to an RSA PrivateKey
+ *
+ * @param pemEncoded - PEM string for private key
+ * @return PrivateKey
+ * @throws Exception on decode failure
+ */
public static PrivateKey decodePrivateKey(final String pemEncoded) throws Exception {
byte[] encodedBytes = toEncodedBytes(pemEncoded);
@@ -52,12 +85,12 @@ public class TokenUtils {
return kf.generatePrivate(keySpec);
}
- public static byte[] toEncodedBytes(final String pemEncoded) {
+ private static byte[] toEncodedBytes(final String pemEncoded) {
final String normalizedPem = removeBeginEnd(pemEncoded);
return Base64.getDecoder().decode(normalizedPem);
}
- public static String removeBeginEnd(String pem) {
+ private static String removeBeginEnd(String pem) {
pem = pem.replaceAll("-----BEGIN (.*)-----", "");
pem = pem.replaceAll("-----END (.*)----", "");
pem = pem.replaceAll("\r\n", "");
@@ -65,6 +98,9 @@ public class TokenUtils {
return pem.trim();
}
+ /**
+ * @return the current time in seconds since epoch
+ */
public static int currentTimeInSecs() {
long currentTimeMS = System.currentTimeMillis();
return (int) (currentTimeMS / 1000);
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 8a433e8..2a2fae1 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -9,14 +9,18 @@ quarkus.http.host=0.0.0.0
quarkus.datasource.username=postgres
quarkus.datasource.password=13467982
-quarkus.datasource.jdbc.url=jdbc:postgresql://192.168.1.17:5432/postgres?currentSchema=playa
+quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres?currentSchema=playa
+#quarkus.datasource.jdbc.url=jdbc:postgresql://192.168.1.17:5432/postgres?currentSchema=playa
quarkus.datasource.users.jdbc.max-size=11
quarkus.datasource.jdbc.idle-removal-interval= 10
quarkus.datasource.inventory.jdbc.max-size=12
quarkus.hibernate-orm.database.generation=update
-mp.jwt.verify.publickey.location=publickey.pem
+
+config.private.key=/privateKey.pem
+mp.jwt.verify.publickey.location=publicKey.pem
mp.jwt.verify.issuer=https://vodorod.cl
+
quarkus.smallrye-jwt.enabled=true
quarkus.log.file.enable=true
@@ -32,4 +36,8 @@ quarkus.log.file.rotation.max-backup-index=30
%prod.quarkus.datasource.username=playa_tienda
%prod.quarkus.datasource.password=ED8eqKY5ZyQAH9px
-%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres?currentSchema=playa
\ No newline at end of file
+%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres?currentSchema=playa
+
+# %prod.config.private.key=file://${CONFIG_PUBLIC_KEY:/api/tienda-playa/privateKey.pem}
+# %prod.mp.jwt.verify.publickey.location=file://${CONFIG_PRIVATE_KEY:publicKey.pem}
+# %prod.mp.jwt.verify.issuer=https://vodorod.cl
\ No newline at end of file
diff --git a/src/main/resources/privatekey.pem b/src/main/resources/privatekey.pem
index 266ec8a..1eac946 100644
--- a/src/main/resources/privatekey.pem
+++ b/src/main/resources/privatekey.pem
@@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
-MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8NiwFmUjkYToz
-awPKjJzGzucjskI7tZbo274EGescwsQL+W8AyE+0nyF8IPHeSJhcU+VXBS3qvxh9
-QXJb2mG98LVnkoZKxQgDmpVzkN/2MzCIRDkgyBZ8sOcZ4Oj8gkuI5s/qxwwD/d5W
-0RsR4sgGCX9SZwiTdWapZDdM1xpGPAegmh9+atvNVZHj/6+h+jSHTDrgqGRiYQg7
-+YN7RfQwBaY6loMcrrIN2Ymzo7e2j4i9K6MRZhuCanziW30TTDk6has6wKVA+qr4
-Czu/w4xmH59yJZyH+6WFSrzmxsDaoD01OLOSMnjrrfnjfZz2gxGgwlNd/cxymgEN
-/ZhfbXYXAgMBAAECggEAUS8YzA1ziLd7sGQvzXXbxlHHF/mzYigRAT6P9xrq9Iv6
-nqOoQvEkmGevvOhFDDnKJsE1gtTEGqb1PEo3tvE7CgBDb3qfnK7ipxNN9fx+7qbj
-/1NWRRKpyH1SIjKGrSzSwim1c7MKNsqR1mb6QzvMRfZgyj2RUHHqp5SH2ghK2BIc
-35MXkWo3o1FhXiJ3ZjiwNb/qEbe1c9oCX9DnC3UZFKKctCNqFwf1XdEqoFX+Qq2f
-Et8LIRWfBXcXjODBJpF4MBHbz5BmwIqkXwtKUfnAzQd+TxkuGpRn291A4f7DLFZy
-03+S/rFWIdqQdVsDiqInmQwa+9UFge/KZsaUBRII8QKBgQDsfOXSaOUdVXw4QbrG
-3GZ0DE/CtY4dDLqkwYnGtdAi5lGU2kSUD9NWDoe/fcgqIvU2a3tkMF74Sil6KcE5
-r/fAtFXp5/ZZqmNtUlJKpSSBE2RYEb50cDssGHsz9GxSQqKWhl1f7swtTOd5TVBk
-DswrREc9uEKY21pA/YG4/+j/vwKBgQDLvZTr2MTFtT9gUkxkxHQUY1TIpFzRzXa8
-EHG4zTXzZQloPgZC0Bd1oKBq+XVhJHhtgBSe5/naB49AykuDZFILyR4yawyG5UO1
-242yYXbtxqAwjzxEKLfJKM8qe5kUMn8H2AMRgo9f1Mc5U6qJxKAx2VrM1sAkmD4S
-ZSWy6XufqQKBgA05mtyecxml2zGGM3zFfJFG0vsPjif/uzxVem/7YO1itfM+FZG2
-JNpuK5dA4H3CwLXPYvIiZl06QIGNbjncpl1HeHqBN1yiU7ccYG++NoFlZTorm9wF
-HroDkHhCVgBvq4oBb51azF5IK7Wz5igCT9anldhUwpyrv6tcwfFnlk8fAoGBAMRS
-r2DAJYRZzXMUepaTE0PeH4Gjl+l28hXwRpUL8RPTZUg0lDXnbOOk30+Vh70OtpjV
-VYl2ATVOGYUWKcO3dLP0nYt5yb1myGNB5/1em4ot3ohMTYdkMQy+rTnDldN3gR7e
-0L4br+ppD3w3GdrdRHwkdLFzsfzRUubI3pXTFJPZAoGADkaG7jsoqTIc3ZYtZWzn
-vX1T32VQNwgSyAlutRhPKZO9KJ+zlODHyIW5akQBQevC66RrhY6A79NkdQYuicrn
-kU9uHPv8+UT8sqsteMPIXryeytRs+QVpBVvcoomyPmbzWItn/RTxnRaXoPr7IIoS
-ySryjnf3b8RX4xTt8vSj7No=
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXw6ZTo4zdwnzx
+zcVaL7Jsfjlw2JOe2vyQecNfeMG4/Wp32sjrQKtC/jclmhtDN8qY7J6Js0LhHsnQ
+se6aIKx2mSnurOSUTVsZ/szMK5Vfzncl3UbFVjrh6b5STRByJqsU8y2TT0kVguPS
+Bs0vj88DeZl8cqdYy1feHmR/BKIKKT3Co8GEYXWLdfYCSHDn0CorziYO3CMBPXrU
+cXlOxJf/5Sn75MWw63Mu1vfO0A0P7Zg8UDGOIEgPybXSzGoQZoSsydckFp5AybAN
+HBnA/b3AVNoVYXVuunYJX5+qX5TlxbTN6EXPNiUqdn1LzgA0c38DKTYTmG951nJQ
+up4RQ/jdAgMBAAECggEAODBYYVGnPp0GgsYOjgT71ysr9EpCb00iFtHO4k8FTBKa
+pmnQhwtJTmH7pIw0a1XdKeP9CWkoko29Ct87fuHhZ+VNOT3HLSPUBLoJRWZYOSIA
+f1jXtE5XeTuw96fgD4ooZYVKqiEsrDBw+eIRj0BJLeN96B3HnOUfldWeYEGpnTFT
+gCUct0BcoP39Gh4OTXbmFkG+Tyq2FyAGGcTwndM70Y0PT7wigfEZluVhTT0wCEsb
+4r1jrVIF/B6AKDTRfK2lpJfN1IWrfLZkOd5CIG/IgjMI1xcB1Ibgw170ip6XSHgr
+hQJrYvvjH2tLhbOHI0SrpiyYPGeYnaPhOXZGBMUktQKBgQD98ddGLYJA9TO1X2iA
+1vNVX5TSp11kGm2hZ4l34Opeo8vb9loeigGWYVClzugJn2Sa8+hT3s9xwraP2Yg6
+IfmOqz1uW+T5GNZLbDIu0Omrx2lRGE1W2M5pQ0jthHspA3UUo8wp2+FCOsk2c6hE
+QIKy1WmpGYT8hI0zHKGPNxAWSwKBgQDZgrN6uAnw/jKPto1QJWyYXJGTWXCoOXk8
+1OI1vJK5zjQU0NsfayNZMgnGV9PGVqxqf3sDqx7O+qTldt/QVK03AtybPHL71WjA
+cBjxH0x/+v8y+niPB8oKjNLxiwxd+nkBSO9jnPG08UpicZ+neznRQD09+TGJxOeV
++MBnDMtUdwKBgCk3cHZeeo6qfasJgj+vI62OpuwN6BWQSIzy7hf79G5J7ZOVB4l/
+YsSSpPFUhMrTCRQxVFsQheDz9oegigDNdODYIE9iMObRRi7Vr8tzcwnDgu97n0ni
+RJZHKnYKk6bTfdRMxZ1hp80FF5Vz7jKtucjm5JBiqPgHV5edJQfGqyDDAoGAenXt
+2u/3GOnlSah8E12esIGdrJo0pWIGckthOOP8sAP6qqWUWTIW6scTXcpg/1AZLrSr
+a7tSUzIm2NJ+3GpwQ4Km9feovUS//2idglQe3AdS2z7N1amLBTmYIkopIlg8/I41
+yZ25MCiRuq9CNidYvAkw8c11KJ3lzTgKC3rWl60CgYEAwjaiYuPlv9cUBOjpZzQ6
+JlmV5PIDYeTMu3p3j3sFBPXTt/CT59Z0VvF1txfH9qUTl85zMzZlsmkCbInnPtFE
+pHPL/kD0L4t2XqxiriLNGh0DqTMJcx4gTqUT6jPit8BNDqxLFhj9qtWwQXBGA0My
+gs4AsuhRpozo+xSAOVuO+Mg=
-----END PRIVATE KEY-----
diff --git a/src/main/resources/publickey.pem b/src/main/resources/publickey.pem
index b2703c0..cdefd41 100644
--- a/src/main/resources/publickey.pem
+++ b/src/main/resources/publickey.pem
@@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY-----
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvDYsBZlI5GE6M2sDyoyc
-xs7nI7JCO7WW6Nu+BBnrHMLEC/lvAMhPtJ8hfCDx3kiYXFPlVwUt6r8YfUFyW9ph
-vfC1Z5KGSsUIA5qVc5Df9jMwiEQ5IMgWfLDnGeDo/IJLiObP6scMA/3eVtEbEeLI
-Bgl/UmcIk3VmqWQ3TNcaRjwHoJoffmrbzVWR4/+vofo0h0w64KhkYmEIO/mDe0X0
-MAWmOpaDHK6yDdmJs6O3to+IvSujEWYbgmp84lt9E0w5OoWrOsClQPqq+As7v8OM
-Zh+fciWch/ulhUq85sbA2qA9NTizkjJ46635432c9oMRoMJTXf3McpoBDf2YX212
-FwIDAQAB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA18OmU6OM3cJ88c3FWi+y
+bH45cNiTntr8kHnDX3jBuP1qd9rI60CrQv43JZobQzfKmOyeibNC4R7J0LHumiCs
+dpkp7qzklE1bGf7MzCuVX853Jd1GxVY64em+Uk0QciarFPMtk09JFYLj0gbNL4/P
+A3mZfHKnWMtX3h5kfwSiCik9wqPBhGF1i3X2Akhw59AqK84mDtwjAT161HF5TsSX
+/+Up++TFsOtzLtb3ztAND+2YPFAxjiBID8m10sxqEGaErMnXJBaeQMmwDRwZwP29
+wFTaFWF1brp2CV+fql+U5cW0zehFzzYlKnZ9S84ANHN/Ayk2E5hvedZyULqeEUP4
+3QIDAQAB
-----END PUBLIC KEY-----
diff --git a/src/test/java/api/menu/playa/GreetingResourceIT.java b/src/test/java/api/menu/playa/GreetingResourceIT.java
deleted file mode 100644
index 2a9b5e3..0000000
--- a/src/test/java/api/menu/playa/GreetingResourceIT.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package api.menu.playa;
-
-import io.quarkus.test.junit.QuarkusIntegrationTest;
-
-@QuarkusIntegrationTest
-public class GreetingResourceIT extends GreetingResourceTest {
- // Execute the same tests but in packaged mode.
-}
diff --git a/src/test/java/api/menu/playa/GreetingResourceTest.java b/src/test/java/api/menu/playa/GreetingResourceTest.java
deleted file mode 100644
index 592fcae..0000000
--- a/src/test/java/api/menu/playa/GreetingResourceTest.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package api.menu.playa;
-
-import io.quarkus.test.junit.QuarkusTest;
-import org.junit.jupiter.api.Test;
-
-import static io.restassured.RestAssured.given;
-import static org.hamcrest.CoreMatchers.is;
-
-@QuarkusTest
-public class GreetingResourceTest {
-
- @Test
- public void testHelloEndpoint() {
- given()
- .when().get("/hello")
- .then()
- .statusCode(200)
- .body(is("Hello from RESTEasy Reactive"));
- }
-
-}
\ No newline at end of file