diff --git a/src/gui/src/ActivationDialog.cpp b/src/gui/src/ActivationDialog.cpp index e8136107f..9033ad709 100644 --- a/src/gui/src/ActivationDialog.cpp +++ b/src/gui/src/ActivationDialog.cpp @@ -30,16 +30,10 @@ ActivationDialog::ActivationDialog(QWidget* parent, AppConfig& appConfig, void ActivationDialog::refreshSerialKey() { - ui->m_pTextEditSerialKey->setText(m_appConfig->serialKey()); - ui->m_pTextEditSerialKey->setFocus(); - ui->m_pTextEditSerialKey->moveCursor(QTextCursor::End); - ui->m_trialLabel->setText(tr("

Your trial has " - "expired. Buy now!" - "

") - .arg (m_appConfig->serialKey())); + ui->m_pTextEditSerialKey->setText(m_appConfig->serialKey()); + ui->m_pTextEditSerialKey->setFocus(); + ui->m_pTextEditSerialKey->moveCursor(QTextCursor::End); + ui->m_trialLabel->setText(tr(m_LicenseManager->getLicenseNotice().toStdString().c_str())); } ActivationDialog::~ActivationDialog() diff --git a/src/gui/src/LicenseManager.cpp b/src/gui/src/LicenseManager.cpp index 279cf9102..e6bb6c4e6 100644 --- a/src/gui/src/LicenseManager.cpp +++ b/src/gui/src/LicenseManager.cpp @@ -46,10 +46,10 @@ LicenseManager::setSerialKey(SerialKey serialKey, bool acceptExpired) (m_serialKey.toString())); emit serialKeyChanged(m_serialKey); - emit showLicenseNotice(getLicenseNotice()); - if (m_serialKey.isExpired(currentTime)) { - emit LicenseExpired(); - } + emit showLicenseNotice(getLicenseNotice()); + if (m_serialKey.isExpired(currentTime)) { + emit LicenseExpired(); + } if (m_serialKey.edition() != serialKey.edition()) { m_AppConfig->setEdition(m_serialKey.edition()); @@ -101,7 +101,8 @@ LicenseManager::serialKey() const return m_serialKey; } -void LicenseManager::refresh() +void +LicenseManager::refresh() { if (!m_AppConfig->serialKey().isEmpty()) { try { @@ -112,11 +113,12 @@ void LicenseManager::refresh() } } if (m_serialKey.isExpired(::time(0))) { - emit LicenseExpired(); + emit LicenseExpired(); } } -void LicenseManager::skipActivation() +void +LicenseManager::skipActivation() { notifyActivation ("skip:unknown"); } @@ -124,7 +126,7 @@ void LicenseManager::skipActivation() QString LicenseManager::getEditionName(Edition const edition, bool trial) { - std::string name ("Synergy 1"); + std::string name ("Synergy 1"); switch (edition) { case kUnregistered: name += " (UNREGISTERED)"; @@ -141,7 +143,8 @@ LicenseManager::getEditionName(Edition const edition, bool trial) return QString::fromUtf8 (name.c_str(), static_cast(name.size())); } -void LicenseManager::notifyActivation(QString identity) +void +LicenseManager::notifyActivation(QString identity) { ActivationNotifier* notifier = new ActivationNotifier(); notifier->setIdentity(identity); @@ -157,84 +160,78 @@ void LicenseManager::notifyActivation(QString identity) QMetaObject::invokeMethod(notifier, "notify", Qt::QueuedConnection); } -QString LicenseManager::getLicenseNotice() const +QString +LicenseManager::getLicenseNotice() const { - QString Notice; + QString Notice; - if (m_serialKey.isTemporary()){ - if (m_serialKey.isTrial()){ - Notice = getTrialNotice(); - } - else{ - Notice = getTemporaryNotice(); - } - } + if (m_serialKey.isTemporary()){ + if (m_serialKey.isTrial()){ + Notice = getTrialNotice(); + } + else{ + Notice = getTemporaryNotice(); + } + } - return Notice; + return Notice; } -QString LicenseManager::getTrialNotice() const +QString +LicenseManager::getTrialNotice() const { - QString Notice; + QString Notice; - if (m_serialKey.isExpired(::time(0))){ - Notice = "

Your %1 trial has expired. " - "" - "Buy now!

"; - Notice = Notice - .arg(LicenseManager::getEditionName(activeEdition())) - .arg(QString::fromStdString(m_serialKey.toString())); - } - else{ - time_t daysLeft = m_serialKey.daysLeft(::time(0)); - Notice = "

%1 day%3 of " - "your %2 trial remain%5. " - "Buy now!" - "

"; - Notice = Notice - .arg (daysLeft) - .arg (LicenseManager::getEditionName(activeEdition())) - .arg ((daysLeft == 1) ? "" : "s") - .arg (QString::fromStdString(m_serialKey.toString())) - .arg ((daysLeft == 1) ? "s" : ""); - } + if (m_serialKey.isExpired(::time(0))){ + Notice = "

Your %1 trial has expired. " + "" + "Buy now!

"; + Notice = Notice.arg(LicenseManager::getEditionName(activeEdition())); + } + else{ + Notice = "

%1 day%3 of " + "your %2 trial remain%5. " + "Buy now!" + "

"; - return Notice; + time_t daysLeft = m_serialKey.daysLeft(::time(0)); + Notice = Notice + .arg (daysLeft) + .arg (LicenseManager::getEditionName(activeEdition())) + .arg ((daysLeft == 1) ? "" : "s") + .arg ((daysLeft == 1) ? "s" : ""); + } + + return Notice; } -QString LicenseManager::getTemporaryNotice() const +QString +LicenseManager::getTemporaryNotice() const { - QString Notice; + QString Notice; - if (m_serialKey.isExpired(::time(0))){ - Notice = "

Your %1 has expired. " - "" - "Buy now!

"; - Notice = Notice - .arg(LicenseManager::getEditionName(activeEdition())) - .arg(QString::fromStdString(m_serialKey.toString())); - } - else if (m_serialKey.isExpiring(::time(0))){ - time_t daysLeft = m_serialKey.daysLeft(::time(0)); - Notice = "

%1 day%3 of " - "your %2 remain%5. " - "Buy now!" - "

"; - Notice = Notice - .arg (daysLeft) - .arg (LicenseManager::getEditionName(activeEdition())) - .arg ((daysLeft == 1) ? "" : "s") - .arg (QString::fromStdString(m_serialKey.toString())) - .arg ((daysLeft == 1) ? "s" : ""); - } + if (m_serialKey.isExpired(::time(0))) { + Notice = "

Your license has expired. " + "" + "Renew now!

"; + } + else if (m_serialKey.isExpiring(::time(0))) { + Notice = "

%1 day%2 / " + "before your license expires." + "Renew now!" + "

"; - return Notice; + time_t daysLeft = m_serialKey.daysLeft(::time(0)); + Notice = Notice.arg (daysLeft).arg ((daysLeft == 1) ? "" : "s"); + } + + return Notice; } diff --git a/src/lib/shared/SerialKey.cpp b/src/lib/shared/SerialKey.cpp index 95db7b17e..5d456b2e0 100644 --- a/src/lib/shared/SerialKey.cpp +++ b/src/lib/shared/SerialKey.cpp @@ -27,96 +27,97 @@ #include using namespace std; +static std::string hexEncode (std::string const& str); SerialKey::SerialKey(Edition edition): - m_userLimit(1), - m_warnTime(ULLONG_MAX), - m_expireTime(ULLONG_MAX), - m_edition(edition), - m_KeyType() + m_userLimit(1), + m_warnTime(ULLONG_MAX), + m_expireTime(ULLONG_MAX), + m_edition(edition), + m_KeyType() { } SerialKey::SerialKey(std::string serial) : - m_userLimit(1), - m_warnTime(0), - m_expireTime(0), - m_edition(kBasic), - m_KeyType() + m_userLimit(1), + m_warnTime(0), + m_expireTime(0), + m_edition(kBasic), + m_KeyType() { - string plainText = decode(serial); - bool valid = false; - if (!plainText.empty()) { - valid = parse(plainText); - } - if (!valid) { - throw std::runtime_error ("Invalid serial key"); - } + string plainText = decode(serial); + bool valid = false; + if (!plainText.empty()) { + valid = parse(plainText); + } + if (!valid) { + throw std::runtime_error ("Invalid serial key"); + } } bool SerialKey::isExpiring(time_t currentTime) const { - bool result = false; + bool result = false; - if (isTemporary()) { + if (isTemporary()) { unsigned long long currentTimeAsLL = static_cast(currentTime); - if ((m_warnTime <= currentTimeAsLL) && (currentTimeAsLL < m_expireTime)) { - result = true; - } - } + if ((m_warnTime <= currentTimeAsLL) && (currentTimeAsLL < m_expireTime)) { + result = true; + } + } - return result; + return result; } bool SerialKey::isExpired(time_t currentTime) const { - bool result = false; - std::cout<<"Current time = "<(currentTime)<(edition()); - return oss.str(); - } - } + switch (edition()) { + case kBasic: + return "basic"; + case kPro: + return "pro"; + default: { + std::ostringstream oss; + oss << static_cast(edition()); + return oss.str(); + } + } } static std::string @@ -135,145 +136,145 @@ hexEncode (std::string const& str) { std::string SerialKey::toString() const { - std::ostringstream oss; - oss << "{"; - if (isTemporary()) { - if (isTrial()){ - oss << "v2;" << SerialKeyType::TRIAL << ";"; - } - else{ - oss << "v2;" << SerialKeyType::TEMPORARY << ";"; - } - } else { - oss << "v1;"; - } - oss << editionString() << ";"; - oss << m_name << ";"; - oss << m_userLimit << ";"; - oss << m_email << ";"; - oss << m_company << ";"; - oss << (isTemporary() ? m_warnTime : 0) << ";"; - oss << (isTemporary() ? m_expireTime : 0); - oss << "}"; - return hexEncode(oss.str()); + std::ostringstream oss; + oss << "{"; + if (isTemporary()) { + if (isTrial()){ + oss << "v2;" << SerialKeyType::TRIAL << ";"; + } + else{ + oss << "v2;" << SerialKeyType::TEMPORARY << ";"; + } + } else { + oss << "v1;"; + } + oss << editionString() << ";"; + oss << m_name << ";"; + oss << m_userLimit << ";"; + oss << m_email << ";"; + oss << m_company << ";"; + oss << (isTemporary() ? m_warnTime : 0) << ";"; + oss << (isTemporary() ? m_expireTime : 0); + oss << "}"; + return hexEncode(oss.str()); } time_t SerialKey::daysLeft(time_t currentTime) const { - unsigned long long timeLeft = 0; - unsigned long long const day = 60 * 60 * 24; + unsigned long long timeLeft = 0; + unsigned long long const day = 60 * 60 * 24; unsigned long long currentTimeAsLL = static_cast(currentTime); - if (currentTimeAsLL < m_expireTime) { - timeLeft = m_expireTime - currentTimeAsLL; - } + if (currentTimeAsLL < m_expireTime) { + timeLeft = m_expireTime - currentTimeAsLL; + } - unsigned long long daysLeft = 0; - daysLeft = timeLeft % day != 0 ? 1 : 0; + unsigned long long daysLeft = 0; + daysLeft = timeLeft % day != 0 ? 1 : 0; - return timeLeft / day + daysLeft; + return timeLeft / day + daysLeft; } std::string SerialKey::email() const { - return m_email; + return m_email; } std::string SerialKey::decode(const std::string& serial) { - static const char* const lut = "0123456789ABCDEF"; - string output; - size_t len = serial.length(); - if (len & 1) { - return output; - } + static const char* const lut = "0123456789ABCDEF"; + string output; + size_t len = serial.length(); + if (len & 1) { + return output; + } - output.reserve(len / 2); - for (size_t i = 0; i < len; i += 2) { + output.reserve(len / 2); + for (size_t i = 0; i < len; i += 2) { - char a = serial[i]; - char b = serial[i + 1]; + char a = serial[i]; + char b = serial[i + 1]; - const char* p = std::lower_bound(lut, lut + 16, a); - const char* q = std::lower_bound(lut, lut + 16, b); + const char* p = std::lower_bound(lut, lut + 16, a); + const char* q = std::lower_bound(lut, lut + 16, b); - if (*q != b || *p != a) { - return output; - } + if (*q != b || *p != a) { + return output; + } - output.push_back(static_cast(((p - lut) << 4) | (q - lut))); - } + output.push_back(static_cast(((p - lut) << 4) | (q - lut))); + } - return output; + return output; } bool SerialKey::parse(std::string plainSerial) { - string parityStart = plainSerial.substr(0, 1); - string parityEnd = plainSerial.substr(plainSerial.length() - 1, 1); + string parityStart = plainSerial.substr(0, 1); + string parityEnd = plainSerial.substr(plainSerial.length() - 1, 1); - bool valid = false; + bool valid = false; - // check for parity chars { and }, record parity result, then remove them. - if (parityStart == "{" && parityEnd == "}") { - plainSerial = plainSerial.substr(1, plainSerial.length() - 2); + // check for parity chars { and }, record parity result, then remove them. + if (parityStart == "{" && parityEnd == "}") { + plainSerial = plainSerial.substr(1, plainSerial.length() - 2); - // tokenize serialised subscription. - vector parts; - std::string::size_type pos = 0; - bool look = true; - while (look) { - std::string::size_type start = pos; - pos = plainSerial.find(";", pos); - if (pos == string::npos) { - pos = plainSerial.length(); - look = false; - } - parts.push_back(plainSerial.substr(start, pos - start)); - pos += 1; - } + // tokenize serialised subscription. + vector parts; + std::string::size_type pos = 0; + bool look = true; + while (look) { + std::string::size_type start = pos; + pos = plainSerial.find(";", pos); + if (pos == string::npos) { + pos = plainSerial.length(); + look = false; + } + parts.push_back(plainSerial.substr(start, pos - start)); + pos += 1; + } - if ((parts.size() == 8) - && (parts.at(0).find("v1") != string::npos)) { - // e.g.: {v1;basic;Bob;1;email;company name;1398297600;1398384000} - m_edition = parseEdition(parts.at(1)); - m_name = parts.at(2); - sscanf(parts.at(3).c_str(), "%d", &m_userLimit); - m_email = parts.at(4); - m_company = parts.at(5); - sscanf(parts.at(6).c_str(), "%lld", &m_warnTime); - sscanf(parts.at(7).c_str(), "%lld", &m_expireTime); - valid = true; - } - else if ((parts.size() == 9) - && (parts.at(0).find("v2") != string::npos)) { - // e.g.: {v2;trial;basic;Bob;1;email;company name;1398297600;1398384000} - m_KeyType.setKeyType(parts.at(1)); - m_edition = parseEdition(parts.at(2)); - m_name = parts.at(3); - sscanf(parts.at(4).c_str(), "%d", &m_userLimit); - m_email = parts.at(5); - m_company = parts.at(6); - sscanf(parts.at(7).c_str(), "%lld", &m_warnTime); - sscanf(parts.at(8).c_str(), "%lld", &m_expireTime); - valid = true; - } - } + if ((parts.size() == 8) + && (parts.at(0).find("v1") != string::npos)) { + // e.g.: {v1;basic;Bob;1;email;company name;1398297600;1398384000} + m_edition = parseEdition(parts.at(1)); + m_name = parts.at(2); + sscanf(parts.at(3).c_str(), "%d", &m_userLimit); + m_email = parts.at(4); + m_company = parts.at(5); + sscanf(parts.at(6).c_str(), "%lld", &m_warnTime); + sscanf(parts.at(7).c_str(), "%lld", &m_expireTime); + valid = true; + } + else if ((parts.size() == 9) + && (parts.at(0).find("v2") != string::npos)) { + // e.g.: {v2;trial;basic;Bob;1;email;company name;1398297600;1398384000} + m_KeyType.setKeyType(parts.at(1)); + m_edition = parseEdition(parts.at(2)); + m_name = parts.at(3); + sscanf(parts.at(4).c_str(), "%d", &m_userLimit); + m_email = parts.at(5); + m_company = parts.at(6); + sscanf(parts.at(7).c_str(), "%lld", &m_warnTime); + sscanf(parts.at(8).c_str(), "%lld", &m_expireTime); + valid = true; + } + } - return valid; + return valid; } Edition SerialKey::parseEdition(std::string const& editionStr) { - Edition e = kBasic; - if (editionStr == "pro") { - e = kPro; - } + Edition e = kBasic; + if (editionStr == "pro") { + e = kPro; + } - return e; + return e; } diff --git a/src/lib/shared/SerialKeyType.cpp b/src/lib/shared/SerialKeyType.cpp index 094acf120..09b2622c8 100644 --- a/src/lib/shared/SerialKeyType.cpp +++ b/src/lib/shared/SerialKeyType.cpp @@ -1,40 +1,62 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file LICENSE that should have accompanied this file. + * + * This package is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include "SerialKeyType.h" const std::string SerialKeyType::TRIAL = "trial"; const std::string SerialKeyType::TEMPORARY = "temp"; SerialKeyType::SerialKeyType() : - m_isTrial(false), - m_isTemporary(false) + m_isTrial(false), + m_isTemporary(false) { } -void SerialKeyType::setKeyType(const std::string& Type) +void +SerialKeyType::setKeyType(const std::string& Type) { - m_isTrial = false; - m_isTemporary = false; + m_isTrial = false; + m_isTemporary = false; - if (Type == SerialKeyType::TRIAL){ - m_isTrial = true; - m_isTemporary = true; - } - else if (Type == SerialKeyType::TEMPORARY){ - m_isTemporary = true; - } + if (Type == SerialKeyType::TRIAL){ + m_isTrial = true; + m_isTemporary = true; + } + else if (Type == SerialKeyType::TEMPORARY){ + m_isTemporary = true; + } } -bool SerialKeyType::isTrial() const +bool +SerialKeyType::isTrial() const { - return m_isTrial; + return m_isTrial; } -bool SerialKeyType::isTemporary() const +bool +SerialKeyType::isTemporary() const { - return m_isTemporary; + return m_isTemporary; } -bool SerialKeyType::isPermanent() const +bool +SerialKeyType::isPermanent() const { - return (!m_isTemporary); + return (!m_isTemporary); } + diff --git a/src/lib/shared/SerialKeyType.h b/src/lib/shared/SerialKeyType.h index 47172dc80..f37afcfc4 100644 --- a/src/lib/shared/SerialKeyType.h +++ b/src/lib/shared/SerialKeyType.h @@ -14,40 +14,38 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#ifndef SERIALKEYTYPE_H -#define SERIALKEYTYPE_H +#pragma once #include class SerialKeyType { private: - friend bool operator== (SerialKeyType const&, SerialKeyType const&); + friend bool operator== (SerialKeyType const&, SerialKeyType const&); public: - static const std::string TRIAL; - static const std::string TEMPORARY; + static const std::string TRIAL; + static const std::string TEMPORARY; public: - SerialKeyType(); + SerialKeyType(); - void setKeyType(const std::string& Type); - bool isTrial() const; - bool isTemporary() const; - bool isPermanent() const; + void setKeyType(const std::string& Type); + bool isTrial() const; + bool isTemporary() const; + bool isPermanent() const; protected: - bool m_isTrial; - bool m_isTemporary; + bool m_isTrial; + bool m_isTemporary; }; inline bool operator== (SerialKeyType const& lhs, SerialKeyType const& rhs) { - return (lhs.m_isTrial == rhs.m_isTrial) && (lhs.m_isTemporary == rhs.m_isTemporary); + return (lhs.m_isTrial == rhs.m_isTrial) && (lhs.m_isTemporary == rhs.m_isTemporary); } inline bool operator!= (SerialKeyType const& lhs, SerialKeyType const& rhs) { - return !(lhs == rhs); + return !(lhs == rhs); } -#endif // SERIALKEYTYPE_H diff --git a/src/test/unittests/shared/SerialKeyTypeTests.cpp b/src/test/unittests/shared/SerialKeyTypeTests.cpp index dddd17517..800ca7f1e 100644 --- a/src/test/unittests/shared/SerialKeyTypeTests.cpp +++ b/src/test/unittests/shared/SerialKeyTypeTests.cpp @@ -23,35 +23,35 @@ TEST(SerialKeyTypeTests, TrialTemporaryKeyType_false) { - SerialKeyType KeyType; - EXPECT_EQ(false, KeyType.isTrial()); - EXPECT_EQ(false, KeyType.isTemporary()); - EXPECT_EQ(true, KeyType.isPermanent()); + SerialKeyType KeyType; + EXPECT_EQ(false, KeyType.isTrial()); + EXPECT_EQ(false, KeyType.isTemporary()); + EXPECT_EQ(true, KeyType.isPermanent()); } TEST(SerialKeyTypeTests, TrialTemporaryKeyType_true) { - SerialKeyType KeyType; - KeyType.setKeyType("trial"); - EXPECT_EQ(true, KeyType.isTrial()); - EXPECT_EQ(true, KeyType.isTemporary()); - EXPECT_EQ(false, KeyType.isPermanent()); + SerialKeyType KeyType; + KeyType.setKeyType("trial"); + EXPECT_EQ(true, KeyType.isTrial()); + EXPECT_EQ(true, KeyType.isTemporary()); + EXPECT_EQ(false, KeyType.isPermanent()); } TEST(SerialKeyTypeTests, TemporaryKeyType_true) { - SerialKeyType KeyType; - KeyType.setKeyType("temp"); - EXPECT_EQ(false, KeyType.isTrial()); - EXPECT_EQ(true, KeyType.isTemporary()); - EXPECT_EQ(false, KeyType.isPermanent()); + SerialKeyType KeyType; + KeyType.setKeyType("temp"); + EXPECT_EQ(false, KeyType.isTrial()); + EXPECT_EQ(true, KeyType.isTemporary()); + EXPECT_EQ(false, KeyType.isPermanent()); } TEST(SerialKeyTypeTests, PermanentKeyType_true) { - SerialKeyType KeyType; - KeyType.setKeyType(""); - EXPECT_EQ(false, KeyType.isTrial()); - EXPECT_EQ(false, KeyType.isTemporary()); - EXPECT_EQ(true, KeyType.isPermanent()); + SerialKeyType KeyType; + KeyType.setKeyType(""); + EXPECT_EQ(false, KeyType.isTrial()); + EXPECT_EQ(false, KeyType.isTemporary()); + EXPECT_EQ(true, KeyType.isPermanent()); }