aboutsummaryrefslogtreecommitdiffstats
path: root/src/daemon_clients/clitoolhandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/daemon_clients/clitoolhandler.h')
-rw-r--r--src/daemon_clients/clitoolhandler.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/daemon_clients/clitoolhandler.h b/src/daemon_clients/clitoolhandler.h
new file mode 100644
index 0000000..a63dd40
--- /dev/null
+++ b/src/daemon_clients/clitoolhandler.h
@@ -0,0 +1,74 @@
+/* Copyright (C) 2022 The Qt Company Ltd.
+ *
+ * SPDX-License-Identifier: GPL-3.0-only WITH Qt-GPL-exception-1.0
+*/
+#pragma once
+
+#include "clienthandler.h"
+
+class CliToolHandler : public virtual ClientHandler {
+
+ public:
+ CliToolHandler(const RequestInfo &request, const LicdSetup &settings)
+ : ClientHandler(request, settings) {}
+
+ bool isLicenseRequestDue() override { return true; }
+ bool isCachedReservationValid(std::string &reply) override { return false; }
+
+ private:
+
+ void buildRequestJson() override
+ {
+ if (m_request.type == RequestType::server_version) {
+ m_request.payload = "";
+ return;
+ }
+ std::stringstream pay;
+ pay << "{";
+ pay<< "\"license_number\":" << "\"" << m_request.licenseId << "\",";
+ pay << "\"user_id\":" << "\"" << m_request.userId << "\",";
+ pay << "\"operation\":" << "\"" << m_request.operation << "\"";
+ pay << "}";
+ m_request.payload = pay.str();
+ }
+
+ int parseAndSaveResponse(std::string &response) override
+ {
+ JsonHandler json(response);
+ std::stringstream ss;
+ std::cout << json.dump(4);
+
+ if (m_request.type == RequestType::long_term_request) {
+ // long-term request: Have "message" field from response JSON directly as a reply to the user
+ response = json.get("message");
+ if (json.get("status") != "true" ) {
+ if (json.get("message") == "License fully reserved") {
+ response = replyString[e_license_pool_full];
+ } else {
+ response = replyString[e_license_rejected];
+ }
+ // Do not touch the license file, just return
+ return 1;
+ }
+ } else if (m_request.type == RequestType::server_version) {
+ std::cout << "Parsing server version response\n";
+ response = "Qt License Server v";
+ response += json.get("version");
+ return 0; // Do not touch cached license files pls.
+ }
+ ss << replyString[e_license_granted];
+ ss << " expiry_date=" << json.get("expiry_date");
+ ss << " license_id=" << json.get("license_number");
+ ss << " reservation_id=" << json.get("reservation_id");
+ response = ss.str();
+
+ // Add timestamp into license JSON
+ json.add("last_timestamp", utils::getTimestampNow());
+
+ int result = utils::writeToFile(m_request.licenseFile, json.dump(4));
+ if (result != 0) {
+ std::cout << "ERROR saving license file: '" << m_request.licenseFile << "': " << strerror(result) << std::endl;
+ }
+ return 0;
+ }
+};