nuevos servicios
This commit is contained in:
parent
77fdecb3aa
commit
c57f772984
18
pom.xml
18
pom.xml
@ -90,6 +90,24 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
<version>0.11.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-impl</artifactId>
|
||||
<version>0.11.5</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-jackson</artifactId>
|
||||
<version>0.11.5</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
23
src/main/java/com/crov/controllers/AuthController.java
Normal file
23
src/main/java/com/crov/controllers/AuthController.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.crov.controllers;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.crov.services.AuthService;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/auth")
|
||||
public class AuthController {
|
||||
|
||||
@Autowired
|
||||
private AuthService authService;
|
||||
|
||||
@PostMapping("/token")
|
||||
public ResponseEntity<String> login(@RequestParam String username, @RequestParam String password) {
|
||||
return ResponseEntity.ok(authService.login(username, password));
|
||||
}
|
||||
}
|
@ -0,0 +1,199 @@
|
||||
package com.crov.controllers;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import com.crov.crovWSTotal.EncriptadorAES;
|
||||
import com.crov.crovWSTotal.Utilerias;
|
||||
import com.crov.models.ActivationKey;
|
||||
import com.crov.models.ActivationKey.ActiveKey;
|
||||
import com.crov.models.ActivationKey.TipoKey;
|
||||
import com.crov.models.PersonSoftware;
|
||||
import com.crov.models.PersonSoftware.ActivePerson;
|
||||
import com.crov.models.PersonSoftware.BlackListPerson;
|
||||
import com.crov.models.Software;
|
||||
import com.crov.models.Software.ActiveSofware;
|
||||
import com.crov.requests.PersonSoftwareRequest;
|
||||
import com.crov.services.ActivationKeyService;
|
||||
import com.crov.services.PersonSoftwareService;
|
||||
import com.crov.services.SoftwareService;
|
||||
|
||||
@RestController
|
||||
@CrossOrigin(origins = "http://localhost:5173")
|
||||
@RequestMapping("/api/seguridadLicencias")
|
||||
public class SeguridadLicenciasController {
|
||||
|
||||
private static final String LICENCIA_DEMO = "0db513ee-7757-11ed-a1eb-0242ac120002";
|
||||
|
||||
@Autowired
|
||||
ActivationKeyService actKeyServ;
|
||||
|
||||
@Autowired
|
||||
SoftwareService softwareServ;
|
||||
|
||||
@Autowired
|
||||
PersonSoftwareService personServ;
|
||||
|
||||
@PostMapping("/registroLicencia")
|
||||
public ResponseEntity<Map<String, String>> registroLicencia(@RequestBody PersonSoftwareRequest licencia) throws ParseException {
|
||||
|
||||
String token = "";
|
||||
|
||||
String modulosActivos = "";
|
||||
Date fecha_expiracion;
|
||||
Integer validadorPersona = 0;
|
||||
SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
|
||||
EncriptadorAES encrip = new EncriptadorAES();
|
||||
Date today = new Date();
|
||||
|
||||
// Observa que la llave ingresada exista y esté activa en la base de datos.
|
||||
if (actKeyServ.revisarLicenciaActivaSinUso(licencia.getActivation_key().toString()) != 1) {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("Status", "Transacción fallida.");
|
||||
map.put("Token", "Llave incorrecta o utilizada.");
|
||||
return ResponseEntity.ok(map);
|
||||
}
|
||||
|
||||
// Observa si la llave ingresada por el usuario es una de prueba.
|
||||
if (licencia.getActivation_key().toString().equals(LICENCIA_DEMO)) {
|
||||
// Se verifica que la MAc no se haya ingresado
|
||||
if (softwareServ.revisarMacExistePreviamente(licencia.getMac()) != 0) {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("Status", "Transacción fallida.");
|
||||
map.put("Token", "Ya esta registrado en el sistema");
|
||||
return ResponseEntity.ok(map);
|
||||
} else {
|
||||
|
||||
ActivationKey actKey = new ActivationKey();
|
||||
Utilerias util = new Utilerias();
|
||||
// OBtenemos la fecha actual y le sumamos 15 días (pasa los meses, años, etc)
|
||||
fecha_expiracion = (util.sumarDiasAFecha(new Date(), 30));
|
||||
String sdf = new SimpleDateFormat("yyyy-MM-dd").format(fecha_expiracion);
|
||||
// Se genera el token
|
||||
token = encrip.getAES(sdf.substring(0, 4) + licencia.getMac().substring(0, 17) + sdf.substring(5, 7)
|
||||
+ (licencia.getMac().substring(17, 45)) + sdf.substring(8, 10));
|
||||
}
|
||||
} else {
|
||||
// Verificamos que el usuario no haya sido registrado
|
||||
validadorPersona = softwareServ.revisarMacExistePreviamente(licencia.getMac().toString());
|
||||
// Significa que la llave es vitalicia o de renta
|
||||
// Generamos el modelo de ActivationKey
|
||||
ActivationKey actKey = new ActivationKey();
|
||||
// Buscamos el objeto para actualizarlo
|
||||
actKey = actKeyServ.getActivationCodePorCodigoActivacion(licencia.getActivation_key().toString());
|
||||
|
||||
// Se actualiza
|
||||
actKeyServ.actualizarActiveKey(actKey.getId().toString());
|
||||
// Se general el token
|
||||
// Es vitalicia
|
||||
if (actKey.getActivationTime() == null) {
|
||||
token = encrip.getAES("2050" + licencia.getMac().substring(0, 17) + "01"
|
||||
+ (licencia.getMac().substring(17, 45)) + "01");
|
||||
fecha_expiracion = formato.parse("2050-01-01");
|
||||
modulosActivos = actKey.getModules();
|
||||
if (modulosActivos == null) {
|
||||
modulosActivos = "";
|
||||
} else {
|
||||
modulosActivos = encrip.getAES(modulosActivos);
|
||||
}
|
||||
// No es vitalicia
|
||||
}else {
|
||||
Utilerias util = new Utilerias();
|
||||
fecha_expiracion = (util.sumarDiasAFecha(new Date(), actKey.getActivationTime()));
|
||||
String sdf = new SimpleDateFormat("yyyy-MM-dd").format(fecha_expiracion);
|
||||
token = encrip.getAES(sdf.substring(0, 4) + licencia.getMac().substring(0, 17) + sdf.substring(5, 7)
|
||||
+ (licencia.getMac().substring(17, 45)) + sdf.substring(8, 10));
|
||||
modulosActivos = actKey.getModules();
|
||||
if (modulosActivos == null) {
|
||||
modulosActivos = "";
|
||||
} else {
|
||||
modulosActivos = encrip.getAES(modulosActivos);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (validadorPersona == 0) {
|
||||
// Person vacia
|
||||
PersonSoftware person = new PersonSoftware();
|
||||
// Software vacio
|
||||
Software soft = new Software();
|
||||
|
||||
// Se construye persona.
|
||||
token = token + "|" + modulosActivos;
|
||||
person.setFirst_name(licencia.getFirst_name());
|
||||
person.setSecond_name(licencia.getSecond_name());
|
||||
person.setLast_name(licencia.getLast_name());
|
||||
person.setMiddle_name(licencia.getMiddle_name());
|
||||
person.setMail(licencia.getMail());
|
||||
person.setBirthdate(formato.parse(licencia.getBirthdate()));
|
||||
person.setPhone(licencia.getPhone());
|
||||
person.setCreated_on(today);
|
||||
person.setActivePerson(ActivePerson.Active);
|
||||
person.setBlack_listPerson(BlackListPerson.Disabled);
|
||||
|
||||
// Insercion de persona y se retorna el valor del ID.
|
||||
person = personServ.savePerson(person);
|
||||
|
||||
// Se construye software
|
||||
soft.setPayment(licencia.getPayment());
|
||||
soft.setMac(licencia.getMac());
|
||||
soft.setActivation_key(licencia.getActivation_key());
|
||||
soft.setToken_product(token);
|
||||
soft.setId_software_product(licencia.getId_product());
|
||||
soft.setId_customer(person.getId());
|
||||
soft.setActiveSofware(ActiveSofware.Active);
|
||||
soft.setExpiration_date(fecha_expiracion);
|
||||
soft.setCreated_on(today);
|
||||
|
||||
softwareServ.save(soft);
|
||||
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("Token", token);
|
||||
map.put("Status", "Transacción correcta.");
|
||||
return ResponseEntity.ok(map);
|
||||
} else {
|
||||
|
||||
// La persona ya se había registrado y es necesario actualizarla
|
||||
Software softwareModel = new Software();
|
||||
token = token + "|" + modulosActivos;
|
||||
softwareModel = softwareServ.getSofwareByMac(licencia.getMac().toString());
|
||||
softwareModel.setToken_product(token);
|
||||
softwareModel.setExpiration_date(fecha_expiracion);
|
||||
softwareModel.setPaid(1);
|
||||
softwareServ.save(softwareModel);
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("Token", token);
|
||||
map.put("Status", "Transacción correcta.");
|
||||
return ResponseEntity.ok(map);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@PostMapping("/generarLicenciaVitalicia")
|
||||
public ResponseEntity<String> generarLicenciaVitalicia() throws ParseException {
|
||||
ActivationKey key = new ActivationKey();
|
||||
key.setActivation_code(UUID.randomUUID().toString());
|
||||
key.setActive_key(ActiveKey.Yes);
|
||||
key.setModules("2");
|
||||
key.setTipo_key(TipoKey.Lifetime);
|
||||
|
||||
actKeyServ.generarLicenciaVitalicia(key);
|
||||
|
||||
return ResponseEntity.ok(key.getActivation_code());
|
||||
|
||||
}
|
||||
|
||||
}
|
74
src/main/java/com/crov/crovWSTotal/EncriptadorAES.java
Normal file
74
src/main/java/com/crov/crovWSTotal/EncriptadorAES.java
Normal file
@ -0,0 +1,74 @@
|
||||
package com.crov.crovWSTotal;
|
||||
|
||||
import java.security.spec.KeySpec;
|
||||
import java.util.Base64;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.SecretKeyFactory;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.PBEKeySpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
|
||||
public class EncriptadorAES {
|
||||
|
||||
// Claves para encryotar y desencriptar las claves
|
||||
private static final String key = "08wR?!5!S6_WO&-v$f#0RUdrEfRoclTh";
|
||||
private static final String salt = "huwlzO@a*&t8tr83e$l6hiy#k+vl!0cr";
|
||||
private SecretKey secretKeyTemp;
|
||||
|
||||
public EncriptadorAES() {
|
||||
// Se obtiene la instancia para evitar ataques de fuerza bruta
|
||||
SecretKeyFactory secretKeyFactory;
|
||||
KeySpec keySpec;
|
||||
try {
|
||||
// HMac y Sha512 para encriptar
|
||||
secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
|
||||
// Indica que es encriptacion para password encviandole bites, se mandan las
|
||||
// iteraciones y la longitud de cadena
|
||||
keySpec = new PBEKeySpec(key.toCharArray(), salt.getBytes(), 65536, 256);
|
||||
// Genera la lalve a partir de las especificaciones.
|
||||
secretKeyTemp = secretKeyFactory.generateSecret(keySpec);
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// Metodo de encriptación
|
||||
public String getAES(String data) {
|
||||
byte[] iv = new byte[16];
|
||||
try {
|
||||
// Parametro de inicialización
|
||||
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
|
||||
// LLave temporal generada en AES
|
||||
SecretKeySpec secretKey = new SecretKeySpec(secretKeyTemp.getEncoded(), "AES");
|
||||
// Cifrado por bloques, para definir el tamaño de bloque
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
// Inicialización de Cipher para encriptar, se le manda los parametros de
|
||||
// inicialización.
|
||||
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
|
||||
// Se codififica a String y retorna un String codificacdo
|
||||
return Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes("UTF-8")));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Metodo de desincriptación
|
||||
public String getAESDecrypt(String data) {
|
||||
byte[] iv = new byte[16];
|
||||
try {
|
||||
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
|
||||
SecretKeySpec secretKey = new SecretKeySpec(secretKeyTemp.getEncoded(), "AES");
|
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
|
||||
// Se decofifica el cipher, retornando el valor del string
|
||||
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivParameterSpec);
|
||||
return new String(cipher.doFinal(Base64.getDecoder().decode(data)));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
32
src/main/java/com/crov/crovWSTotal/Utilerias.java
Normal file
32
src/main/java/com/crov/crovWSTotal/Utilerias.java
Normal file
@ -0,0 +1,32 @@
|
||||
package com.crov.crovWSTotal;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
||||
public class Utilerias {
|
||||
|
||||
public Date sumarDiasAFecha(Date fecha, int dias){
|
||||
if (dias==0) return fecha;
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(fecha);
|
||||
calendar.add(Calendar.DAY_OF_YEAR, dias);
|
||||
return calendar.getTime();
|
||||
}
|
||||
|
||||
public Date restarSeisHorasAlDia(Date fecha) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(fecha);
|
||||
calendar.add(Calendar.HOUR, -6);
|
||||
return calendar.getTime();
|
||||
|
||||
}
|
||||
|
||||
public Date restarHorasAlDia(Date fecha, int horas) {
|
||||
if (horas == 0) return fecha;
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(fecha);
|
||||
calendar.add(Calendar.HOUR, horas);
|
||||
return calendar.getTime();
|
||||
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package com.crov.crovWSTotal.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
|
||||
@Configuration
|
||||
@Order(1)
|
||||
public class SecurityConfig {
|
||||
|
||||
@Bean
|
||||
public InMemoryUserDetailsManager userDetailsService() {
|
||||
UserDetails user = User.withDefaultPasswordEncoder()
|
||||
.username("admin")
|
||||
.password("Saladeespera2")
|
||||
.roles("USER")
|
||||
.build();
|
||||
return new InMemoryUserDetailsManager(user);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||
http
|
||||
.csrf().disable()
|
||||
.authorizeHttpRequests(auth -> auth
|
||||
.anyRequest().authenticated()
|
||||
)
|
||||
.httpBasic(); // Configuración de autenticación básica
|
||||
|
||||
return http.build();
|
||||
}
|
||||
}
|
117
src/main/java/com/crov/models/ActivationKey.java
Normal file
117
src/main/java/com/crov/models/ActivationKey.java
Normal file
@ -0,0 +1,117 @@
|
||||
package com.crov.models;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.PrePersist;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
|
||||
@Entity
|
||||
@Table (name ="ACTIVATION_KEY")
|
||||
public class ActivationKey {
|
||||
|
||||
@Id
|
||||
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String id;
|
||||
@PrePersist
|
||||
public void prePersist() {
|
||||
if (id == null || id.isEmpty()) {
|
||||
id = UUID.randomUUID().toString();
|
||||
}
|
||||
}
|
||||
@NonNull
|
||||
@Column(name = "activation_code", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String activation_code;
|
||||
@NonNull
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
private TipoKey tipo_key;
|
||||
@NonNull
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
private ActiveKey active_key;
|
||||
|
||||
private String modules;
|
||||
|
||||
private Integer activationTime;
|
||||
|
||||
public enum TipoKey{
|
||||
Lifetime,
|
||||
Proof,
|
||||
Rent,
|
||||
ProductosAbarrotes,
|
||||
ProductosFarmacia
|
||||
}
|
||||
|
||||
public enum ActiveKey{
|
||||
Yes,
|
||||
No
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getActivation_code() {
|
||||
return activation_code;
|
||||
}
|
||||
|
||||
public void setActivation_code(String activation_code) {
|
||||
this.activation_code = activation_code;
|
||||
}
|
||||
|
||||
public TipoKey getTipo_key() {
|
||||
return tipo_key;
|
||||
}
|
||||
|
||||
public void setTipo_key(TipoKey tipo_key) {
|
||||
this.tipo_key = tipo_key;
|
||||
}
|
||||
|
||||
public ActiveKey getActive_key() {
|
||||
return active_key;
|
||||
}
|
||||
|
||||
public void setActive_key(ActiveKey active_key) {
|
||||
this.active_key = active_key;
|
||||
}
|
||||
|
||||
|
||||
public String getModules() {
|
||||
return modules;
|
||||
}
|
||||
|
||||
public void setModules(String modules) {
|
||||
this.modules = modules;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public Integer getActivationTime() {
|
||||
return activationTime;
|
||||
}
|
||||
|
||||
public void setActivationTime(Integer activationTime) {
|
||||
this.activationTime = activationTime;
|
||||
}
|
||||
|
||||
public ActivationKey(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
public ActivationKey () {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
48
src/main/java/com/crov/models/Empresa.java
Normal file
48
src/main/java/com/crov/models/Empresa.java
Normal file
@ -0,0 +1,48 @@
|
||||
package com.crov.models;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name ="empresa")
|
||||
public class Empresa {
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private UUID id;
|
||||
|
||||
@Column(name = "token", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private UUID token;
|
||||
|
||||
@Column(name="nombre")
|
||||
private String nombre;
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
public UUID getToken() {
|
||||
return token;
|
||||
}
|
||||
public void setToken(UUID token) {
|
||||
this.token = token;
|
||||
}
|
||||
|
||||
|
||||
}
|
109
src/main/java/com/crov/models/EmpresaUser.java
Normal file
109
src/main/java/com/crov/models/EmpresaUser.java
Normal file
@ -0,0 +1,109 @@
|
||||
package com.crov.models;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.Table;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
|
||||
@Entity
|
||||
@Table (name ="EMPRESA_USER")
|
||||
public class EmpresaUser {
|
||||
|
||||
@Id
|
||||
@GeneratedValue
|
||||
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private UUID id;
|
||||
|
||||
@Column(name="id_software_model")
|
||||
private String softwareModel;
|
||||
|
||||
@Column(name ="user_name")
|
||||
private String userName;
|
||||
|
||||
@Column(name="password")
|
||||
private String password;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name ="active")
|
||||
private Active active;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "id_empresa")
|
||||
private Empresa empresaModel;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
@Column(name ="tipo_cliente")
|
||||
private TipoCliente tipoCliente;
|
||||
|
||||
@Column(name="no_backups")
|
||||
private Integer noBackups;
|
||||
|
||||
public enum Active{
|
||||
ENABLED, DISABLED
|
||||
}
|
||||
|
||||
public enum TipoCliente{
|
||||
MOVIL, RESPALDO, AMBOS, NADA
|
||||
}
|
||||
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getSoftwareModel() {
|
||||
return softwareModel;
|
||||
}
|
||||
|
||||
public void setSoftwareModel(String softwareModel) {
|
||||
this.softwareModel = softwareModel;
|
||||
}
|
||||
|
||||
public String getUserName() {
|
||||
return userName;
|
||||
}
|
||||
public void setUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
public Active getActive() {
|
||||
return active;
|
||||
}
|
||||
public void setActive(Active active) {
|
||||
this.active = active;
|
||||
}
|
||||
public Empresa getEmpresaModel() {
|
||||
return empresaModel;
|
||||
}
|
||||
public void setEmpresaModel(Empresa empresaModel) {
|
||||
this.empresaModel = empresaModel;
|
||||
}
|
||||
public TipoCliente getTipoCliente() {
|
||||
return tipoCliente==null?TipoCliente.NADA:tipoCliente;
|
||||
}
|
||||
public void setTipoCliente(TipoCliente tipoCliente) {
|
||||
this.tipoCliente = tipoCliente;
|
||||
}
|
||||
public Integer getNoBackups() {
|
||||
return noBackups;
|
||||
}
|
||||
public void setNoBackups(Integer noBackups) {
|
||||
this.noBackups = noBackups;
|
||||
}
|
||||
|
||||
}
|
183
src/main/java/com/crov/models/PersonSoftware.java
Normal file
183
src/main/java/com/crov/models/PersonSoftware.java
Normal file
@ -0,0 +1,183 @@
|
||||
package com.crov.models;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.PrePersist;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table (name ="PERSON_SOFTWARE")
|
||||
public class PersonSoftware {
|
||||
|
||||
@Id
|
||||
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String id;
|
||||
|
||||
@PrePersist
|
||||
public void prePersist() {
|
||||
if (id == null || id.isEmpty()) {
|
||||
id = UUID.randomUUID().toString();
|
||||
}
|
||||
}
|
||||
@NonNull
|
||||
private String first_name;
|
||||
|
||||
private String second_name;
|
||||
|
||||
private String last_name;
|
||||
|
||||
private String middle_name;
|
||||
|
||||
private String mail;
|
||||
|
||||
|
||||
private Date birthdate;
|
||||
|
||||
private String curp;
|
||||
|
||||
private String rfc;
|
||||
|
||||
private String phone;
|
||||
|
||||
@Column(name="active", nullable = false, length = 8 )
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
private ActivePerson active;
|
||||
|
||||
@Column(name="black_list", nullable = false, length = 8 )
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
private BlackListPerson black_list;
|
||||
|
||||
private String black_list_description;
|
||||
|
||||
@JsonFormat(pattern="yyyy-MM-dd")
|
||||
private Date created_on;
|
||||
|
||||
public PersonSoftware(String id, String first_name, String second_name, String last_name, String middle_name,
|
||||
String mail, Date birthdate, String curp, String rfc, String phone, ActivePerson active, BlackListPerson black_list,
|
||||
String black_list_description, Date created_on) {
|
||||
this.id = id;
|
||||
this.first_name = first_name;
|
||||
this.second_name = second_name;
|
||||
this.last_name = last_name;
|
||||
this.middle_name = middle_name;
|
||||
this.mail = mail;
|
||||
this.birthdate = birthdate;
|
||||
this.curp = curp;
|
||||
this.rfc = rfc;
|
||||
this.phone = phone;
|
||||
this.active = active;
|
||||
this.black_list = black_list;
|
||||
this.black_list_description = black_list_description;
|
||||
this.created_on = created_on;
|
||||
}
|
||||
public PersonSoftware() {
|
||||
|
||||
}
|
||||
public PersonSoftware(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
public enum ActivePerson{
|
||||
Active,
|
||||
Inactive
|
||||
}
|
||||
public enum BlackListPerson{
|
||||
Enabled,
|
||||
Disabled
|
||||
}
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
public String getFirst_name() {
|
||||
return first_name;
|
||||
}
|
||||
public void setFirst_name(String first_name) {
|
||||
this.first_name = first_name;
|
||||
}
|
||||
public String getSecond_name() {
|
||||
return second_name;
|
||||
}
|
||||
public void setSecond_name(String second_name) {
|
||||
this.second_name = second_name;
|
||||
}
|
||||
public String getLast_name() {
|
||||
return last_name;
|
||||
}
|
||||
public void setLast_name(String last_name) {
|
||||
this.last_name = last_name;
|
||||
}
|
||||
public String getMiddle_name() {
|
||||
return middle_name;
|
||||
}
|
||||
public void setMiddle_name(String middle_name) {
|
||||
this.middle_name = middle_name;
|
||||
}
|
||||
public String getMail() {
|
||||
return mail;
|
||||
}
|
||||
public void setMail(String mail) {
|
||||
this.mail = mail;
|
||||
}
|
||||
public Date getBirthdate() {
|
||||
return birthdate;
|
||||
}
|
||||
public void setBirthdate(Date birthdate) {
|
||||
this.birthdate = birthdate;
|
||||
}
|
||||
public String getCurp() {
|
||||
return curp;
|
||||
}
|
||||
public void setCurp(String curp) {
|
||||
this.curp = curp;
|
||||
}
|
||||
public String getRfc() {
|
||||
return rfc;
|
||||
}
|
||||
public void setRfc(String rfc) {
|
||||
this.rfc = rfc;
|
||||
}
|
||||
public String getPhone() {
|
||||
return phone;
|
||||
}
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
public ActivePerson getActivePerson() {
|
||||
return active;
|
||||
}
|
||||
public void setActivePerson(ActivePerson active) {
|
||||
this.active = active;
|
||||
}
|
||||
public BlackListPerson getBlack_listPerson() {
|
||||
return black_list;
|
||||
}
|
||||
public void setBlack_listPerson(BlackListPerson black_list) {
|
||||
this.black_list = black_list;
|
||||
}
|
||||
public String getBlack_list_description() {
|
||||
return black_list_description;
|
||||
}
|
||||
public void setBlack_list_description(String black_list_description) {
|
||||
this.black_list_description = black_list_description;
|
||||
}
|
||||
public Date getCreated_on() {
|
||||
return created_on;
|
||||
}
|
||||
public void setCreated_on(Date created_on) {
|
||||
this.created_on = created_on;
|
||||
}
|
||||
|
||||
|
||||
}
|
155
src/main/java/com/crov/models/Software.java
Normal file
155
src/main/java/com/crov/models/Software.java
Normal file
@ -0,0 +1,155 @@
|
||||
package com.crov.models;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.EnumType;
|
||||
import jakarta.persistence.Enumerated;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.PrePersist;
|
||||
import jakarta.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "CUSTOMER_LICENSE_BY_PRODUCT")
|
||||
public class Software {
|
||||
|
||||
@Id
|
||||
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String id;
|
||||
|
||||
@PrePersist
|
||||
public void prePersist() {
|
||||
if (id == null || id.isEmpty()) {
|
||||
id = UUID.randomUUID().toString();
|
||||
}
|
||||
}
|
||||
|
||||
private Float payment;
|
||||
|
||||
@Column(unique = true, nullable = false)
|
||||
private String mac;
|
||||
|
||||
@Column(name = "activation_key", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String activation_key;
|
||||
|
||||
private String token_product;
|
||||
|
||||
@Column(name ="id_software_product")
|
||||
private String id_software_product;
|
||||
|
||||
@Column(name = "id_customer", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String id_customer;
|
||||
|
||||
@Column(name="active", nullable = false, length = 8 )
|
||||
@Enumerated(value = EnumType.STRING)
|
||||
private ActiveSofware active;
|
||||
|
||||
public enum ActiveSofware{
|
||||
Active,
|
||||
Inactive
|
||||
}
|
||||
|
||||
@JsonFormat(pattern="yyyy-MM-dd")
|
||||
private Date expiration_date;
|
||||
|
||||
@JsonFormat(pattern="yyyy-MM-dd")
|
||||
private Date created_on;
|
||||
|
||||
private Integer paid;
|
||||
|
||||
public Software(String id, Float payment, String mac, String activation_key, String token_product,
|
||||
String id_software_product, String id_customer, ActiveSofware active, Date expiration_date, Date created_on, Integer paid) {
|
||||
this.id = id;
|
||||
this.payment = payment;
|
||||
this.mac = mac;
|
||||
this.activation_key = activation_key;
|
||||
this.token_product = token_product;
|
||||
this.id_software_product = id_software_product;
|
||||
this.id_customer = id_customer;
|
||||
this.active = active;
|
||||
this.expiration_date = expiration_date;
|
||||
this.created_on = created_on;
|
||||
this.paid = paid;
|
||||
}
|
||||
|
||||
public Software() {
|
||||
|
||||
}
|
||||
|
||||
public Software(String activation_key) {
|
||||
this.activation_key = activation_key;
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
public Float getPayment() {
|
||||
return payment;
|
||||
}
|
||||
public void setPayment(Float payment) {
|
||||
this.payment = payment;
|
||||
}
|
||||
public String getMac() {
|
||||
return mac;
|
||||
}
|
||||
public void setMac(String mac) {
|
||||
this.mac = mac;
|
||||
}
|
||||
|
||||
public String getActivation_key() {
|
||||
return activation_key;
|
||||
}
|
||||
public void setActivation_key(String activation_key) {
|
||||
this.activation_key = activation_key;
|
||||
}
|
||||
public String getId_software_product() {
|
||||
return id_software_product;
|
||||
}
|
||||
public void setId_software_product(String id_software_product) {
|
||||
this.id_software_product = id_software_product;
|
||||
}
|
||||
public String getId_customer() {
|
||||
return id_customer;
|
||||
}
|
||||
public void setId_customer(String id_customer) {
|
||||
this.id_customer = id_customer;
|
||||
}
|
||||
public ActiveSofware getActiveSofware() {
|
||||
return active;
|
||||
}
|
||||
public void setActiveSofware(ActiveSofware active) {
|
||||
this.active = active;
|
||||
}
|
||||
public Date getExpiration_date() {
|
||||
return expiration_date;
|
||||
}
|
||||
public void setExpiration_date(Date expiration_date) {
|
||||
this.expiration_date = expiration_date;
|
||||
}
|
||||
public Date getCreated_on() {
|
||||
return created_on;
|
||||
}
|
||||
public void setCreated_on(Date created_on) {
|
||||
this.created_on = created_on;
|
||||
}
|
||||
public String getToken_product() {
|
||||
return token_product;
|
||||
}
|
||||
public void setToken_product(String token_product) {
|
||||
this.token_product = token_product;
|
||||
}
|
||||
public Integer getPaid() {
|
||||
return paid;
|
||||
}
|
||||
public void setPaid(Integer paid) {
|
||||
this.paid = paid;
|
||||
}
|
||||
|
||||
}
|
@ -18,7 +18,7 @@ import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
@Entity
|
||||
@Table(name = "usuario")
|
||||
@Table(name = "usuarioCROV")
|
||||
public class Usuario {
|
||||
|
||||
@Id
|
||||
|
152
src/main/java/com/crov/models/UsuarioModel.java
Normal file
152
src/main/java/com/crov/models/UsuarioModel.java
Normal file
@ -0,0 +1,152 @@
|
||||
package com.crov.models;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.JoinColumn;
|
||||
import jakarta.persistence.ManyToOne;
|
||||
import jakarta.persistence.PrePersist;
|
||||
import jakarta.persistence.Table;
|
||||
import jakarta.persistence.Temporal;
|
||||
import jakarta.persistence.TemporalType;
|
||||
|
||||
|
||||
@Entity
|
||||
@Table(name = "USUARIO")
|
||||
public class UsuarioModel {
|
||||
|
||||
@Id
|
||||
@Column(name = "id", updatable = false, nullable = false, columnDefinition = "VARCHAR(255)")
|
||||
private String id;
|
||||
@PrePersist
|
||||
public void prePersist() {
|
||||
if (id == null || id.isEmpty()) {
|
||||
id = UUID.randomUUID().toString();
|
||||
}
|
||||
}
|
||||
@Column(name="id_punto_venta")
|
||||
private Integer idPuntoVenta;
|
||||
@Column(name ="login")
|
||||
private String login;
|
||||
@Column(name="nombre")
|
||||
private String nombre;
|
||||
@Column(name="apellidos")
|
||||
private String apellidos;
|
||||
@Column(name="calular")
|
||||
private String celular;
|
||||
@Column(name="email")
|
||||
private String email;
|
||||
@Column(name="tipoCargo")
|
||||
private String tipoCargo;
|
||||
@Column(name="descripcion")
|
||||
private String descipcion;
|
||||
@Column(name="activo")
|
||||
private Integer activo;
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
@Column(name = "fec_registro", length = 19)
|
||||
private Date fec_registro;
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "id_empresa")
|
||||
private EmpresaUser empresaUserModel;
|
||||
|
||||
public UsuarioModel() {
|
||||
}
|
||||
public UsuarioModel(String id, Integer idPuntoVenta, String login, String nombre, String apellidos, String celular,
|
||||
String email, String tipoCargo, String descipcion, Integer activo, Date fec_registro,
|
||||
EmpresaUser empresaModel) {
|
||||
super();
|
||||
this.id = id;
|
||||
this.idPuntoVenta = idPuntoVenta;
|
||||
this.login = login;
|
||||
this.nombre = nombre;
|
||||
this.apellidos = apellidos;
|
||||
this.celular = celular;
|
||||
this.email = email;
|
||||
this.tipoCargo = tipoCargo;
|
||||
this.descipcion = descipcion;
|
||||
this.activo = activo;
|
||||
this.fec_registro = fec_registro;
|
||||
this.empresaUserModel = empresaModel;
|
||||
}
|
||||
public UsuarioModel(String id, Integer idPuntoVenta) {
|
||||
super();
|
||||
this.id = id;
|
||||
this.idPuntoVenta = idPuntoVenta;
|
||||
}
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
public Integer getIdPuntoVenta() {
|
||||
return idPuntoVenta;
|
||||
}
|
||||
public void setIdPuntoVenta(Integer idPuntoVenta) {
|
||||
this.idPuntoVenta = idPuntoVenta;
|
||||
}
|
||||
public String getLogin() {
|
||||
return login;
|
||||
}
|
||||
public void setLogin(String login) {
|
||||
this.login = login;
|
||||
}
|
||||
public String getNombre() {
|
||||
return nombre;
|
||||
}
|
||||
public void setNombre(String nombre) {
|
||||
this.nombre = nombre;
|
||||
}
|
||||
public String getApellidos() {
|
||||
return apellidos;
|
||||
}
|
||||
public void setApellidos(String apellidos) {
|
||||
this.apellidos = apellidos;
|
||||
}
|
||||
public String getCelular() {
|
||||
return celular;
|
||||
}
|
||||
public void setCelular(String celular) {
|
||||
this.celular = celular;
|
||||
}
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
public String getTipoCargo() {
|
||||
return tipoCargo;
|
||||
}
|
||||
public void setTipoCargo(String tipoCargo) {
|
||||
this.tipoCargo = tipoCargo;
|
||||
}
|
||||
public String getDescipcion() {
|
||||
return descipcion;
|
||||
}
|
||||
public void setDescipcion(String descipcion) {
|
||||
this.descipcion = descipcion;
|
||||
}
|
||||
public Integer getActivo() {
|
||||
return activo;
|
||||
}
|
||||
public void setActivo(Integer activo) {
|
||||
this.activo = activo;
|
||||
}
|
||||
public Date getFec_registro() {
|
||||
return fec_registro;
|
||||
}
|
||||
public void setFec_registro(Date fec_registro) {
|
||||
this.fec_registro = fec_registro;
|
||||
}
|
||||
public EmpresaUser getEmpresaUserModel() {
|
||||
return empresaUserModel;
|
||||
}
|
||||
public void setEmpresaUserModel(EmpresaUser empresaUserModel) {
|
||||
this.empresaUserModel = empresaUserModel;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.crov.repositories;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.crov.models.ActivationKey;
|
||||
|
||||
@Repository
|
||||
public interface ActivationKeyRepository extends JpaRepository<ActivationKey, Long>{
|
||||
|
||||
@Query(value="SELECT IF(EXISTS(SELECT ac.activation_code, ac.active_key "
|
||||
+ "FROM activation_key ac WHERE ac.activation_code =:actCode AND active_key = 'Yes'),1,0)AS resul", nativeQuery=true)
|
||||
int revisarLicenciaActivaSinUso(@Param ("actCode")String activation_code );
|
||||
|
||||
@Query(value="SELECT IF(EXISTS(SELECT ac.activation_code, ac.active_key "
|
||||
+ "FROM activation_key ac WHERE ac.activation_code =:actCode AND active_key = 'Yes' "
|
||||
+ "AND tipo_key ='Lifetime'),1,0)AS resul", nativeQuery=true)
|
||||
int checkActiveCodeAndVitalicieKey(@Param ("actCode")String activation_code );
|
||||
|
||||
@Transactional
|
||||
@Modifying
|
||||
@Query(value="UPDATE activation_key ac SET ac.active_key = 'No' WHERE ac.id =:id_key" ,nativeQuery=true)
|
||||
void updateActKeyToNo(@Param ("id_key") String id_key);
|
||||
|
||||
@Query(value="SELECT ac.* FROM activation_key ac WHERE ac.activation_code =:acti_cod" ,nativeQuery=true)
|
||||
ActivationKey getActivationCodePorCodigoActivacion(@Param ("acti_cod") String activation_code);
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
package com.crov.repositories;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.data.repository.CrudRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.crov.models.PersonSoftware;
|
||||
|
||||
@Repository
|
||||
public interface PersonSoftwareRepository extends CrudRepository<PersonSoftware, UUID>{
|
||||
|
||||
}
|
21
src/main/java/com/crov/repositories/SoftwareRepository.java
Normal file
21
src/main/java/com/crov/repositories/SoftwareRepository.java
Normal file
@ -0,0 +1,21 @@
|
||||
package com.crov.repositories;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.crov.models.Software;
|
||||
|
||||
@Repository
|
||||
public interface SoftwareRepository extends JpaRepository<Software, Long>{
|
||||
|
||||
@Query(value="SELECT IF(EXISTS(SELECT cl.mac FROM customer_license_by_product cl WHERE cl.mac =:vaMac ),1,0 )", nativeQuery=true)
|
||||
int revisarMacExistePreviamente(@Param ("vaMac")String valueMac );
|
||||
|
||||
@Query(value="SELECT cl.* FROM customer_license_by_product cl WHERE cl.mac =:data_mac" ,nativeQuery=true)
|
||||
Software getSoftwareByMac(@Param ("data_mac") String mac);
|
||||
|
||||
@Query(value="SELECT cl.id FROM customer_license_by_product cl WHERE cl.token_product =:token" ,nativeQuery=true)
|
||||
String getSoftwareByToken(@Param ("token") String mac);
|
||||
}
|
85
src/main/java/com/crov/requests/PersonSoftwareRequest.java
Normal file
85
src/main/java/com/crov/requests/PersonSoftwareRequest.java
Normal file
@ -0,0 +1,85 @@
|
||||
package com.crov.requests;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class PersonSoftwareRequest {
|
||||
private String first_name;
|
||||
private String second_name;
|
||||
private String last_name;
|
||||
private String middle_name;
|
||||
private String mail;
|
||||
private String birthdate;
|
||||
private String phone;
|
||||
private String activation_key;
|
||||
private String mac;
|
||||
private String id_product;
|
||||
private Float payment;
|
||||
|
||||
public String getFirst_name() {
|
||||
return first_name;
|
||||
}
|
||||
public void setFirst_name(String first_name) {
|
||||
this.first_name = first_name;
|
||||
}
|
||||
public String getSecond_name() {
|
||||
return second_name;
|
||||
}
|
||||
public void setSecond_name(String second_name) {
|
||||
this.second_name = second_name;
|
||||
}
|
||||
public String getLast_name() {
|
||||
return last_name;
|
||||
}
|
||||
public void setLast_name(String last_name) {
|
||||
this.last_name = last_name;
|
||||
}
|
||||
public String getMiddle_name() {
|
||||
return middle_name;
|
||||
}
|
||||
public void setMiddle_name(String middle_name) {
|
||||
this.middle_name = middle_name;
|
||||
}
|
||||
public String getMail() {
|
||||
return mail;
|
||||
}
|
||||
public void setMail(String mail) {
|
||||
this.mail = mail;
|
||||
}
|
||||
public String getBirthdate() {
|
||||
return birthdate;
|
||||
}
|
||||
public void setBirthdate(String birthdate) {
|
||||
this.birthdate = birthdate;
|
||||
}
|
||||
public String getPhone() {
|
||||
return phone;
|
||||
}
|
||||
public void setPhone(String phone) {
|
||||
this.phone = phone;
|
||||
}
|
||||
public String getActivation_key() {
|
||||
return activation_key;
|
||||
}
|
||||
public void setActivation_key(String activation_key) {
|
||||
this.activation_key = activation_key;
|
||||
}
|
||||
public String getMac() {
|
||||
return mac;
|
||||
}
|
||||
public void setMac(String mac) {
|
||||
this.mac = mac;
|
||||
}
|
||||
public String getId_product() {
|
||||
return id_product;
|
||||
}
|
||||
public void setId_product(String id_product) {
|
||||
this.id_product = id_product;
|
||||
}
|
||||
public Float getPayment() {
|
||||
return payment;
|
||||
}
|
||||
public void setPayment(Float payment) {
|
||||
this.payment = payment;
|
||||
}
|
||||
|
||||
}
|
35
src/main/java/com/crov/services/ActivationKeyService.java
Normal file
35
src/main/java/com/crov/services/ActivationKeyService.java
Normal file
@ -0,0 +1,35 @@
|
||||
package com.crov.services;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.crov.models.ActivationKey;
|
||||
import com.crov.repositories.ActivationKeyRepository;
|
||||
|
||||
|
||||
@Service
|
||||
public class ActivationKeyService {
|
||||
|
||||
@Autowired
|
||||
ActivationKeyRepository actiKeyRepo;
|
||||
|
||||
public int revisarLicenciaActivaSinUso (String ActivationCode) {
|
||||
return actiKeyRepo.revisarLicenciaActivaSinUso(ActivationCode);
|
||||
}
|
||||
|
||||
public ActivationKey getActivationCodePorCodigoActivacion(String actKey) {
|
||||
|
||||
return actiKeyRepo.getActivationCodePorCodigoActivacion(actKey);
|
||||
}
|
||||
|
||||
public void actualizarActiveKey(String id_key) {
|
||||
actiKeyRepo.updateActKeyToNo(id_key);
|
||||
}
|
||||
|
||||
public void generarLicenciaVitalicia(ActivationKey ak) {
|
||||
actiKeyRepo.save(ak);
|
||||
}
|
||||
|
||||
}
|
23
src/main/java/com/crov/services/AuthService.java
Normal file
23
src/main/java/com/crov/services/AuthService.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.crov.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class AuthService {
|
||||
|
||||
private static final String PASSWORD = "Saladeespera2_?01092022";
|
||||
private static final String USERNAME = "CROVadminPV";
|
||||
@Autowired
|
||||
private JwtTokenUtil jwtTokenUtil;
|
||||
|
||||
public String login(String username, String password) {
|
||||
// Aquí validas al usuario con tus reglas de negocio
|
||||
if (username.equals(USERNAME) && password.equals(PASSWORD)) {
|
||||
// Generar token si la autenticación es exitosa
|
||||
return jwtTokenUtil.generateToken(username);
|
||||
} else {
|
||||
throw new RuntimeException("Credenciales inválidas");
|
||||
}
|
||||
}
|
||||
}
|
60
src/main/java/com/crov/services/JwtRequestFilter.java
Normal file
60
src/main/java/com/crov/services/JwtRequestFilter.java
Normal file
@ -0,0 +1,60 @@
|
||||
package com.crov.services;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
@Component
|
||||
public class JwtRequestFilter extends OncePerRequestFilter {
|
||||
|
||||
@Value("${jwt.secret}")
|
||||
private String secret;
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
|
||||
throws IOException, ServletException {
|
||||
|
||||
// Obtener el token del header "Authorization"
|
||||
final String authorizationHeader = request.getHeader("Authorization");
|
||||
|
||||
String username = null;
|
||||
String jwt = null;
|
||||
|
||||
// Validar el formato "Bearer <token>"
|
||||
if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
|
||||
jwt = authorizationHeader.substring(7); // Elimina el prefijo "Bearer "
|
||||
try {
|
||||
// Extraer el usuario del token
|
||||
Claims claims = Jwts.parser()
|
||||
.setSigningKey(secret.getBytes())
|
||||
.parseClaimsJws(jwt)
|
||||
.getBody();
|
||||
username = claims.getSubject();
|
||||
} catch (Exception e) {
|
||||
System.out.println("Token inválido o expirado: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Configurar el contexto de seguridad si el token es válido
|
||||
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
|
||||
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
|
||||
username, null, null); // Agrega roles/permisos si los tienes en tu token
|
||||
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
|
||||
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
|
||||
}
|
||||
|
||||
chain.doFilter(request, response);
|
||||
}
|
||||
}
|
||||
|
34
src/main/java/com/crov/services/JwtTokenUtil.java
Normal file
34
src/main/java/com/crov/services/JwtTokenUtil.java
Normal file
@ -0,0 +1,34 @@
|
||||
package com.crov.services;
|
||||
|
||||
import java.security.Key;
|
||||
import java.util.Date;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
import io.jsonwebtoken.security.Keys;
|
||||
|
||||
@Component
|
||||
public class JwtTokenUtil {
|
||||
|
||||
@Value("${jwt.secret}")
|
||||
private String secret;
|
||||
|
||||
@Value("${jwt.expiration}")
|
||||
private long expirationTime;
|
||||
|
||||
// Generar el token
|
||||
public String generateToken(String username) {
|
||||
byte[] keyBytes = secret.getBytes(); // Convierte la clave secreta en bytes
|
||||
Key signingKey = Keys.hmacShaKeyFor(keyBytes); // Crea un objeto de clave segura
|
||||
|
||||
return Jwts.builder()
|
||||
.setSubject(username)
|
||||
.setIssuedAt(new Date())
|
||||
.setExpiration(new Date(System.currentTimeMillis() + expirationTime))
|
||||
.signWith(signingKey) // Firma con la clave segura
|
||||
.compact();
|
||||
}
|
||||
}
|
19
src/main/java/com/crov/services/PersonSoftwareService.java
Normal file
19
src/main/java/com/crov/services/PersonSoftwareService.java
Normal file
@ -0,0 +1,19 @@
|
||||
package com.crov.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.crov.models.PersonSoftware;
|
||||
import com.crov.repositories.PersonSoftwareRepository;
|
||||
|
||||
@Service
|
||||
public class PersonSoftwareService {
|
||||
|
||||
@Autowired
|
||||
PersonSoftwareRepository personRepo;
|
||||
|
||||
public PersonSoftware savePerson(PersonSoftware person) {
|
||||
return personRepo.save(person);
|
||||
|
||||
}
|
||||
}
|
45
src/main/java/com/crov/services/SecurityConfig.java
Normal file
45
src/main/java/com/crov/services/SecurityConfig.java
Normal file
@ -0,0 +1,45 @@
|
||||
package com.crov.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
|
||||
@Configuration
|
||||
@EnableWebSecurity
|
||||
public class SecurityConfig {
|
||||
|
||||
@Autowired
|
||||
private JwtRequestFilter jwtRequestFilter;
|
||||
|
||||
@Bean
|
||||
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||
http
|
||||
.csrf().disable() // Deshabilita CSRF (opcional)
|
||||
.authorizeHttpRequests()
|
||||
.requestMatchers("/api/auth/token").permitAll() // Permite el acceso al endpoint de login
|
||||
.anyRequest().authenticated() // Protege todos los demás endpoints
|
||||
.and()
|
||||
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); // Sin sesiones
|
||||
|
||||
// Agrega el filtro JWT antes del filtro predeterminado
|
||||
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
|
||||
return http.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception {
|
||||
return configuration.getAuthenticationManager();
|
||||
}
|
||||
}
|
31
src/main/java/com/crov/services/SoftwareService.java
Normal file
31
src/main/java/com/crov/services/SoftwareService.java
Normal file
@ -0,0 +1,31 @@
|
||||
package com.crov.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.crov.models.Software;
|
||||
import com.crov.repositories.SoftwareRepository;
|
||||
|
||||
@Service
|
||||
public class SoftwareService {
|
||||
|
||||
@Autowired
|
||||
SoftwareRepository softwareRepo;
|
||||
|
||||
public int revisarMacExistePreviamente (String valueMac) {
|
||||
|
||||
return softwareRepo.revisarMacExistePreviamente(valueMac);
|
||||
}
|
||||
|
||||
public Software save(Software software) {
|
||||
return softwareRepo.save(software);
|
||||
}
|
||||
|
||||
public Software getSofwareByMac(String mac) {
|
||||
return softwareRepo.getSoftwareByMac(mac);
|
||||
}
|
||||
|
||||
public String getIdSoftwareByToken(String token) {
|
||||
return softwareRepo.getSoftwareByToken(token);
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
spring.mvc.pathmatch.matching-strategy=ant-path-matcher
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/crov_total?createDatabaseIfNotExist=true
|
||||
spring.datasource.url=jdbc:mysql://localhost:3306/crov?createDatabaseIfNotExist=true
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=root
|
||||
spring.jpa.hibernate.ddl-auto=update
|
||||
@ -8,4 +8,6 @@ server.servlet.context-path=/
|
||||
springdoc.api-docs.path=/v3/api-docs
|
||||
springdoc.swagger-ui.path=/swagger-ui.html
|
||||
server.port=8080
|
||||
swagger.ui.base.url=/
|
||||
swagger.ui.base.url=/
|
||||
jwt.secret=OscarArmandoVargasCardenasBensonBenjaminArceHernandez01092022CROV
|
||||
jwt.expiration=3600000
|
Loading…
Reference in New Issue
Block a user