rsanchez
2015-09-24 2d59319508a0b2f326d9907fcd2d911a7b5536ae
src/main/java/net/curisit/securis/LicenseManager.java
....@@ -30,237 +30,257 @@
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
- * Generate a license file using a {@link LicenseBean}
151
- *
152
- * @param license
153
- * @param file
154
- * @throws SeCurisException
155
- */
156
- public void save(LicenseBean license, File file) throws SeCurisException {
157
- SignedLicenseBean signedLic = new SignedLicenseBean(license);
158
- save(signedLic, file);
159
- }
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
+ }
160158
161
- /**
162
- * Generate a license file using a {@link LicenseBean}
163
- *
164
- * @param license
165
- * @param file
166
- * @throws SeCurisException
167
- */
168
- public void save(SignedLicenseBean signedLic, File file) throws SeCurisException {
169
- byte[] json;
170
- try {
171
- json = JsonUtils.toPrettyJSON(signedLic).getBytes("utf-8");
172
- Files.write(Paths.get(file.toURI()), json, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
173
- } catch (UnsupportedEncodingException e) {
174
- LOG.error("Error creating json doc from license: " + signedLic, e);
175
- throw new SeCurisException("Error creating json doc from license: " + signedLic, e);
176
- } catch (IOException e) {
177
- LOG.error("Error creating license file: " + file, e);
178
- throw new SeCurisException("Error creating json doc from license: " + signedLic, e);
179
- }
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
+ }
180170
181
- LOG.debug("License saved in {}", file);
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
+ }
182190
183
- }
191
+ LOG.debug("License saved in {}", file);
184192
185
- private SignedLicenseBean requestLicenseToServer(RequestBean req, String nameOrReference, String email) throws SeCurisException {
186
- Map<String, String> headers = new HashMap<String, String>();
187
- headers.put(HEADER_LICENSE_NAME_OR_REFERENCE, nameOrReference);
188
- headers.put(HEADER_LICENSE_EMAIL, email);
189
- SignedLicenseBean lic = ConnectionManager.getInstance().executePost(Command.CREATE_LIC, SignedLicenseBean.class, req, headers);
193
+ }
190194
191
- return lic;
192
- }
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);
193200
194
- /**
195
- * Creates a new request file with current hardware in the File passed as
196
- * parameter
197
- *
198
- * @param outputRequestFile
199
- * File where the request data will be saved
200
- * @return The generated request bean
201
- * @throws SeCurisException
202
- */
203
- public RequestBean createRequestFile(File outputRequestFile) throws SeCurisException {
204
- RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.LIC_TYPE_CODE, Params.get(Params.KEYS.APPLICATION_CODE)),
205
- Params.get(Params.KEYS.CUSTOMER_CODE), Params.get(Params.KEYS.PACK_CODE));
201
+ return lic;
202
+ }
206203
207
- ReqGenerator.getInstance().save(req, outputRequestFile);
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));
208216
209
- return req;
210
- }
217
+ ReqGenerator.getInstance().save(req, outputRequestFile);
211218
212
- /**
213
- * Creates a new request file with current hardware in the File passed as
214
- * parameter
215
- *
216
- * @param outputRequestFile
217
- * File where the request data will be saved
218
- * @return The generated request bean
219
- * @throws SeCurisException
220
- */
221
- public RequestBean createRequestFile(File outputRequestFile, String activationCode) throws SeCurisException {
222
- RequestBean req = ReqGenerator.getInstance().createRequest(Params.get(Params.KEYS.APPLICATION_CODE), activationCode);
219
+ return req;
220
+ }
223221
224
- ReqGenerator.getInstance().save(req, outputRequestFile);
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);
225233
226
- return req;
227
- }
234
+ ReqGenerator.getInstance().save(req, outputRequestFile);
228235
229
- /**
230
- * Send the current license file to server, which is previously validated,
231
- * to get a renewed one if it is prepared in server side.
232
- *
233
- * @param licenseFile
234
- * Current and valid License file
235
- * @return New license bean if server creates a new one, otherwise the same
236
- * current License bean will be returned
237
- * @throws SeCurisException
238
- */
239
- public SignedLicenseBean renew(File licenseFile) throws SeCurisException {
240
- LicenseBean lic = validateLicense(licenseFile, true);
236
+ return req;
237
+ }
241238
242
- SignedLicenseBean newLic = ConnectionManager.getInstance().executePost(Command.RENEW_LIC, SignedLicenseBean.class, lic);
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);
243251
244
- return newLic;
245
- }
252
+ SignedLicenseBean newLic = ConnectionManager.getInstance().executePost(Command.RENEW_LIC, SignedLicenseBean.class, lic);
246253
247
- /**
248
- * Check on SeCuris server if current license is still valid in server DB.
249
- *
250
- * @param licenseFile
251
- * @throws SeCurisException
252
- */
253
- public void assertLicenseIsValid(File licenseFile) throws SeCurisException, IOException {
254
- LicenseBean lic = validateLicense(licenseFile);
255
- // We need to snd the signed version to validate signature on server
256
- ConnectionManager.getInstance().executePost(Command.VALIDATE, LicenseBean.class, new SignedLicenseBean(lic));
257
- }
254
+ return newLic;
255
+ }
258256
259
- public void testServer() throws SeCurisException {
260
- StatusBean status = ConnectionManager.getInstance().executeGet(Command.TEST, StatusBean.class);
261
- if (!PING_MESSAGE.equals(status.getMessage())) {
262
- throw new SeCurisException("SeCuris Server is not running in given URL");
263
- }
264
- }
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
+ }
265268
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
+ }
275
+
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
+ }
266286 }