adccf8beaa94ba9a5abd1afcc7446905d36c217f
[platform/core/security/suspicious-activity-monitor.git] / server / samserver / src / main / java / com / samsung / samserver / web / rest / service / device / RegisterDeviceRestService.java
1 /*
2  * In Samsung Ukraine R&D Center (SRK under a contract between)
3  * LLC "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
4  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
5  */
6 package com.samsung.samserver.web.rest.service.device;
7
8 import com.samsung.samserver.web.rest.service.vm.DInfo;
9 import org.slf4j.*;
10 import org.springframework.http.*;
11 import org.springframework.stereotype.Service;
12 import org.springframework.web.bind.annotation.*;
13 import com.samsung.samserver.domain.*;
14 import com.samsung.samserver.service.*;
15 import com.samsung.samserver.web.rest.errors.DeviceServiceError;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.validation.Valid;
18 import java.time.Instant;
19 import java.util.Optional;
20
21 /**
22  * REST service implementation for register device.
23  *
24  * @author <A HREF="mailto:m.dalakov@samsung.com">Mykhailo Dalakov</A>
25  * @version 1.0
26  */
27 @Service
28 public class RegisterDeviceRestService {
29
30     private final Logger log = LoggerFactory.getLogger(RegisterDeviceRestService.class);
31
32     private final DeviceTypeService deviceTypeService;
33     private final DeviceService deviceService;
34
35     public RegisterDeviceRestService(DeviceTypeService deviceTypeService, DeviceService deviceService) {
36         this.deviceTypeService = deviceTypeService;
37         this.deviceService = deviceService;
38     }
39
40     public ResponseEntity<String> registerDevice(@Valid @RequestBody DInfo dInfo, HttpServletRequest request) {
41         log.debug("request to register device : {}", dInfo);
42
43         String dtype = dInfo.getType().toLowerCase();
44         Optional<DeviceType> dt =  deviceTypeService.findOne(dtype);
45         if (!dt.isPresent()) {
46             dt = Optional.of(new DeviceType(dtype,"new type: created sn "+dInfo.getSn()));
47             deviceTypeService.save(dt.get());
48         }
49
50         String duid = deviceService.getDeviceUID(dtype, dInfo.getModel(), dInfo.getSn());
51         deviceService.findOne(duid).ifPresent(d -> {throw new DeviceServiceError.DeviceAlreadyRegisteredException();});
52
53         Device result = deviceService.save(new Device()
54             .duid(duid)
55             .ctime(Instant.now())
56             .model(dInfo.getModel())
57             .sn(dInfo.getSn())
58             .sw(dInfo.getSw())
59             .osname(dInfo.getOsname())
60             .osver(dInfo.getOsver())
61             .ipaddr(request.getRemoteAddr())
62             .dtype(dt.get()));
63         return ResponseEntity.ok()
64             .headers(new HttpHeaders())
65             .body(result.getDuid());
66     }
67
68 }