[ADD] MUCHAS MODIFICACIONES Y SE AÑADIO EL BBVA API QR

parent 46f6c7be
package web.multitask.trismegistoservices.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.github.cdimascio.dotenv.Dotenv;
import web.multitask.trismegistoservices.utils.DotEnvUtil;
import web.multitask.trismegistoservices.utils.dotEnvUtils;
@Configuration
public class DotEnvConfig {
// @Bean
Dotenv getDotEnvPath() {
return Dotenv.configure().directory(DotEnvUtil.getDotEnvPath("trismegisto-asistencia")).load();
return Dotenv.configure().directory(dotEnvUtils.getDotEnvPath("trismegisto-asistencia")).load();
}
}
\ No newline at end of file
......@@ -11,27 +11,19 @@ import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.gmail.Gmail;
import com.google.api.services.gmail.GmailScopes;
import org.json.JSONObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import javax.annotation.PostConstruct;
import javax.mail.Address;
@Configuration
public class GoogleConfig {
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
// private static final String OAUTH2 = "/oAuth2_planilla.json";
private static final String CREDENTIALS_FOLDER_PATH = "/tokens";
private final String APPLICATION_NAME = "FullService Application";
private String refresh_token_gmail = null;
......@@ -80,6 +72,7 @@ public class GoogleConfig {
.build()
.setAccessToken(getAccessToken(refresh_token_gmail))
.setRefreshToken(refresh_token_gmail);
return new Gmail.Builder(HTTP_TRANSPORT, JSON_FACTORY, authorize)
.setApplicationName(APPLICATION_NAME).build();
} catch (GeneralSecurityException | IOException e) {
......@@ -97,11 +90,11 @@ public class GoogleConfig {
client_id = clientSecrets.getDetails().getClientId();
client_secret = clientSecrets.getDetails().getClientSecret();
if (clientSecrets.getDetails().get("gmail_refresh_token") != null){
if (clientSecrets.getDetails().get("gmail_refresh_token") != null) {
refresh_token_gmail = clientSecrets.getDetails().get("gmail_refresh_token").toString();
}
if (clientSecrets.getDetails().get("drive_refresh_token") != null){
if (clientSecrets.getDetails().get("drive_refresh_token") != null) {
refresh_token_drive = clientSecrets.getDetails().get("drive_refresh_token").toString();
}
} catch (IOException e) {
......@@ -116,7 +109,7 @@ public class GoogleConfig {
params.put("grant_type", "refresh_token");
params.put("client_id", client_id);
params.put("client_secret", client_secret);
params.put("refresh_token",refresh_token);
params.put("refresh_token", refresh_token);
StringBuilder postData = new StringBuilder();
for (Map.Entry<String, Object> param : params.entrySet()) {
......@@ -129,7 +122,7 @@ public class GoogleConfig {
}
byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8);
URL url = new URL("https://accounts.google.com/o/oauth2/token");
URL url = new URL("https://accounts.google.com/o/oauth2/token");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setUseCaches(false);
......@@ -146,8 +139,8 @@ public class GoogleConfig {
return json.getString("access_token");
} catch (Exception ex) {
System.out.println("Error: " + ex);
return null;
}
return null;
}
}
\ No newline at end of file
......@@ -18,18 +18,16 @@ import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import web.multitask.trismegistoservices.filter.JWTokenFilter;
import web.multitask.trismegistoservices.singleton.ThreadLocalSingleton;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
import web.multitask.trismegistoservices.utils.tokenUtils;
@Configuration
@EnableWebSecurity
@AllArgsConstructor
public class SecurityConfig{
private final JWTokenUtil jwtTokenUtil;
private final TokenSingleton tokenSingleton;
private ThreadLocalSingleton threadLocalSingleton;
private final tokenUtils jwtTokenUtil;
private final web.multitask.trismegistoservices.singleton.tokenSingleton tokenSingleton;
private web.multitask.trismegistoservices.singleton.threadLocalSingleton threadLocalSingleton;
@Bean
AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
......
package web.multitask.trismegistoservices.filter;
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.simp.stomp.StompCommand;
......@@ -11,17 +10,15 @@ import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import web.multitask.trismegistoservices.repository.UserRepository;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
import java.util.Objects;
import web.multitask.trismegistoservices.utils.tokenUtils;
@Component
public class AuthChannelInterceptorAdapter implements ChannelInterceptor {
private final JWTokenUtil jwtTokenUtil;
private final tokenUtils jwtTokenUtil;
private final UserRepository userRepo = new UserRepository();
public AuthChannelInterceptorAdapter(JWTokenUtil jwtTokenUtil) {
public AuthChannelInterceptorAdapter(tokenUtils jwtTokenUtil) {
this.jwtTokenUtil = jwtTokenUtil;
}
......
......@@ -5,6 +5,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
......@@ -17,45 +18,48 @@ import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;
import org.springframework.web.filter.OncePerRequestFilter;
import web.multitask.trismegistoservices.repository.UserRepository;
import web.multitask.trismegistoservices.singleton.ThreadLocalSingleton;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
import web.multitask.trismegistoservices.utils.tokenUtils;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
@Component
@Order(1)
//@AllArgsConstructor
@NoArgsConstructor
public class JWTokenFilter extends OncePerRequestFilter {
private final UserRepository userRepo = new UserRepository();
private JWTokenUtil jwtTokenUtil = null;
private TokenSingleton tokenSingleton = null;
private ThreadLocalSingleton threadLocalSingleton = null;
private tokenUtils jwtTokenUtil = null;
private web.multitask.trismegistoservices.singleton.tokenSingleton tokenSingleton = null;
private web.multitask.trismegistoservices.singleton.threadLocalSingleton threadLocalSingleton = null;
public JWTokenFilter(JWTokenUtil jwtTokenUtil, TokenSingleton tokenSingleton, ThreadLocalSingleton threadLocalSingleton){
public JWTokenFilter(tokenUtils jwtTokenUtil, web.multitask.trismegistoservices.singleton.tokenSingleton tokenSingleton, web.multitask.trismegistoservices.singleton.threadLocalSingleton threadLocalSingleton) {
this.jwtTokenUtil = jwtTokenUtil;
this.tokenSingleton = tokenSingleton;
this.threadLocalSingleton = threadLocalSingleton;
}
@Override
protected void doFilterInternal(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain chain)
throws ServletException, io.jsonwebtoken.io.IOException, java.io.IOException {
protected void doFilterInternal(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain chain) throws ServletException, io.jsonwebtoken.io.IOException, java.io.IOException {
response.setContentType("application/json");
final String Authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
final String dbConnection = request.getHeader("Database");
String type;
String token;
try {
type = Authorization.split(" ")[0];
token = Authorization.split(" ")[1];
} catch (Exception e) {
type = null;
token = null;
}
if(dbConnection != null && !dbConnection.isEmpty()){
if (dbConnection != null && !dbConnection.isEmpty()) {
String dataBaseGotten = jwtTokenUtil.getDataToken(dbConnection);
DataSource ds = getDataSource(new JSONObject(dataBaseGotten));
threadLocalSingleton.setJdbcTemplate(new JdbcTemplate(ds));
......@@ -63,13 +67,29 @@ public class JWTokenFilter extends OncePerRequestFilter {
if (token == null || token.isEmpty()) {
chain.doFilter(request, response);
} else {
if (jwtTokenUtil.validateToken(token) || tokenSingleton.consumeToken(token)){
} else if (Objects.equals(type, "Basic")) {
String credentials = new String(Base64Utils.decodeFromString(token), StandardCharsets.UTF_8);
String[] parts = credentials.split(":", 2);
if (parts.length == 2) {
String username = parts[0];
String password = parts[1];
UserDetails userDetails = userRepo.findByUsername(username);
if (userDetails.getPassword().equals(password)) {
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
chain.doFilter(request, response);
}else{
response.sendError(401, "Invalid Token");
}
}else{
response.sendError(401, "Invalid Token");
}
} else if (Objects.equals(type, "Bearer")) {
if (jwtTokenUtil.validateToken(token) || tokenSingleton.consumeToken(token)) {
JSONObject jsonToken = new JSONObject(jwtTokenUtil.getDataToken(token));
UserDetails userDetails = userRepo.findByUsername(jsonToken.getString("username"));
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
userDetails,
null, userDetails.getAuthorities());
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
chain.doFilter(request, response);
......
......@@ -4,7 +4,6 @@ import lombok.AllArgsConstructor;
import org.json.JSONObject;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import web.multitask.trismegistoservices.singleton.ThreadLocalSingleton;
import java.util.List;
import java.util.Map;
......@@ -14,7 +13,7 @@ import java.util.Objects;
@AllArgsConstructor
public class RoutineSql {
private final ThreadLocalSingleton threadLocalSingleton;
private final web.multitask.trismegistoservices.singleton.threadLocalSingleton threadLocalSingleton;
public JSONObject routineExecutor(String routine, String database, Object[] params) {
......
package web.multitask.trismegistoservices.rest.BBVA;
import org.json.JSONObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import web.multitask.trismegistoservices.services.BBVA.bbvaService;
import web.multitask.trismegistoservices.singleton.bbvaSingleton;
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("bbva")
public class bbvaRest {
private final bbvaService service;
private final bbvaSingleton singleton;
public bbvaRest(bbvaService service, bbvaSingleton singleton) {
this.service = service;
this.singleton = singleton;
}
@PostMapping("/private/prepareRequest")
public ResponseEntity<?> getHeader(@RequestBody String json) {
JSONObject response = service.getToken(json);
String token = response.optString("access_token");
if(token.isEmpty()){
return ResponseEntity.internalServerError().body(response.put("status",false).put("token","").toMap());
}else{
singleton.setToken(token);
String digest = service.bodyIntoBase64AfterSHA512(json);
singleton.setDigest(digest);
String txt = service.txtToSign(json ,digest);
String signature = service.createSignature(txt);
singleton.setSignature(signature);
System.out.println("token = "+singleton.getToken());
System.out.println("digest = "+singleton.getDigest());
System.out.println("signature = "+singleton.getSignature());
return ResponseEntity.ok(service.generateQR(singleton.getToken(),singleton.getDigest(),singleton.getSignature(),json).toMap());
}
}
}
package web.multitask.trismegistoservices.rest.BBVA;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("bbva")
@AllArgsConstructor
public class bbvaWebHook {
@PostMapping("/public/webhook")
public String webhook(@RequestBody String json) {
System.out.println(json);
return "Hello World";
}
}
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import org.json.JSONObject;
import org.springframework.http.ResponseEntity;
......@@ -12,7 +12,7 @@ import java.io.InputStreamReader;
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("console")
public class ConsoleApi {
public class consoleRest {
@PostMapping("/public/command")
public ResponseEntity<?> pull(@RequestBody String jsonBody) {
......
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import lombok.AllArgsConstructor;
......@@ -16,7 +16,7 @@ import javax.annotation.Nullable;
@CrossOrigin(origins = "*")
@RequestMapping("drive")
@AllArgsConstructor
public class DriveApi {
public class driveRest {
DriveService driveService;
......
// package web.multitask.app.api;
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import javax.mail.internet.MimeMessage;
import lombok.AllArgsConstructor;
import org.json.JSONObject;
......@@ -17,7 +17,7 @@
@RestController
@RequestMapping("/gmail")
@AllArgsConstructor
public class EmailApi {
public class emailRest {
private final GmailService emailService;
......
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import org.json.JSONObject;
import lombok.AllArgsConstructor;
......@@ -19,7 +19,7 @@ import java.io.IOException;
@CrossOrigin(origins = "*")
@RequestMapping("excel")
@AllArgsConstructor
public class ExcelApi {
public class excelRest {
ExcelService excelService;
CommonUtils commonUtils;
......
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import org.json.JSONObject;
import org.springframework.core.io.Resource;
......@@ -14,7 +14,7 @@ import web.multitask.trismegistoservices.utils.CommonUtils;
@CrossOrigin(origins = "*")
@RequestMapping("/pdf")
@AllArgsConstructor
public class PDFApi {
public class pdfRest {
PDFService pdfService;
CommonUtils commonUtils;
......
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import lombok.AllArgsConstructor;
import org.json.JSONArray;
......@@ -6,13 +6,12 @@ import org.json.JSONObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import web.multitask.trismegistoservices.mysql.RoutineSql;
import web.multitask.trismegistoservices.repository.UserRepository;
@RestController
@CrossOrigin("*")
@RequestMapping("/api")
@AllArgsConstructor
public class RoutineApi {
public class routineRest {
final RoutineSql procedureMysql;
......
package web.multitask.trismegistoservices.api;
package web.multitask.trismegistoservices.rest;
import org.json.JSONObject;
import org.springframework.http.ResponseEntity;
......@@ -6,8 +6,7 @@ import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.annotation.*;
import web.multitask.trismegistoservices.model.User;
import web.multitask.trismegistoservices.repository.UserRepository;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
import web.multitask.trismegistoservices.utils.tokenUtils;
import java.math.BigInteger;
import java.text.SimpleDateFormat;
......@@ -20,14 +19,14 @@ import org.springframework.web.bind.annotation.RequestBody;
@RestController
@RequestMapping("/token")
@CrossOrigin
class JWTokenApi {
class tokenRest {
private final UserRepository userRepo = new UserRepository();
private final JWTokenUtil jwtTokenUtil;
private final TokenSingleton tokenSingleton;
private final tokenUtils jwtTokenUtil;
private final web.multitask.trismegistoservices.singleton.tokenSingleton tokenSingleton;
public JWTokenApi(JWTokenUtil jwtTokenUtil, TokenSingleton tokenSingleton) {
public tokenRest(tokenUtils jwtTokenUtil, web.multitask.trismegistoservices.singleton.tokenSingleton tokenSingleton) {
this.jwtTokenUtil = jwtTokenUtil;
this.tokenSingleton = tokenSingleton;
}
......
package web.multitask.trismegistoservices.services.BBVA;
import okhttp3.*;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import web.multitask.trismegistoservices.utils.CommonUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.MessageDigest;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
@Service
public class bbvaService {
String globalDate = CommonUtils.getCurrentDateRFC1123();
public JSONObject getToken(String json) {
try {
JSONObject obj = new JSONObject(json);
obj.remove("body");
String host = obj.getString("host");
String formBody = CommonUtils.jsonToUrlEncoded(obj);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://"+host + "/auth/oauth/v2/token")
.post(RequestBody.create(formBody, MediaType.parse("application/x-www-form-urlencoded")))
.build();
Call call = client.newCall(request);
Response response = call.execute();
assert response.body() != null;
String bodyResult = response.body().string();
response.close();
return new JSONObject(bodyResult);
} catch (Exception e) {
System.out.println(e.getMessage());
return new JSONObject().put("status", false).put("message", e.getMessage());
}
}
public String bodyIntoBase64AfterSHA512(String json) {
try {
JSONObject jsonObject = new JSONObject(json);
String body = jsonObject.optString("body", "");
byte[] bodyBytes = body.getBytes(StandardCharsets.UTF_8);
MessageDigest digest = MessageDigest.getInstance("SHA-512");
byte[] hashedBytes = digest.digest(bodyBytes);
return Base64.getEncoder().encodeToString(hashedBytes);
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
public String txtToSign(String json, String digest) {
JSONObject obj = new JSONObject(json );
String host = obj.getString("host");
String endpoint = obj.getString("endpoint");
String method = obj.getString("method");
return "(request-target):" + method.toLowerCase() + " " + endpoint + "\n"
+ "host:" + host + "\n"
+ "date:" + globalDate + "\n"
+ "digest:SHA-512=" + digest;
}
public String createSignature(String txt) {
PrivateKey privateKey = loadPrivateKey("/tokens/key.p8");
return signContent(txt, privateKey);
}
public PrivateKey loadPrivateKey(String path) {
try(InputStream in = bbvaService.class.getResourceAsStream( path)) {
String keyString = CommonUtils.readInputStream(in);
return loadPrivateKeyFromString(keyString);
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
private static PrivateKey loadPrivateKeyFromString(String keyString) throws Exception {
keyString = keyString.replace("-----BEGIN RSA PRIVATE KEY-----", "")
.replace("-----END RSA PRIVATE KEY-----", "")
.trim();
byte[] keyBytes = Base64.getMimeDecoder().decode(keyString);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(spec);
}
public String signContent(String content, PrivateKey privateKey) {
try {
Signature signature = Signature.getInstance("SHA512withRSA");
signature.initSign(privateKey);
signature.update(content.getBytes());
byte[] signedBytes = signature.sign();
return Base64.getEncoder().encodeToString(signedBytes);
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
public JSONObject generateQR(String token,String digest,String signature,String json) {
try {
JSONObject obj = new JSONObject(json);
JSONObject body = obj.getJSONObject("body");
String host = obj.getString("host");
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
RequestBody requestbody = RequestBody.create(body.toString(), mediaType);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://" + host + "/pe/request-to-pay/v1/qr")
.post(requestbody)
.addHeader("Content-Type", "application/json")
.addHeader("Accept-Encoding", "gzip")
.addHeader("Authorization", "Bearer " + token)
.addHeader("Digest", "SHA-512="+digest)
.addHeader("Signature", "algorithm=\"rsa-sha512\",headers=\"(request-target) host date digest\",signature=\""+signature+"\"")
.addHeader("Host",obj.getString("host"))
.addHeader("Date", globalDate)
.build();
Response response = client.newCall(request).execute();
String bodyResult;
System.out.println("x-request-id = "+response.header("x-request-id"));
if (response.body() != null) {
String encoding = response.header("Content-Encoding", "");
if ("gzip".equalsIgnoreCase(encoding)) {
bodyResult = decompressGzip(response.body().byteStream());
} else {
bodyResult = response.body().string();
}
} else {
bodyResult = "{}";
}
System.out.println(bodyResult);
response.close();
return new JSONObject(bodyResult);
} catch (Exception e) {
System.out.println(e.getMessage());
return new JSONObject().put("status", false).put("message", e.getMessage());
}
}
private String decompressGzip(InputStream compressed) throws IOException {
try (GZIPInputStream gis = new GZIPInputStream(compressed);
BufferedReader reader = new BufferedReader(new InputStreamReader(gis, "UTF-8"))) {
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
}
}
......@@ -2,15 +2,11 @@ package web.multitask.trismegistoservices.services;
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.IntStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
......@@ -24,7 +20,6 @@ import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
......
package web.multitask.trismegistoservices.singleton;
import org.springframework.stereotype.Component;
import java.util.concurrent.atomic.AtomicReference;
@Component
public class bbvaSingleton {
private final AtomicReference<String> token = new AtomicReference<>();
private final AtomicReference<String> digest = new AtomicReference<>();
private final AtomicReference<String> signature = new AtomicReference<>();
public String getToken() {
return this.token.get();
}
public String getDigest () {
return this.digest.get();
}
public String getSignature() {
return this.signature.get();
}
public void setToken(String token){
this.token.set(token);
}
public void setDigest(String digest){
this.digest.set(digest);
}
public void setSignature(String signature){
this.signature.set(signature);
}
}
......@@ -4,7 +4,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class ThreadLocalSingleton {
public class threadLocalSingleton {
private final ThreadLocal<JdbcTemplate> jdbcTemplateThreadLocal = new ThreadLocal<>();
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
......
......@@ -7,17 +7,17 @@ import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
import web.multitask.trismegistoservices.utils.tokenUtils;
@Getter
@Component
@NoArgsConstructor
public class TokenSingleton {
public class tokenSingleton {
private final JSONArray tokens = new JSONArray();
@Autowired
private JWTokenUtil jwtTokenUtil;
private tokenUtils jwtTokenUtil;
public boolean consumeToken(String token) {
boolean isAvailable = false;
......
package web.multitask.trismegistoservices.utils;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import org.apache.commons.io.FileUtils;
import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
......@@ -21,7 +29,7 @@ public class CommonUtils {
private final String FILE_FOLDER = System.getProperty("java.io.tmpdir");
public String multipartFileToBase64(MultipartFile file) throws IOException {
public static String multipartFileToBase64(MultipartFile file) throws IOException {
byte[] byteArray = file.getBytes();
return Base64.getEncoder().encodeToString(byteArray);
}
......@@ -66,7 +74,7 @@ public class CommonUtils {
return new FileSystemResource(file);
}
public Resource base64ToResource(String base64, String name) {
public static Resource base64ToResource(String base64, String name) {
byte[] byteArray = Base64.getDecoder().decode(base64);
return new ByteArrayResource(byteArray) {
@Override
......@@ -76,7 +84,7 @@ public class CommonUtils {
};
}
public boolean deleteAllFiles() {
public static boolean deleteAllFiles() {
try {
String tmpFolder = System.getProperty("java.io.tmpdir");
File folder = new File(tmpFolder);
......@@ -123,4 +131,61 @@ public class CommonUtils {
}
return byteArrayOutputStream;
}
public static String minifyJson(String json) {
try {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(json);
return objectMapper.writeValueAsString(jsonNode);
} catch (Exception e) {
return e.getMessage();
}
}
public static String jsonToUrlEncoded(JSONObject json) {
StringBuilder result = new StringBuilder();
Iterator<String> keys = json.keys();
while (keys.hasNext()) {
String key = keys.next();
String value = json.optString(key);
result.append(key).append("=").append(value);
if (keys.hasNext()) {
result.append("&");
}
}
return result.toString();
}
public static String getCurrentDateRFC1123() {
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat.format(new Date());
}
public static String readInputStream(InputStream in) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] temp = new byte[2048];
int bytesRead;
while ((bytesRead = in.read(temp)) != -1) {
buffer.write(temp, 0, bytesRead);
}
return buffer.toString(StandardCharsets.UTF_8.name());
}
public static String generateQRCodeBase64(String message, int width, int height) {
try {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(message, BarcodeFormat.QR_CODE, width, height);
BufferedImage qrImage = MatrixToImageWriter.toBufferedImage(bitMatrix);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(qrImage, "PNG", baos);
byte[] imageBytes = baos.toByteArray();
return Base64.getEncoder().encodeToString(imageBytes);
} catch (WriterException | java.io.IOException e) {
System.out.println(e.getMessage());
return null;
}
}
}
\ No newline at end of file
......@@ -5,13 +5,18 @@ import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class DotEnvUtil {
public class dotEnvUtils {
static String detectedOS;
public enum OSType {
Windows, MacOS, Linux, Other
};
private static final Map<String, String> OS_PATH_MAP = new HashMap<>();
static {
OS_PATH_MAP.put("MacOS", "/opt/dotenv/");
OS_PATH_MAP.put("Linux", "/opt/dotenv/");
OS_PATH_MAP.put("Windows", "abcdefghijklmnopqrstuvwxyz");
}
public static String getOperatingSystemType() {
return detectedOS != null ? detectedOS :
......@@ -19,37 +24,29 @@ public class DotEnvUtil {
}
private static String getOSFromSystemProperty() {
String OS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
if (OS.contains("mac") || OS.contains("darwin")) return "MacOS";
if (OS.contains("win")) return "Windows";
if (OS.contains("nux")) return "Linux";
return "Other";
}
private static final Map<String, String> OS_PATH_MAP = new HashMap<>();
static {
OS_PATH_MAP.put("MacOS", "/opt/dotenv/");
OS_PATH_MAP.put("Linux", "/opt/dotenv/");
OS_PATH_MAP.put("Windows", "abcdefghijklmnopqrstuvwxyz");
if (detectedOS == null) {
String osName = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
if (osName.contains("mac") || osName.contains("darwin")) detectedOS = "MacOS";
else if (osName.contains("win")) detectedOS = "Windows";
else if (osName.contains("nux")) detectedOS = "Linux";
else detectedOS = "Other";
}
return detectedOS;
}
public static String getDotEnvPath(String projectName) {
String detectedOs = DotEnvUtil.getOperatingSystemType();
return OS_PATH_MAP.getOrDefault(detectedOs, "")
+ (detectedOs.equals("Windows")
? getWindowsPath(projectName)
: projectName);
String osType = getOperatingSystemType();
return OS_PATH_MAP.getOrDefault(osType, "") +
("Windows".equals(osType) ? getWindowsPath(projectName) : projectName);
}
private static String getWindowsPath(String projectName) {
return OS_PATH_MAP.get("Windows")
.chars()
.mapToObj(letter -> "/" + (char) letter + ":/dotenv/" + projectName)
.filter(path -> new File(path).exists())
.findFirst()
.orElse("");
.chars()
.mapToObj(letter -> "/" + (char) letter + ":/dotenv/" + projectName)
.filter(path -> new File(path).exists())
.findFirst()
.orElse("");
}
}
\ No newline at end of file
......@@ -2,23 +2,17 @@ package web.multitask.trismegistoservices.utils;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Date;
import io.jsonwebtoken.ExpiredJwtException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import org.springframework.stereotype.Component;
import web.multitask.trismegistoservices.model.User;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import javax.annotation.Nullable;
@Component
public class JWTokenUtil implements Serializable{
public class tokenUtils implements Serializable{
@Value("${app.jwtSecret}")
private String jwtSecret;
......@@ -52,7 +46,7 @@ public class JWTokenUtil implements Serializable{
.compact();
}
public String detokenizeData(String token, @Nullable boolean doConsume){
public String detokenizeData(String token, boolean doConsume){
String tokenReturned = "";
try{
......
-----BEGIN RSA PRIVATE KEY-----
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
PnpOxl5jWjhzfwkOcU5V+qBdkCd+fWo=
-----END RSA PRIVATE KEY-----
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment