Compare commits

..

No commits in common. 'ab6b8546fe50af91a828735a1801df72c0c2f0aa' and 'c83acf77171970d3f8ee203970b92d416d18ee4f' have entirely different histories.

  1. 1
      .gitignore
  2. 29
      README.md
  3. 6
      pom.xml
  4. 13
      src/main/java/api/menu/playa/annotation/Roles.java
  5. 48
      src/main/java/api/menu/playa/controller/LoginController.java
  6. 6
      src/main/java/api/menu/playa/controller/OrdenController.java
  7. 4
      src/main/java/api/menu/playa/dao/UsuarioDAO.java
  8. 58
      src/main/java/api/menu/playa/helper/LoginHelper.java
  9. 43
      src/main/java/api/menu/playa/helper/TokenService.java
  10. 18
      src/main/java/api/menu/playa/model/Usuario.java
  11. 84
      src/main/java/api/menu/playa/util/TokenUtils.java
  12. 12
      src/main/resources/application.properties
  13. 52
      src/main/resources/privatekey.pem
  14. 14
      src/main/resources/publickey.pem
  15. 8
      src/test/java/api/menu/playa/GreetingResourceIT.java
  16. 21
      src/test/java/api/menu/playa/GreetingResourceTest.java

1
.gitignore vendored

@ -26,4 +26,3 @@ replay_pid*
target/ target/
logs/

@ -1,27 +1,3 @@
# Funcionamiento
```
compilar con ./mvnw package -Dquarkus.package.type=uber-jar
ejecutar con java
```
## start.sh
```
#!/bin/bash
nohup java -Xmx384m -Xss1024k -Dlog4j.configurationFile=config/log4j2.xml -jar api-menu-playa-1.1.2-runner.jar > output.log 2>&1&
#nohup ./api-menu-playa-1.1.1-runner > output.log 2>&1&
echo $! > pid
```
## stop.sh
```
#!/bin/bash
kill -9 `cat pid`
```
# api-menu-playa Project # api-menu-playa Project
This project uses Quarkus, the Supersonic Subatomic Java Framework. This project uses Quarkus, the Supersonic Subatomic Java Framework.
@ -84,8 +60,3 @@ If you want to learn more about building native executables, please consult http
Easily start your Reactive RESTful Web Services Easily start your Reactive RESTful Web Services
[Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources) [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

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>api.menu.playa</groupId> <groupId>api.menu.playa</groupId>
<artifactId>api-menu-playa</artifactId> <artifactId>api-menu-playa</artifactId>
<version>1.1.2</version> <version>1.1.1</version>
<properties> <properties>
<compiler-plugin.version>3.10.1</compiler-plugin.version> <compiler-plugin.version>3.10.1</compiler-plugin.version>
<maven.compiler.release>11</maven.compiler.release> <maven.compiler.release>11</maven.compiler.release>
@ -62,6 +62,10 @@
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-jwt</artifactId> <artifactId>quarkus-smallrye-jwt</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-jwt-build</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>

@ -1,13 +0,0 @@
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();
}

@ -1,22 +1,17 @@
package api.menu.playa.controller; package api.menu.playa.controller;
import java.util.Collections; import javax.annotation.security.PermitAll;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import org.eclipse.microprofile.jwt.JsonWebToken;
import org.jboss.logging.Logger; 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.exceptions.NegocioException;
import api.menu.playa.helper.LoginHelper; import api.menu.playa.helper.LoginHelper;
import api.menu.playa.vo.RegistroVO; import api.menu.playa.vo.RegistroVO;
@ -35,14 +30,12 @@ public class LoginController {
@Inject @Inject
Logger logger; Logger logger;
@Inject
JsonWebToken jwt;
@Inject @Inject
LoginHelper loginHelper; LoginHelper loginHelper;
@POST @POST
@Path("login") @Path("login")
@PermitAll
public Response login(UsuarioVO request) { public Response login(UsuarioVO request) {
try { try {
@ -58,6 +51,7 @@ public class LoginController {
@POST @POST
@Path("register") @Path("register")
@PermitAll
public Response register(RegistroVO request) { public Response register(RegistroVO request) {
try { try {
@ -74,42 +68,6 @@ 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 { private void validacionPassword(RegistroVO request) throws NegocioException {
if (request.getUser() == null || request.getUser().isEmpty()) { if (request.getUser() == null || request.getUser().isEmpty()) {

@ -3,8 +3,6 @@ package api.menu.playa.controller;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import org.eclipse.microprofile.jwt.JsonWebToken;
import api.menu.playa.exceptions.NegocioException; import api.menu.playa.exceptions.NegocioException;
import api.menu.playa.helper.OrdenHelper; import api.menu.playa.helper.OrdenHelper;
import api.menu.playa.vo.CambioCantidadVO; import api.menu.playa.vo.CambioCantidadVO;
@ -34,8 +32,6 @@ public class OrdenController {
private static final String SUCCESS = "SUCCESS"; private static final String SUCCESS = "SUCCESS";
//private static final String ERROR = "ERROR"; //private static final String ERROR = "ERROR";
@Inject @Inject
OrdenHelper ordenHelper; OrdenHelper ordenHelper;
@ -43,7 +39,7 @@ public class OrdenController {
* Creacion de orden * Creacion de orden
*/ */
//@RolesAllowed({"USER", "ADMIN"}) @RolesAllowed({"USER", "ADMIN"})
@GET @GET
@Path("/create") @Path("/create")
public Response create() { public Response create() {

@ -10,6 +10,6 @@ import api.menu.playa.model.Usuario;
public interface UsuarioDAO extends JpaRepository<Usuario, Long> { public interface UsuarioDAO extends JpaRepository<Usuario, Long> {
@Query("select u from Usuario u where u.user = :usuario") @Query("select u from Usuario u where u.usuario = :usuario")
Optional<Usuario> encontrarUsuario(@Param("usuario") String usuario); Usuario encontrarUsuario(@Param("usuario") String usuario);
} }

@ -1,27 +1,15 @@
package api.menu.playa.helper; package api.menu.playa.helper;
import java.io.InputStream;
import java.security.Key; import java.security.Key;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64; import java.util.Base64;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import javax.crypto.Cipher; import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject; import javax.inject.Inject;
import org.eclipse.microprofile.jwt.Claims;
import org.eclipse.microprofile.jwt.JsonWebToken;
import org.jboss.logging.Logger; 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.dao.UsuarioDAO;
import api.menu.playa.enums.RolesEnum; import api.menu.playa.enums.RolesEnum;
@ -30,9 +18,6 @@ import api.menu.playa.model.Usuario;
import api.menu.playa.util.TokenUtils; import api.menu.playa.util.TokenUtils;
import api.menu.playa.vo.RegistroVO; import api.menu.playa.vo.RegistroVO;
import api.menu.playa.vo.UsuarioVO; 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 @ApplicationScoped
public class LoginHelper { public class LoginHelper {
@ -43,21 +28,18 @@ public class LoginHelper {
@Inject @Inject
UsuarioDAO usuarioDAO; UsuarioDAO usuarioDAO;
@Inject
TokenService tokenService;
public void registrarUsuario(RegistroVO request) throws Exception { public void registrarUsuario(RegistroVO request) throws Exception {
Optional<Usuario> user = usuarioDAO.encontrarUsuario(request.getUser()); Usuario user = usuarioDAO.encontrarUsuario(request.getUser());
if (user.isPresent()) { if (user != null) {
throw new NegocioException("El usuario ya existe", 2); throw new NegocioException("El usuario ya existe", 2);
} }
Usuario usuario = new Usuario(); Usuario usuario = new Usuario();
usuario.setActivo(false); usuario.setActivo(false);
usuario.setUser(request.getUser()); usuario.setUsuario(request.getUser());
usuario.setPass(encript(request.getPass())); usuario.setPass(encript(request.getPass()));
usuario.setRol(RolesEnum.USER); usuario.setRol(RolesEnum.USER);
usuario.setNombre(request.getUser()); usuario.setNombre(request.getUser());
@ -67,12 +49,12 @@ public class LoginHelper {
public String validarUsuario(UsuarioVO request) throws Exception { public String validarUsuario(UsuarioVO request) throws Exception {
Optional<Usuario> user = usuarioDAO.encontrarUsuario(request.getUser()); Usuario user = usuarioDAO.encontrarUsuario(request.getUser());
logger.info("Usuario"); logger.info("Usuario");
logger.info(user); logger.info(user);
if (user.isEmpty()) { if (user == null) {
throw new NegocioException("Usuario no existe en el sistema", 2); throw new NegocioException("Usuario no existe en el sistema", 2);
} }
@ -81,22 +63,19 @@ public class LoginHelper {
logger.info("Password encriptado"); logger.info("Password encriptado");
logger.info(password); logger.info(password);
if (Boolean.FALSE.equals(user.get().getActivo())) { if (!user.getActivo()) {
throw new NegocioException("Usuario no se encuentra activo", 2); throw new NegocioException("Usuario no se encuentra activo", 2);
} }
if (!password.equals(user.get().getPass())) { if (!password.equals(user.getPass())) {
throw new NegocioException("Usuario o contraseña es incorrecto", 2); throw new NegocioException("Usuario o contraseña es incorrecto", 2);
} }
return tokenService.generate(user.get().getNombre(), user.get().getUser(), user.get().getFecha(), user.get().getRol()); String token = TokenUtils.generateToken(user.getUsuario(), Collections.singleton(user.getRol()), 36000L, "https://vodorod.cl");
//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"; private static String ENCRYPT_KEY = "clave-compartida-no-reveloar-nun";
@ -129,21 +108,4 @@ public class LoginHelper {
long currentTimeMS = System.currentTimeMillis(); long currentTimeMS = System.currentTimeMillis();
return (int) (currentTimeMS / 1000); return (int) (currentTimeMS / 1000);
} }
public String tokenGenerator(String username, Set<RolesEnum> roles, Long duration, String issuer) throws Exception {
Set<String> 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");
}
} }

@ -1,43 +0,0 @@
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!");
}
}
}

@ -25,7 +25,7 @@ public class Usuario {
private Long id; private Long id;
@Column(name = "usuario", unique = true) @Column(name = "usuario", unique = true)
private String user; private String usuario;
@Column(name = "pass") @Column(name = "pass")
private String pass; private String pass;
@ -60,6 +60,14 @@ public class Usuario {
this.pass = pass; this.pass = pass;
} }
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
public RolesEnum getRol() { public RolesEnum getRol() {
return rol; return rol;
} }
@ -92,13 +100,5 @@ public class Usuario {
this.nombre = nombre; this.nombre = nombre;
} }
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
} }

@ -5,78 +5,45 @@ import java.security.KeyFactory;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64; import java.util.Base64;
import java.util.Map; import java.util.HashSet;
import java.util.Set;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.ConfigProvider; import api.menu.playa.enums.RolesEnum;
import org.eclipse.microprofile.config.inject.ConfigProperty; import io.smallrye.jwt.build.Jwt;
import org.eclipse.microprofile.jwt.Claims; import io.smallrye.jwt.build.JwtClaimsBuilder;
import org.jose4j.jws.AlgorithmIdentifiers;
import org.jose4j.jws.JsonWebSignature;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.NumericDate;
@ApplicationScoped @ApplicationScoped
public class TokenUtils { public class TokenUtils {
//@ConfigProperty(name = "config.private.key") public static String generateToken(String username, Set<RolesEnum> roles, Long duration, String issuer) throws Exception {
private static String privateKey = ConfigProvider.getConfig().getValue("config.private.key",String.class);; String privateKeyLocation = "/privatekey.pem";
PrivateKey privateKey = readPrivateKey(privateKeyLocation);
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 {
JwtClaimsBuilder claimsBuilder = Jwt.claims();
long currentTimeInSecs = currentTimeInSecs(); long currentTimeInSecs = currentTimeInSecs();
claims.setIssuedAt(NumericDate.fromSeconds(currentTimeInSecs)); Set<String> groups = new HashSet<>();
claims.setClaim(Claims.auth_time.name(), NumericDate.fromSeconds(currentTimeInSecs)); for (RolesEnum role : roles) groups.add(role.toString());
for (Map.Entry<String, Object> 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);
claimsBuilder.issuer(issuer);
claimsBuilder.subject(username);
claimsBuilder.issuedAt(currentTimeInSecs);
claimsBuilder.expiresAt(currentTimeInSecs + duration);
claimsBuilder.groups(groups);
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 { public static PrivateKey readPrivateKey(final String pemResName) throws Exception {
InputStream contentIS = TokenUtils.class.getResourceAsStream(pemResName); try (InputStream contentIS = TokenUtils.class.getResourceAsStream(pemResName)) {
byte[] tmp = new byte[4096]; byte[] tmp = new byte[4096];
int length = contentIS.read(tmp); int length = contentIS.read(tmp);
return decodePrivateKey(new String(tmp, 0, length, "UTF-8")); 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 { public static PrivateKey decodePrivateKey(final String pemEncoded) throws Exception {
byte[] encodedBytes = toEncodedBytes(pemEncoded); byte[] encodedBytes = toEncodedBytes(pemEncoded);
@ -85,12 +52,12 @@ public class TokenUtils {
return kf.generatePrivate(keySpec); return kf.generatePrivate(keySpec);
} }
private static byte[] toEncodedBytes(final String pemEncoded) { public static byte[] toEncodedBytes(final String pemEncoded) {
final String normalizedPem = removeBeginEnd(pemEncoded); final String normalizedPem = removeBeginEnd(pemEncoded);
return Base64.getDecoder().decode(normalizedPem); return Base64.getDecoder().decode(normalizedPem);
} }
private static String removeBeginEnd(String pem) { public static String removeBeginEnd(String pem) {
pem = pem.replaceAll("-----BEGIN (.*)-----", ""); pem = pem.replaceAll("-----BEGIN (.*)-----", "");
pem = pem.replaceAll("-----END (.*)----", ""); pem = pem.replaceAll("-----END (.*)----", "");
pem = pem.replaceAll("\r\n", ""); pem = pem.replaceAll("\r\n", "");
@ -98,9 +65,6 @@ public class TokenUtils {
return pem.trim(); return pem.trim();
} }
/**
* @return the current time in seconds since epoch
*/
public static int currentTimeInSecs() { public static int currentTimeInSecs() {
long currentTimeMS = System.currentTimeMillis(); long currentTimeMS = System.currentTimeMillis();
return (int) (currentTimeMS / 1000); return (int) (currentTimeMS / 1000);

@ -9,18 +9,14 @@ quarkus.http.host=0.0.0.0
quarkus.datasource.username=postgres quarkus.datasource.username=postgres
quarkus.datasource.password=13467982 quarkus.datasource.password=13467982
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.jdbc.url=jdbc:postgresql://192.168.1.17:5432/postgres?currentSchema=playa
quarkus.datasource.users.jdbc.max-size=11 quarkus.datasource.users.jdbc.max-size=11
quarkus.datasource.jdbc.idle-removal-interval= 10 quarkus.datasource.jdbc.idle-removal-interval= 10
quarkus.datasource.inventory.jdbc.max-size=12 quarkus.datasource.inventory.jdbc.max-size=12
quarkus.hibernate-orm.database.generation=update 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 mp.jwt.verify.issuer=https://vodorod.cl
quarkus.smallrye-jwt.enabled=true quarkus.smallrye-jwt.enabled=true
quarkus.log.file.enable=true quarkus.log.file.enable=true
@ -37,7 +33,3 @@ quarkus.log.file.rotation.max-backup-index=30
%prod.quarkus.datasource.username=playa_tienda %prod.quarkus.datasource.username=playa_tienda
%prod.quarkus.datasource.password=ED8eqKY5ZyQAH9px %prod.quarkus.datasource.password=ED8eqKY5ZyQAH9px
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/postgres?currentSchema=playa %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

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
gs4AsuhRpozo+xSAOVuO+Mg= ySryjnf3b8RX4xTt8vSj7No=
-----END PRIVATE KEY----- -----END PRIVATE KEY-----

@ -1,9 +1,9 @@
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA18OmU6OM3cJ88c3FWi+y MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvDYsBZlI5GE6M2sDyoyc
bH45cNiTntr8kHnDX3jBuP1qd9rI60CrQv43JZobQzfKmOyeibNC4R7J0LHumiCs xs7nI7JCO7WW6Nu+BBnrHMLEC/lvAMhPtJ8hfCDx3kiYXFPlVwUt6r8YfUFyW9ph
dpkp7qzklE1bGf7MzCuVX853Jd1GxVY64em+Uk0QciarFPMtk09JFYLj0gbNL4/P vfC1Z5KGSsUIA5qVc5Df9jMwiEQ5IMgWfLDnGeDo/IJLiObP6scMA/3eVtEbEeLI
A3mZfHKnWMtX3h5kfwSiCik9wqPBhGF1i3X2Akhw59AqK84mDtwjAT161HF5TsSX Bgl/UmcIk3VmqWQ3TNcaRjwHoJoffmrbzVWR4/+vofo0h0w64KhkYmEIO/mDe0X0
/+Up++TFsOtzLtb3ztAND+2YPFAxjiBID8m10sxqEGaErMnXJBaeQMmwDRwZwP29 MAWmOpaDHK6yDdmJs6O3to+IvSujEWYbgmp84lt9E0w5OoWrOsClQPqq+As7v8OM
wFTaFWF1brp2CV+fql+U5cW0zehFzzYlKnZ9S84ANHN/Ayk2E5hvedZyULqeEUP4 Zh+fciWch/ulhUq85sbA2qA9NTizkjJ46635432c9oMRoMJTXf3McpoBDf2YX212
3QIDAQAB FwIDAQAB
-----END PUBLIC KEY----- -----END PUBLIC KEY-----

@ -0,0 +1,8 @@
package api.menu.playa;
import io.quarkus.test.junit.QuarkusIntegrationTest;
@QuarkusIntegrationTest
public class GreetingResourceIT extends GreetingResourceTest {
// Execute the same tests but in packaged mode.
}

@ -0,0 +1,21 @@
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"));
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.