summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/settings/security/multiauthconfig.cpp129
-rw-r--r--core/settings/security/multiauthconfig.h18
-rw-r--r--libopie2/opiesecurity/multiauthmainwindow.cpp29
-rw-r--r--libopie2/opiesecurity/multiauthmainwindow.h2
4 files changed, 106 insertions, 72 deletions
diff --git a/core/settings/security/multiauthconfig.cpp b/core/settings/security/multiauthconfig.cpp
index 3c73d7b..192b8ca 100644
--- a/core/settings/security/multiauthconfig.cpp
+++ b/core/settings/security/multiauthconfig.cpp
@@ -1,4 +1,3 @@
-#include "multiauthconfig.h"
-
#include <opie2/odebug.h>
+#include <opie2/multiauthmainwindow.h>
@@ -19,2 +18,4 @@
+#include "multiauthconfig.h"
+
@@ -58,5 +59,7 @@ class ToolButton : public QToolButton {
- MultiauthGeneralConfig::MultiauthGeneralConfig(QWidget * parent, const char * name = "general Opie-multiauthentication config widget")
-: QWidget(parent, name), onStart(0), onResume(0), nbSuccessMin(0)
+ MultiauthGeneralConfig::MultiauthGeneralConfig(MultiauthConfig * parentConfig, QWidget * parent, const char * name = "general Opie-multiauthentication config widget")
+: QWidget(parent, name), m_onStart(0), m_onResume(0), m_noProtectConfig(0), m_explanScreens(0), m_nbSuccessMin(0), m_tryButton(0)
{
+ // keep track of the MultiauthConfig parent in one of our attributes
+ m_parentConfig = parentConfig;
QVBoxLayout *vb = new QVBoxLayout(this);
@@ -69,6 +72,6 @@ class ToolButton : public QToolButton {
QGridLayout *boxLayout = new QGridLayout( lockBox->layout() );
- onStart = new QCheckBox( tr( "on Opie start" ), lockBox, "lock on opie start");
- onResume = new QCheckBox( tr( "on Opie resume" ), lockBox, "lock on opie resume");
- boxLayout->addWidget(onStart, 0, 0);
- boxLayout->addWidget(onResume, 0, 1);
+ m_onStart = new QCheckBox( tr( "on Opie start" ), lockBox, "lock on opie start");
+ m_onResume = new QCheckBox( tr( "on Opie resume" ), lockBox, "lock on opie resume");
+ boxLayout->addWidget(m_onStart, 0, 0);
+ boxLayout->addWidget(m_onResume, 0, 1);
@@ -77,22 +80,21 @@ class ToolButton : public QToolButton {
QGridLayout *nbBoxLayout = new QGridLayout( nbBox->layout() );
- nbSuccessMin = new QSpinBox(nbBox);
+ m_nbSuccessMin = new QSpinBox(nbBox);
QLabel *lNbSuccessMin = new QLabel( tr( "Required successes" ), nbBox);
- nbBoxLayout->addWidget(nbSuccessMin, 0, 0);
+ nbBoxLayout->addWidget(m_nbSuccessMin, 0, 0);
nbBoxLayout->addWidget(lNbSuccessMin, 0, 1);
- nbSuccessMin->setMinValue(1); // the max value is defined in MultiauthConfig constructor
+ m_nbSuccessMin->setMinValue(1); // the max value is defined in MultiauthConfig constructor
- QGroupBox *devBox = new QGroupBox(0, Qt::Vertical, tr("Debug options"), this, "dev box");
+ QGroupBox *devBox = new QGroupBox(0, Qt::Vertical, tr("Options"), this, "dev box");
vb->addWidget(devBox);
QGridLayout *devBoxLayout = new QGridLayout( devBox->layout() );
- noProtectConfig = new QCheckBox( tr("Don't protect this config screen"), devBox, "don't protect config");
- explanScreens = new QCheckBox( tr("Show explanatory screens"), devBox, "Show explan. screens");
- allowBypass = new QCheckBox( tr("Allow to bypass authentication"), devBox, "AllowBypass");
- QLabel *logicNote = new QLabel( "<p>" + tr("Note: the third option implies the second one") + "</p>", devBox );
- devBoxLayout->addWidget(noProtectConfig, 0, 0);
- devBoxLayout->addWidget(explanScreens, 1, 0);
- devBoxLayout->addWidget(allowBypass, 2, 0);
- devBoxLayout->addMultiCellWidget(logicNote, 3, 3, 0, 1);
-
- connect( explanScreens, SIGNAL(toggled(bool)), this, SLOT(checkBypass()) );
- connect( allowBypass, SIGNAL(toggled(bool)), this, SLOT(checkScreens()) );
+ m_noProtectConfig = new QCheckBox( tr("Don't protect this config screen"), devBox, "don't protect config");
+ m_explanScreens = new QCheckBox( tr("Show explanatory screens"), devBox, "Show explan. screens");
+ devBoxLayout->addWidget(m_noProtectConfig, 0, 0);
+ devBoxLayout->addWidget(m_explanScreens, 1, 0);
+
+ QVGroupBox *tryBox = new QVGroupBox(tr("Testing"), this, "try box");
+ vb->addWidget(tryBox);
+ m_tryButton = new QPushButton( tr("Test the authentication now"), tryBox, "try button");
+ connect( m_tryButton, SIGNAL(clicked()), this, SLOT(tryAuth()) );
+
}
@@ -103,24 +105,38 @@ MultiauthGeneralConfig::~MultiauthGeneralConfig()
-/// Be sure that explanScreens is checked if allowBypass is
-void MultiauthGeneralConfig::checkScreens()
+/// launches the authentication process, as configured, with the option to bypass it
+void MultiauthGeneralConfig::tryAuth()
{
- if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) )
- explanScreens->setChecked(true);
-}
-
-/// Be sure that allowBypass is not checked if explanScreens is not
-void MultiauthGeneralConfig::checkBypass()
-{
- if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) )
- allowBypass->setChecked(false);
-}
-
-
+ QMessageBox confirmSave(
+ tr("Attention"),
+ "<p>" + tr("You must save your current settings before trying to authenticate. Press OK to accept and launch a simulated authentication process.") + "</p><p><em>" +
+ tr("If you don't like the result of this test, don't forget to change your settings before you exit the configuration application!") + "</em></p>",
+ QMessageBox::Warning,
+ QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton,
+ 0, QString::null, TRUE, WStyle_StaysOnTop);
+ confirmSave.setButtonText(QMessageBox::Cancel, tr("Cancel"));
+ confirmSave.setButtonText(QMessageBox::Yes, tr("OK"));
+ if ( confirmSave.exec() == QMessageBox::Yes)
+ {
+ owarn << "writing config as user accepted" << oendl;
+ m_parentConfig->writeConfigs();
+ owarn << "testing authentication" << oendl;
+ /* launch the authentication in debug, aka "allowBypass == true", mode
+ */
+ Opie::Security::MultiauthMainWindow win(true);
+ // resize the QDialog object so it fills all the screen
+ QRect desk = qApp->desktop()->geometry();
+ win.setGeometry( 0, 0, desk.width(), desk.height() );
+ // the authentication has already succeeded (without win interactions)
+ if ( win.isAlreadyDone() )
+ return;
+ win.exec();
+ }
+}
@@ -141,3 +157,3 @@ static void test_and_start() {
- MultiauthConfig::MultiauthConfig(QWidget* par, const char* w, WFlags f)
+ MultiauthConfig::MultiauthConfig(QWidget* par, const char* w = "MultiauthConfig dialog", WFlags f = 0)
: QDialog(par, w, TRUE, f),
@@ -164,3 +180,3 @@ static void test_and_start() {
QVBoxLayout *layout = new QVBoxLayout( this );
- m_mainTW = new Opie::Ui::OTabWidget( this );
+ m_mainTW = new Opie::Ui::OTabWidget( this, "main tab widget" );
layout->addWidget(m_mainTW);
@@ -192,3 +208,3 @@ static void test_and_start() {
// general Opie multi-authentication configuration tab
- m_generalConfig = new MultiauthGeneralConfig(m_mainTW);
+ m_generalConfig = new MultiauthGeneralConfig(this, m_mainTW);
m_mainTW->addTab(m_generalConfig, "SettingsIcon", tr( "Authentication") );
@@ -243,3 +259,3 @@ static void test_and_start() {
// put the number of plugins as the max number of req. auth.
- m_generalConfig->nbSuccessMin->setMaxValue( pluginList.count() );
+ m_generalConfig->m_nbSuccessMin->setMaxValue( pluginList.count() );
}
@@ -273,3 +289,4 @@ MultiauthConfig::~MultiauthConfig()
-void MultiauthConfig::accept() {
+/// saves the general and plugin(s) configurations
+void MultiauthConfig::writeConfigs() {
writeConfig();
@@ -280,3 +297,7 @@ void MultiauthConfig::accept() {
confWidget->writeConfig();
+}
+/// on QDialog::accept, we save all the configurations and exit the QDialog normally
+void MultiauthConfig::accept() {
+ writeConfigs();
QDialog::accept();
@@ -316,8 +337,7 @@ void MultiauthConfig::readConfig()
pcfg->setGroup( "Misc" );
- m_generalConfig->onStart->setChecked( pcfg->readBoolEntry( "onStart", false ) );
- m_generalConfig->onResume->setChecked( pcfg->readBoolEntry( "onResume", false ) );
- m_generalConfig->nbSuccessMin->setValue( pcfg->readNumEntry( "nbSuccessMin", 1 ) );
- m_generalConfig->noProtectConfig->setChecked( pcfg->readBoolEntry( "noProtectConfig", true) );
- m_generalConfig->explanScreens->setChecked( pcfg->readBoolEntry( "explanScreens", true ) );
- m_generalConfig->allowBypass->setChecked( pcfg->readBoolEntry( "allowBypass", false ) );
+ m_generalConfig->m_onStart->setChecked( pcfg->readBoolEntry( "onStart", false ) );
+ m_generalConfig->m_onResume->setChecked( pcfg->readBoolEntry( "onResume", false ) );
+ m_generalConfig->m_nbSuccessMin->setValue( pcfg->readNumEntry( "nbSuccessMin", 1 ) );
+ m_generalConfig->m_noProtectConfig->setChecked( pcfg->readBoolEntry( "noProtectConfig", true) );
+ m_generalConfig->m_explanScreens->setChecked( pcfg->readBoolEntry( "explanScreens", true ) );
@@ -425,8 +445,7 @@ void MultiauthConfig::writeConfig()
pcfg->setGroup( "Misc" );
- pcfg->writeEntry( "onStart", m_generalConfig->onStart->isChecked() );
- pcfg->writeEntry( "onResume", m_generalConfig->onResume->isChecked() );
- pcfg->writeEntry( "nbSuccessMin", m_generalConfig->nbSuccessMin->text() );
- pcfg->writeEntry( "noProtectConfig", m_generalConfig->noProtectConfig->isChecked() );
- pcfg->writeEntry( "explanScreens", m_generalConfig->explanScreens->isChecked() );
- pcfg->writeEntry( "allowBypass", m_generalConfig->allowBypass->isChecked() );
+ pcfg->writeEntry( "onStart", m_generalConfig->m_onStart->isChecked() );
+ pcfg->writeEntry( "onResume", m_generalConfig->m_onResume->isChecked() );
+ pcfg->writeEntry( "nbSuccessMin", m_generalConfig->m_nbSuccessMin->text() );
+ pcfg->writeEntry( "noProtectConfig", m_generalConfig->m_noProtectConfig->isChecked() );
+ pcfg->writeEntry( "explanScreens", m_generalConfig->m_explanScreens->isChecked() );
}
@@ -581,3 +600,3 @@ void MultiauthConfig::restoreDefaults()
unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel"));
- unrecbox.setButtonText(QMessageBox::Yes, tr("Ok"));
+ unrecbox.setButtonText(QMessageBox::Yes, tr("OK"));
diff --git a/core/settings/security/multiauthconfig.h b/core/settings/security/multiauthconfig.h
index 5287083..e64795c 100644
--- a/core/settings/security/multiauthconfig.h
+++ b/core/settings/security/multiauthconfig.h
@@ -59,2 +59,4 @@
+class MultiauthConfig;
+class MultiauthGeneralConfig;
@@ -65,12 +67,14 @@ class MultiauthGeneralConfig : public QWidget
public:
- MultiauthGeneralConfig(QWidget * parent, const char * name);
+ MultiauthGeneralConfig(MultiauthConfig * parentConfig, QWidget * parent, const char * name);
~MultiauthGeneralConfig();
protected:
- QCheckBox *onStart, *onResume, *noProtectConfig, *explanScreens, *allowBypass;
- QSpinBox *nbSuccessMin;
+ QCheckBox *m_onStart, *m_onResume, *m_noProtectConfig, *m_explanScreens;
+ QSpinBox *m_nbSuccessMin;
private:
friend class MultiauthConfig;
+ /// pointer to the MultiauthConfig that called us
+ MultiauthConfig *m_parentConfig;
+ QPushButton *m_tryButton;
private slots:
- void checkBypass();
- void checkScreens();
+ void tryAuth();
};
@@ -86,3 +90,2 @@ public:
virtual ~MultiauthConfig();
- void writeConfig();
QList<Opie::Security::MultiauthConfigWidget> configWidgetList;
@@ -95,2 +98,3 @@ protected slots:
void moveSelectedDown();
+ void writeConfigs();
@@ -106,2 +110,3 @@ private slots:
private:
+ friend class MultiauthGeneralConfig;
/// the widget holding all the tabs (or pages)
@@ -126,2 +131,3 @@ private:
void readConfig();
+ void writeConfig();
void loadPlugins();
diff --git a/libopie2/opiesecurity/multiauthmainwindow.cpp b/libopie2/opiesecurity/multiauthmainwindow.cpp
index fa247ab..fb720bb 100644
--- a/libopie2/opiesecurity/multiauthmainwindow.cpp
+++ b/libopie2/opiesecurity/multiauthmainwindow.cpp
@@ -8,4 +8,7 @@ namespace Security {
-/// Initializes widgets according to allowBypass and explanScreens config
-MultiauthMainWindow::MultiauthMainWindow()
+/// Initializes widgets according to allowBypass argument (false by default) and explanScreens config
+/**
+ * \note if allowBypass is true, we will show explanatory screens anyway
+ */
+MultiauthMainWindow::MultiauthMainWindow(bool allowBypass = false)
: QDialog(0, "main Opie multiauth modal dialog", TRUE,
@@ -19,7 +22,11 @@ MultiauthMainWindow::MultiauthMainWindow()
- Config *pcfg = new Config("Security");
- pcfg->setGroup("Misc");
- explanScreens = pcfg->readBoolEntry("explanScreens", true);
- allowBypass = pcfg->readBoolEntry("allowBypass", false);
- delete pcfg;
+ if (allowBypass == true)
+ explanScreens = true;
+ else
+ {
+ Config *pcfg = new Config("Security");
+ pcfg->setGroup("Misc");
+ explanScreens = pcfg->readBoolEntry("explanScreens", true);
+ delete pcfg;
+ }
@@ -55,3 +62,3 @@ MultiauthMainWindow::MultiauthMainWindow()
// very important: we can close the widget through the quit button, and bypass authentication, only if allowBypass is set!
- message2 = new QLabel("<center><i>" + tr("Note: the 'exit' button should be removed for real protection, through Security config dialog") + ".</i></center>", this);
+ message2 = new QLabel("<center><i>" + tr("Note: this 'exit' button only appears during <b>simulations</b>, like the one we are in.") + "</i></center>", this);
layout->addWidget(message2);
@@ -116,6 +123,8 @@ void MultiauthMainWindow::proceed() {
// authentication has failed, explain that according to allowBypass
- message->setText( "<center><h3>" + tr("You have not succeeded enough authentication steps!") + "</h3></center>" );
+ message->setText( "<center><h3>" + tr("You have <b>not</b> succeeded enough authentication steps!") + "</h3></center>" );
proceedButton->show();
if ( allowBypass == true )
- message2->setText( "<center><p>" + tr("Note: if 'allow to bypass' was uncheck in Security config, you would have to go back through all the steps now.") + "</p></center>" );
+ {
+ message2->setText( "<center><p>" + tr("Be careful: if this was not a <b>simulation</b>, you would have to go back through all the steps now.") + "</p></center>" );
+ message2->show();
}
diff --git a/libopie2/opiesecurity/multiauthmainwindow.h b/libopie2/opiesecurity/multiauthmainwindow.h
index 626b8b3..9d2376b 100644
--- a/libopie2/opiesecurity/multiauthmainwindow.h
+++ b/libopie2/opiesecurity/multiauthmainwindow.h
@@ -57,3 +57,3 @@ class MultiauthMainWindow : public QDialog {
public:
- MultiauthMainWindow();
+ MultiauthMainWindow(bool allowBypass = false);
~MultiauthMainWindow();