sensorconfig encryption
This commit is contained in:
		
							parent
							
								
									e5e76f7e7a
								
							
						
					
					
						commit
						8a188b3873
					
				| @ -28,7 +28,6 @@ import com.loafle.overflow.service.central.probe.ProbeService; | |||||||
| 
 | 
 | ||||||
| import com.fasterxml.jackson.databind.ObjectMapper; | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||||
| import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; |  | ||||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||||
| 
 | 
 | ||||||
| import inet.ipaddr.IPAddress; | import inet.ipaddr.IPAddress; | ||||||
| @ -152,15 +151,12 @@ public class CentralNoAuthProbeService implements NoAuthProbeService { | |||||||
|       throw new OverflowException("InfraHostMachine is not valid"); |       throw new OverflowException("InfraHostMachine is not valid"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); |  | ||||||
|     String encryptKey = passwordEncoder.encode(UUID.randomUUID().toString()); |  | ||||||
| 
 |  | ||||||
|     ApiKey apiKey = apiKeyService.readByApiKey(noAuthProbe.getApiKey()); |     ApiKey apiKey = apiKeyService.readByApiKey(noAuthProbe.getApiKey()); | ||||||
|     String memberEmail = SessionMetadata.getTargetID(); |     String memberEmail = SessionMetadata.getTargetID(); | ||||||
|     DomainMember domainMember = domainMemberService.readByMemberEmail(memberEmail); |     DomainMember domainMember = domainMemberService.readByMemberEmail(memberEmail); | ||||||
| 
 | 
 | ||||||
|     Probe probe = new Probe(); |     Probe probe = new Probe(); | ||||||
|     probe.setEncryptionKey(encryptKey); |     probe.setEncryptionKey(UUID.randomUUID().toString() + UUID.randomUUID().toString()); | ||||||
|     probe.setProbeKey(GenerateKey.getKey()); |     probe.setProbeKey(GenerateKey.getKey()); | ||||||
|     probe.setDomain(new Domain(apiKey.getDomain().getId())); |     probe.setDomain(new Domain(apiKey.getDomain().getId())); | ||||||
|     probe.setAuthorizeMember(new Member(domainMember.getMember().getId())); |     probe.setAuthorizeMember(new Member(domainMember.getMember().getId())); | ||||||
|  | |||||||
| @ -1,20 +1,33 @@ | |||||||
| package com.loafle.overflow.central.module.sensor.service; | package com.loafle.overflow.central.module.sensor.service; | ||||||
| 
 | 
 | ||||||
|  | import java.io.BufferedReader; | ||||||
|  | import java.io.ByteArrayInputStream; | ||||||
|  | import java.io.ByteArrayOutputStream; | ||||||
|  | import java.io.InputStreamReader; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  | import java.util.Base64; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import java.util.zip.GZIPInputStream; | ||||||
|  | import java.util.zip.GZIPOutputStream; | ||||||
| 
 | 
 | ||||||
|  | import javax.crypto.Cipher; | ||||||
|  | import javax.crypto.SecretKeyFactory; | ||||||
|  | import javax.crypto.spec.DESKeySpec; | ||||||
| import javax.transaction.Transactional; | import javax.transaction.Transactional; | ||||||
| 
 | 
 | ||||||
|  | import com.fasterxml.jackson.databind.ObjectMapper; | ||||||
|  | import com.loafle.overflow.central.commons.service.MessagePublisher; | ||||||
| import com.loafle.overflow.core.exception.OverflowException; | import com.loafle.overflow.core.exception.OverflowException; | ||||||
| import com.loafle.overflow.model.infra.Infra; | import com.loafle.overflow.model.infra.Infra; | ||||||
| import com.loafle.overflow.model.infra.InfraHost; | import com.loafle.overflow.model.infra.InfraHost; | ||||||
| import com.loafle.overflow.model.infra.InfraHostIP; |  | ||||||
| import com.loafle.overflow.model.infra.InfraHostPort; | import com.loafle.overflow.model.infra.InfraHostPort; | ||||||
| import com.loafle.overflow.model.infra.InfraService; | import com.loafle.overflow.model.infra.InfraService; | ||||||
|  | import com.loafle.overflow.model.infra.InfraZone; | ||||||
| import com.loafle.overflow.model.meta.MetaCollectionItem; | import com.loafle.overflow.model.meta.MetaCollectionItem; | ||||||
| import com.loafle.overflow.model.meta.MetaCollectionItemMapping; | import com.loafle.overflow.model.meta.MetaCollectionItemMapping; | ||||||
| import com.loafle.overflow.model.meta.MetaCryptoType; | import com.loafle.overflow.model.meta.MetaCryptoType; | ||||||
| import com.loafle.overflow.model.meta.MetaInfraType; | import com.loafle.overflow.model.meta.MetaInfraType; | ||||||
|  | import com.loafle.overflow.model.probe.Probe; | ||||||
| import com.loafle.overflow.model.sensor.Sensor; | import com.loafle.overflow.model.sensor.Sensor; | ||||||
| import com.loafle.overflow.model.sensor.SensorItem; | import com.loafle.overflow.model.sensor.SensorItem; | ||||||
| import com.loafle.overflow.model.sensorconfig.SensorConfig; | import com.loafle.overflow.model.sensorconfig.SensorConfig; | ||||||
| @ -34,6 +47,10 @@ public class CentralSensorConfigService { | |||||||
|   MetaCollectionItemMappingService metaCollectionItemMappingService; |   MetaCollectionItemMappingService metaCollectionItemMappingService; | ||||||
|   @Autowired |   @Autowired | ||||||
|   CentralSensorItemService sensorItemService; |   CentralSensorItemService sensorItemService; | ||||||
|  |   @Autowired | ||||||
|  |   ObjectMapper objectMapper; | ||||||
|  |   @Autowired | ||||||
|  |   private MessagePublisher messagePublisher; | ||||||
| 
 | 
 | ||||||
|   @Transactional |   @Transactional | ||||||
|   public SensorConfig regist(Sensor sensor) throws OverflowException { |   public SensorConfig regist(Sensor sensor) throws OverflowException { | ||||||
| @ -42,15 +59,68 @@ public class CentralSensorConfigService { | |||||||
|     } |     } | ||||||
|     SensorConfig sensorConfig = new SensorConfig(); |     SensorConfig sensorConfig = new SensorConfig(); | ||||||
|     sensorConfig.setSensorID(sensor.getId()); |     sensorConfig.setSensorID(sensor.getId()); | ||||||
|     sensorConfig.setCrawler(this.configCrawler(sensorConfig, sensor)); |     sensorConfig.setCrawler(this.configCrawler(sensor)); | ||||||
|     sensorConfig.setConnection(this.configConnection(sensorConfig, sensor)); |     sensorConfig.setConnection(this.configConnection(sensor)); | ||||||
|     sensorConfig.setSchedule(this.configSchedule(sensorConfig, sensor)); |     sensorConfig.setSchedule(this.configSchedule(sensor)); | ||||||
|     sensorConfig.setItems(this.configItems(sensorConfig, sensor)); |     sensorConfig.setItems(this.configItems(sensor)); | ||||||
|  | 
 | ||||||
|  |     Probe probe = sensor.getTarget().getInfra().getProbe(); | ||||||
|  |     String encryptedSensorConfigBase64 = this.toEncryptString(sensorConfig, probe.getEncryptionKey()); | ||||||
|  |     this.messagePublisher.publishToProbe(probe.getProbeKey(), "SensorService.AddSensor", encryptedSensorConfigBase64); | ||||||
| 
 | 
 | ||||||
|     return sensorConfig; |     return sensorConfig; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private SensorConfigCrawler configCrawler(SensorConfig config, Sensor sensor) throws OverflowException { |   private String toEncryptString(SensorConfig sensorConfig, String encryptKey) throws OverflowException { | ||||||
|  |     try { | ||||||
|  |       String sensorConfigJsonStr = this.objectMapper.writeValueAsString(sensorConfig); | ||||||
|  |       // gzip | ||||||
|  |       ByteArrayOutputStream obj = new ByteArrayOutputStream(); | ||||||
|  |       GZIPOutputStream gzip = new GZIPOutputStream(obj); | ||||||
|  |       gzip.write(sensorConfigJsonStr.getBytes("UTF-8")); | ||||||
|  |       gzip.flush(); | ||||||
|  |       gzip.close(); | ||||||
|  |       byte[] compressedByte = obj.toByteArray(); | ||||||
|  | 
 | ||||||
|  |       // DES encryption | ||||||
|  |       Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); | ||||||
|  |       SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); | ||||||
|  |       DESKeySpec desKeySpec = new DESKeySpec(encryptKey.getBytes()); | ||||||
|  |       cipher.init(Cipher.ENCRYPT_MODE, keyFactory.generateSecret(desKeySpec)); | ||||||
|  |       byte[] outputBytes = cipher.doFinal(compressedByte); | ||||||
|  | 
 | ||||||
|  |       // Base64 | ||||||
|  |       return Base64.getEncoder().encodeToString(outputBytes); | ||||||
|  | 
 | ||||||
|  |     } catch (Exception e) { | ||||||
|  |       throw new OverflowException("", e); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* | ||||||
|  |    * private String testDecrypt(String encryptKey, String encrypted) throws | ||||||
|  |    * OverflowException { try { byte[] inputBytes = | ||||||
|  |    * Base64.getDecoder().decode(encrypted.getBytes()); | ||||||
|  |    * | ||||||
|  |    * Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); SecretKeyFactory | ||||||
|  |    * keyFactory = SecretKeyFactory.getInstance("DES"); DESKeySpec desKeySpec = new | ||||||
|  |    * DESKeySpec(encryptKey.getBytes()); cipher.init(Cipher.DECRYPT_MODE, | ||||||
|  |    * keyFactory.generateSecret(desKeySpec)); | ||||||
|  |    * | ||||||
|  |    * byte[] outputBytes = cipher.doFinal(inputBytes); | ||||||
|  |    * | ||||||
|  |    * GZIPInputStream gis = new GZIPInputStream(new | ||||||
|  |    * ByteArrayInputStream(outputBytes)); BufferedReader bf = new | ||||||
|  |    * BufferedReader(new InputStreamReader(gis, "UTF-8")); String result = ""; | ||||||
|  |    * String line; while ((line = bf.readLine()) != null) { result += line; } | ||||||
|  |    * | ||||||
|  |    * return result; | ||||||
|  |    * | ||||||
|  |    * } catch (Exception e) { throw new OverflowException("", e); } } | ||||||
|  |    */ | ||||||
|  | 
 | ||||||
|  |   private SensorConfigCrawler configCrawler(Sensor sensor) throws OverflowException { | ||||||
|     if (null == sensor.getMetaCrawlerMapping() || null == sensor.getMetaCrawlerMapping().getMetaCrawler() |     if (null == sensor.getMetaCrawlerMapping() || null == sensor.getMetaCrawlerMapping().getMetaCrawler() | ||||||
|         || null == sensor.getMetaCrawlerMapping().getMetaCrawlerContainer()) { |         || null == sensor.getMetaCrawlerMapping().getMetaCrawlerContainer()) { | ||||||
|       throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); |       throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); | ||||||
| @ -62,32 +132,40 @@ public class CentralSensorConfigService { | |||||||
|     return sensorConfigCrawler; |     return sensorConfigCrawler; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private SensorConfigConnection configConnection(SensorConfig config, Sensor sensor) throws OverflowException { |   private SensorConfigConnection configConnection(Sensor sensor) throws OverflowException { | ||||||
|     if (null == sensor.getTarget() || null == sensor.getTarget().getInfra() |     if (null == sensor.getTarget() || null == sensor.getTarget().getInfra() | ||||||
|         || null == sensor.getTarget().getInfra().getMetaInfraType()) { |         || null == sensor.getTarget().getInfra().getMetaInfraType()) { | ||||||
|       throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); |       throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); | ||||||
|     } |     } | ||||||
|     Infra infra = sensor.getTarget().getInfra(); |     Infra infra = sensor.getTarget().getInfra(); | ||||||
|     MetaInfraType metaInfraType = infra.getMetaInfraType(); |     MetaInfraType metaInfraType = infra.getMetaInfraType(); | ||||||
|     InfraHostIP infraHostIP = null; |     String InfraHostIPAddress = null; | ||||||
|     ; |     String metaIPTypeKey = null; | ||||||
|     InfraHostPort infraHostPort = null; |     InfraHostPort infraHostPort = null; | ||||||
|     MetaCryptoType metaCryptoType = null; |     MetaCryptoType metaCryptoType = null; | ||||||
|     ; |  | ||||||
| 
 | 
 | ||||||
|     if (metaInfraType.getKey().equals("HOST")) { |     if (metaInfraType.getKey().equals("HOST")) { | ||||||
|       infraHostIP = ((InfraHost) infra).getInfraHostIPs().get(0); |       InfraHost infraHost = (InfraHost) infra; | ||||||
|  |       metaIPTypeKey = infraHost.getInfraHostIPs().get(0).getMetaIPType().getKey(); | ||||||
|  |       InfraHostIPAddress = infraHost.getInfraHostIPs().get(0).getAddress(); | ||||||
|  | 
 | ||||||
|     } else if (metaInfraType.getKey().equals("SERVICE")) { |     } else if (metaInfraType.getKey().equals("SERVICE")) { | ||||||
|       infraHostIP = ((InfraService) infra).getInfraHostPort().getInfraHostIP(); |       InfraService infraService = (InfraService) infra; | ||||||
|       infraHostPort = ((InfraService) infra).getInfraHostPort(); |       InfraHostIPAddress = infraService.getInfraHostPort().getInfraHostIP().getAddress(); | ||||||
|       metaCryptoType = ((InfraService) infra).getMetaCryptoType(); |       infraHostPort = infraService.getInfraHostPort(); | ||||||
|  |       metaCryptoType = infraService.getMetaCryptoType(); | ||||||
|  | 
 | ||||||
|  |     } else if (metaInfraType.getKey().equals("ZONE")) { | ||||||
|  |       InfraZone infraZone = (InfraZone) infra; | ||||||
|  |       InfraHostIPAddress = infraZone.getAddress(); | ||||||
|  |       metaIPTypeKey = infraZone.getMetaIPType().getKey(); | ||||||
|     } else { |     } else { | ||||||
|       throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); |       throw new OverflowException(String.format("ID[%s] of Sensor is not valid", sensor.getId())); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     SensorConfigConnection sensorConfigConnection = new SensorConfigConnection(); |     SensorConfigConnection sensorConfigConnection = new SensorConfigConnection(); | ||||||
|     sensorConfigConnection.setMetaIPTypeKey(infraHostIP.getMetaIPType().getKey()); |     sensorConfigConnection.setMetaIPTypeKey(metaIPTypeKey); | ||||||
|     sensorConfigConnection.setIp(infraHostIP.getAddress()); |     sensorConfigConnection.setIp(InfraHostIPAddress); | ||||||
|     if (null != infraHostPort) { |     if (null != infraHostPort) { | ||||||
|       sensorConfigConnection.setMetaPortTypeKey(infraHostPort.getMetaPortType().getKey()); |       sensorConfigConnection.setMetaPortTypeKey(infraHostPort.getMetaPortType().getKey()); | ||||||
|       sensorConfigConnection.setPort(infraHostPort.getPort()); |       sensorConfigConnection.setPort(infraHostPort.getPort()); | ||||||
| @ -99,7 +177,7 @@ public class CentralSensorConfigService { | |||||||
|     return sensorConfigConnection; |     return sensorConfigConnection; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private SensorConfigSchedule configSchedule(SensorConfig config, Sensor sensor) throws OverflowException { |   private SensorConfigSchedule configSchedule(Sensor sensor) throws OverflowException { | ||||||
|     Integer interval = null != sensor.getInterval() ? sensor.getInterval() |     Integer interval = null != sensor.getInterval() ? sensor.getInterval() | ||||||
|         : sensor.getMetaCrawlerMapping().getDefaultInterval(); |         : sensor.getMetaCrawlerMapping().getDefaultInterval(); | ||||||
|     SensorConfigSchedule sensorConfigSchedule = new SensorConfigSchedule(); |     SensorConfigSchedule sensorConfigSchedule = new SensorConfigSchedule(); | ||||||
| @ -107,7 +185,7 @@ public class CentralSensorConfigService { | |||||||
|     return sensorConfigSchedule; |     return sensorConfigSchedule; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private SensorConfigItems configItems(SensorConfig config, Sensor sensor) throws OverflowException { |   private SensorConfigItems configItems(Sensor sensor) throws OverflowException { | ||||||
|     List<SensorItem> sensorItems = this.sensorItemService.readAllBySensorID(sensor.getId()); |     List<SensorItem> sensorItems = this.sensorItemService.readAllBySensorID(sensor.getId()); | ||||||
|     if (null == sensorItems || sensorItems.size() == 0) { |     if (null == sensorItems || sensorItems.size() == 0) { | ||||||
|       throw new OverflowException(String.format("ID[%s] of Sensor has no SensorItem", sensor.getId())); |       throw new OverflowException(String.format("ID[%s] of Sensor has no SensorItem", sensor.getId())); | ||||||
|  | |||||||
| @ -44,7 +44,6 @@ public class SensorServiceTest { | |||||||
|   InfraService infraService; |   InfraService infraService; | ||||||
| 
 | 
 | ||||||
|   @Test |   @Test | ||||||
|   @Ignore |  | ||||||
|   public void registDefault() throws Exception { |   public void registDefault() throws Exception { | ||||||
|     Long tempInfraID = Long.valueOf(28); // ssh |     Long tempInfraID = Long.valueOf(28); // ssh | ||||||
|     Long tempProbeID = Long.valueOf(3); |     Long tempProbeID = Long.valueOf(3); | ||||||
| @ -58,7 +57,6 @@ public class SensorServiceTest { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   @Test |   @Test | ||||||
|   @Ignore |  | ||||||
|   public void regist() throws Exception { |   public void regist() throws Exception { | ||||||
| 
 | 
 | ||||||
|     Target target = this.targetService.read(Long.valueOf(1)); |     Target target = this.targetService.read(Long.valueOf(1)); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user