ApplicationServiceImpl.java
2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package isa.qa.service.impl;
import isa.qa.dao.ApplicationDao;
import isa.qa.dto.request.AccessKeyRequestDTO;
import isa.qa.dto.request.ApplicationRequestDTO;
import isa.qa.dto.response.ApplicationResponseDTO;
import isa.qa.entity.Application;
import isa.qa.properties.FileProperties;
import isa.qa.properties.JwtProperties;
import isa.qa.service.ApplicationService;
import isa.qa.utils.FileUtils;
import isa.qa.utils.JwtTokenUtil;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.util.Date;
import java.util.Objects;
import java.util.Optional;
import static com.google.common.base.Preconditions.checkArgument;
import static isa.qa.utils.MD5Utils.encrypt32;
@Service
@AllArgsConstructor
public class ApplicationServiceImpl implements ApplicationService {
private final ApplicationDao applicationDao;
private final FileProperties fileProperties;
private final JwtTokenUtil jwtTokenUtil;
private final JwtProperties jwtProperties;
@Override
@Transactional(rollbackFor = TransactionException.class)
public ApplicationResponseDTO registerApplication(ApplicationRequestDTO requestDTO) {
Date now = Date.from(Instant.now());
String appSecret = RandomStringUtils.random(32, true, true);
Application application = new Application();
application.setName(requestDTO.getName());
application.setDomain(requestDTO.getDomain());
application.setAppSecret(encrypt32(appSecret));
application.setExpireTime(new Date(requestDTO.getExpireTimeStamp()));
application.setCreateTime(now);
application.setUpdateTime(now);
applicationDao.save(application);
//Make Application attachment storage directory
String applicationDirPath = fileProperties.getBasePath() + application.getName();
FileUtils.mkdir(applicationDirPath);
return new ApplicationResponseDTO(application.getAppKey(), appSecret);
}
@Override
public String getAccessKey(AccessKeyRequestDTO requestDTO) {
Optional<Application> application = applicationDao.findById(requestDTO.getAppKey());
checkArgument(application.isPresent(), "Invalid appKey");
checkArgument(Objects.equals(application.get().getAppSecret(), encrypt32(requestDTO.getAppSecret())), "Incorrect appSecret");
return jwtTokenUtil.generateToken(requestDTO.getAppKey(), requestDTO.getValidHours());
}
@Override
public String refreshAccessKey(String oldAccessKey, Integer hours) {
return jwtTokenUtil.refreshToken(oldAccessKey.substring(jwtProperties.getTokenHead().length()), hours);
}
}