Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
trismegisto-services
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Mauro Paolo Josue Zuñiga Mallqui
trismegisto-services
Commits
283692e4
Commit
283692e4
authored
Apr 29, 2025
by
Mauro Paolo Josue Zuñiga Mallqui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ADD] MUCHAS MODIFICACIONES Y SE AÑADIO EL BBVA API QR
parent
46f6c7be
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
498 additions
and
121 deletions
+498
-121
pom.xml
pom.xml
+0
-0
DotEnvConfig.java
...eb/multitask/trismegistoservices/config/DotEnvConfig.java
+3
-3
GoogleConfig.java
...eb/multitask/trismegistoservices/config/GoogleConfig.java
+6
-14
SecurityConfig.java
.../multitask/trismegistoservices/config/SecurityConfig.java
+4
-6
AuthChannelInterceptorAdapter.java
...megistoservices/filter/AuthChannelInterceptorAdapter.java
+3
-6
JWTokenFilter.java
...b/multitask/trismegistoservices/filter/JWTokenFilter.java
+36
-16
RoutineSql.java
...a/web/multitask/trismegistoservices/mysql/RoutineSql.java
+1
-2
bbvaRest.java
...web/multitask/trismegistoservices/rest/BBVA/bbvaRest.java
+42
-0
bbvaWebHook.java
.../multitask/trismegistoservices/rest/BBVA/bbvaWebHook.java
+18
-0
UtilsApi.java
...java/web/multitask/trismegistoservices/rest/UtilsApi.java
+0
-0
consoleRest.java
...a/web/multitask/trismegistoservices/rest/consoleRest.java
+2
-2
driveRest.java
...ava/web/multitask/trismegistoservices/rest/driveRest.java
+2
-2
emailRest.java
...ava/web/multitask/trismegistoservices/rest/emailRest.java
+2
-2
excelRest.java
...ava/web/multitask/trismegistoservices/rest/excelRest.java
+2
-2
pdfRest.java
.../java/web/multitask/trismegistoservices/rest/pdfRest.java
+2
-2
routineRest.java
...a/web/multitask/trismegistoservices/rest/routineRest.java
+2
-3
tokenRest.java
...ava/web/multitask/trismegistoservices/rest/tokenRest.java
+6
-7
bbvaService.java
...titask/trismegistoservices/services/BBVA/bbvaService.java
+171
-0
ExcelService.java
.../multitask/trismegistoservices/services/ExcelService.java
+0
-5
bbvaSingleton.java
...ultitask/trismegistoservices/singleton/bbvaSingleton.java
+36
-0
threadLocalSingleton.java
...k/trismegistoservices/singleton/threadLocalSingleton.java
+1
-1
tokenSingleton.java
...ltitask/trismegistoservices/singleton/tokenSingleton.java
+3
-3
CommonUtils.java
.../web/multitask/trismegistoservices/utils/CommonUtils.java
+75
-9
dotEnvUtils.java
.../web/multitask/trismegistoservices/utils/dotEnvUtils.java
+26
-28
tokenUtils.java
...a/web/multitask/trismegistoservices/utils/tokenUtils.java
+2
-8
key.p8
src/main/resources/tokens/key.p8
+53
-0
No files found.
pom.xml
View file @
283692e4
This diff is collapsed.
Click to expand it.
src/main/java/web/multitask/trismegistoservices/config/DotEnvConfig.java
View file @
283692e4
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.Configuration
;
import
io.github.cdimascio.dotenv.Dotenv
;
import
io.github.cdimascio.dotenv.Dotenv
;
import
web.multitask.trismegistoservices.utils.
DotEnvUtil
;
import
web.multitask.trismegistoservices.utils.
dotEnvUtils
;
@Configuration
@Configuration
public
class
DotEnvConfig
{
public
class
DotEnvConfig
{
// @Bean
// @Bean
Dotenv
getDotEnvPath
()
{
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
src/main/java/web/multitask/trismegistoservices/config/GoogleConfig.java
View file @
283692e4
...
@@ -11,27 +11,19 @@ import com.google.api.client.auth.oauth2.Credential;
...
@@ -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.GoogleClientSecrets
;
import
com.google.api.client.googleapis.auth.oauth2.GoogleCredential
;
import
com.google.api.client.googleapis.auth.oauth2.GoogleCredential
;
import
com.google.api.services.gmail.Gmail
;
import
com.google.api.services.gmail.Gmail
;
import
com.google.api.services.gmail.GmailScopes
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
;
import
com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
;
import
com.google.api.client.http.javanet.NetHttpTransport
;
import
com.google.api.client.http.javanet.NetHttpTransport
;
import
com.google.api.client.json.JsonFactory
;
import
com.google.api.client.json.JsonFactory
;
import
com.google.api.client.json.gson.GsonFactory
;
import
com.google.api.client.json.gson.GsonFactory
;
import
com.google.api.services.drive.Drive
;
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.annotation.PostConstruct
;
import
javax.mail.Address
;
@Configuration
@Configuration
public
class
GoogleConfig
{
public
class
GoogleConfig
{
private
static
final
JsonFactory
JSON_FACTORY
=
GsonFactory
.
getDefaultInstance
();
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
static
final
String
CREDENTIALS_FOLDER_PATH
=
"/tokens"
;
private
final
String
APPLICATION_NAME
=
"FullService Application"
;
private
final
String
APPLICATION_NAME
=
"FullService Application"
;
private
String
refresh_token_gmail
=
null
;
private
String
refresh_token_gmail
=
null
;
...
@@ -80,6 +72,7 @@ public class GoogleConfig {
...
@@ -80,6 +72,7 @@ public class GoogleConfig {
.
build
()
.
build
()
.
setAccessToken
(
getAccessToken
(
refresh_token_gmail
))
.
setAccessToken
(
getAccessToken
(
refresh_token_gmail
))
.
setRefreshToken
(
refresh_token_gmail
);
.
setRefreshToken
(
refresh_token_gmail
);
return
new
Gmail
.
Builder
(
HTTP_TRANSPORT
,
JSON_FACTORY
,
authorize
)
return
new
Gmail
.
Builder
(
HTTP_TRANSPORT
,
JSON_FACTORY
,
authorize
)
.
setApplicationName
(
APPLICATION_NAME
).
build
();
.
setApplicationName
(
APPLICATION_NAME
).
build
();
}
catch
(
GeneralSecurityException
|
IOException
e
)
{
}
catch
(
GeneralSecurityException
|
IOException
e
)
{
...
@@ -97,11 +90,11 @@ public class GoogleConfig {
...
@@ -97,11 +90,11 @@ public class GoogleConfig {
client_id
=
clientSecrets
.
getDetails
().
getClientId
();
client_id
=
clientSecrets
.
getDetails
().
getClientId
();
client_secret
=
clientSecrets
.
getDetails
().
getClientSecret
();
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
();
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
();
refresh_token_drive
=
clientSecrets
.
getDetails
().
get
(
"drive_refresh_token"
).
toString
();
}
}
}
catch
(
IOException
e
)
{
}
catch
(
IOException
e
)
{
...
@@ -116,7 +109,7 @@ public class GoogleConfig {
...
@@ -116,7 +109,7 @@ public class GoogleConfig {
params
.
put
(
"grant_type"
,
"refresh_token"
);
params
.
put
(
"grant_type"
,
"refresh_token"
);
params
.
put
(
"client_id"
,
client_id
);
params
.
put
(
"client_id"
,
client_id
);
params
.
put
(
"client_secret"
,
client_secret
);
params
.
put
(
"client_secret"
,
client_secret
);
params
.
put
(
"refresh_token"
,
refresh_token
);
params
.
put
(
"refresh_token"
,
refresh_token
);
StringBuilder
postData
=
new
StringBuilder
();
StringBuilder
postData
=
new
StringBuilder
();
for
(
Map
.
Entry
<
String
,
Object
>
param
:
params
.
entrySet
())
{
for
(
Map
.
Entry
<
String
,
Object
>
param
:
params
.
entrySet
())
{
...
@@ -129,7 +122,7 @@ public class GoogleConfig {
...
@@ -129,7 +122,7 @@ public class GoogleConfig {
}
}
byte
[]
postDataBytes
=
postData
.
toString
().
getBytes
(
StandardCharsets
.
UTF_8
);
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
();
HttpURLConnection
con
=
(
HttpURLConnection
)
url
.
openConnection
();
con
.
setDoOutput
(
true
);
con
.
setDoOutput
(
true
);
con
.
setUseCaches
(
false
);
con
.
setUseCaches
(
false
);
...
@@ -146,8 +139,8 @@ public class GoogleConfig {
...
@@ -146,8 +139,8 @@ public class GoogleConfig {
return
json
.
getString
(
"access_token"
);
return
json
.
getString
(
"access_token"
);
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
System
.
out
.
println
(
"Error: "
+
ex
);
System
.
out
.
println
(
"Error: "
+
ex
);
return
null
;
}
}
return
null
;
}
}
}
}
\ No newline at end of file
src/main/java/web/multitask/trismegistoservices/config/SecurityConfig.java
View file @
283692e4
...
@@ -18,18 +18,16 @@ import org.springframework.web.cors.CorsConfiguration;
...
@@ -18,18 +18,16 @@ import org.springframework.web.cors.CorsConfiguration;
import
org.springframework.web.cors.UrlBasedCorsConfigurationSource
;
import
org.springframework.web.cors.UrlBasedCorsConfigurationSource
;
import
org.springframework.web.filter.CorsFilter
;
import
org.springframework.web.filter.CorsFilter
;
import
web.multitask.trismegistoservices.filter.JWTokenFilter
;
import
web.multitask.trismegistoservices.filter.JWTokenFilter
;
import
web.multitask.trismegistoservices.singleton.ThreadLocalSingleton
;
import
web.multitask.trismegistoservices.utils.tokenUtils
;
import
web.multitask.trismegistoservices.singleton.TokenSingleton
;
import
web.multitask.trismegistoservices.utils.JWTokenUtil
;
@Configuration
@Configuration
@EnableWebSecurity
@EnableWebSecurity
@AllArgsConstructor
@AllArgsConstructor
public
class
SecurityConfig
{
public
class
SecurityConfig
{
private
final
JWTokenUtil
jwtTokenUtil
;
private
final
tokenUtils
jwtTokenUtil
;
private
final
T
okenSingleton
tokenSingleton
;
private
final
web
.
multitask
.
trismegistoservices
.
singleton
.
t
okenSingleton
tokenSingleton
;
private
T
hreadLocalSingleton
threadLocalSingleton
;
private
web
.
multitask
.
trismegistoservices
.
singleton
.
t
hreadLocalSingleton
threadLocalSingleton
;
@Bean
@Bean
AuthenticationManager
authenticationManager
(
AuthenticationConfiguration
authenticationConfiguration
)
AuthenticationManager
authenticationManager
(
AuthenticationConfiguration
authenticationConfiguration
)
...
...
src/main/java/web/multitask/trismegistoservices/filter/AuthChannelInterceptorAdapter.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
filter
;
package
web
.
multitask
.
trismegistoservices
.
filter
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.NotNull
;
import
org.json.JSONObject
;
import
org.springframework.messaging.Message
;
import
org.springframework.messaging.Message
;
import
org.springframework.messaging.MessageChannel
;
import
org.springframework.messaging.MessageChannel
;
import
org.springframework.messaging.simp.stomp.StompCommand
;
import
org.springframework.messaging.simp.stomp.StompCommand
;
...
@@ -11,17 +10,15 @@ import org.springframework.messaging.support.MessageHeaderAccessor;
...
@@ -11,17 +10,15 @@ import org.springframework.messaging.support.MessageHeaderAccessor;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.LinkedMultiValueMap
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
import
web.multitask.trismegistoservices.utils.JWTokenUtil
;
import
web.multitask.trismegistoservices.utils.tokenUtils
;
import
java.util.Objects
;
@Component
@Component
public
class
AuthChannelInterceptorAdapter
implements
ChannelInterceptor
{
public
class
AuthChannelInterceptorAdapter
implements
ChannelInterceptor
{
private
final
JWTokenUtil
jwtTokenUtil
;
private
final
tokenUtils
jwtTokenUtil
;
private
final
UserRepository
userRepo
=
new
UserRepository
();
private
final
UserRepository
userRepo
=
new
UserRepository
();
public
AuthChannelInterceptorAdapter
(
JWTokenUtil
jwtTokenUtil
)
{
public
AuthChannelInterceptorAdapter
(
tokenUtils
jwtTokenUtil
)
{
this
.
jwtTokenUtil
=
jwtTokenUtil
;
this
.
jwtTokenUtil
=
jwtTokenUtil
;
}
}
...
...
src/main/java/web/multitask/trismegistoservices/filter/JWTokenFilter.java
View file @
283692e4
...
@@ -5,6 +5,7 @@ import javax.servlet.ServletException;
...
@@ -5,6 +5,7 @@ import javax.servlet.ServletException;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.NotNull
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
...
@@ -17,45 +18,48 @@ import org.springframework.security.core.context.SecurityContextHolder;
...
@@ -17,45 +18,48 @@ import org.springframework.security.core.context.SecurityContextHolder;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.security.core.userdetails.UserDetails
;
import
org.springframework.security.web.authentication.WebAuthenticationDetailsSource
;
import
org.springframework.security.web.authentication.WebAuthenticationDetailsSource
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.util.Base64Utils
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
org.springframework.web.filter.OncePerRequestFilter
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
import
web.multitask.trismegistoservices.singleton.ThreadLocalSingleton
;
import
web.multitask.trismegistoservices.utils.tokenUtils
;
import
web.multitask.trismegistoservices.singleton.TokenSingleton
;
import
web.multitask.trismegistoservices.utils.JWTokenUtil
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Objects
;
@Component
@Component
@Order
(
1
)
@Order
(
1
)
//@AllArgsConstructor
@NoArgsConstructor
@NoArgsConstructor
public
class
JWTokenFilter
extends
OncePerRequestFilter
{
public
class
JWTokenFilter
extends
OncePerRequestFilter
{
private
final
UserRepository
userRepo
=
new
UserRepository
();
private
final
UserRepository
userRepo
=
new
UserRepository
();
private
JWTokenUtil
jwtTokenUtil
=
null
;
private
tokenUtils
jwtTokenUtil
=
null
;
private
T
okenSingleton
tokenSingleton
=
null
;
private
web
.
multitask
.
trismegistoservices
.
singleton
.
t
okenSingleton
tokenSingleton
=
null
;
private
T
hreadLocalSingleton
threadLocalSingleton
=
null
;
private
web
.
multitask
.
trismegistoservices
.
singleton
.
t
hreadLocalSingleton
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
.
jwtTokenUtil
=
jwtTokenUtil
;
this
.
tokenSingleton
=
tokenSingleton
;
this
.
tokenSingleton
=
tokenSingleton
;
this
.
threadLocalSingleton
=
threadLocalSingleton
;
this
.
threadLocalSingleton
=
threadLocalSingleton
;
}
}
@Override
@Override
protected
void
doFilterInternal
(
@NotNull
HttpServletRequest
request
,
@NotNull
HttpServletResponse
response
,
@NotNull
FilterChain
chain
)
protected
void
doFilterInternal
(
@NotNull
HttpServletRequest
request
,
@NotNull
HttpServletResponse
response
,
@NotNull
FilterChain
chain
)
throws
ServletException
,
io
.
jsonwebtoken
.
io
.
IOException
,
java
.
io
.
IOException
{
throws
ServletException
,
io
.
jsonwebtoken
.
io
.
IOException
,
java
.
io
.
IOException
{
response
.
setContentType
(
"application/json"
);
response
.
setContentType
(
"application/json"
);
final
String
Authorization
=
request
.
getHeader
(
HttpHeaders
.
AUTHORIZATION
);
final
String
Authorization
=
request
.
getHeader
(
HttpHeaders
.
AUTHORIZATION
);
final
String
dbConnection
=
request
.
getHeader
(
"Database"
);
final
String
dbConnection
=
request
.
getHeader
(
"Database"
);
String
type
;
String
token
;
String
token
;
try
{
try
{
type
=
Authorization
.
split
(
" "
)[
0
];
token
=
Authorization
.
split
(
" "
)[
1
];
token
=
Authorization
.
split
(
" "
)[
1
];
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
type
=
null
;
token
=
null
;
token
=
null
;
}
}
if
(
dbConnection
!=
null
&&
!
dbConnection
.
isEmpty
())
{
if
(
dbConnection
!=
null
&&
!
dbConnection
.
isEmpty
())
{
String
dataBaseGotten
=
jwtTokenUtil
.
getDataToken
(
dbConnection
);
String
dataBaseGotten
=
jwtTokenUtil
.
getDataToken
(
dbConnection
);
DataSource
ds
=
getDataSource
(
new
JSONObject
(
dataBaseGotten
));
DataSource
ds
=
getDataSource
(
new
JSONObject
(
dataBaseGotten
));
threadLocalSingleton
.
setJdbcTemplate
(
new
JdbcTemplate
(
ds
));
threadLocalSingleton
.
setJdbcTemplate
(
new
JdbcTemplate
(
ds
));
...
@@ -63,13 +67,29 @@ public class JWTokenFilter extends OncePerRequestFilter {
...
@@ -63,13 +67,29 @@ public class JWTokenFilter extends OncePerRequestFilter {
if
(
token
==
null
||
token
.
isEmpty
())
{
if
(
token
==
null
||
token
.
isEmpty
())
{
chain
.
doFilter
(
request
,
response
);
chain
.
doFilter
(
request
,
response
);
}
else
{
}
else
if
(
Objects
.
equals
(
type
,
"Basic"
))
{
if
(
jwtTokenUtil
.
validateToken
(
token
)
||
tokenSingleton
.
consumeToken
(
token
)){
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
));
JSONObject
jsonToken
=
new
JSONObject
(
jwtTokenUtil
.
getDataToken
(
token
));
UserDetails
userDetails
=
userRepo
.
findByUsername
(
jsonToken
.
getString
(
"username"
));
UserDetails
userDetails
=
userRepo
.
findByUsername
(
jsonToken
.
getString
(
"username"
));
UsernamePasswordAuthenticationToken
authentication
=
new
UsernamePasswordAuthenticationToken
(
UsernamePasswordAuthenticationToken
authentication
=
new
UsernamePasswordAuthenticationToken
(
userDetails
,
null
,
userDetails
.
getAuthorities
());
userDetails
,
null
,
userDetails
.
getAuthorities
());
authentication
.
setDetails
(
new
WebAuthenticationDetailsSource
().
buildDetails
(
request
));
authentication
.
setDetails
(
new
WebAuthenticationDetailsSource
().
buildDetails
(
request
));
SecurityContextHolder
.
getContext
().
setAuthentication
(
authentication
);
SecurityContextHolder
.
getContext
().
setAuthentication
(
authentication
);
chain
.
doFilter
(
request
,
response
);
chain
.
doFilter
(
request
,
response
);
...
...
src/main/java/web/multitask/trismegistoservices/mysql/RoutineSql.java
View file @
283692e4
...
@@ -4,7 +4,6 @@ import lombok.AllArgsConstructor;
...
@@ -4,7 +4,6 @@ import lombok.AllArgsConstructor;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
web.multitask.trismegistoservices.singleton.ThreadLocalSingleton
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -14,7 +13,7 @@ import java.util.Objects;
...
@@ -14,7 +13,7 @@ import java.util.Objects;
@AllArgsConstructor
@AllArgsConstructor
public
class
RoutineSql
{
public
class
RoutineSql
{
private
final
T
hreadLocalSingleton
threadLocalSingleton
;
private
final
web
.
multitask
.
trismegistoservices
.
singleton
.
t
hreadLocalSingleton
threadLocalSingleton
;
public
JSONObject
routineExecutor
(
String
routine
,
String
database
,
Object
[]
params
)
{
public
JSONObject
routineExecutor
(
String
routine
,
String
database
,
Object
[]
params
)
{
...
...
src/main/java/web/multitask/trismegistoservices/rest/BBVA/bbvaRest.java
0 → 100644
View file @
283692e4
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
());
}
}
}
src/main/java/web/multitask/trismegistoservices/rest/BBVA/bbvaWebHook.java
0 → 100644
View file @
283692e4
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"
;
}
}
src/main/java/web/multitask/trismegistoservices/
api
/UtilsApi.java
→
src/main/java/web/multitask/trismegistoservices/
rest
/UtilsApi.java
View file @
283692e4
File moved
src/main/java/web/multitask/trismegistoservices/
api/ConsoleApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/consoleRest
.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
...
@@ -12,7 +12,7 @@ import java.io.InputStreamReader;
...
@@ -12,7 +12,7 @@ import java.io.InputStreamReader;
@RestController
@RestController
@CrossOrigin
(
origins
=
"*"
)
@CrossOrigin
(
origins
=
"*"
)
@RequestMapping
(
"console"
)
@RequestMapping
(
"console"
)
public
class
ConsoleApi
{
public
class
consoleRest
{
@PostMapping
(
"/public/command"
)
@PostMapping
(
"/public/command"
)
public
ResponseEntity
<?>
pull
(
@RequestBody
String
jsonBody
)
{
public
ResponseEntity
<?>
pull
(
@RequestBody
String
jsonBody
)
{
...
...
src/main/java/web/multitask/trismegistoservices/
api/DriveApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/driveRest
.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
@@ -16,7 +16,7 @@ import javax.annotation.Nullable;
...
@@ -16,7 +16,7 @@ import javax.annotation.Nullable;
@CrossOrigin
(
origins
=
"*"
)
@CrossOrigin
(
origins
=
"*"
)
@RequestMapping
(
"drive"
)
@RequestMapping
(
"drive"
)
@AllArgsConstructor
@AllArgsConstructor
public
class
DriveApi
{
public
class
driveRest
{
DriveService
driveService
;
DriveService
driveService
;
...
...
src/main/java/web/multitask/trismegistoservices/
api/EmailApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/emailRest
.java
View file @
283692e4
// package web.multitask.app.api;
// package web.multitask.app.api;
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
javax.mail.internet.MimeMessage
;
import
javax.mail.internet.MimeMessage
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
@RestController
@RestController
@RequestMapping
(
"/gmail"
)
@RequestMapping
(
"/gmail"
)
@AllArgsConstructor
@AllArgsConstructor
public
class
EmailApi
{
public
class
emailRest
{
private
final
GmailService
emailService
;
private
final
GmailService
emailService
;
...
...
src/main/java/web/multitask/trismegistoservices/
api/ExcelApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/excelRest
.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
@@ -19,7 +19,7 @@ import java.io.IOException;
...
@@ -19,7 +19,7 @@ import java.io.IOException;
@CrossOrigin
(
origins
=
"*"
)
@CrossOrigin
(
origins
=
"*"
)
@RequestMapping
(
"excel"
)
@RequestMapping
(
"excel"
)
@AllArgsConstructor
@AllArgsConstructor
public
class
ExcelApi
{
public
class
excelRest
{
ExcelService
excelService
;
ExcelService
excelService
;
CommonUtils
commonUtils
;
CommonUtils
commonUtils
;
...
...
src/main/java/web/multitask/trismegistoservices/
api/PDFApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/pdfRest
.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.core.io.Resource
;
import
org.springframework.core.io.Resource
;
...
@@ -14,7 +14,7 @@ import web.multitask.trismegistoservices.utils.CommonUtils;
...
@@ -14,7 +14,7 @@ import web.multitask.trismegistoservices.utils.CommonUtils;
@CrossOrigin
(
origins
=
"*"
)
@CrossOrigin
(
origins
=
"*"
)
@RequestMapping
(
"/pdf"
)
@RequestMapping
(
"/pdf"
)
@AllArgsConstructor
@AllArgsConstructor
public
class
PDFApi
{
public
class
pdfRest
{
PDFService
pdfService
;
PDFService
pdfService
;
CommonUtils
commonUtils
;
CommonUtils
commonUtils
;
...
...
src/main/java/web/multitask/trismegistoservices/
api/RoutineApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/routineRest
.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
import
org.json.JSONArray
;
import
org.json.JSONArray
;
...
@@ -6,13 +6,12 @@ import org.json.JSONObject;
...
@@ -6,13 +6,12 @@ import org.json.JSONObject;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
web.multitask.trismegistoservices.mysql.RoutineSql
;
import
web.multitask.trismegistoservices.mysql.RoutineSql
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
@RestController
@RestController
@CrossOrigin
(
"*"
)
@CrossOrigin
(
"*"
)
@RequestMapping
(
"/api"
)
@RequestMapping
(
"/api"
)
@AllArgsConstructor
@AllArgsConstructor
public
class
RoutineApi
{
public
class
routineRest
{
final
RoutineSql
procedureMysql
;
final
RoutineSql
procedureMysql
;
...
...
src/main/java/web/multitask/trismegistoservices/
api/JWTokenApi
.java
→
src/main/java/web/multitask/trismegistoservices/
rest/tokenRest
.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
api
;
package
web
.
multitask
.
trismegistoservices
.
rest
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.http.ResponseEntity
;
...
@@ -6,8 +6,7 @@ import org.springframework.security.core.userdetails.UserDetails;
...
@@ -6,8 +6,7 @@ import org.springframework.security.core.userdetails.UserDetails;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
web.multitask.trismegistoservices.model.User
;
import
web.multitask.trismegistoservices.model.User
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
import
web.multitask.trismegistoservices.repository.UserRepository
;
import
web.multitask.trismegistoservices.singleton.TokenSingleton
;
import
web.multitask.trismegistoservices.utils.tokenUtils
;
import
web.multitask.trismegistoservices.utils.JWTokenUtil
;
import
java.math.BigInteger
;
import
java.math.BigInteger
;
import
java.text.SimpleDateFormat
;
import
java.text.SimpleDateFormat
;
...
@@ -20,14 +19,14 @@ import org.springframework.web.bind.annotation.RequestBody;
...
@@ -20,14 +19,14 @@ import org.springframework.web.bind.annotation.RequestBody;
@RestController
@RestController
@RequestMapping
(
"/token"
)
@RequestMapping
(
"/token"
)
@CrossOrigin
@CrossOrigin
class
JWTokenApi
{
class
tokenRest
{
private
final
UserRepository
userRepo
=
new
UserRepository
();
private
final
UserRepository
userRepo
=
new
UserRepository
();
private
final
JWTokenUtil
jwtTokenUtil
;
private
final
tokenUtils
jwtTokenUtil
;
private
final
T
okenSingleton
tokenSingleton
;
private
final
web
.
multitask
.
trismegistoservices
.
singleton
.
t
okenSingleton
tokenSingleton
;
public
JWTokenApi
(
JWTokenUtil
jwtTokenUtil
,
T
okenSingleton
tokenSingleton
)
{
public
tokenRest
(
tokenUtils
jwtTokenUtil
,
web
.
multitask
.
trismegistoservices
.
singleton
.
t
okenSingleton
tokenSingleton
)
{
this
.
jwtTokenUtil
=
jwtTokenUtil
;
this
.
jwtTokenUtil
=
jwtTokenUtil
;
this
.
tokenSingleton
=
tokenSingleton
;
this
.
tokenSingleton
=
tokenSingleton
;
}
}
...
...
src/main/java/web/multitask/trismegistoservices/services/BBVA/bbvaService.java
0 → 100644
View file @
283692e4
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
();
}
}
}
src/main/java/web/multitask/trismegistoservices/services/ExcelService.java
View file @
283692e4
...
@@ -2,15 +2,11 @@ package web.multitask.trismegistoservices.services;
...
@@ -2,15 +2,11 @@ package web.multitask.trismegistoservices.services;
import
java.awt.Color
;
import
java.awt.Color
;
import
java.io.ByteArrayOutputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.concurrent.atomic.AtomicReference
;
import
java.util.stream.IntStream
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.ss.usermodel.*
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
org.apache.poi.ss.util.CellRangeAddress
;
import
org.apache.poi.xssf.usermodel.XSSFCell
;
import
org.apache.poi.xssf.usermodel.XSSFCell
;
...
@@ -24,7 +20,6 @@ import org.json.JSONArray;
...
@@ -24,7 +20,6 @@ import org.json.JSONArray;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.core.io.ByteArrayResource
;
import
org.springframework.core.io.ByteArrayResource
;
import
org.springframework.core.io.Resource
;
import
org.springframework.core.io.Resource
;
import
org.springframework.scheduling.annotation.Async
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
@Service
@Service
...
...
src/main/java/web/multitask/trismegistoservices/singleton/bbvaSingleton.java
0 → 100644
View file @
283692e4
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
);
}
}
src/main/java/web/multitask/trismegistoservices/singleton/
T
hreadLocalSingleton.java
→
src/main/java/web/multitask/trismegistoservices/singleton/
t
hreadLocalSingleton.java
View file @
283692e4
...
@@ -4,7 +4,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
...
@@ -4,7 +4,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
@Component
@Component
public
class
T
hreadLocalSingleton
{
public
class
t
hreadLocalSingleton
{
private
final
ThreadLocal
<
JdbcTemplate
>
jdbcTemplateThreadLocal
=
new
ThreadLocal
<>();
private
final
ThreadLocal
<
JdbcTemplate
>
jdbcTemplateThreadLocal
=
new
ThreadLocal
<>();
public
void
setJdbcTemplate
(
JdbcTemplate
jdbcTemplate
)
{
public
void
setJdbcTemplate
(
JdbcTemplate
jdbcTemplate
)
{
...
...
src/main/java/web/multitask/trismegistoservices/singleton/
T
okenSingleton.java
→
src/main/java/web/multitask/trismegistoservices/singleton/
t
okenSingleton.java
View file @
283692e4
...
@@ -7,17 +7,17 @@ import org.json.JSONObject;
...
@@ -7,17 +7,17 @@ import org.json.JSONObject;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
web.multitask.trismegistoservices.utils.
JWTokenUtil
;
import
web.multitask.trismegistoservices.utils.
tokenUtils
;
@Getter
@Getter
@Component
@Component
@NoArgsConstructor
@NoArgsConstructor
public
class
T
okenSingleton
{
public
class
t
okenSingleton
{
private
final
JSONArray
tokens
=
new
JSONArray
();
private
final
JSONArray
tokens
=
new
JSONArray
();
@Autowired
@Autowired
private
JWTokenUtil
jwtTokenUtil
;
private
tokenUtils
jwtTokenUtil
;
public
boolean
consumeToken
(
String
token
)
{
public
boolean
consumeToken
(
String
token
)
{
boolean
isAvailable
=
false
;
boolean
isAvailable
=
false
;
...
...
src/main/java/web/multitask/trismegistoservices/utils/CommonUtils.java
View file @
283692e4
package
web
.
multitask
.
trismegistoservices
.
utils
;
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.apache.commons.io.FileUtils
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.NotNull
;
import
org.json.JSONObject
;
import
org.springframework.core.io.ByteArrayResource
;
import
org.springframework.core.io.ByteArrayResource
;
import
org.springframework.core.io.FileSystemResource
;
import
org.springframework.core.io.FileSystemResource
;
import
org.springframework.core.io.Resource
;
import
org.springframework.core.io.Resource
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.imageio.ImageIO
;
import
java.
io.ByteArrayOutputStream
;
import
java.
awt.image.BufferedImage
;
import
java.io.
File
;
import
java.io.
*
;
import
java.
io.FileInputStream
;
import
java.
nio.charset.StandardCharsets
;
import
java.
io.IOException
;
import
java.
text.SimpleDateFormat
;
import
java.util.
Base64
;
import
java.util.
*
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipOutputStream
;
import
java.util.zip.ZipOutputStream
;
...
@@ -21,7 +29,7 @@ public class CommonUtils {
...
@@ -21,7 +29,7 @@ public class CommonUtils {
private
final
String
FILE_FOLDER
=
System
.
getProperty
(
"java.io.tmpdir"
);
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
();
byte
[]
byteArray
=
file
.
getBytes
();
return
Base64
.
getEncoder
().
encodeToString
(
byteArray
);
return
Base64
.
getEncoder
().
encodeToString
(
byteArray
);
}
}
...
@@ -66,7 +74,7 @@ public class CommonUtils {
...
@@ -66,7 +74,7 @@ public class CommonUtils {
return
new
FileSystemResource
(
file
);
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
);
byte
[]
byteArray
=
Base64
.
getDecoder
().
decode
(
base64
);
return
new
ByteArrayResource
(
byteArray
)
{
return
new
ByteArrayResource
(
byteArray
)
{
@Override
@Override
...
@@ -76,7 +84,7 @@ public class CommonUtils {
...
@@ -76,7 +84,7 @@ public class CommonUtils {
};
};
}
}
public
boolean
deleteAllFiles
()
{
public
static
boolean
deleteAllFiles
()
{
try
{
try
{
String
tmpFolder
=
System
.
getProperty
(
"java.io.tmpdir"
);
String
tmpFolder
=
System
.
getProperty
(
"java.io.tmpdir"
);
File
folder
=
new
File
(
tmpFolder
);
File
folder
=
new
File
(
tmpFolder
);
...
@@ -123,4 +131,61 @@ public class CommonUtils {
...
@@ -123,4 +131,61 @@ public class CommonUtils {
}
}
return
byteArrayOutputStream
;
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
src/main/java/web/multitask/trismegistoservices/utils/
DotEnvUtil
.java
→
src/main/java/web/multitask/trismegistoservices/utils/
dotEnvUtils
.java
View file @
283692e4
...
@@ -5,13 +5,18 @@ import java.util.HashMap;
...
@@ -5,13 +5,18 @@ import java.util.HashMap;
import
java.util.Locale
;
import
java.util.Locale
;
import
java.util.Map
;
import
java.util.Map
;
public
class
DotEnvUtil
{
public
class
dotEnvUtils
{
static
String
detectedOS
;
static
String
detectedOS
;
public
enum
OSType
{
private
static
final
Map
<
String
,
String
>
OS_PATH_MAP
=
new
HashMap
<>();
Windows
,
MacOS
,
Linux
,
Other
};
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
()
{
public
static
String
getOperatingSystemType
()
{
return
detectedOS
!=
null
?
detectedOS
:
return
detectedOS
!=
null
?
detectedOS
:
...
@@ -19,37 +24,29 @@ public class DotEnvUtil {
...
@@ -19,37 +24,29 @@ public class DotEnvUtil {
}
}
private
static
String
getOSFromSystemProperty
()
{
private
static
String
getOSFromSystemProperty
()
{
String
OS
=
System
.
getProperty
(
"os.name"
,
"generic"
).
toLowerCase
(
Locale
.
ENGLISH
);
if
(
detectedOS
==
null
)
{
if
(
OS
.
contains
(
"mac"
)
||
OS
.
contains
(
"darwin"
))
return
"MacOS"
;
String
osName
=
System
.
getProperty
(
"os.name"
,
"generic"
).
toLowerCase
(
Locale
.
ENGLISH
);
if
(
OS
.
contains
(
"win"
))
return
"Windows"
;
if
(
osName
.
contains
(
"mac"
)
||
osName
.
contains
(
"darwin"
))
detectedOS
=
"MacOS"
;
if
(
OS
.
contains
(
"nux"
))
return
"Linux"
;
else
if
(
osName
.
contains
(
"win"
))
detectedOS
=
"Windows"
;
return
"Other"
;
else
if
(
osName
.
contains
(
"nux"
))
detectedOS
=
"Linux"
;
}
else
detectedOS
=
"Other"
;
}
private
static
final
Map
<
String
,
String
>
OS_PATH_MAP
=
new
HashMap
<>();
return
detectedOS
;
static
{
OS_PATH_MAP
.
put
(
"MacOS"
,
"/opt/dotenv/"
);
OS_PATH_MAP
.
put
(
"Linux"
,
"/opt/dotenv/"
);
OS_PATH_MAP
.
put
(
"Windows"
,
"abcdefghijklmnopqrstuvwxyz"
);
}
}
public
static
String
getDotEnvPath
(
String
projectName
)
{
public
static
String
getDotEnvPath
(
String
projectName
)
{
String
detectedOs
=
DotEnvUtil
.
getOperatingSystemType
();
String
osType
=
getOperatingSystemType
();
return
OS_PATH_MAP
.
getOrDefault
(
osType
,
""
)
+
return
OS_PATH_MAP
.
getOrDefault
(
detectedOs
,
""
)
(
"Windows"
.
equals
(
osType
)
?
getWindowsPath
(
projectName
)
:
projectName
);
+
(
detectedOs
.
equals
(
"Windows"
)
?
getWindowsPath
(
projectName
)
:
projectName
);
}
}
private
static
String
getWindowsPath
(
String
projectName
)
{
private
static
String
getWindowsPath
(
String
projectName
)
{
return
OS_PATH_MAP
.
get
(
"Windows"
)
return
OS_PATH_MAP
.
get
(
"Windows"
)
.
chars
()
.
chars
()
.
mapToObj
(
letter
->
"/"
+
(
char
)
letter
+
":/dotenv/"
+
projectName
)
.
mapToObj
(
letter
->
"/"
+
(
char
)
letter
+
":/dotenv/"
+
projectName
)
.
filter
(
path
->
new
File
(
path
).
exists
())
.
filter
(
path
->
new
File
(
path
).
exists
())
.
findFirst
()
.
findFirst
()
.
orElse
(
""
);
.
orElse
(
""
);
}
}
}
}
\ No newline at end of file
src/main/java/web/multitask/trismegistoservices/utils/
JWTokenUtil
.java
→
src/main/java/web/multitask/trismegistoservices/utils/
tokenUtils
.java
View file @
283692e4
...
@@ -2,23 +2,17 @@ package web.multitask.trismegistoservices.utils;
...
@@ -2,23 +2,17 @@ package web.multitask.trismegistoservices.utils;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.math.BigInteger
;
import
java.math.BigInteger
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Date
;
import
io.jsonwebtoken.ExpiredJwtException
;
import
io.jsonwebtoken.ExpiredJwtException
;
import
org.json.JSONObject
;
import
org.json.JSONObject
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.beans.factory.annotation.Value
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.Jwts
;
import
io.jsonwebtoken.security.Keys
;
import
io.jsonwebtoken.security.Keys
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
web.multitask.trismegistoservices.model.User
;
import
web.multitask.trismegistoservices.model.User
;
import
web.multitask.trismegistoservices.singleton.TokenSingleton
;
import
javax.annotation.Nullable
;
@Component
@Component
public
class
JWTokenUtil
implements
Serializable
{
public
class
tokenUtils
implements
Serializable
{
@Value
(
"${app.jwtSecret}"
)
@Value
(
"${app.jwtSecret}"
)
private
String
jwtSecret
;
private
String
jwtSecret
;
...
@@ -52,7 +46,7 @@ public class JWTokenUtil implements Serializable{
...
@@ -52,7 +46,7 @@ public class JWTokenUtil implements Serializable{
.
compact
();
.
compact
();
}
}
public
String
detokenizeData
(
String
token
,
@Nullable
boolean
doConsume
){
public
String
detokenizeData
(
String
token
,
boolean
doConsume
){
String
tokenReturned
=
""
;
String
tokenReturned
=
""
;
try
{
try
{
...
...
src/main/resources/tokens/key.p8
0 → 100644
View file @
283692e4
-----BEGIN RSA PRIVATE KEY-----
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
PnpOxl5jWjhzfwkOcU5V+qBdkCd+fWo=
-----END RSA PRIVATE KEY-----
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment