SECARSP-306 *Implement AuditTrail APIs for Dashboard: delete old device audit rules...
[platform/core/security/suspicious-activity-monitor.git] / server / samserver / src / main / java / com / samsung / samserver / web / rest / service / ui / UpdateDeviceAuditRulesRestService.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.ui;
7
8 import com.fasterxml.jackson.databind.ObjectMapper;
9 import com.samsung.samserver.domain.primary.Device;
10 import com.samsung.samserver.service.*;
11 import com.samsung.samserver.web.rest.errors.DeviceServiceError;
12 import com.samsung.samserver.web.rest.service.vm.UIAuditRulesUpdate;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15 import org.springframework.beans.factory.annotation.Autowired;
16 import org.springframework.http.HttpHeaders;
17 import org.springframework.http.HttpStatus;
18 import org.springframework.http.MediaType;
19 import org.springframework.http.ResponseEntity;
20 import org.springframework.stereotype.Service;
21 import org.springframework.web.bind.annotation.RequestBody;
22 import org.springframework.web.bind.annotation.RequestParam;
23
24 import javax.validation.Valid;
25 import java.io.IOException;
26 import java.util.*;
27
28 import static com.samsung.samserver.web.rest.service.vm.UIAuditRules.UIAuditRule;
29
30 /**
31  * REST service implementation for update device audit rules.
32  *
33  * @author <A HREF="mailto:m.dalakov@samsung.com">Mykhailo Dalakov</A>
34  * @version 1.0
35  */
36 @Service
37 public class UpdateDeviceAuditRulesRestService {
38
39     private final Logger log = LoggerFactory.getLogger(UpdateDeviceAuditRulesRestService.class);
40
41     @Autowired
42     private DeviceService deviceService;
43
44     @Autowired
45     private AuditRulesUpdateService auditRulesUpdateService;
46
47     @Autowired
48     private AuditRuleService auditRuleService;
49
50     public ResponseEntity<List<UIAuditRule>> updateDeviceAuditRules( @RequestParam(value = "id") Long id,
51             @Valid @RequestBody UIAuditRulesUpdate uiAuditRulesUpdate) throws IOException {
52
53         log.debug("UI request to update device audit rules: {} {}", id, uiAuditRulesUpdate);
54
55         Device device =  deviceService.findOne(id);
56         if (device==null) {
57             throw new DeviceServiceError.DeviceNotFoundException();
58         }
59
60         Set<String> auditRuleKeys = auditRuleService.getKeys(device);
61         auditRuleKeys.removeAll(uiAuditRulesUpdate.getKeys());
62         for (String key : auditRuleKeys) {
63             auditRuleService.delete(device, key);
64         }
65
66         int c = 0;
67         ObjectMapper mapper = new ObjectMapper();
68         List<UIAuditRule> resultAuditRulesUpdate = new ArrayList<>();
69         List<UIAuditRule> uiAuditRuleUpdateList = uiAuditRulesUpdate.getUiAuditRuleList();
70         for (UIAuditRule update : uiAuditRuleUpdateList) {
71             try {
72                 auditRuleService.update(device, update.getKey(), mapper.writeValueAsString(update));
73                 resultAuditRulesUpdate.add(update);
74                 c++;
75             } catch (IOException e) {
76                 log.error("updateDeviceAuditRules: message: {} stacktrace: {}", e.getMessage(), e.getStackTrace());
77             }
78         }
79         if (c>0) {
80             auditRulesUpdateService.update(device,  mapper.writeValueAsString(resultAuditRulesUpdate));
81         }
82
83         final HttpHeaders httpHeaders = new HttpHeaders();
84         httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
85         HttpStatus hs = c == uiAuditRuleUpdateList.size() ? HttpStatus.OK : (c!=0 ? HttpStatus.PARTIAL_CONTENT : HttpStatus.NO_CONTENT);
86         return new ResponseEntity<>(resultAuditRulesUpdate , httpHeaders, hs);
87     }
88
89 }