Project

General

Profile

1
package eu.dnetlib.uoaorcidservice.services;
2

    
3
import com.google.gson.Gson;
4
import eu.dnetlib.uoaorcidservice.dao.UserTokensDAO;
5
import eu.dnetlib.uoaorcidservice.entities.UserTokens;
6
import eu.dnetlib.uoaorcidservice.handlers.utils.AESUtils;
7
import eu.dnetlib.uoaorcidservice.handlers.utils.RolesUtils;
8
import org.apache.log4j.Logger;
9
import org.springframework.beans.factory.annotation.Autowired;
10
import org.springframework.stereotype.Service;
11

    
12
import javax.crypto.BadPaddingException;
13
import javax.crypto.IllegalBlockSizeException;
14
import javax.crypto.NoSuchPaddingException;
15
import javax.crypto.SecretKey;
16
import javax.crypto.spec.IvParameterSpec;
17
import java.io.BufferedReader;
18
import java.io.IOException;
19
import java.io.StringReader;
20
import java.security.InvalidAlgorithmParameterException;
21
import java.security.InvalidKeyException;
22
import java.security.NoSuchAlgorithmException;
23
import java.security.spec.InvalidKeySpecException;
24
import java.util.Date;
25
import java.util.List;
26

    
27
@Service
28
public class UserTokensService {
29
    private final Logger log = Logger.getLogger(this.getClass());
30

    
31
    @Autowired
32
    private UserTokensDAO userTokensDAO;
33

    
34
    @Autowired
35
    private RolesUtils rolesUtils;
36

    
37
    public List<UserTokens> getAllUserTokens() {
38
        return userTokensDAO.findAll();
39
    }
40

    
41
    public String getUserAccessToken(String orcid) throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IOException {
42
        log.debug("getUserAccessToken: orcid="+orcid);
43

    
44
//        String aaiId = "3";
45
        String aaiId = rolesUtils.getAaiId();
46
        UserTokens userTokens = userTokensDAO.findByAaiId(aaiId);
47
        if(userTokens == null) {
48
            return null;
49
        }
50

    
51
        userTokens = decryptTokens(userTokens);
52

    
53
        log.debug("userTokens.getAccessToken(): "+userTokens.getAccessToken());
54

    
55
        return userTokens.getAccessToken();
56
    }
57

    
58
    public String getCurrentUserOrcid() {
59
        log.debug("getCurrentUserOrcid");
60

    
61
//        String aaiId = "1";
62
        String aaiId = rolesUtils.getAaiId();
63
        UserTokens userTokens = userTokensDAO.findByAaiId(aaiId);
64
        if(userTokens == null) {
65
            return null;
66
        }
67

    
68
        log.debug("userTokens.getOrcidId(): "+userTokens.getOrcid());
69

    
70
        return userTokens.getOrcid();
71
    }
72

    
73
    public UserTokens getUserTokens() throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IOException {
74
        log.debug("getUserTokens");
75
        String aaiId = rolesUtils.getAaiId();
76
        UserTokens userTokens = userTokensDAO.findByAaiId(aaiId);
77
        return decryptTokens(userTokens);
78
    }
79

    
80
    public UserTokens json2UserTokens(String json) {
81
        log.debug("json2UserTokens: "+json);
82

    
83
        if (json == null) {
84
            return null;
85
        }
86

    
87
        BufferedReader br = new BufferedReader(new StringReader(json));
88
        //convert the json string back to object
89
        Gson gson = new Gson();
90
        UserTokens userTokens = null;
91
        try {
92
            userTokens = gson.fromJson(br, UserTokens.class);
93
        } catch (Exception e) {
94
            log.debug("Error in parsing json response. Given json is : " + json, e);
95
        }
96

    
97
        return userTokens;
98
    }
99

    
100
    public void saveUserTokens(UserTokens userTokens) throws InvalidKeySpecException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchPaddingException, IOException {
101
        userTokens.setCreationDate(new Date());
102
        userTokens.setAaiId(rolesUtils.getAaiId());
103
        userTokens = encryptTokens(userTokens);
104

    
105
        userTokensDAO.save(userTokens);
106
    }
107

    
108
    public UserTokens encryptTokens(UserTokens userTokens) throws InvalidKeySpecException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchPaddingException, IOException {
109
//        String password = "mypassword";
110
//        String salt = "034131145430079";//userTokens.getAaiId();
111
//        IvParameterSpec ivParameterSpec = AESUtils.generateIv();
112
//        SecretKey key = AESUtils.getKeyFromPassword(password,salt);
113
//
114
//        log.debug("password: "+password);
115
//        log.debug("salt: "+salt);
116

    
117
//        String cipherText = AESUtils.encryptPasswordBased("test0", key, ivParameterSpec);
118

    
119
        String cipherText = AESUtils.encryptPasswordBased(userTokens.getAccessToken(), userTokens.getAaiId());
120
        userTokens.setAccessToken(cipherText);
121
        cipherText = AESUtils.encryptPasswordBased(userTokens.getRefreshToken(), userTokens.getAaiId());
122
        userTokens.setRefreshToken(cipherText);
123
//        String decryptedCipherText = AESUtils.decryptPasswordBased(cipherText, key, ivParameterSpec);
124

    
125
        return userTokens;
126
    }
127

    
128
    public UserTokens decryptTokens(UserTokens userTokens) throws InvalidKeySpecException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchPaddingException, IOException {
129
        if(userTokens == null) {
130
            return null;
131
        }
132
//        String password = "mypassword";
133
//        String salt = "034131145430079";//userTokens.getAaiId();
134
//        IvParameterSpec ivParameterSpec = AESUtils.generateIv();
135
//        SecretKey key = AESUtils.getKeyFromPassword(password,salt);
136

    
137
//        log.debug("password: "+password);
138
//        log.debug("salt: "+salt);
139

    
140
        String token = AESUtils.decryptPasswordBased(userTokens.getAccessToken(), userTokens.getAaiId());
141
        userTokens.setAccessToken(token);
142
        token = AESUtils.decryptPasswordBased(userTokens.getRefreshToken(), userTokens.getAaiId());
143
        userTokens.setRefreshToken(token);
144

    
145

    
146
//        String plainText = "www.baeldung.com";
147
//        String password2 = "mypassword";
148
//        String salt2 = "034131145430079";
149
//        IvParameterSpec ivParameterSpec2 = AESUtils.generateIv();
150
//        SecretKey key2 = AESUtils.getKeyFromPassword(password2,salt2);
151
//        String cipherText = AESUtils.encryptPasswordBased(plainText, );
152
//        IvParameterSpec ivParameterSpec3 = AESUtils.generateIv();
153
//        SecretKey key3 = AESUtils.getKeyFromPassword(password2,salt2);
154
//        String decryptedCipherText = AESUtils.decryptPasswordBased(cipherText, key3);
155
//       log.debug("test decrypted text: "+decryptedCipherText);
156

    
157
        return userTokens;
158
    }
159

    
160
    public UserTokens getUserTokensByAai(String aaiId) throws BadPaddingException, InvalidAlgorithmParameterException, NoSuchAlgorithmException, IllegalBlockSizeException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException, IOException {
161
        log.debug("getUserTokens");
162
        UserTokens userTokens = userTokensDAO.findByAaiId(aaiId);
163
        return decryptTokens(userTokens);
164
    }
165

    
166
    public UserTokens getEncryptedUserTokensByAai(String aaiId) {
167
        log.debug("getEncryptedUserTokensByAai");
168
        return userTokensDAO.findByAaiId(aaiId);
169
    }
170
}
(1-1/2)