6 #include <unordered_map> 8 #include "imports/std/optional" 10 #include "imports/ArduinoJson5/ArduinoJson.hpp" 12 #include "ActivateError.hpp" 13 #include "basic_Error.hpp" 14 #include "RawLicenseKey.hpp" 15 #include "LicenseKey.hpp" 16 #include "LicenseKeyInformation.hpp" 17 #include "LicenseKeyChecker.hpp" 26 template<
typename SignatureVerifier>
27 optional<RawLicenseKey>
30 , SignatureVerifier
const& signature_verifier
31 , std::string
const& response
36 template<
typename SignatureVerifier>
37 optional<RawLicenseKey>
40 , SignatureVerifier
const& signature_verifier
41 , std::string
const& response
44 if (e) {
return nullopt; }
46 auto x = internal::handle_activate(e, signature_verifier, response);
47 if (e) { e.set_call(api::main(), errors::Call::BASIC_SKM_HANDLE_ACTIVATE_RAW); }
51 template<
typename SignatureVerifier>
53 handle_activate_raw_exn
54 ( api::experimental_v1 experimental
55 , SignatureVerifier
const& signature_verifier
56 , std::string
const& response
60 optional<RawLicenseKey> raw_license_key =
61 handle_activate(e, signature_verifier, response);
63 if (raw_license_key && !e) {
return *raw_license_key; }
65 throw ActivateError::from_server_response(NULL);
68 template<
typename SignatureVerifier>
72 , SignatureVerifier
const& signature_verifier
73 , std::string
const& response
76 if (e) {
return nullopt; }
78 optional<RawLicenseKey> x = internal::handle_activate(e, signature_verifier, response);
80 if (e) { e.set_call(api::main(), errors::Call::BASIC_SKM_HANDLE_ACTIVATE); }
82 return LicenseKey(std::move(*y), std::move(*x));
96 template<
typename RequestHandler,
typename SignatureVerifier>
106 , std::string product_id
108 , std::string machine_code
109 ,
int fields_to_return = 0
112 optional<RawLicenseKey>
116 , std::string product_id
118 , std::string machine_code
119 ,
int fields_to_return = 0
126 , std::string product_id
128 , std::string machine_code
129 ,
long floating_time_interval
130 ,
int fields_to_return = 0
135 ( api::experimental_v1 experimental
137 , std::string product_id
139 , std::string machine_code
140 ,
int fields_to_return = 0
144 make_license_key(
basic_Error & e, std::string
const& s);
146 SignatureVerifier signature_verifier;
147 RequestHandler request_handler;
150 optional<RawLicenseKey>
154 , std::string product_id
156 , std::string machine_code
157 ,
int fields_to_return = 0
160 optional<RawLicenseKey>
164 , std::string product_id
166 , std::string machine_code
167 ,
long floating_time_interval
168 ,
int fields_to_return = 0
186 template<
typename RequestHandler,
typename SignatureVerifier>
191 , std::string product_id
193 , std::string machine_code
194 ,
int fields_to_return
197 if (e) {
return nullopt; }
199 optional<RawLicenseKey> x = this->activate_
202 , std::move(product_id)
204 , std::move(machine_code)
208 if (e) { e.set_call(api::main(), errors::Call::BASIC_SKM_ACTIVATE);
return nullopt; }
209 return LicenseKey(std::move(*y), std::move(*x));
226 template<
typename RequestHandler,
typename SignatureVerifier>
227 optional<RawLicenseKey>
231 , std::string product_id
233 , std::string machine_code
234 ,
int fields_to_return
237 if (e) {
return nullopt; }
239 auto x = this->activate_( e
241 , std::move(product_id)
243 , std::move(machine_code)
246 if (e) { e.set_call(api::main(), errors::Call::BASIC_SKM_ACTIVATE_RAW); }
274 template<
typename RequestHandler,
typename SignatureVerifier>
279 , std::string product_id
281 , std::string machine_code
282 ,
long floating_time_interval
283 ,
int fields_to_return
286 if (e) {
return nullopt; }
288 optional<RawLicenseKey> x = this->activate_floating_
291 , std::move(product_id)
293 , std::move(machine_code)
294 , floating_time_interval
298 if (e) { e.set_call(api::main(), errors::Call::BASIC_SKM_ACTIVATE_FLOATING);
return nullopt; }
299 return LicenseKey(std::move(*y), std::move(*x));
302 template<
typename RequestHandler,
typename SignatureVerifier>
303 optional<RawLicenseKey>
307 , std::string product_id
309 , std::string machine_code
310 ,
int fields_to_return
313 if (e) {
return nullopt; }
315 std::unordered_map<std::string,std::string> args;
316 args[
"token"] = token;
317 args[
"ProductId"] = product_id;
319 args[
"Sign"] =
"true";
320 args[
"MachineCode"] = machine_code;
323 std::ostringstream stm; stm << fields_to_return;
324 args[
"FieldsToReturn"] = stm.str();
325 args[
"SignMethod"] =
"1";
328 std::string response = request_handler.make_request(e,
"Activate", args);
330 return ::cryptolens_io::v20180502::handle_activate_raw(e, this->signature_verifier, response);
333 template<
typename RequestHandler,
typename SignatureVerifier>
334 optional<RawLicenseKey>
338 , std::string product_id
340 , std::string machine_code
341 ,
long floating_time_interval
342 ,
int fields_to_return
345 if (e) {
return nullopt; }
347 std::unordered_map<std::string,std::string> args;
348 args[
"token"] = token;
349 args[
"ProductId"] = product_id;
351 args[
"Sign"] =
"true";
352 args[
"MachineCode"] = machine_code;
355 std::ostringstream stm; stm << fields_to_return;
356 args[
"FieldsToReturn"] = stm.str();
357 args[
"SignMethod"] =
"1";
359 stm.str(
""); stm.clear(); stm << floating_time_interval;
360 args[
"FloatingTimeInterval"] = stm.str();
362 std::string response = request_handler.make_request(e,
"Activate", args);
364 return ::cryptolens_io::v20180502::handle_activate_raw(e, this->signature_verifier, response);
380 template<
typename RequestHandler,
typename SignatureVerifier>
383 ( api::experimental_v1 experimental
385 , std::string product_id
387 , std::string machine_code
388 ,
int fields_to_return
392 optional<RawLicenseKey> raw_license_key =
393 activate_raw( e, std::move(token), std::move(product_id), std::move(key)
394 , std::move(machine_code), fields_to_return);
396 if (!e) {
return *raw_license_key; }
397 throw ActivateError::from_server_response(NULL);
400 template<
typename RequestHandler,
typename SignatureVerifier>
404 if (e) {
return nullopt; }
406 optional<RawLicenseKey> raw_license_key;
409 ::cryptolens_io::v20180502::internal::handle_activate(e, this->signature_verifier, s);
412 e.
reset(api::main());
414 size_t k = s.find(
'-');
415 if (k == std::string::npos) { e.set(api::main(), errors::Subsystem::Main, errors::Main::UNKNOWN_SERVER_REPLY);
return nullopt; }
417 std::string version = s.substr(0, k);
418 std::string rem = s.substr(k+1, std::string::npos);
422 if (k == std::string::npos) { e.set(api::main(), errors::Subsystem::Main, errors::Main::UNKNOWN_SERVER_REPLY);
return nullopt; }
424 std::string license = rem.substr(0, k);
425 std::string signature = rem.substr(k+1, std::string::npos);
437 if (e) { e.set_call(api::main(), errors::Call::BASIC_SKM_MAKE_LICENSE_KEY);
return nullopt; }
438 return LicenseKey(std::move(*license_key_information), std::move(*raw_license_key));
445 activate_parse_server_error_message(
char const* server_response);
447 template<
typename SignatureVerifier>
448 optional<RawLicenseKey>
451 , SignatureVerifier
const& signature_verifier
452 , std::string
const& response
455 if (e) {
return nullopt; }
457 using namespace errors;
460 using namespace ArduinoJson;
461 DynamicJsonBuffer jsonBuffer;
462 JsonObject & j = jsonBuffer.parseObject(response);
464 if (!j.success()) { e.set(api, Subsystem::Json);
return nullopt; }
466 if (!j[
"result"].is<int>() || j[
"result"].as<int>() != 0) {
467 if (!j[
"message"].is<const char*>() || j[
"message"].as<char const*>() == NULL) {
468 e.set(api, Subsystem::Main, Main::UNKNOWN_SERVER_REPLY);
472 int reason = activate_parse_server_error_message(j[
"message"].as<char const*>());
473 e.set(api, Subsystem::Main, reason);
477 if (!j[
"licenseKey"].is<char const*>() || j[
"licenseKey"].as<char const*>() == NULL) {
478 e.set(api, Subsystem::Main, Main::UNKNOWN_SERVER_REPLY);
482 if (!j[
"signature"].is<char const*>() || j[
"signature"].as<char const*>() == NULL) {
483 e.set(api, Subsystem::Main, Main::UNKNOWN_SERVER_REPLY);
487 return RawLicenseKey::make
490 , j[
"licenseKey"].as<char const*>()
491 , j[
"signature"].as<char const*>()
optional< RawLicenseKey > activate_raw(basic_Error &e, std::string token, std::string product_id, std::string key, std::string machine_code, int fields_to_return=0)
Definition: basic_SKM.hpp:229
Definition: basic_SKM.hpp:97
virtual void reset(api::main api)
Definition: basic_Error.hpp:119
RawLicenseKey activate_raw_exn(api::experimental_v1 experimental, std::string token, std::string product_id, std::string key, std::string machine_code, int fields_to_return=0)
Definition: basic_SKM.hpp:383
Definition: ActivateError.hpp:5
optional< LicenseKey > activate(basic_Error &e, std::string token, std::string product_id, std::string key, std::string machine_code, int fields_to_return=0)
Definition: basic_SKM.hpp:189
optional< LicenseKey > activate_floating(basic_Error &e, std::string token, std::string product_id, std::string key, std::string machine_code, long floating_time_interval, int fields_to_return=0)
Definition: basic_SKM.hpp:277
Definition: RawLicenseKey.hpp:24
Definition: basic_Error.hpp:90
Definition: LicenseKey.hpp:34