#6301 Disable activation for Enterprise builds

This commit is contained in:
Andrew Nelless 2018-06-07 16:22:49 +01:00 committed by Nick Bolton
parent 4e59954d94
commit b396b1092d
9 changed files with 186 additions and 103 deletions

View File

@ -20,6 +20,7 @@ project (synergy C CXX)
option (SYNERGY_BUILD_LEGACY_GUI "Build the legacy GUI" ON)
option (SYNERGY_BUILD_LEGACY_SERVICE "Build the legacy service (synergyd)" ON)
option (SYNERGY_BUILD_LEGACY_INSTALLER "Build the legacy installer" ON)
option (SYNERGY_ENTERPRISE "Build Enterprise" OFF)
set (CMAKE_CXX_STANDARD 14)
set (CMAKE_CXX_EXTENSIONS OFF)

View File

@ -15,7 +15,7 @@ if (NOT DEFINED SYNERGY_VERSION_MINOR)
if (DEFINED ENV{SYNERGY_VERSION_MINOR})
set (SYNERGY_VERSION_MINOR $ENV{SYNERGY_VERSION_MINOR})
else()
set (SYNERGY_VERSION_MINOR 9)
set (SYNERGY_VERSION_MINOR 10)
endif()
endif()
@ -88,3 +88,6 @@ if (SYNERGY_DEVELOPER_MODE)
add_definitions (-DSYNERGY_DEVELOPER_MODE=1)
endif()
if (SYNERGY_ENTERPRISE)
add_definitions (-DSYNERGY_ENTERPRISE=1)
endif()

View File

@ -8,6 +8,12 @@ set (CMAKE_INCLUDE_CURRENT_DIR ON)
file (GLOB LEGACY_GUI_SOURCE_FILES src/*.cpp src/*.h)
file (GLOB LEGACY_GUI_UI_FILES src/*.ui)
file (GLOB LEGACY_ACTIVATION_FILES src/*Activation* src/*License*)
if (SYNERGY_ENTERPRISE)
list (REMOVE_ITEM LEGACY_GUI_SOURCE_FILES ${LEGACY_ACTIVATION_FILES})
list (REMOVE_ITEM LEGACY_GUI_UI_FILES ${LEGACY_ACTIVATION_FILES})
endif ()
if (WIN32)
set (LEGACY_GUI_RC_FILES res/win/Synergy.rc)
@ -26,15 +32,15 @@ target_link_libraries (synergy shared)
if (WIN32)
include_directories ($ENV{BONJOUR_SDK_HOME}/Include)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
find_library (DNSSD_LIB dnssd.lib
find_library (DNSSD_LIB dnssd.lib
HINTS ENV BONJOUR_SDK_HOME
PATH_SUFFIXES "Lib/x64")
else()
find_library (DNSSD_LIB dnssd.lib
find_library (DNSSD_LIB dnssd.lib
HINTS ENV BONJOUR_SDK_HOME
PATH_SUFFIXES "Lib/Win32")
endif()
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
target_link_libraries (synergy dns_sd)
endif()

View File

@ -86,8 +86,8 @@ const QString &AppConfig::logFilename() const { return m_LogFilename; }
QString AppConfig::synergyLogDir() const
{
// by default log to home dir
return QDir::home().absolutePath() + "/";
// by default log to home dir
return QDir::home().absolutePath() + "/";
}
QString AppConfig::synergyProgramDir() const
@ -188,6 +188,7 @@ void AppConfig::saveSettings()
settings().sync();
}
#ifndef SYNERGY_ENTERPRISE
bool AppConfig::activationHasRun() const
{
return m_ActivationHasRun;
@ -198,6 +199,7 @@ AppConfig& AppConfig::activationHasRun(bool value)
m_ActivationHasRun = value;
return *this;
}
#endif
QString AppConfig::lastVersion() const
{
@ -242,6 +244,7 @@ void AppConfig::setAutoConfigPrompted(bool prompted)
m_AutoConfigPrompted = prompted;
}
#ifndef SYNERGY_ENTERPRISE
void AppConfig::setEdition(Edition e) {
m_Edition = e;
}
@ -264,6 +267,7 @@ QString AppConfig::serialKey() { return m_Serialkey; }
int AppConfig::lastExpiringWarningTime() const { return m_LastExpiringWarningTime; }
void AppConfig::setLastExpiringWarningTime(int t) { m_LastExpiringWarningTime = t; }
#endif
QString AppConfig::synergysName() const { return m_SynergysName; }
@ -280,7 +284,11 @@ void AppConfig::setCryptoEnabled(bool e) {
}
bool AppConfig::getCryptoEnabled() const {
return (edition() == kPro) && m_CryptoEnabled;
return
#ifndef SYNERGY_ENTERPRISE
(edition() == kPro) &&
#endif
m_CryptoEnabled;
}
void AppConfig::setAutoHide(bool b) { m_AutoHide = b; }

View File

@ -79,6 +79,7 @@ class AppConfig: public QObject
void setAutoConfig(bool autoConfig);
bool autoConfigPrompted();
void setAutoConfigPrompted(bool prompted);
#ifndef SYNERGY_ENTERPRISE
void setEdition(Edition);
Edition edition() const;
QString setSerialKey(QString serial);
@ -86,6 +87,7 @@ class AppConfig: public QObject
QString serialKey();
int lastExpiringWarningTime() const;
void setLastExpiringWarningTime(int t);
#endif
QString synergysName() const;
QString synergycName() const;
@ -101,9 +103,10 @@ class AppConfig: public QObject
void setAutoHide(bool b);
bool getAutoHide();
#ifndef SYNERGY_ENTERPRISE
bool activationHasRun() const;
AppConfig& activationHasRun(bool value);
#endif
QString lastVersion() const;

View File

@ -76,11 +76,17 @@ static const char* synergyIconFiles[] =
":/res/icons/16x16/synergy-transfering.png"
};
MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig,
LicenseManager& licenseManager) :
m_Settings(settings),
#ifdef SYNERGY_ENTERPRISE
MainWindow::MainWindow (QSettings& settings, AppConfig& appConfig)
#else
MainWindow::MainWindow (QSettings& settings, AppConfig& appConfig,
LicenseManager& licenseManager)
#endif
: m_Settings(settings),
m_AppConfig(&appConfig),
#ifndef SYNERGY_ENTERPRISE
m_LicenseManager(&licenseManager),
#endif
m_pSynergy(NULL),
m_SynergyState(synergyDisconnected),
m_ServerConfig(&m_Settings, 5, 3, m_AppConfig->screenName(), this),
@ -101,8 +107,10 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig,
m_BonjourInstall(NULL),
m_SuppressEmptyServerWarning(false),
m_ExpectedRunningState(kStopped),
m_pSslCertificate(NULL),
m_ActivationDialogRunning(false)
m_pSslCertificate(NULL)
#ifndef SYNERGY_ENTERPRISE
, m_ActivationDialogRunning(false)
#endif
{
setupUi(this);
@ -142,7 +150,7 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig,
connect (this, SIGNAL(windowShown()),
this, SLOT(on_windowShown()), Qt::QueuedConnection);
#ifndef SYNERGY_ENTERPRISE
connect (m_LicenseManager, SIGNAL(editionChanged(Edition)),
this, SLOT(setEdition(Edition)), Qt::QueuedConnection);
@ -151,20 +159,31 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig,
connect (m_LicenseManager, SIGNAL(endTrial(bool)),
this, SLOT(endTrial(bool)), Qt::QueuedConnection);
#endif
connect (m_AppConfig, SIGNAL(sslToggled(bool)),
this, SLOT(sslToggled(bool)), Qt::QueuedConnection);
#ifdef SYNERGY_ENTERPRISE
setWindowTitle ("Synergy Enterprise");
#else
setWindowTitle (m_LicenseManager->activeEditionName());
m_LicenseManager->refresh();
#endif
QString lastVersion = m_AppConfig->lastVersion();
QString currentVersion = m_VersionChecker.getVersion();
if (lastVersion != currentVersion) {
m_AppConfig->setLastVersion (currentVersion);
m_AppConfig->saveSettings();
#ifndef SYNERGY_ENTERPRISE
m_LicenseManager->notifyUpdate (lastVersion, currentVersion);
#endif
}
#ifdef SYNERGY_ENTERPRISE
m_pActivate->setVisible(false);
#endif
}
MainWindow::~MainWindow()
@ -431,7 +450,9 @@ void MainWindow::updateFromLogLine(const QString &line)
// TODO: this code makes Andrew cry
checkConnected(line);
checkFingerprint(line);
#ifndef SYNERGY_ENTERPRISE
checkLicense(line);
#endif
}
void MainWindow::checkConnected(const QString& line)
@ -456,6 +477,7 @@ void MainWindow::checkConnected(const QString& line)
}
}
#ifndef SYNERGY_ENTERPRISE
void MainWindow::checkLicense(const QString &line)
{
if (line.contains("trial has expired")) {
@ -463,6 +485,7 @@ void MainWindow::checkLicense(const QString &line)
raiseActivationDialog();
}
}
#endif
void MainWindow::checkFingerprint(const QString& line)
{
@ -532,8 +555,9 @@ void MainWindow::restartSynergy()
void MainWindow::proofreadInfo()
{
#ifndef SYNERGY_ENTERPRISE
setEdition(m_AppConfig->edition()); // Why is this here?
#endif
int oldState = m_SynergyState;
m_SynergyState = synergyDisconnected;
setSynergyState((qSynergyState)oldState);
@ -552,6 +576,7 @@ void MainWindow::clearLog()
void MainWindow::startSynergy()
{
#ifndef SYNERGY_ENTERPRISE
SerialKey serialKey = m_LicenseManager->serialKey();
time_t currentTime = ::time(0);
if (serialKey.isExpired(currentTime)) {
@ -559,7 +584,7 @@ void MainWindow::startSynergy()
return;
}
}
#endif
bool desktopMode = appConfig().processMode() == Desktop;
bool serviceMode = appConfig().processMode() == Service;
@ -804,9 +829,11 @@ bool MainWindow::serverArgs(QStringList& args, QString& app)
#endif
args << "-c" << configFilename << "--address" << address();
#ifndef SYNERGY_ENTERPRISE
if (!appConfig().serialKey().isEmpty()) {
args << "--serial-key" << appConfig().serialKey();
}
#endif
return true;
}
@ -1056,7 +1083,9 @@ void MainWindow::serverDetected(const QString name)
void MainWindow::setEdition(Edition edition)
{
#ifndef SYNERGY_ENTERPRISE
setWindowTitle(m_LicenseManager->getEditionName (edition));
#endif
if (m_AppConfig->getCryptoEnabled()) {
m_pSslCertificate = new SslCertificate(this);
m_pSslCertificate->generateCertificate();
@ -1065,6 +1094,7 @@ void MainWindow::setEdition(Edition edition)
saveSettings();
}
#ifndef SYNERGY_ENTERPRISE
void MainWindow::beginTrial(bool isExpiring)
{
//Hack
@ -1115,6 +1145,7 @@ void MainWindow::endTrial(bool isExpired)
}
setWindowTitle (m_LicenseManager->activeEditionName());
}
#endif
void MainWindow::updateLocalFingerprint()
{
@ -1129,11 +1160,13 @@ void MainWindow::updateLocalFingerprint()
}
}
#ifndef SYNERGY_ENTERPRISE
LicenseManager&
MainWindow::licenseManager() const
{
return *m_LicenseManager;
}
#endif
void MainWindow::on_m_pGroupClient_toggled(bool on)
{
@ -1199,6 +1232,7 @@ void MainWindow::on_m_pActionSettings_triggered()
void MainWindow::autoAddScreen(const QString name)
{
if (!m_ServerConfig.ignoreAutoConfigClient()) {
#ifndef SYNERGY_ENTERPRISE
if (m_ActivationDialogRunning) {
// TODO: refactor this code
// add this screen to the pending list and check this list until
@ -1206,6 +1240,7 @@ void MainWindow::autoAddScreen(const QString name)
m_PendingClientNames.append(name);
return;
}
#endif
int r = m_ServerConfig.autoAddScreen(name);
if (r != kAutoAddScreenOk) {
@ -1244,7 +1279,9 @@ void MainWindow::on_m_pButtonConfigureServer_clicked()
void MainWindow::on_m_pActivate_triggered()
{
#ifndef SYNERGY_ENTERPRISE
raiseActivationDialog();
#endif
}
void MainWindow::on_m_pButtonApply_clicked()
@ -1456,6 +1493,7 @@ void MainWindow::bonjourInstallFinished()
m_pCheckBoxAutoConfig->setChecked(true);
}
#ifndef SYNERGY_ENTERPRISE
int MainWindow::raiseActivationDialog()
{
if (m_ActivationDialogRunning) {
@ -1479,15 +1517,18 @@ int MainWindow::raiseActivationDialog()
}
return result;
}
#endif
void MainWindow::on_windowShown()
{
#ifndef SYNERGY_ENTERPRISE
time_t currentTime = ::time(0);
if (!m_AppConfig->activationHasRun()
&& ((m_AppConfig->edition() == kUnregistered) ||
(m_LicenseManager->serialKey().isExpired(currentTime)))) {
raiseActivationDialog();
}
#endif
}
QString MainWindow::getProfileRootForArg()

View File

@ -95,8 +95,12 @@ class MainWindow : public QMainWindow, public Ui::MainWindowBase
};
public:
#ifdef SYNERGY_ENTERPRISE
MainWindow(QSettings& settings, AppConfig& appConfig);
#else
MainWindow(QSettings& settings, AppConfig& appConfig,
LicenseManager& licenseManager);
#endif
~MainWindow();
public:
@ -118,14 +122,17 @@ class MainWindow : public QMainWindow, public Ui::MainWindowBase
void updateZeroconfService();
void serverDetected(const QString name);
void updateLocalFingerprint();
#ifndef SYNERGY_ENTERPRISE
LicenseManager& licenseManager() const;
int raiseActivationDialog();
#endif
public slots:
void setEdition(Edition edition);
#ifndef SYNERGY_ENTERPRISE
void beginTrial(bool isExpiring);
void endTrial(bool isExpired);
#endif
void appendLogRaw(const QString& text);
void appendLogInfo(const QString& text);
void appendLogDebug(const QString& text);
@ -149,7 +156,7 @@ public slots:
void logError();
void updateFound(const QString& version);
void bonjourInstallFinished();
void saveSettings();
void saveSettings();
protected:
QSettings& settings() { return m_Settings; }
@ -185,7 +192,9 @@ public slots:
void promptAutoConfig();
QString getProfileRootForArg();
void checkConnected(const QString& line);
#ifndef SYNERGY_ENTERPRISE
void checkLicense(const QString& line);
#endif
void checkFingerprint(const QString& line);
bool autoHide();
QString getTimeStamp();
@ -223,8 +232,10 @@ public slots:
qRuningState m_ExpectedRunningState;
QMutex m_StopDesktopMutex;
SslCertificate* m_pSslCertificate;
#ifndef SYNERGY_ENTERPRISE
bool m_ActivationDialogRunning;
QStringList m_PendingClientNames;
#endif
private slots:
void on_m_pCheckBoxAutoConfig_toggled(bool checked);

View File

@ -2,11 +2,11 @@
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2008 Volker Lanz (vl@fidra.de)
*
*
* 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
@ -63,7 +63,11 @@ SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) :
#endif
m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled());
#ifdef SYNERGY_ENTERPRISE
m_pCheckBoxEnableCrypto->setEnabled(true);
#else
m_pCheckBoxEnableCrypto->setEnabled(m_appConfig.edition() == kPro);
#endif
}
void SettingsDialog::accept()

View File

@ -41,10 +41,10 @@
class QThreadImpl : public QThread
{
public:
static void msleep(unsigned long msecs)
{
QThread::msleep(msecs);
}
static void msleep(unsigned long msecs)
{
QThread::msleep(msecs);
}
};
int waitForTray();
@ -59,84 +59,90 @@ int main(int argc, char* argv[])
/* Workaround for QTBUG-40332 - "High ping when QNetworkAccessManager is instantiated" */
::setenv ("QT_BEARER_POLL_TIMEOUT", "-1", 1);
#endif
QCoreApplication::setOrganizationName("Synergy");
QCoreApplication::setOrganizationDomain("http://symless.com/");
QCoreApplication::setApplicationName("Synergy");
QCoreApplication::setOrganizationName("Synergy");
QCoreApplication::setOrganizationDomain("http://symless.com/");
QCoreApplication::setApplicationName("Synergy");
QSynergyApplication app(argc, argv);
QSynergyApplication app(argc, argv);
#if defined(Q_OS_MAC)
if (app.applicationDirPath().startsWith("/Volumes/")) {
QMessageBox::information(
NULL, "Synergy",
"Please drag Synergy to the Applications folder, and open it from there.");
return 1;
}
if (app.applicationDirPath().startsWith("/Volumes/")) {
QMessageBox::information(
NULL, "Synergy",
"Please drag Synergy to the Applications folder, and open it from there.");
return 1;
}
if (!checkMacAssistiveDevices())
{
return 1;
}
if (!checkMacAssistiveDevices())
{
return 1;
}
#endif
if (!waitForTray())
{
return -1;
}
if (!waitForTray())
{
return -1;
}
#ifndef Q_OS_WIN
QApplication::setQuitOnLastWindowClosed(false);
QApplication::setQuitOnLastWindowClosed(false);
#endif
QSettings settings;
AppConfig appConfig (&settings);
qRegisterMetaType<Edition>("Edition");
LicenseManager licenseManager (&appConfig);
QSettings settings;
AppConfig appConfig (&settings);
qRegisterMetaType<Edition>("Edition");
#ifndef SYNERGY_ENTERPRISE
LicenseManager licenseManager (&appConfig);
#endif
app.switchTranslator(appConfig.language());
app.switchTranslator(appConfig.language());
MainWindow mainWindow(settings, appConfig, licenseManager);
#ifdef SYNERGY_ENTERPRISE
MainWindow mainWindow(settings, appConfig);
#else
MainWindow mainWindow(settings, appConfig, licenseManager);
#endif
QObject::connect(dynamic_cast<QObject*>(&app), SIGNAL(aboutToQuit()),
&mainWindow, SLOT(saveSettings()));
QObject::connect(dynamic_cast<QObject*>(&app), SIGNAL(aboutToQuit()),
&mainWindow, SLOT(saveSettings()));
SetupWizard setupWizard(mainWindow, true);
SetupWizard setupWizard(mainWindow, true);
if (appConfig.wizardShouldRun())
{
setupWizard.show();
}
else
{
mainWindow.open();
}
if (appConfig.wizardShouldRun())
{
setupWizard.show();
}
else
{
mainWindow.open();
}
return app.exec();
return app.exec();
}
int waitForTray()
{
// on linux, the system tray may not be available immediately after logging in,
// so keep retrying but give up after a short time.
int trayAttempts = 0;
while (true)
{
if (QSystemTrayIcon::isSystemTrayAvailable())
{
break;
}
// on linux, the system tray may not be available immediately after logging in,
// so keep retrying but give up after a short time.
int trayAttempts = 0;
while (true)
{
if (QSystemTrayIcon::isSystemTrayAvailable())
{
break;
}
if (++trayAttempts > TRAY_RETRY_COUNT)
{
QMessageBox::critical(NULL, "Synergy",
QObject::tr("System tray is unavailable, don't close your window."));
return true;
}
if (++trayAttempts > TRAY_RETRY_COUNT)
{
QMessageBox::critical(NULL, "Synergy",
QObject::tr("System tray is unavailable, don't close your window."));
return true;
}
QThreadImpl::msleep(TRAY_RETRY_WAIT);
}
return true;
QThreadImpl::msleep(TRAY_RETRY_WAIT);
}
return true;
}
#if defined(Q_OS_MAC)
@ -144,36 +150,36 @@ bool checkMacAssistiveDevices()
{
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 // mavericks
// new in mavericks, applications are trusted individually
// with use of the accessibility api. this call will show a
// prompt which can show the security/privacy/accessibility
// tab, with a list of allowed applications. synergy should
// show up there automatically, but will be unchecked.
// new in mavericks, applications are trusted individually
// with use of the accessibility api. this call will show a
// prompt which can show the security/privacy/accessibility
// tab, with a list of allowed applications. synergy should
// show up there automatically, but will be unchecked.
if (AXIsProcessTrusted()) {
return true;
}
if (AXIsProcessTrusted()) {
return true;
}
const void* keys[] = { kAXTrustedCheckOptionPrompt };
const void* trueValue[] = { kCFBooleanTrue };
CFDictionaryRef options = CFDictionaryCreate(NULL, keys, trueValue, 1, NULL, NULL);
const void* keys[] = { kAXTrustedCheckOptionPrompt };
const void* trueValue[] = { kCFBooleanTrue };
CFDictionaryRef options = CFDictionaryCreate(NULL, keys, trueValue, 1, NULL, NULL);
bool result = AXIsProcessTrustedWithOptions(options);
CFRelease(options);
return result;
bool result = AXIsProcessTrustedWithOptions(options);
CFRelease(options);
return result;
#else
// now deprecated in mavericks.
bool result = AXAPIEnabled();
if (!result) {
QMessageBox::information(
NULL, "Synergy",
"Please enable access to assistive devices "
"System Preferences -> Security & Privacy -> "
"Privacy -> Accessibility, then re-open Synergy.");
}
return result;
// now deprecated in mavericks.
bool result = AXAPIEnabled();
if (!result) {
QMessageBox::information(
NULL, "Synergy",
"Please enable access to assistive devices "
"System Preferences -> Security & Privacy -> "
"Privacy -> Accessibility, then re-open Synergy.");
}
return result;
#endif
}