rsanchez
2016-06-29 a99c9ec291c889667a61240c46005ffa2164e40e
src/main/java/net/curisit/securis/LicenseManager.java
....@@ -10,6 +10,10 @@
1010 import java.util.HashMap;
1111 import java.util.Map;
1212
13
+import org.apache.commons.io.FileUtils;
14
+import org.apache.logging.log4j.LogManager;
15
+import org.apache.logging.log4j.Logger;
16
+
1317 import net.curisit.securis.ConnectionManager.Command;
1418 import net.curisit.securis.beans.LicenseBean;
1519 import net.curisit.securis.beans.RequestBean;
....@@ -19,10 +23,6 @@
1923 import net.curisit.securis.utils.Params;
2024 import net.curisit.securis.utils.SignatureHelper;
2125
22
-import org.apache.commons.io.FileUtils;
23
-import org.apache.logging.log4j.LogManager;
24
-import org.apache.logging.log4j.Logger;
25
-
2626 /**
2727 * Manage all licenses tasks, just like validation, renew, requesting, ...
2828 *
....@@ -30,257 +30,278 @@
3030 */
3131 public class LicenseManager {
3232
33
- private static final Logger LOG = LogManager.getLogger(LicenseManager.class);
33
+ private static final Logger LOG = LogManager.getLogger(LicenseManager.class);
3434
35
- private static LicenseManager singleton = new LicenseManager();
35
+ private static LicenseManager singleton = new LicenseManager();
3636
37
- public static final String PING_MESSAGE = "SeCuris API OK";
38
- public static final String HEADER_LICENSE_NAME_OR_REFERENCE = "X-SECURIS-LIC-NAMEREF";
39
- public static final String HEADER_LICENSE_EMAIL = "X-SECURIS-LIC-EMAIL";
37
+ public static final String PING_MESSAGE = "SeCuris API OK";
38
+ public static final String HEADER_LICENSE_NAME_OR_REFERENCE = "X-SECURIS-LIC-NAMEREF";
39
+ public static final String HEADER_LICENSE_EMAIL = "X-SECURIS-LIC-EMAIL";
4040
41
- private LicenseManager() {
42
- }
41
+ private LicenseManager() {
42
+ }
4343
44
- public static LicenseManager getInstance() {
45
- return singleton;
46
- }
44
+ public static LicenseManager getInstance() {
45
+ return singleton;
46
+ }
4747
48
- /**
49
- * Loads a license from file
50
- *
51
- * @param licFile
52
- * @return The license bean
53
- * @throws SeCurisException
54
- */
55
- public LicenseBean load(File licFile) throws SeCurisException {
56
- LicenseBean licBean;
57
- try {
58
- licBean = JsonUtils.json2object(FileUtils.readFileToString(licFile), LicenseBean.class);
59
- } catch (IOException e) {
60
- throw new SeCurisException("Error getting license data from file: " + licFile, e);
61
- }
62
- return licBean;
63
- }
48
+ /**
49
+ * Loads a license from file
50
+ *
51
+ * @param licFile
52
+ * @return The license bean
53
+ * @throws SeCurisException
54
+ */
55
+ public LicenseBean load(File licFile) throws SeCurisException {
56
+ LicenseBean licBean;
57
+ try {
58
+ licBean = JsonUtils.json2object(FileUtils.readFileToString(licFile), LicenseBean.class);
59
+ } catch (IOException e) {
60
+ throw new SeCurisException("Error getting license data from file: " + licFile, e);
61
+ }
62
+ return licBean;
63
+ }
6464
65
- /**
66
- * Validates the license stored in {@code licFile} and get the corresponding
67
- * LicenseBean
68
- * <p>
69
- * The validation includes:
70
- * <ul>
71
- * <li>Signature</li>
72
- * <li>HW data</li>
73
- * <li>Logo CRC</li>
74
- * </ul>
75
- * </p>
76
- *
77
- * @param licFile
78
- * @return The license bean stored in file
79
- * @throws SeCurisException
80
- */
81
- public LicenseBean validateLicense(File licFile) throws SeCurisException {
65
+ /**
66
+ * Validates the license stored in {@code licFile} and get the corresponding
67
+ * LicenseBean
68
+ * <p>
69
+ * The validation includes:
70
+ * <ul>
71
+ * <li>Signature</li>
72
+ * <li>HW data</li>
73
+ * <li>Logo CRC</li>
74
+ * </ul>
75
+ * </p>
76
+ *
77
+ * @param licFile
78
+ * @return The license bean stored in file
79
+ * @throws SeCurisException
80
+ */
81
+ public LicenseBean validateLicense(File licFile) throws SeCurisException {
8282
83
- return validateLicense(licFile, false);
84
- }
83
+ return validateLicense(licFile, false);
84
+ }
8585
86
- /**
87
- * Validates the license stored in {@code licFile} and get the corresponding
88
- * LicenseBean. The License date is not validated
89
- * <p>
90
- * The validation includes:
91
- * <ul>
92
- * <li>Signature</li>
93
- * <li>HW data</li>
94
- * <li>Logo CRC</li>
95
- * </ul>
96
- * </p>
97
- *
98
- * @param licFile
99
- * @return The license bean stored in file
100
- * @throws SeCurisException
101
- */
102
- public LicenseBean validateLicense(File licFile, boolean excludeDateValidation) throws SeCurisException {
103
- LicenseBean licBean = load(licFile);
104
- SignatureHelper.getInstance().validateSignature(licBean);
105
- if (licBean.getActivationCode() != null) {
106
- LicenseValidator.getInstance().validateHW(licBean, Params.get(Params.KEYS.APPLICATION_CODE), licBean.getActivationCode());
107
- } else {
108
- LicenseValidator.getInstance().validateHW(licBean, Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
109
- Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
110
- }
111
- LicenseValidator.getInstance().validateLogo(licBean);
86
+ /**
87
+ * Validates the license stored in {@code licFile} and get the corresponding
88
+ * LicenseBean. The License date is not validated
89
+ * <p>
90
+ * The validation includes:
91
+ * <ul>
92
+ * <li>Signature</li>
93
+ * <li>HW data</li>
94
+ * <li>Logo CRC</li>
95
+ * </ul>
96
+ * </p>
97
+ *
98
+ * @param licFile
99
+ * @return The license bean stored in file
100
+ * @throws SeCurisException
101
+ */
102
+ public LicenseBean validateLicense(File licFile, boolean excludeDateValidation) throws SeCurisException {
103
+ LicenseBean licBean = load(licFile);
104
+ SignatureHelper.getInstance().validateSignature(licBean);
105
+ if (licBean.getActivationCode() != null) {
106
+ LicenseValidator.getInstance().validateHW(licBean, Params.get(Params.KEYS.APPLICATION_CODE), licBean.getActivationCode());
107
+ } else {
108
+ LicenseValidator.getInstance().validateHW(licBean, Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
109
+ Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
110
+ }
111
+ LicenseValidator.getInstance().validateLogo(licBean);
112112
113
- if (!excludeDateValidation) {
114
- if (new Date().after(licBean.getExpirationDate())) {
115
- throw new ExpiredLicenseException();
116
- }
117
- }
113
+ if (!excludeDateValidation) {
114
+ if (new Date().after(licBean.getExpirationDate())) {
115
+ throw new ExpiredLicenseException();
116
+ }
117
+ }
118118
119
- return licBean;
120
- }
119
+ return licBean;
120
+ }
121121
122
- /**
123
- * Request to server for a valid license
124
- *
125
- * @return The license bean returned by the server
126
- * @throws SeCurisException
127
- */
128
- public SignedLicenseBean requestLicense(String nameOrReference, String email) throws SeCurisException {
129
- RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
130
- Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
122
+ /**
123
+ * Request to server for a valid license
124
+ *
125
+ * @return The license bean returned by the server
126
+ * @throws SeCurisException
127
+ */
128
+ public SignedLicenseBean requestLicense(String nameOrReference, String email) throws SeCurisException {
129
+ RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
130
+ Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
131131
132
- SignedLicenseBean lic = requestLicenseToServer(req, nameOrReference, email);
133
- return lic;
134
- }
132
+ SignedLicenseBean lic = requestLicenseToServer(req, nameOrReference, email);
133
+ return lic;
134
+ }
135135
136
- /**
137
- * Request to server for a valid license
138
- *
139
- * @return The license bean returned by the server
140
- * @throws SeCurisException
141
- */
142
- public SignedLicenseBean requestLicense(String nameOrReference, String email, String activationCode) throws SeCurisException {
143
- RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.APPLICATION_CODE), activationCode);
136
+ /**
137
+ * Request to server for a valid license
138
+ *
139
+ * @return The license bean returned by the server
140
+ * @throws SeCurisException
141
+ */
142
+ public SignedLicenseBean requestLicense(String nameOrReference, String email, String activationCode) throws SeCurisException {
143
+ RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.APPLICATION_CODE), activationCode);
144144
145
- SignedLicenseBean lic = requestLicenseToServer(req, nameOrReference, email);
146
- return lic;
147
- }
145
+ SignedLicenseBean lic = requestLicenseToServer(req, nameOrReference, email);
146
+ return lic;
147
+ }
148148
149
- /**
150
- * Request to server for a valid license
151
- *
152
- * @return The license bean returned by the server
153
- * @throws SeCurisException
154
- */
155
- public SignedLicenseBean requestLicense(String activationCode) throws SeCurisException {
156
- return requestLicense(null, null, activationCode);
157
- }
149
+ /**
150
+ * Request to server for a valid license
151
+ *
152
+ * @return The license bean returned by the server
153
+ * @throws SeCurisException
154
+ */
155
+ public SignedLicenseBean requestLicense(String activationCode) throws SeCurisException {
156
+ return requestLicense(null, null, activationCode);
157
+ }
158158
159
- /**
160
- * Generate a license file using a {@link LicenseBean}
161
- *
162
- * @param license
163
- * @param file
164
- * @throws SeCurisException
165
- */
166
- public void save(LicenseBean license, File file) throws SeCurisException {
167
- SignedLicenseBean signedLic = new SignedLicenseBean(license);
168
- save(signedLic, file);
169
- }
159
+ /**
160
+ * Generate a license file using a {@link LicenseBean}
161
+ *
162
+ * @param license
163
+ * @param file
164
+ * @throws SeCurisException
165
+ */
166
+ public void save(LicenseBean license, File file) throws SeCurisException {
167
+ SignedLicenseBean signedLic = new SignedLicenseBean(license);
168
+ save(signedLic, file);
169
+ }
170170
171
- /**
172
- * Generate a license file using a {@link LicenseBean}
173
- *
174
- * @param license
175
- * @param file
176
- * @throws SeCurisException
177
- */
178
- public void save(SignedLicenseBean signedLic, File file) throws SeCurisException {
179
- byte[] json;
180
- try {
181
- json = JsonUtils.toPrettyJSON(signedLic).getBytes("utf-8");
182
- Files.write(Paths.get(file.toURI()), json, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
183
- } catch (UnsupportedEncodingException e) {
184
- LOG.error("Error creating json doc from license: " + signedLic, e);
185
- throw new SeCurisException("Error creating json doc from license: " + signedLic, e);
186
- } catch (IOException e) {
187
- LOG.error("Error creating license file: " + file, e);
188
- throw new SeCurisException("Error creating json doc from license: " + signedLic, e);
189
- }
171
+ /**
172
+ * Generate a license file using a {@link LicenseBean}
173
+ *
174
+ * @param license
175
+ * @param file
176
+ * @throws SeCurisException
177
+ */
178
+ public void save(SignedLicenseBean signedLic, File file) throws SeCurisException {
179
+ byte[] json;
180
+ try {
181
+ json = JsonUtils.toPrettyJSON(signedLic).getBytes("utf-8");
182
+ Files.write(Paths.get(file.toURI()), json, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
183
+ } catch (UnsupportedEncodingException e) {
184
+ LOG.error("Error creating json doc from license: " + signedLic, e);
185
+ throw new SeCurisException("Error creating json doc from license: " + signedLic, e);
186
+ } catch (IOException e) {
187
+ LOG.error("Error creating license file: " + file, e);
188
+ throw new SeCurisException("Error creating json doc from license: " + signedLic, e);
189
+ }
190190
191
- LOG.debug("License saved in {}", file);
191
+ LOG.debug("License saved in {}", file);
192192
193
- }
193
+ }
194194
195
- private SignedLicenseBean requestLicenseToServer(RequestBean req, String nameOrReference, String email) throws SeCurisException {
196
- Map<String, String> headers = new HashMap<String, String>();
197
- headers.put(HEADER_LICENSE_NAME_OR_REFERENCE, nameOrReference);
198
- headers.put(HEADER_LICENSE_EMAIL, email);
199
- SignedLicenseBean lic = ConnectionManager.getInstance().executePost(Command.CREATE_LIC, SignedLicenseBean.class, req, headers);
195
+ private SignedLicenseBean requestLicenseToServer(RequestBean req, String nameOrReference, String email) throws SeCurisException {
196
+ Map<String, String> headers = new HashMap<String, String>();
197
+ headers.put(HEADER_LICENSE_NAME_OR_REFERENCE, nameOrReference);
198
+ headers.put(HEADER_LICENSE_EMAIL, email);
199
+ SignedLicenseBean lic = ConnectionManager.getInstance().executePost(Command.CREATE_LIC, SignedLicenseBean.class, req, headers);
200200
201
- return lic;
202
- }
201
+ return lic;
202
+ }
203203
204
- /**
205
- * Creates a new request file with current hardware in the File passed as
206
- * parameter
207
- *
208
- * @param outputRequestFile
209
- * File where the request data will be saved
210
- * @return The generated request bean
211
- * @throws SeCurisException
212
- */
213
- public RequestBean createRequestFile(File outputRequestFile) throws SeCurisException {
214
- RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
215
- Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
204
+ /**
205
+ * Creates a new request file with current hardware in the File passed as
206
+ * parameter
207
+ *
208
+ * @param outputRequestFile
209
+ * File where the request data will be saved
210
+ * @return The generated request bean
211
+ * @throws SeCurisException
212
+ */
213
+ public RequestBean createRequestFile(File outputRequestFile) throws SeCurisException {
214
+ RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
215
+ Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
216216
217
- ReqGenerator.getInstance().save(req, outputRequestFile);
217
+ ReqGenerator.getInstance().save(req, outputRequestFile);
218218
219
- return req;
220
- }
219
+ return req;
220
+ }
221221
222
- /**
223
- * Creates a new request file with current hardware in the File passed as
224
- * parameter
225
- *
226
- * @param outputRequestFile
227
- * File where the request data will be saved
228
- * @return The generated request bean
229
- * @throws SeCurisException
230
- */
231
- public RequestBean createRequestFile(File outputRequestFile, String activationCode) throws SeCurisException {
232
- RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.APPLICATION_CODE), activationCode);
222
+ /**
223
+ * Creates a new request file with current hardware in the File passed as
224
+ * parameter
225
+ *
226
+ * @param outputRequestFile
227
+ * File where the request data will be saved
228
+ * @return The generated request bean
229
+ * @throws SeCurisException
230
+ */
231
+ public RequestBean createRequestFile(File outputRequestFile, String activationCode) throws SeCurisException {
232
+ return createRequestFile(outputRequestFile, activationCode, null);
233
+ }
233234
234
- ReqGenerator.getInstance().save(req, outputRequestFile);
235
+ /**
236
+ * Creates a new request file with current hardware in the File passed as
237
+ * parameter
238
+ *
239
+ * @param outputRequestFile
240
+ * File where the request data will be saved
241
+ *
242
+ * @param activationCode
243
+ * Activation code provided be SeCurisadministrator
244
+ * @param appCode
245
+ * Application code to use, ignoring the code set in config file
246
+ * @return The generated request bean
247
+ * @throws SeCurisException
248
+ */
249
+ public RequestBean createRequestFile(File outputRequestFile, String activationCode, String appCode) throws SeCurisException {
250
+ if (appCode == null) {
251
+ Params.get(Params.KEYS.APPLICATION_CODE);
252
+ }
253
+ RequestBean req = ReqGenerator.getInstance().createRequest(appCode, activationCode);
235254
236
- return req;
237
- }
255
+ ReqGenerator.getInstance().save(req, outputRequestFile);
238256
239
- /**
240
- * Send the current license file to server, which is previously validated,
241
- * to get a renewed one if it is prepared in server side.
242
- *
243
- * @param licenseFile
244
- * Current and valid License file
245
- * @return New license bean if server creates a new one, otherwise the same
246
- * current License bean will be returned
247
- * @throws SeCurisException
248
- */
249
- public SignedLicenseBean renew(File licenseFile) throws SeCurisException {
250
- LicenseBean lic = validateLicense(licenseFile, true);
257
+ return req;
258
+ }
251259
252
- SignedLicenseBean newLic = ConnectionManager.getInstance().executePost(Command.RENEW_LIC, SignedLicenseBean.class, lic);
260
+ /**
261
+ * Send the current license file to server, which is previously validated,
262
+ * to get a renewed one if it is prepared in server side.
263
+ *
264
+ * @param licenseFile
265
+ * Current and valid License file
266
+ * @return New license bean if server creates a new one, otherwise the same
267
+ * current License bean will be returned
268
+ * @throws SeCurisException
269
+ */
270
+ public SignedLicenseBean renew(File licenseFile) throws SeCurisException {
271
+ LicenseBean lic = validateLicense(licenseFile, true);
253272
254
- return newLic;
255
- }
273
+ SignedLicenseBean newLic = ConnectionManager.getInstance().executePost(Command.RENEW_LIC, SignedLicenseBean.class, lic);
256274
257
- /**
258
- * Check on SeCuris server if current license is still valid in server DB.
259
- *
260
- * @param licenseFile
261
- * @throws SeCurisException
262
- */
263
- public void assertLicenseIsValid(File licenseFile) throws SeCurisException, IOException {
264
- LicenseBean lic = validateLicense(licenseFile);
265
- // We need to snd the signed version to validate signature on server
266
- ConnectionManager.getInstance().executePost(Command.VALIDATE, LicenseBean.class, new SignedLicenseBean(lic));
267
- }
275
+ return newLic;
276
+ }
268277
269
- public void testServer() throws SeCurisException {
270
- StatusBean status = ConnectionManager.getInstance().executeGet(Command.TEST, StatusBean.class);
271
- if (!PING_MESSAGE.equals(status.getMessage())) {
272
- throw new SeCurisException("SeCuris Server is not running in given URL");
273
- }
274
- }
278
+ /**
279
+ * Check on SeCuris server if current license is still valid in server DB.
280
+ *
281
+ * @param licenseFile
282
+ * @throws SeCurisException
283
+ */
284
+ public void assertLicenseIsValid(File licenseFile) throws SeCurisException, IOException {
285
+ LicenseBean lic = validateLicense(licenseFile);
286
+ // We need to snd the signed version to validate signature on server
287
+ ConnectionManager.getInstance().executePost(Command.VALIDATE, LicenseBean.class, new SignedLicenseBean(lic));
288
+ }
275289
276
- public static void main(String[] args) throws SeCurisException {
277
- System.out.println("APPLICATION_CODE: " + Params.get(Params.KEYS.APPLICATION_CODE));
278
- System.out.println("LICENSE_SERVER_URL: " + Params.get(Params.KEYS.LICENSE_SERVER_URL));
279
- LicenseManager lm = LicenseManager.getInstance();
280
- // LicenseBean lic =
281
- // lm.requestLicense("aaf88d6c-6622-492a-93ec-10f3d1dc7120");
282
- LicenseBean lic = lm.requestLicense("Rob", "rsanchez@curisit.net");
283
- System.out.println(lic.getLicenseCode() + " " + lic.getExpirationDate());
284
- // LicenseBean lic = lm.
285
- }
290
+ public void testServer() throws SeCurisException {
291
+ StatusBean status = ConnectionManager.getInstance().executeGet(Command.TEST, StatusBean.class);
292
+ if (!PING_MESSAGE.equals(status.getMessage())) {
293
+ throw new SeCurisException("SeCuris Server is not running in given URL");
294
+ }
295
+ }
296
+
297
+ public static void main(String[] args) throws SeCurisException {
298
+ System.out.println("APPLICATION_CODE: " + Params.get(Params.KEYS.APPLICATION_CODE));
299
+ System.out.println("LICENSE_SERVER_URL: " + Params.get(Params.KEYS.LICENSE_SERVER_URL));
300
+ LicenseManager lm = LicenseManager.getInstance();
301
+ // LicenseBean lic =
302
+ // lm.requestLicense("aaf88d6c-6622-492a-93ec-10f3d1dc7120");
303
+ LicenseBean lic = lm.requestLicense("Rob", "rsanchez@curisit.net");
304
+ System.out.println(lic.getLicenseCode() + " " + lic.getExpirationDate());
305
+ // LicenseBean lic = lm.
306
+ }
286307 }