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());
}