diff options
Diffstat (limited to 'src/daemon_clients/clitoolhandler.h')
-rw-r--r-- | src/daemon_clients/clitoolhandler.h | 74 |
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; + } +}; |