[ADD] AVANCE DE GMAIL Y DRIVE

parent 4020f7a1
......@@ -68,6 +68,11 @@
<version>8.2.0</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
......@@ -168,7 +173,7 @@
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>2.0.0</version>
<version>1.35.2</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
......@@ -178,7 +183,13 @@
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-drive</artifactId>
<version>v3-rev20220815-2.0.0</version>
<version>v3-rev197-1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-gmail -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-gmail</artifactId>
<version>v1-rev110-1.25.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
......@@ -186,15 +197,15 @@
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.20.0</version>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-gson</artifactId>
<version>1.21.0</version>
</dependency>
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>core</artifactId>
<version>1.47.1</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.kafka</groupId>-->
<!-- <artifactId>spring-kafka</artifactId>-->
<!-- <version>2.9.0</version>-->
<!-- </dependency>-->
</dependencies>
<build>
<finalName>trismegisto-services</finalName>
......
......@@ -3,9 +3,11 @@ package web.multitask.trismegistoservices;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableAsync
@EnableScheduling
public class AppApplication {
public static void main(String[] args) {
......
......@@ -8,7 +8,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import web.multitask.trismegistoservices.model.DriveRequest;
import web.multitask.trismegistoservices.services.DriveService;
import web.multitask.trismegistoservices.services.google.DriveService;
import javax.annotation.Nullable;
@RestController
......@@ -25,16 +25,21 @@ public class DriveApi {
String folder_id = request.getFolder_id();
String file_name = request.getFile_name();
MultipartFile file = request.getFile();
String responseDrive = driveService.uploadFile(folder_id, file_name, file, new JSONObject());
String base64 = request.getBase64();
String id_file_response = driveService.uploadFile(folder_id, file_name, file, base64);
JSONObject response = new JSONObject();
if (responseDrive == null) {
if (id_file_response == null) {
response.put("status", false);
response.put("message", "Error al subir el archivo");
response.put("message", "No se pudo subir el archivo," +
" existe multiples razones por las cuales esto puede ocurrir," +
" por favor verifique que el archivo no sea muy grande o que el formato sea correcto");
return ResponseEntity.badRequest().body(response.toMap());
} else {
response.put("status", true);
response.put("message", "Archivo subido correctamente");
response.put("file_id", responseDrive);
response.put("file_id", id_file_response);
response.put("file_url", "https://drive.google.com/file/d/" + id_file_response + "/view?usp=sharing");
response.put("download_url", "https://drive.google.com/uc?export=download&id="+id_file_response);
return ResponseEntity.ok(response.toMap());
}
} catch (Exception e) {
......@@ -44,8 +49,7 @@ public class DriveApi {
@GetMapping(path = "/public/download/{id}")
public ResponseEntity<?> downloadFile(@PathVariable String id, @Nullable @RequestParam(name = "base64") Boolean base64) {
if(base64 == null) base64 = false;
return driveService.getFile(id, base64);
return driveService.getFile(id, !(base64 == null));
}
......
// package web.multitask.app.api;
// import javax.mail.internet.MimeMessage;
// import io.github.cdimascio.dotenv.Dotenv;
// import org.json.JSONObject;
// import org.springframework.http.MediaType;
// import org.springframework.http.ResponseEntity;
// import org.springframework.web.bind.annotation.ModelAttribute;
// import org.springframework.web.bind.annotation.RestController;
// import web.multitask.app.model.EmailRequest;
// import web.multitask.app.mysql.EmailMysql;
// import web.multitask.app.service.EmailService;
// import org.springframework.web.bind.annotation.RequestMapping;
// import org.springframework.web.bind.annotation.RequestMethod;
// @RestController
// @RequestMapping("/email")
// public class EmailApi {
// private final Dotenv dotenv;
// private final EmailService emailService;
// private final EmailMysql emailMysql;
// public EmailApi(EmailService emailService, EmailMysql emailMysql, Dotenv dotenv) {
// this.emailService = emailService;
// this.emailMysql = emailMysql;
// this.dotenv = dotenv;
// }
// @RequestMapping(path = "/public/simple_generate", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
// public ResponseEntity<?> simple(@ModelAttribute EmailRequest request) {
// try {
// MimeMessage message = emailService.simpleMessage(request);
// JSONObject response = emailService.send(message);
// return ResponseEntity.ok(response.toMap());
// } catch (Exception e) {
// return ResponseEntity.internalServerError().body(new JSONObject().put("message", e.getMessage()).put("status", false).toMap());
// }
// }
// @RequestMapping(path = "/private/generate", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
// public ResponseEntity<?> full(@ModelAttribute EmailRequest request) {
// try {
// MimeMessage message = emailService.htmlMessage(request);
// JSONObject response = emailService.send(message);
// return ResponseEntity.ok(response.toMap());
// } catch (Exception e) {
// return ResponseEntity.internalServerError().body(new JSONObject().put("message", e.getMessage()).put("status", false).toMap());
// }
// }
// @RequestMapping(path = "/service/confirmation", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
// public ResponseEntity<?> template(@ModelAttribute EmailRequest request) {
// try {
// String URL = dotenv.get("URL_CONFIRMATION");
// assert URL != null;
// JSONObject extra = request.getExtra();
// JSONObject response = emailMysql.getHTMLTemplate(extra);
// if(response.getBoolean("status")){
// JSONObject data = response.getJSONArray("data").getJSONObject(0);
// String html = data.getString("html");
// html = html.replaceAll("TOKEN", extra.getString("token"));
// html = html.replaceAll("URL", URL);
// request.setBody(html);
// MimeMessage message = emailService.htmlMessage(request);
// JSONObject responseEmail = emailService.send(message);
// return ResponseEntity.ok(responseEmail.toMap());
// }else{
// return ResponseEntity.internalServerError().body(new JSONObject().put("message", response.getString("message")).put("status", false).toMap());
// }
// } catch (Exception e) {
// return ResponseEntity.internalServerError().body(new JSONObject().put("message", e.getMessage()).put("status", false).toMap());
// }
// }
// }
\ No newline at end of file
package web.multitask.trismegistoservices.api;
import javax.mail.internet.MimeMessage;
import io.github.cdimascio.dotenv.Dotenv;
import lombok.AllArgsConstructor;
import org.json.JSONObject;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import web.multitask.trismegistoservices.model.GmailRequest;
import web.multitask.trismegistoservices.mysql.EmailMysql;
import web.multitask.trismegistoservices.services.google.GmailService;
@RestController
@RequestMapping("/gmail")
@AllArgsConstructor
public class EmailApi {
private final Dotenv dotenv;
private final GmailService emailService;
private final EmailMysql emailMysql;
@RequestMapping(path = "/public/generate", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<?> full(@ModelAttribute GmailRequest request) {
try {
MimeMessage message = emailService.htmlMessage(request);
JSONObject response = emailService.send(message);
return ResponseEntity.ok(response.toMap());
} catch (Exception e) {
return ResponseEntity.internalServerError().body(new JSONObject().put("message", e.getMessage()).put("status", false).toMap());
}
}
@RequestMapping(path = "/service/confirmation", method = RequestMethod.POST, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public ResponseEntity<?> template(@ModelAttribute GmailRequest request) {
try {
String URL = dotenv.get("URL_CONFIRMATION");
assert URL != null;
JSONObject extra = request.getExtra();
JSONObject response = emailMysql.getHTMLTemplate(extra);
if(response.getBoolean("status")){
JSONObject data = response.getJSONArray("data").getJSONObject(0);
String html = data.getString("html");
html = html.replaceAll("TOKEN", extra.getString("token"));
html = html.replaceAll("URL", URL);
request.setBody(html);
MimeMessage message = emailService.htmlMessage(request);
JSONObject responseEmail = emailService.send(message);
return ResponseEntity.ok(responseEmail.toMap());
}else{
return ResponseEntity.internalServerError().body(new JSONObject().put("message", response.getString("message")).put("status", false).toMap());
}
} catch (Exception e) {
return ResponseEntity.internalServerError().body(new JSONObject().put("message", e.getMessage()).put("status", false).toMap());
}
}
}
\ No newline at end of file
......@@ -8,6 +8,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.UserRespository;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
import java.math.BigInteger;
......@@ -25,6 +26,18 @@ class JWTokenApi {
private final JWTokenUtil jwtTokenUtil;
private final UserRespository userRepo;
private final TokenSingleton tokenSingleton;
@PostMapping("/database")
public ResponseEntity<?> setDatabase(@RequestBody String token) {
JSONObject json = new JSONObject(token);
if(json.has("db") && json.has("user") && json.has("password") && json.has("url")) {
String dataToken = jwtTokenUtil.generateDataSource(json);
return ResponseEntity.ok(new JSONObject().put("token", dataToken).put("message", "Generated").put("status", true).toMap());
}else{
return ResponseEntity.status(400).body(new JSONObject().put("token", "").put("message", "Invalid Data").put("status", false).toMap());
}
}
@PostMapping("/authenticate")
public ResponseEntity<?> createAuthenticationToken(@RequestBody String authenticationRequest) {
......@@ -37,7 +50,12 @@ class JWTokenApi {
response = new JSONObject().put("token", "").put("message", "Invalid Credentials").put("status", false);
return ResponseEntity.status(401).body(response.toMap());
} else {
return ResponseEntity.ok(new JSONObject().put("token", jwtTokenUtil.generateToken((User) userDetails, json.optBigInteger("ms", BigInteger.valueOf(3600000)))).put("message", "Generated").put("status", true).toMap());
boolean onelife = json.optBoolean("onelife", false);
String generatedToken = jwtTokenUtil.generateToken((User) userDetails, json.optBigInteger("ms", onelife ? BigInteger.valueOf(0) : BigInteger.valueOf(3600000)));
if(onelife){
tokenSingleton.addToken(generatedToken);
}
return ResponseEntity.ok(new JSONObject().put("token",generatedToken).put("message", "Generated").put("status", true).toMap());
}
} catch (Exception e) {
response = new JSONObject().put("token", "").put("message", "Invalid Credentials").put("status", false);
......@@ -89,7 +107,12 @@ class JWTokenApi {
if (userDetails == null) {
return ResponseEntity.status(401).body(new JSONObject().put("token", "").put("message", "Invalid Credentials").put("status", false).toMap());
} else if (userDetails.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("SERVICE"))) {
return ResponseEntity.ok(new JSONObject().put("token", jwtTokenUtil.generateToken((User) userDetails, json.optBigInteger("ms", BigInteger.valueOf(3600000)))).put("message", "Generated").put("status", true).toMap());
boolean onelife = json.optBoolean("onelife", false);
String generatedToken = jwtTokenUtil.generateToken((User) userDetails, json.optBigInteger("ms", onelife ? BigInteger.valueOf(0) : BigInteger.valueOf(3600000)));
if(onelife){
tokenSingleton.addToken(generatedToken);
}
return ResponseEntity.ok(new JSONObject().put("token",generatedToken).put("message", "Generated").put("status", true).toMap());
} else {
return ResponseEntity.status(401).body(new JSONObject().put("token", "").put("message", "Invalid Credentials").put("status", false).toMap());
}
......@@ -98,7 +121,7 @@ class JWTokenApi {
@PostMapping("/remaining")
public ResponseEntity<?> remainingTime(@RequestBody String token) {
JSONObject json = new JSONObject(token);
try{
try {
int remaining = jwtTokenUtil.getExperyTime(json.getString("token"));
return ResponseEntity.ok(new JSONObject().put("remaining", remaining).put("message", "OK").put("status", true).toMap());
} catch (Exception e) {
......
......@@ -5,25 +5,29 @@ import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import web.multitask.trismegistoservices.mysql.ProcedureMysql;
import web.multitask.trismegistoservices.mysql.RoutineSql;
import web.multitask.trismegistoservices.repository.UserRespository;
@RestController
@CrossOrigin("*")
@RequestMapping("/api")
@AllArgsConstructor
public class AppApi {
public class RoutineApi {
final ProcedureMysql procedureMysql;
final RoutineSql procedureMysql;
final UserRespository userRepo;
@PostMapping("/private/procedure")
public ResponseEntity<?> callProcedure(@RequestBody String body) {
@PostMapping("/public/routine")
public ResponseEntity<?> callRoutine(@RequestBody String body) {
JSONObject json = new JSONObject(body);
if (json.has("procedure")) {
if (json.has("routine")) {
try {
JSONArray params = json.isNull("params") ? new JSONArray() : json.getJSONArray("params");
JSONObject response = procedureMysql.ProcedureExecution(json.getString("procedure"), json.getString("database"), params.toList().toArray());
String routine = json.getString("routine");
String database = json.optString("database");
JSONObject response = procedureMysql.routineExecutor(routine,
database,
params.toList().toArray());
return ResponseEntity.ok(response.toMap());
} catch (Exception e) {
return ResponseEntity.internalServerError().body(new JSONObject().put("message", e.getMessage()).put("status", false).toMap());
......
// package web.multitask.trismegistoservices.config;
package web.multitask.trismegistoservices.config;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Configuration;
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 io.github.cdimascio.dotenv.Dotenv;
import web.multitask.trismegistoservices.utils.DotEnvUtil;
// @Configuration
// public class DotEnvConfig {
@Configuration
public class DotEnvConfig {
// @Bean
// Dotenv getDotEnvPath() {
// return Dotenv.configure().directory(DotEnvUtil.getDotEnvPath("trismegisto-asistencia")).load();
// }
@Bean
Dotenv getDotEnvPath() {
return Dotenv.configure().directory(DotEnvUtil.getDotEnvPath("trismegisto-asistencia")).load();
}
// }
\ No newline at end of file
}
\ No newline at end of file
// package web.multitask.app.config;
//
// package web.multitask.trismegistoservices.config;
// import java.util.Properties;
//
// import javax.mail.Session;
//
// import lombok.AllArgsConstructor;
// import lombok.NoArgsConstructor;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Configuration;
//
// import io.github.cdimascio.dotenv.Dotenv;
//
// @Configuration
//// @AllArgsConstructor
// public class EmailConfig {
// Dotenv dotenv;
// public EmailConfig(Dotenv dotenv) {
// this.dotenv = dotenv;
// }
//
//// Dotenv dotenv;
//
// @Bean
// public Session setSession() {
// Properties properties = new Properties();
// String enabled = dotenv.get("EMAIL_STARTTLS_ENABLE");
// String email = dotenv.get("EMAIL_CORREO");
// String password = dotenv.get("EMAIL_PASSWORD");
// String port = dotenv.get("EMAIL_PORT");
// String host = dotenv.get("EMAIL_HOST");
// String enabled = "true";//dotenv.get("EMAIL_STARTTLS_ENABLE");
// String email = "trismegisto.planilla@sacooliveros.edu.pe";//dotenv.get("EMAIL_CORREO");
// String password = "Saco1357$";//dotenv.get("EMAIL_PASSWORD");
// String port = "587";//dotenv.get("EMAIL_PORT");
// String host = "smtp.gmail.com";//dotenv.get("EMAIL_HOST");
// properties.put("mail.smtp.host", host);
// properties.put("mail.smtp.starttls.enable", enabled);
// properties.put("mail.smtp.port", port);
......@@ -33,11 +32,11 @@
// properties.put("mail.smtp.password", password);
// properties.put("mail.smtp.user", email);
// properties.put("mail.smtp.auth", enabled);
// properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
// properties.put("mail.smtp.ssl.trust", "smtp.gmail.com");
// properties.put("mail.smtp.socketFactory.port", port);
// properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
// properties.put("mail.smtp.ssl.protocols", "TLSv1.2");
// return Session.getDefaultInstance(properties);
// }
//
// }
package web.multitask.trismegistoservices.config;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.util.Collections;
import java.util.List;
import java.util.*;
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;
......@@ -17,33 +24,108 @@ import com.google.api.services.drive.DriveScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import javax.annotation.PostConstruct;
@Configuration
public class GoogleConfig {
private static final List<String> SCOPES = Collections.singletonList(DriveScopes.DRIVE);
private static final String CREDENTIALS_FILE_PATH = "/trimegistro-mongo-3e687dba9acb.json";
private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
private static final String OAUTH2 = "/oAuth2.json";
private static final String CREDENTIALS_FOLDER_PATH = "/tokens";
@Bean
private final String APPLICATION_NAME = "FullService Application";
private String refresh_token_gmail = null;
private String refresh_token_drive = null;
private String client_id = null;
private String client_secret = null;
@PostConstruct
public void getGoogleCredentials() {
try {
InputStream in = GoogleConfig.class.getResourceAsStream(CREDENTIALS_FOLDER_PATH + OAUTH2);
if (in == null)
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FOLDER_PATH + OAUTH2);
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
client_id = clientSecrets.getDetails().getClientId();
client_secret = clientSecrets.getDetails().getClientSecret();
refresh_token_gmail = clientSecrets.getDetails().get("gmail_refresh_token").toString();
refresh_token_drive = clientSecrets.getDetails().get("drive_refresh_token").toString();
}catch (IOException e) {
System.out.println("Error: " + e);
}
}
public Drive getDrive() {
try {
String APPLICATION_NAME = "FullService Application";
JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY,
new HttpCredentialsAdapter(getCredentials(HTTP_TRANSPORT)))
.setApplicationName(APPLICATION_NAME)
.build();
NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Credential authorize = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(client_id, client_secret)
.build()
.setAccessToken(getAccessToken(refresh_token_drive))
.setRefreshToken(refresh_token_drive);
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, authorize)
.setApplicationName(APPLICATION_NAME).build();
} catch (GeneralSecurityException | IOException e) {
System.out.println("Error: " + e);
return null;
}
}
GoogleCredentials getCredentials(final NetHttpTransport HTTP_TRANSPORT)
throws IOException {
InputStream in = GoogleConfig.class.getResourceAsStream(CREDENTIALS_FOLDER_PATH+CREDENTIALS_FILE_PATH);
if (in == null) throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FOLDER_PATH+CREDENTIALS_FILE_PATH);
return GoogleCredentials.fromStream(in).createScoped(SCOPES);
public Gmail getGmail() {
try {
NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Credential authorize = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(client_id, client_secret)
.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) {
System.out.println("Error: " + e);
return null;
}
}
public String getAccessToken(String refresh_token) {
try {
Map<String, Object> params = new LinkedHashMap<>();
params.put("grant_type", "refresh_token");
params.put("client_id", client_id);
params.put("client_secret", client_secret);
params.put("refresh_token",refresh_token);
StringBuilder postData = new StringBuilder();
for (Map.Entry<String, Object> param : params.entrySet()) {
if (postData.length() != 0) {
postData.append('&');
}
postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
}
byte[] postDataBytes = postData.toString().getBytes(StandardCharsets.UTF_8);
URL url = new URL("https://accounts.google.com/o/oauth2/token");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestMethod("POST");
con.getOutputStream().write(postDataBytes);
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder buffer = new StringBuilder();
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
buffer.append(line);
}
JSONObject json = new JSONObject(buffer.toString());
return json.getString("access_token");
} catch (Exception ex) {
System.out.println("Error: " + ex);
}
return null;
}
}
\ No newline at end of file
......@@ -10,7 +10,7 @@ public class MVCConfig
implements WebMvcConfigurer {
@Override
public void addCorsMappings(@NonNull CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
// registry.addMapping("/**")
// .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
}
}
\ No newline at end of file
......@@ -19,6 +19,8 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import web.multitask.trismegistoservices.filter.JWTokenFilter;
import web.multitask.trismegistoservices.repository.UserRespository;
import web.multitask.trismegistoservices.singleton.ThreadLocalSingleton;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
@Configuration
......@@ -28,6 +30,8 @@ public class SecurityConfig{
private final UserRespository userRepo;
private final JWTokenUtil jwtTokenUtil;
private final TokenSingleton tokenSingleton;
private ThreadLocalSingleton threadLocalSingleton;
@Bean
AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)
......@@ -46,12 +50,8 @@ public class SecurityConfig{
.regexMatchers(".*/public/.*").permitAll()
.regexMatchers(".*/service/.*").hasAnyAuthority("ADMIN", "SERVICE")
.antMatchers(HttpMethod.GET, "/**").permitAll()
// .antMatchers(HttpMethod.POST, "/**").permitAll()
.antMatchers("/token/**").permitAll());
// .anyRequest()
// .authenticated());
http.addFilterBefore(new JWTokenFilter(jwtTokenUtil, userRepo), UsernamePasswordAuthenticationFilter.class);
http.addFilterBefore(new JWTokenFilter(jwtTokenUtil, userRepo, tokenSingleton,threadLocalSingleton), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
......@@ -60,16 +60,15 @@ public class SecurityConfig{
return new BCryptPasswordEncoder();
}
@Bean
CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
// config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
// @Bean
// CorsFilter corsFilter() {
// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// CorsConfiguration config = new CorsConfiguration();
// config.addAllowedOrigin("*");
// config.addAllowedHeader("*");
// config.addAllowedMethod("*");
// source.registerCorsConfiguration("/**", config);
// return new CorsFilter(source);
// }
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
......@@ -11,15 +12,18 @@ import org.jetbrains.annotations.NotNull;
import org.json.JSONObject;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpHeaders;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
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.web.filter.OncePerRequestFilter;
import io.jsonwebtoken.io.IOException;
import web.multitask.trismegistoservices.repository.UserRespository;
import web.multitask.trismegistoservices.singleton.ThreadLocalSingleton;
import web.multitask.trismegistoservices.singleton.TokenSingleton;
import web.multitask.trismegistoservices.utils.JWTokenUtil;
@Component
......@@ -30,24 +34,34 @@ public class JWTokenFilter extends OncePerRequestFilter {
private JWTokenUtil jwtTokenUtil = null;
private UserRespository userRepo = null;
private TokenSingleton tokenSingleton = null;
private ThreadLocalSingleton threadLocalSingleton = null;
@Override
protected void doFilterInternal(HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull FilterChain chain)
throws ServletException, IOException, java.io.IOException {
response.setContentType("application/json");
response.setContentType("application/json");
final String Authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
final String dbConnection = request.getHeader("Database");
String token;
try {
token = Authorization.split(" ")[1];
} catch (Exception e) {
token = null;
}
if(dbConnection != null && !dbConnection.isEmpty()){
String dataBaseGotten = jwtTokenUtil.getDataToken(dbConnection);
DataSource ds = getDataSource(new JSONObject(dataBaseGotten));
threadLocalSingleton.setJdbcTemplate(new JdbcTemplate(ds));
}
if (token == null || token.isEmpty()) {
chain.doFilter(request, response);
} else {
if (jwtTokenUtil.validateToken(token)) {
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(
......@@ -61,4 +75,28 @@ public class JWTokenFilter extends OncePerRequestFilter {
}
}
}
private DriverManagerDataSource getDataSource(JSONObject json) {
String driver = "";
switch (json.getString("db")) {
case "mysql":
driver = "com.mysql.cj.jdbc.Driver";
break;
case "postgresql":
driver = "org.postgresql.Driver";
break;
case "oracle":
driver = "oracle.jdbc.driver.OracleDriver";
break;
case "sqlserver":
driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
break;
}
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(json.getString("url"));
dataSource.setUsername(json.getString("user"));
dataSource.setPassword(json.getString("password"));
return dataSource;
}
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.OutputStream;
public interface IDriveService {
String uploadFile(String folder_id, String file_name, MultipartFile file, JSONObject base64);
String uploadFile(String folder_id, String file_name, MultipartFile file, String base64);
String createFolder(String folder_id, String folder_name);
String deleteFile(String file_id);
String deleteFolder(String folder_id);
......
......@@ -13,8 +13,6 @@ public class DriveRequest {
private String folder_id;
private String file_name;
private MultipartFile file;
private String base64_name;
private String base64_file;
private String base64;
}
\ No newline at end of file
......@@ -9,7 +9,9 @@ import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
public class EmailRequest {
public class GmailRequest {
private String from;
private String alias;
private String to;
private String cc;
private String bcc;
......
package web.multitask.trismegistoservices.mysql;
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;
import java.util.Objects;
@Service
public class ProcedureMysql {
private final JdbcTemplate jdbcTemplate;
@AllArgsConstructor
public class RoutineSql {
public ProcedureMysql(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
private final ThreadLocalSingleton threadLocalSingleton;
public JSONObject routineExecutor(String routine, String database, Object[] params) {
String jdbcUrl;
JdbcTemplate jdbcTemplate = threadLocalSingleton.getJdbcTemplate();
try {
jdbcUrl = Objects.requireNonNull(jdbcTemplate.getDataSource()).getConnection().getMetaData().getURL();
} catch (Exception e) {
return new JSONObject().put("message", e.getMessage()).put("status", false);
}
switch (jdbcUrl.split(":")[1]) {
case "mysql":
return mysqlProcedure(routine, database, params, jdbcTemplate);
case "postgresql":
return postgreFunction(routine, database, params, jdbcTemplate);
default:
return new JSONObject().put("message", "Database not supported").put("status", false);
}
}
public JSONObject ProcedureExecution(String procedure ,String database, Object[] params) {
private JSONObject mysqlProcedure(String routine, String database, Object[] params, JdbcTemplate jdbcTemplate) {
try {
StringBuilder query = new StringBuilder("CALL " + database + "." + procedure);
StringBuilder query = new StringBuilder("CALL " + database + "." + routine);
if (params.length > 0) {
query.append("(");
......@@ -32,9 +52,9 @@ public class ProcedureMysql {
query.append(")");
}
String checkProcedure = "SELECT COUNT(*) FROM information_schema.routines WHERE routine_schema = '" + database + "' AND routine_name = '" + procedure;
String checkProcedure = "SELECT COUNT(*) FROM information_schema.routines WHERE routine_schema = '" + database + "' AND routine_name = '" + routine + "'";
List<Map<String, Object>> countProcedure = jdbcTemplate.queryForList(checkProcedure);
if (countProcedure.get(0).get("COUNT(*)").toString().equals("0")) {
return new JSONObject().put("message", "Procedure not found").put("status", false);
}
......@@ -49,4 +69,39 @@ public class ProcedureMysql {
return new JSONObject().put("data", new JSONObject()).put("message", e.getMessage()).put("status", false);
}
}
private JSONObject postgreFunction(String routine, String database, Object[] params,JdbcTemplate jdbcTemplate) {
try {
StringBuilder query = new StringBuilder("SELECT * FROM " + database + "." + routine);
if (params.length > 0) {
query.append("(");
for (int i = 0; i < params.length; i++) {
query.append("?");
if (i < params.length - 1) {
query.append(",");
}
}
query.append(")");
}
String checkFunction = "SELECT COUNT(*) FROM information_schema.routines WHERE routine_schema = '" + database + "' AND routine_name = '" + routine + "'";
List<Map<String, Object>> countFunction = jdbcTemplate.queryForList(checkFunction);
if (countFunction.get(0).get("count").toString().equals("0")) {
return new JSONObject().put("message", "Function not found").put("status", false);
}
List<Map<String, Object>> list = jdbcTemplate.queryForList(query.toString(), params);
JSONObject result = new JSONObject();
result.put("data", list);
result.put("message", "Success");
result.put("status", true);
return result;
} catch (Exception e) {
System.out.println(e.getMessage());
return new JSONObject().put("data", new JSONObject()).put("message", e.getMessage()).put("status", false);
}
}
}
\ No newline at end of file
package web.multitask.trismegistoservices.services;
// package web.multitask.app.service;
// import java.io.ByteArrayInputStream;
// import java.io.File;
// import java.io.FileInputStream;
// import java.io.FileNotFoundException;
// import java.io.FileOutputStream;
// import java.io.IOException;
// import java.io.InputStream;
// import java.io.UnsupportedEncodingException;
// import java.util.Objects;
// import java.util.Properties;
// import java.util.stream.Collectors;
// import java.util.stream.Stream;
// import javax.activation.DataHandler;
// import javax.activation.FileDataSource;
// import javax.mail.BodyPart;
// import javax.mail.MessagingException;
// import javax.mail.Multipart;
// import javax.mail.Session;
// import javax.mail.Transport;
// import javax.mail.internet.AddressException;
// import javax.mail.internet.InternetAddress;
// import javax.mail.internet.MimeBodyPart;
// import javax.mail.internet.MimeMessage;
// import javax.mail.internet.MimeMultipart;
// import org.json.JSONObject;
// import org.springframework.stereotype.Service;
// import org.springframework.web.multipart.MultipartFile;
// import io.github.cdimascio.dotenv.Dotenv;
// import web.multitask.app.model.EmailRequest;
// import web.multitask.app.utils.CommonUtils;
// @Service
// public class EmailService {
// Dotenv dotenv;
// Session session;
// CommonUtils commonUtils;
// public EmailService(Dotenv dotenv, Session session, CommonUtils commonUtils) {
// this.dotenv = dotenv;
// this.session = session;
// this.commonUtils = commonUtils;
// }
// public MimeMessage htmlMessage(EmailRequest request) throws UnsupportedEncodingException {
// try {
// String email = dotenv.get("EMAIL_CORREO");
// MimeMessage message = new MimeMessage(session);
// message.setFrom(new InternetAddress(email, "FULLSERVICE APPLICATION"));
// message.setSender(new InternetAddress(email, "FULLSERVICE APPLICATION"));
// message.setRecipients(MimeMessage.RecipientType.TO,
// buildRecipients(new JSONObject().put("to", request.getTo()), "to"));
// if (request.getCc() != null) {
// message.setRecipients(MimeMessage.RecipientType.CC,
// buildRecipients(new JSONObject().put("cc", request.getCc()), "cc"));
// }
// if (request.getBcc() != null) {
// message.setRecipients(MimeMessage.RecipientType.BCC,
// buildRecipients(new JSONObject().put("bcc", request.getBcc()), "bcc"));
// }
// message.setSubject(request.getSubject());
// MimeBodyPart texto = new MimeBodyPart();
// texto.setContent(request.getBody(), "text/html; charset=utf-8");
// MimeMultipart multiParte = new MimeMultipart();
// multiParte.addBodyPart(texto);
// try {
// String file_folder = dotenv.get("FILE_FOLDER");
// MultipartFile[] files = request.getFiles();
// for (MultipartFile file : files) {
// BodyPart adjunto = new MimeBodyPart();
// String fileName = file.getOriginalFilename();
// convertByteArrayToFile(file.getBytes(), fileName, file_folder);
// FileDataSource fds = new FileDataSource(file_folder +"/"+ fileName);
// adjunto.setDataHandler(new DataHandler(fds));
// adjunto.setFileName(fds.getName());
// multiParte.addBodyPart(adjunto);
// }
// } catch (Exception e) {
// System.out.println(e.getMessage());
// }
// message.setContent(multiParte);
// return message;
// } catch (MessagingException e) {
// System.out.println(e.getMessage());
// return null;
// }
// }
// public void convertByteArrayToFile (byte[] byteArray, String fileName, String file_folder){
// try (FileOutputStream fos = new FileOutputStream(file_folder +"/"+ fileName)) {
// fos.write(byteArray);
// }catch(Exception e){
// System.out.println(e.getMessage());
// }
// }
// public MimeMessage simpleMessage(EmailRequest request) throws UnsupportedEncodingException {
// try {
// MimeMessage message = new MimeMessage(session);
// String email = dotenv.get("EMAIL_CORREO");
// message.setFrom(new InternetAddress(email, "FULLSERVICE APPLICATION"));
// message.setSender(new InternetAddress(email, "FULLSERVICE APPLICATION"));
// message.setRecipients(MimeMessage.RecipientType.TO,
// buildRecipients(new JSONObject().put("to", request.getTo()), "to"));
// message.setSubject(request.getSubject());
// message.setText(request.getBody());
// return message;
// } catch (MessagingException e) {
// e.printStackTrace();
// return null;
// }
// }
// public JSONObject send(MimeMessage message) {
// try {
// Transport t = session.getTransport("smtp");
// String email = dotenv.get("EMAIL_CORREO");
// String password = dotenv.get("EMAIL_PASSWORD");
// t.connect(email, password);
// t.sendMessage(message, message.getAllRecipients());
// t.close();
// // CommonUtils.deleteAllFiles();
// boolean deletes = commonUtils.deleteAllFiles();
// if(!deletes){
// System.out.println("Error al eliminar los archivos");
// }
// return new JSONObject().put("message", "OK").put("status", true);
// } catch (Exception e) {
// System.out.println(e.getMessage());
// return new JSONObject().put("message", e.getMessage()).put("status", false);
// }
// }
// public InternetAddress[] buildRecipients(JSONObject json, String type) {
// String[] recipients = json.optString(type).split(",");
// InternetAddress[] addresses = new InternetAddress[recipients.length];
// Stream.of(recipients).map(recipient -> {
// try {
// return new InternetAddress(recipient);
// } catch (AddressException e) {
// System.out.println(e.getMessage());
// return null;
// }
// }).filter(Objects::nonNull).collect(Collectors.toList()).toArray(addresses);
// return addresses;
// }
// }
\ No newline at end of file
package web.multitask.trismegistoservices.services;
package web.multitask.trismegistoservices.services.google;
import java.io.*;
import java.nio.file.Files;
import java.util.Collections;
import lombok.AllArgsConstructor;
......@@ -27,7 +28,7 @@ public class DriveService implements IDriveService {
private final CommonUtils commonUtils;
@Override
public String uploadFile(String folder_id, String file_name, MultipartFile file, JSONObject base64) {
public String uploadFile(String folder_id, String file_name, MultipartFile file, String base64) {
try {
if (null != file) {
File fileMetadata = new File();
......@@ -40,6 +41,20 @@ public class DriveService implements IDriveService {
new ByteArrayInputStream(file.getBytes())))
.setFields("id").execute();
return uploadFile.getId();
}else if (!base64.isEmpty()) {
java.io.File fileBytes = commonUtils.base64ToFile(base64,file_name);
File fileMetadata = new File();
fileMetadata.setParents(Collections.singletonList(folder_id));
fileMetadata.setName(file_name);
File uploadFile = googleConfig.getDrive()
.files()
.create(fileMetadata, new InputStreamContent(
MediaType.APPLICATION_OCTET_STREAM_VALUE,
Files.newInputStream(fileBytes.toPath())))
.setFields("id").execute();
return uploadFile.getId();
}else{
return null;
}
} catch (Exception e) {
System.out.printf("Error: " + e);
......
package web.multitask.trismegistoservices.services.google;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import com.google.api.client.util.Base64;
import java.util.Objects;
import java.util.Properties;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import com.google.api.services.gmail.model.Message;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import web.multitask.trismegistoservices.config.GoogleConfig;
import web.multitask.trismegistoservices.model.GmailRequest;
@Service
public class GmailService {
private final GoogleConfig googleConfig;
public GmailService(GoogleConfig googleConfig) {
this.googleConfig = googleConfig;
}
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
public MimeMessage htmlMessage(GmailRequest request) throws UnsupportedEncodingException {
try {
MimeMessage message = new MimeMessage(session);
String alias = (request.getAlias() == null || request.getAlias().isEmpty()) ? request.getFrom() : request.getAlias();
message.setFrom(new InternetAddress(
request.getFrom(), alias
));
message.setSender(new InternetAddress(
request.getFrom(),alias
));
message.setRecipients(MimeMessage.RecipientType.TO,
buildRecipients(new JSONObject().put("to", request.getTo()), "to"));
if (request.getCc() != null) {
message.setRecipients(MimeMessage.RecipientType.CC,
buildRecipients(new JSONObject().put("cc", request.getCc()), "cc"));
}
if (request.getBcc() != null) {
message.setRecipients(MimeMessage.RecipientType.BCC,
buildRecipients(new JSONObject().put("bcc", request.getBcc()), "bcc"));
}
message.setSubject(request.getSubject());
MimeBodyPart texto = new MimeBodyPart();
texto.setContent(request.getBody(), "text/html; charset=utf-8");
MimeMultipart multiParte = new MimeMultipart();
multiParte.addBodyPart(texto);
try {
String file_folder = "";
MultipartFile[] files = request.getFiles();
for (MultipartFile file : files) {
BodyPart adjunto = new MimeBodyPart();
String fileName = file.getOriginalFilename();
convertByteArrayToFile(file.getBytes(), fileName, file_folder);
FileDataSource fds = new FileDataSource(file_folder +"/"+ fileName);
adjunto.setDataHandler(new DataHandler(fds));
adjunto.setFileName(fds.getName());
multiParte.addBodyPart(adjunto);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
message.setContent(multiParte);
return message;
} catch (MessagingException e) {
System.out.println(e.getMessage());
return null;
}
}
public void convertByteArrayToFile (byte[] byteArray, String fileName, String file_folder){
try (FileOutputStream fos = new FileOutputStream(file_folder +"/"+ fileName)) {
fos.write(byteArray);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
public JSONObject send(MimeMessage email) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
email.writeTo(baos);
String encodedEmail = Base64.encodeBase64URLSafeString(baos.toByteArray());
Message message = new Message();
message.setRaw(encodedEmail);
System.out.println(googleConfig.getGmail().users().messages().send("me", message).execute());
return new JSONObject().put("message", "Email enviado correctamente").put("status", true);
} catch (Exception e) {
System.out.println(e.getMessage());
return new JSONObject().put("message", e.getMessage()).put("status", false);
}
}
public InternetAddress[] buildRecipients(JSONObject json, String type) {
String[] recipients = json.optString(type).split(",");
InternetAddress[] addresses = new InternetAddress[recipients.length];
Stream.of(recipients).map(recipient -> {
try {
return new InternetAddress(recipient);
} catch (AddressException e) {
System.out.println(e.getMessage());
return null;
}
}).filter(Objects::nonNull).collect(Collectors.toList()).toArray(addresses);
return addresses;
}
}
\ No newline at end of file
package web.multitask.trismegistoservices.singleton;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class ThreadLocalSingleton {
private final ThreadLocal<JdbcTemplate> jdbcTemplateThreadLocal = new ThreadLocal<>();
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
jdbcTemplateThreadLocal.set(jdbcTemplate);
}
public JdbcTemplate getJdbcTemplate() {
JdbcTemplate jdbcTemplate = jdbcTemplateThreadLocal.get();
if (jdbcTemplate == null) {
jdbcTemplate = new JdbcTemplate();
jdbcTemplateThreadLocal.set(jdbcTemplate);
}
return jdbcTemplate;
}
}
package web.multitask.trismegistoservices.singleton;
import lombok.Getter;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.stream.IntStream;
@Getter
@Component
public class TokenSingleton {
private final JSONArray tokens = new JSONArray();
public boolean consumeToken(String token) {
boolean isAvailable = false;
for (int i = 0; i < tokens.length(); i++) {
if (tokens.getJSONObject(i).getString("token").equals(token)) {
if (tokens.getJSONObject(i).getBoolean("available")) {
tokens.getJSONObject(i).put("available", false);
isAvailable = true;
}
break;
}
}
return isAvailable;
}
public void addToken(String token) {
tokens.put(new JSONObject().put("token", token).put("available", true));
}
public TokenSingleton() {
}
@Scheduled(fixedRate = 3600000)
public void removeUnavailableTokens() {
System.out.println("Removing unavailable tokens");
IntStream.range(0, tokens.length()).forEach(i -> {
if (!tokens.getJSONObject(i).getBoolean("available")) {
tokens.remove(i);
}
});
}
}
......@@ -70,4 +70,28 @@ public class CommonUtils {
}
};
}
public boolean deleteAllFiles() {
try {
String tmpFolder = System.getProperty("java.io.tmpdir");
File folder = new File(tmpFolder);
if (!folder.exists() || !folder.isDirectory()) {
return false;
}
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile()) {
if (!file.delete()) {
System.err.println("Failed to delete file: " + file.getAbsolutePath());
}
}
}
}
return true;
} catch (SecurityException e) {
System.err.println("Security exception occurred: " + e.getMessage());
return false;
}
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.math.BigInteger;
import java.util.Date;
import io.jsonwebtoken.ExpiredJwtException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
......@@ -17,6 +18,7 @@ public class JWTokenUtil implements Serializable{
@Value("${app.jwtSecret}")
private String jwtSecret;
public String generateToken(User user, BigInteger ms) {
if(ms == null){
ms = BigInteger.valueOf(3600000);
......@@ -33,6 +35,15 @@ public class JWTokenUtil implements Serializable{
.compact();
}
public String generateDataSource(JSONObject json){
return Jwts.builder()
.setSubject(json.toString())
.setIssuedAt(new Date())
.setExpiration(new Date(new Date().getTime() + 36000000))
.signWith(Keys.hmacShaKeyFor(jwtSecret.getBytes()))
.compact();
}
public boolean validateToken(String token) {
try {
Jwts.parserBuilder()
......@@ -52,7 +63,9 @@ public class JWTokenUtil implements Serializable{
.build()
.parseClaimsJws(token)
.getBody().getSubject();
}catch (Exception e){
} catch (ExpiredJwtException expiredJwtException) {
return expiredJwtException.getClaims().getSubject();
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
......
......@@ -2,12 +2,11 @@ spring.datasource.url=jdbc:mysql://172.16.1.32:3306/seguridad
spring.datasource.username=desarrollo
spring.datasource.password=5vC0$2019$
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
server.port=8081
server.address=0.0.0.0
server.port=8081
server.address=0.0.0.0
# spring.jpa.show-sql=true
app.jwtSecret=9a4f2c8d3b7a1e6f45c8a0b3f267d8b1d4e6f3c8a9d2b5f8e3a9c8b5f6v8a3d9
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.ddl-auto=update
spring.security.filter.order=1
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
\ No newline at end of file
{
"web": {
"client_id": "783525806421-34sgkcpfctk7d55mbs7j9v2ktlqeants.apps.googleusercontent.com",
"project_id": "trimegisto-planilla",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "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",
"redirect_uris": [
"http://localhost:8081"
],
"gmail_refresh_token" : "1//0h1Vav6bFY6CNCgYIARAAGBESNwF-L9IrsBAFQpLDY9ct5JLIjRoybv-rl3fWXmzbP1lKMqfOD2B0EYFBPNtaBpo6QcHB5hh4wBA",
"drive_refresh_token" : "1//05uUWOcbm9wDzCgYIARAAGAUSNwF-L9IrWjCmPvmc5aSwcJzRfWYClp4Vr9NEXbdaFCBbbbkmpBi3zuaPoXJc0lr21Ql2dH0Jrdc"
}
}
\ No newline at end of file
{
"type": "service_account",
"project_id": "trimegisto-planilla",
"private_key_id": "ec3ed783ba6ce35de0367caacbff70b35baa4d8e",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYi4NVOq7o5axq\nXpfiHaMUhpfDfty56AkzjD3mf9phPar3OsCtudKjNFt4S5i3IhBRXq8ytfV0h5F5\nFF+cNOZKacTCv66vT3hUS2qvWdlsm+0LKZEGWXMBRAJfQUroCxQP37jd7am+rFCA\nioGRR2+n3a++HRa/y1olV2uY3rJFd35yFCi1oS9ObjxzFCWM2kHemM1XBjUWDbFf\nynC/PEj1lv1ASVIO5wr9iL6ZXlLItmewmWd1ZvLfV9dcpvZSOhK1AaPIy1CQcSkh\ny6ul5c6TPK7XZEMs23kSy7mSKitTVQrnzu1qn0szxVqYyI8eqVbfgsoXShaf4kWh\nvsyo9kzBAgMBAAECggEAIXRkZO19ClQ5b/GPS4rCoDAvEC/wT/RuP32CLrM//Nf3\nKtzz2aMkzLwRCaO8Q0bK+JdFP/NmqYssSWWBY/O0RHjUwjW0+jav424HXHHoKmRo\nmdnhIvb80ow8RZUjynezsMQinn7SQ7gBc+pyHAzKTkfsl9WMpzL2iWBZKjP1nM+R\nhAJXYTKPdPX4aOEo/CldvoU23lfxhhMM8aCcKWb9kpu/W5qdInhh8FnJZdRk+Ad3\nziJQRJvzLGCvxbCjYwNQbybjMFH3vJQp/jvcA9JluxQQfFfqCZd7bON+r+aDFALR\nLy/TFAwtLcB6ggXx2Gm//1QIdwWImFoFaoFcceSxxQKBgQDsfeoqs1tsNFw76l/O\nUkxIp8wqwxgvbmxA9bshZE4xiE76HOWJ3SVCPCmW984hVzwzh85vcdWQeHakrorG\nJ5d8HnR83/MItiJRB9GD8o8HuhRkEjGYymgtzCuln2HmNJrUfkoYF8QLEN3ctQrd\n49vxKjs8hMlsScqSfjjFXPU56wKBgQDqaF9oSfqz6xT56dS7n4ehLZ9Q/2qmaOL5\ngxOwfu4388IvZswpJ/v6Pieps5IYMv1bFNc/I7+1x7IKI/K+7bVWblEEpQEJdqQj\nQradiCTASaafKGbq+ObqyG9kSm/NT7r3VCDhDwNe1TchL5tPOFWxVJfIwrgY9Nw2\nZlRSTtUdAwKBgFNDWcjC8TM9lCO8NxMLQrRp76Y2njNE63RLkCEHkcg6t6OzvNU3\nOUECsZnnkXmHnzh9Xh86svh0kUEV+uIdWmZmypiUuJqelaJ14DxWkCkmSLua9D9Z\nNCi7s7pSTUOhzcl21Vt6Mpm6zIJCc5r/+JYGSmjaT5iCuoGtUwuZ2PUVAoGBANRu\nrHA2A0cEd+kY+Zrjs6XlU6mzH/MZwQFAwhpEnh0FAum0breprdkWdRl9TJwzsZnW\npE9rVXUnOfmopHhVsu5WYYQlCXCLHat67UaMuEmvNZqtob+2vIbwCMtKDlJxvE4i\n5v0vfu11q1We8FB2DGr97+SYWwD6/4spZ6eEG+0DAoGARXQLveeSo4OVpbg29eQ9\n0bPOfYKjF7vNAGf0yDB19fgrQmz/MxaN0KKfIqXb91kFL2TZg9ekwNwN42cH0TJU\nlvIXfOjF4oXcCC1x2b5J7a3FlLrYGJZXiWapF0rg9KtvsfnEFwfucwvfWG6tOYh9\n3UgwfMV9qHCMRN1tvfbzXJo=\n-----END PRIVATE KEY-----\n",
"client_email": "tp-services@trimegisto-planilla.iam.gserviceaccount.com",
"client_id": "109307993437397271961",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/tp-services%40trimegisto-planilla.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
\ No newline at end of file
{
"type": "service_account",
"project_id": "trimegistro-mongo",
"private_key_id": "3e687dba9acbe6cfdf2b0ea5dbdac21de0f1c040",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDQfiCmdlpaJd7f\nNohbvnun3CbfVOy+dUuUOTYWGOAnyAh/ARQ6XC3+Ceplg7uc3XiKQYMPl+dKAv2G\nbIcpwb4BIz6rpknd1AM5I1ObJcwmxHblsKLUq55Ixkjke5IQYWvBkwdNENORZMgP\nWTuj1x9HGhCynWZCimFXsKvsJnWwlTkFAZJWwXtJDt6m0TqCH/aGKrH2C5pZvQyd\nlZHlQF3dlQ1PlOVB4stD0tKSXtU6dxrZzTv8os+uwfZel6lF+90TkE2DfOT0bWxD\n+7GVqWPTtrY6TvCOaucGSR08cnncqA030/X7MORuyXp4tmmWNK4iFdacPOdA/X1k\nCVe4Pv7TAgMBAAECggEAL1yPfzEAilzy+YLSTAED5xhgLjiFBSjxD81FR5TECtVq\ndKtilHVPL1fCSug3bMV0tfd21cp8jHgMboZl1+r+hhSjDmwaeI1KZCbtvZ9C9oWH\nutq6ypPnw4Fjmp+liRoQV+tV68BIR019EtuC7E+Yd9bodyLBUZlMzpZAH8eG0aNT\nUYYvxbJvHKGr7/YSM+k5Uhngw9rDoVFHJsBywQ0NmU4/VJxEB5M5V4jmnUn4OXaY\nnt+NhmEa7NJCsB6ASnYdxxojJBFzCwt3YqHQk9kBhB2SnoUyx4YZXXYphJnFpI/0\natzChjWSbdQKX3pwKiVQ9nXgIWTgPZtW98E5FQ6eVQKBgQDr9Z8WTYawWvpNnx3L\nYRGAyQVqa7mvxonHaxiRWCt6DzMRn/gzt0fup8NnW+82EobHuwpmq4GegVHQ8a/Y\ntCMD98bnlF/ZQADIMEisjES2OJrliOAZok2h+xAAIZ/NjJQSAanY6ylJPus7TDjq\nolRc6yisE4EJjk8KMC440yaPhQKBgQDiM05pgEwad5+TKPltFUmOrO9xNb4lWShy\nOTXHGbpeld83c6zP4JQoKauy4XrDpXPpr4czWAOnQtxS4lcA1HS47od94k9MTN9C\ndtiLqJSWaCpBaKw7POJimiKzFKCllWRYbqhf2dpsG2fnKFls9LpN7xyU4Dmh71IK\nFYLOhIeodwKBgCk1zsEgbSOj4A9qeNOqclohwbZidh3C+RFBHRtVYNKCkRLE855k\npkWCO1hz8AVrmuqLOjfQQGUkhNuPOn0IiQ0KW0za1xqkWP6doDOyk9WXcUYhb7JK\nbHCb3qGHPdeyc7HpZHakK6PFP2Qt3crs6vsHfyT+iwzWM+u9mnUGO7fZAoGBAKJ4\n2ax7w64LGCpadvW8IY6CdqXpRT+MT7njj9YHi87edWteAdV6aNCERdiBjm0yzRQf\nyMu/PziHlLtP6dAlygT/B4EK6YxTdtVFifqeRsPV4+wBZBxUegL61Uut2Em3CVFf\ngj7+up2F/daSK9FP4vWRdwUUHTFMNbAajU8K8Gm3AoGAN39pkgWds/2n8QWNG6xg\n7fgvNdKlOChYzEwfKYSsBWSJYVbycxZwYf2Z56DFs8k5Gkq1TmUP5wZJEXgQEgQL\nSyBZpYeidMJTZeBAdoQP/YcD/BbbrZERBEB7AOFkqio4tZvsQ+P+05D8EZFaxfWL\n+n6qKIWmY/pmTz1UMq38Z44=\n-----END PRIVATE KEY-----\n",
"client_email": "drive-full-service@trimegistro-mongo.iam.gserviceaccount.com",
"client_id": "112792567782824987338",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/drive-full-service%40trimegistro-mongo.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
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