Fix su gestione dei device
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
This commit is contained in:
@@ -2,13 +2,7 @@ package it.integry.ems.devices;
|
||||
|
||||
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.devices.dto.RegisterDeviceRequestDTO;
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -17,42 +11,14 @@ import org.springframework.web.bind.annotation.*;
|
||||
@RequestMapping("device")
|
||||
public class DevicesController {
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
@Autowired
|
||||
private MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
@Autowired
|
||||
private RequestDataDTO requestDataDTO;
|
||||
|
||||
@Autowired
|
||||
private DevicesService devicesService;
|
||||
|
||||
@Deprecated
|
||||
@RequestMapping(value = "register", method = RequestMethod.POST)
|
||||
public @ResponseBody
|
||||
ServiceRestResponse register(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestBody RegisterDeviceRequestDTO registerDeviceRequestDTO) throws Exception {
|
||||
public @ResponseBody ServiceRestResponse register(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestBody Object registerDeviceRequestDTO) throws Exception {
|
||||
|
||||
DevicesService.App application = null;
|
||||
switch (registerDeviceRequestDTO.getApp().toLowerCase()) {
|
||||
case "wms":
|
||||
application = DevicesService.App.WMS;
|
||||
break;
|
||||
case "wingest":
|
||||
application = DevicesService.App.Wingest;
|
||||
break;
|
||||
case "textiles":
|
||||
application = DevicesService.App.Textiles;
|
||||
break;
|
||||
case "agribook":
|
||||
application = DevicesService.App.Agribook;
|
||||
break;
|
||||
}
|
||||
|
||||
if(application == null)
|
||||
throw new Exception("Impossibile riconoscere l'applicativo");
|
||||
|
||||
devicesService.register(application, requestDataDTO.getDeviceId());
|
||||
//TODO: To be removed
|
||||
//Mantenuto solo per lasciare compatibilità con le vecchie versioni del WMS
|
||||
//Non serve più per >= v1.45.00
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,46 +1,38 @@
|
||||
package it.integry.ems.devices;
|
||||
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.settings.Model.SettingsModel;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.security.service.DeviceService;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.ContextLoader;
|
||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@Component
|
||||
@Scope("request")
|
||||
public class DevicesRequestInterceptor extends HandlerInterceptorAdapter {
|
||||
public class DevicesRequestInterceptor implements HandlerInterceptor {
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
@Autowired
|
||||
private SettingsModel settingsModel;
|
||||
|
||||
@Autowired
|
||||
private DevicesService devicesService;
|
||||
|
||||
@Override
|
||||
public boolean preHandle(
|
||||
HttpServletRequest request,
|
||||
HttpServletResponse response, Object handler) {
|
||||
|
||||
try {
|
||||
DeviceService deviceService = ContextLoader.getCurrentWebApplicationContext().getBean(DeviceService.class);
|
||||
RequestDataDTO requestDataDTO = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class);
|
||||
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
|
||||
|
||||
if (requestDataDTO.isValidProfileDB() && requestDataDTO.isValidDeviceId()) {
|
||||
devicesService.updateUsage(multiDBTransactionManager.getPrimaryConnection(), requestDataDTO.getDeviceId());
|
||||
deviceService.updateUsage(requestDataDTO.getApplication(), requestDataDTO.getDeviceId());
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
logger.error(ex.getMessage(), ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
package it.integry.ems.devices;
|
||||
|
||||
|
||||
import it.integry.ems._context.ApplicationContextProvider;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.user.UserSession;
|
||||
import it.integry.ems_model.entity.StbDevices;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.Query;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityLocalDate;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.context.ContextLoader;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class DevicesService {
|
||||
|
||||
public enum App {
|
||||
WMS,
|
||||
Wingest,
|
||||
Textiles,
|
||||
Agribook
|
||||
}
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
public void register(App application, String deviceId) throws Exception {
|
||||
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
|
||||
EntityProcessor entityProcessor = ApplicationContextProvider.getApplicationContext().getBean(EntityProcessor.class);
|
||||
UserSession userSession = ContextLoader.getCurrentWebApplicationContext().getBean(UserSession.class);
|
||||
|
||||
if (!userSession.isAttivo()) {
|
||||
throw new UsernameNotFoundException("Utente " + userSession.getUsername() + " non riconoscuto!");
|
||||
}
|
||||
|
||||
String appName = application.name();
|
||||
|
||||
String selectSql = Query.format("SELECT CAST(COUNT(*) AS BIT) AS exist FROM stb_devices " +
|
||||
" WHERE identification_id = {}", deviceId);
|
||||
|
||||
boolean exists =
|
||||
UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), selectSql);
|
||||
|
||||
if (!exists) {
|
||||
StbDevices stbDevices = new StbDevices()
|
||||
.setName(appName)
|
||||
.setIdentificationId(deviceId)
|
||||
.setCreatedAt(new Date())
|
||||
.setLastUse(new Date());
|
||||
|
||||
stbDevices.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
entityProcessor.processEntity(stbDevices, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void updateUsage(Connection connection, String deviceId) throws Exception {
|
||||
String updateSql = Query.format("UPDATE stb_devices " +
|
||||
" SET last_use = {}" +
|
||||
" WHERE identification_id = {}", UtilityLocalDate.getNowTime(), deviceId);
|
||||
|
||||
UtilityDB.executeSimpleUpdate(connection, updateSql);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package it.integry.ems.devices.dto;
|
||||
|
||||
public class RegisterDeviceRequestDTO {
|
||||
|
||||
private String app;
|
||||
|
||||
public String getApp() {
|
||||
return app;
|
||||
}
|
||||
|
||||
public RegisterDeviceRequestDTO setApp(String app) {
|
||||
this.app = app;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class RequestDataDTO {
|
||||
private String requestClientIP;
|
||||
|
||||
private String profileDB;
|
||||
private String deviceId;
|
||||
private Long deviceId;
|
||||
private String username;
|
||||
private String password;
|
||||
private boolean includeNulls = false;
|
||||
@@ -55,10 +55,6 @@ public class RequestDataDTO {
|
||||
profileDB = request.getHeader(CommonConstants.PROFILE_DB);
|
||||
}
|
||||
|
||||
if (request != null && request.getHeader(EmsRestConstants.DEVICE_ID) != null) {
|
||||
deviceId = request.getHeader(EmsRestConstants.DEVICE_ID);
|
||||
}
|
||||
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication != null && !(authentication instanceof AnonymousAuthenticationToken)) {
|
||||
readAuthenticationClaims(authentication);
|
||||
@@ -107,7 +103,7 @@ public class RequestDataDTO {
|
||||
}
|
||||
|
||||
public boolean isValidDeviceId() {
|
||||
return !UtilityString.isNullOrEmpty(deviceId);
|
||||
return deviceId != null;
|
||||
}
|
||||
|
||||
public boolean isValidUsername() {
|
||||
@@ -136,7 +132,7 @@ public class RequestDataDTO {
|
||||
return profileDB;
|
||||
}
|
||||
|
||||
public String getDeviceId() {
|
||||
public Long getDeviceId() {
|
||||
return deviceId;
|
||||
}
|
||||
|
||||
@@ -173,10 +169,10 @@ public class RequestDataDTO {
|
||||
|
||||
private void readAuthenticationClaims(Authentication authentication) {
|
||||
username = authentication.getName();
|
||||
//final UsernamePasswordAuthenticationToken principal = (UsernamePasswordAuthenticationToken) authentication.getPrincipal();
|
||||
final AuthTokenDetails authTokenDetails = (AuthTokenDetails) authentication.getDetails();
|
||||
|
||||
userDTO = authTokenDetails.getUserDTO();
|
||||
deviceId = authTokenDetails.getDeviceId();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -54,7 +54,6 @@ public class EmsRestConstants {
|
||||
public static final String PASSWORD = "password";
|
||||
public static final String X_APP_TOKEN = "x-app-token";
|
||||
|
||||
public static final String DEVICE_ID = "device_id";
|
||||
public static final String INCLUDE_NULLS = "include_nulls";
|
||||
public static final String FILE_PROPS_NAME = "configs";
|
||||
//calcoli
|
||||
|
||||
@@ -3,8 +3,8 @@ package it.integry.security.config;
|
||||
import it.integry.security.JWTAccessDeniedHandler;
|
||||
import it.integry.security.JWTAuthenticationEntryPoint;
|
||||
import it.integry.security.cache.JwtTokenCacheComponent;
|
||||
import it.integry.security.jwt.JWTFilter;
|
||||
import it.integry.security.jwt.AccessTokenProvider;
|
||||
import it.integry.security.jwt.JWTFilter;
|
||||
import it.integry.security.provider.TokenAuthenticationProvider;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -24,10 +24,13 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
|
||||
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
@Autowired
|
||||
private AccessTokenProvider accessTokenProvider;
|
||||
|
||||
@Autowired
|
||||
private JwtTokenCacheComponent tokenCache;
|
||||
|
||||
@Autowired
|
||||
private JWTAuthenticationEntryPoint authenticationErrorHandler;
|
||||
|
||||
@Autowired
|
||||
private JWTAccessDeniedHandler jwtAccessDeniedHandler;
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ public class JWTFilter extends GenericFilterBean {
|
||||
public JWTFilter(AccessTokenProvider accessTokenProvider, JwtTokenCacheComponent tokenCache) {
|
||||
this.accessTokenProvider = accessTokenProvider;
|
||||
this.tokenCache = tokenCache;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package it.integry.security.service;
|
||||
|
||||
import it.integry.ems.settings.Model.AvailableConnectionsModel;
|
||||
import it.integry.ems.settings.Model.SettingsModel;
|
||||
import it.integry.ems.settings.SettingsController;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.utility.UtilityDebug;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class DeviceInternalService {
|
||||
|
||||
private final Logger logger = LogManager.getLogger(DeviceInternalService.class);
|
||||
|
||||
@Autowired
|
||||
private SettingsModel settingsModel;
|
||||
|
||||
@Autowired
|
||||
private SettingsController settingsController;
|
||||
|
||||
|
||||
@Scheduled(cron = "0 0 0 * * *", zone = "Europe/Rome")
|
||||
private void cleanOrphanDevices() {
|
||||
if(UtilityDebug.isDebugExecution() || !settingsModel.isPrimaryInstance())
|
||||
return;
|
||||
|
||||
String cleanQuery = "DELETE stb_devices FROM stb_devices\n" +
|
||||
"LEFT OUTER JOIN stb_auth_tokens ON stb_auth_tokens.device_id = stb_devices.id\n" +
|
||||
"WHERE stb_auth_tokens.device_id IS NULL";
|
||||
|
||||
try {
|
||||
List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, settingsController.getHistoryProfileDb());
|
||||
|
||||
for(AvailableConnectionsModel availableConnection : availableConnections) {
|
||||
try (MultiDBTransactionManager mdb = new MultiDBTransactionManager(availableConnection)) {
|
||||
UtilityDB.executeStatement(mdb.getPrimaryConnection(), cleanQuery);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,13 +1,17 @@
|
||||
package it.integry.security.service;
|
||||
|
||||
import it.integry.ems.model.IntegryApplicationEnum;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.entity.StbDevices;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.Query;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityLocalDate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.context.ContextLoader;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@@ -17,6 +21,7 @@ public class DeviceService {
|
||||
|
||||
@Autowired
|
||||
private MultiDBTransactionManager multiDBTransactionManager;
|
||||
|
||||
@Autowired
|
||||
private EntityProcessor entityProcessor;
|
||||
|
||||
@@ -45,4 +50,14 @@ public class DeviceService {
|
||||
return stbDevices;
|
||||
}
|
||||
|
||||
|
||||
public void updateUsage(IntegryApplicationEnum application, long deviceId) throws Exception {
|
||||
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
|
||||
String updateSql = Query.format("UPDATE stb_devices " +
|
||||
" SET last_use = {}, name = {}" +
|
||||
" WHERE id = {}", UtilityLocalDate.getNowTime(), application.name(), deviceId);
|
||||
|
||||
UtilityDB.executeSimpleUpdate(multiDBTransactionManager.getPrimaryConnection(), updateSql);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user