summaryrefslogtreecommitdiff
authorclem <clem>2004-10-05 23:38:06 (UTC)
committer clem <clem>2004-10-05 23:38:06 (UTC)
commitc09e45b02053c61b4e195c9d79a573ebfed2c521 (patch) (unidiff)
tree504a1a7d6b29e9dc186b2a7a7431ea41482041e3
parent2d05ffb4bad93532e17b9350ff2d66fe3419cbe3 (diff)
downloadopie-c09e45b02053c61b4e195c9d79a573ebfed2c521.zip
opie-c09e45b02053c61b4e195c9d79a573ebfed2c521.tar.gz
opie-c09e45b02053c61b4e195c9d79a573ebfed2c521.tar.bz2
Changed the way to test authentication: instead of having a hardcoded config
option, allowByPass, we now have a "Test now" button in the configuration interface. We add to change both the config app and the libopie2security files for that, since the MultiauthMainWindow constructor has to know whether to implement a debug mode (with an new argument, false by default). We also had to give MultiauthGeneralConfig a link to MultiauthConfig, since the test button triggers the writing of the whole configuration. Some cleaning too (m_ on *all* member attributes, removal of obsolete allowByPass / explanScreens checking code.
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/settings/security/multiauthconfig.cpp125
-rw-r--r--core/settings/security/multiauthconfig.h18
-rw-r--r--libopie2/opiesecurity/multiauthmainwindow.cpp21
-rw-r--r--libopie2/opiesecurity/multiauthmainwindow.h2
4 files changed, 100 insertions, 66 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,217 +1,233 @@
1#include "multiauthconfig.h"
2
3#include <opie2/odebug.h> 1#include <opie2/odebug.h>
2#include <opie2/multiauthmainwindow.h>
4 3
5#include <qgroupbox.h> 4#include <qgroupbox.h>
6#include <qvgroupbox.h> 5#include <qvgroupbox.h>
7#include <qpe/resource.h> 6#include <qpe/resource.h>
8#include <qlayout.h> 7#include <qlayout.h>
9#include <qlabel.h> 8#include <qlabel.h>
10#include <qhbox.h> 9#include <qhbox.h>
11#include <qheader.h> 10#include <qheader.h>
12#include <qvbox.h> 11#include <qvbox.h>
13#include <qwhatsthis.h> 12#include <qwhatsthis.h>
14#include <qtoolbutton.h> 13#include <qtoolbutton.h>
15#include <qstringlist.h> 14#include <qstringlist.h>
16#include <qdir.h> 15#include <qdir.h>
17#include <qpe/qlibrary.h> 16#include <qpe/qlibrary.h>
18#include <qpe/qpeapplication.h> 17#include <qpe/qpeapplication.h>
19 18
19#include "multiauthconfig.h"
20
20 21
21using Opie::Security::MultiauthPluginInterface; 22using Opie::Security::MultiauthPluginInterface;
22using Opie::Security::MultiauthPluginObject; 23using Opie::Security::MultiauthPluginObject;
23using Opie::Security::MultiauthConfigWidget; 24using Opie::Security::MultiauthConfigWidget;
24/// keeps information about MultiauthPluginObject plugins 25/// keeps information about MultiauthPluginObject plugins
25struct MultiauthPlugin { 26struct MultiauthPlugin {
26 MultiauthPlugin() : library( 0 ), iface( 0 ), pluginObject( 0 ) {} 27 MultiauthPlugin() : library( 0 ), iface( 0 ), pluginObject( 0 ) {}
27 /// plugin file 28 /// plugin file
28 QLibrary *library; 29 QLibrary *library;
29 /// the plugin object interface 30 /// the plugin object interface
30 QInterfacePtr<MultiauthPluginInterface> iface; 31 QInterfacePtr<MultiauthPluginInterface> iface;
31 /// the plugin object itself 32 /// the plugin object itself
32 MultiauthPluginObject *pluginObject; 33 MultiauthPluginObject *pluginObject;
33 /// name of the plugin file 34 /// name of the plugin file
34 QString name; 35 QString name;
35 /// should the plugin be launched during authentication or not 36 /// should the plugin be launched during authentication or not
36 bool active; 37 bool active;
37 /// order of the plugin, in the pluginListWidget and during authentication 38 /// order of the plugin, in the pluginListWidget and during authentication
38 int pos; 39 int pos;
39}; 40};
40 41
41/// list of available MultiauthPlugin objects 42/// list of available MultiauthPlugin objects
42static QValueList<MultiauthPlugin> pluginList; 43static QValueList<MultiauthPlugin> pluginList;
43 44
44 45
45/// extension of QToolButton that adds signals, icons and stuff (taken from todayconfig.cpp) 46/// extension of QToolButton that adds signals, icons and stuff (taken from todayconfig.cpp)
46class ToolButton : public QToolButton { 47class ToolButton : public QToolButton {
47 48
48 public: 49 public:
49 ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE ) 50 ToolButton( QWidget *parent, const char *name, const QString& icon, QObject *handler, const QString& slot, bool t = FALSE )
50 : QToolButton( parent, name ) { 51 : QToolButton( parent, name ) {
51 setPixmap( Resource::loadPixmap( icon ) ); 52 setPixmap( Resource::loadPixmap( icon ) );
52 setAutoRaise( TRUE ); 53 setAutoRaise( TRUE );
53 setFocusPolicy( QWidget::NoFocus ); 54 setFocusPolicy( QWidget::NoFocus );
54 setToggleButton( t ); 55 setToggleButton( t );
55 connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot ); 56 connect( this, t ? SIGNAL( toggled(bool) ) : SIGNAL( clicked() ), handler, slot );
56 } 57 }
57}; 58};
58 59
59 MultiauthGeneralConfig::MultiauthGeneralConfig(QWidget * parent, const char * name = "general Opie-multiauthentication config widget") 60 MultiauthGeneralConfig::MultiauthGeneralConfig(MultiauthConfig * parentConfig, QWidget * parent, const char * name = "general Opie-multiauthentication config widget")
60: QWidget(parent, name), onStart(0), onResume(0), nbSuccessMin(0) 61: QWidget(parent, name), m_onStart(0), m_onResume(0), m_noProtectConfig(0), m_explanScreens(0), m_nbSuccessMin(0), m_tryButton(0)
61{ 62{
63 // keep track of the MultiauthConfig parent in one of our attributes
64 m_parentConfig = parentConfig;
62 QVBoxLayout *vb = new QVBoxLayout(this); 65 QVBoxLayout *vb = new QVBoxLayout(this);
63 vb->setSpacing(11); 66 vb->setSpacing(11);
64 vb->setMargin(11); 67 vb->setMargin(11);
65 vb->setAlignment( Qt::AlignTop ); 68 vb->setAlignment( Qt::AlignTop );
66 69
67 QGroupBox *lockBox = new QGroupBox(0, Qt::Vertical, tr("When to lock Opie"), this, "lock box"); 70 QGroupBox *lockBox = new QGroupBox(0, Qt::Vertical, tr("When to lock Opie"), this, "lock box");
68 vb->addWidget(lockBox); 71 vb->addWidget(lockBox);
69 QGridLayout *boxLayout = new QGridLayout( lockBox->layout() ); 72 QGridLayout *boxLayout = new QGridLayout( lockBox->layout() );
70 onStart = new QCheckBox( tr( "on Opie start" ), lockBox, "lock on opie start"); 73 m_onStart = new QCheckBox( tr( "on Opie start" ), lockBox, "lock on opie start");
71 onResume = new QCheckBox( tr( "on Opie resume" ), lockBox, "lock on opie resume"); 74 m_onResume = new QCheckBox( tr( "on Opie resume" ), lockBox, "lock on opie resume");
72 boxLayout->addWidget(onStart, 0, 0); 75 boxLayout->addWidget(m_onStart, 0, 0);
73 boxLayout->addWidget(onResume, 0, 1); 76 boxLayout->addWidget(m_onResume, 0, 1);
74 77
75 QGroupBox *nbBox = new QGroupBox(0, Qt::Vertical, tr("Multiple plugins authentication"), this, "nb box"); 78 QGroupBox *nbBox = new QGroupBox(0, Qt::Vertical, tr("Multiple plugins authentication"), this, "nb box");
76 vb->addWidget(nbBox); 79 vb->addWidget(nbBox);
77 QGridLayout *nbBoxLayout = new QGridLayout( nbBox->layout() ); 80 QGridLayout *nbBoxLayout = new QGridLayout( nbBox->layout() );
78 nbSuccessMin = new QSpinBox(nbBox); 81 m_nbSuccessMin = new QSpinBox(nbBox);
79 QLabel *lNbSuccessMin = new QLabel( tr( "Required successes" ), nbBox); 82 QLabel *lNbSuccessMin = new QLabel( tr( "Required successes" ), nbBox);
80 nbBoxLayout->addWidget(nbSuccessMin, 0, 0); 83 nbBoxLayout->addWidget(m_nbSuccessMin, 0, 0);
81 nbBoxLayout->addWidget(lNbSuccessMin, 0, 1); 84 nbBoxLayout->addWidget(lNbSuccessMin, 0, 1);
82 nbSuccessMin->setMinValue(1); // the max value is defined in MultiauthConfig constructor 85 m_nbSuccessMin->setMinValue(1); // the max value is defined in MultiauthConfig constructor
83 86
84 QGroupBox *devBox = new QGroupBox(0, Qt::Vertical, tr("Debug options"), this, "dev box"); 87 QGroupBox *devBox = new QGroupBox(0, Qt::Vertical, tr("Options"), this, "dev box");
85 vb->addWidget(devBox); 88 vb->addWidget(devBox);
86 QGridLayout *devBoxLayout = new QGridLayout( devBox->layout() ); 89 QGridLayout *devBoxLayout = new QGridLayout( devBox->layout() );
87 noProtectConfig = new QCheckBox( tr("Don't protect this config screen"), devBox, "don't protect config"); 90 m_noProtectConfig = new QCheckBox( tr("Don't protect this config screen"), devBox, "don't protect config");
88 explanScreens = new QCheckBox( tr("Show explanatory screens"), devBox, "Show explan. screens"); 91 m_explanScreens = new QCheckBox( tr("Show explanatory screens"), devBox, "Show explan. screens");
89 allowBypass = new QCheckBox( tr("Allow to bypass authentication"), devBox, "AllowBypass"); 92 devBoxLayout->addWidget(m_noProtectConfig, 0, 0);
90 QLabel *logicNote = new QLabel( "<p>" + tr("Note: the third option implies the second one") + "</p>", devBox ); 93 devBoxLayout->addWidget(m_explanScreens, 1, 0);
91 devBoxLayout->addWidget(noProtectConfig, 0, 0); 94
92 devBoxLayout->addWidget(explanScreens, 1, 0); 95 QVGroupBox *tryBox = new QVGroupBox(tr("Testing"), this, "try box");
93 devBoxLayout->addWidget(allowBypass, 2, 0); 96 vb->addWidget(tryBox);
94 devBoxLayout->addMultiCellWidget(logicNote, 3, 3, 0, 1); 97 m_tryButton = new QPushButton( tr("Test the authentication now"), tryBox, "try button");
98 connect( m_tryButton, SIGNAL(clicked()), this, SLOT(tryAuth()) );
95 99
96 connect( explanScreens, SIGNAL(toggled(bool)), this, SLOT(checkBypass()) );
97 connect( allowBypass, SIGNAL(toggled(bool)), this, SLOT(checkScreens()) );
98} 100}
99 101
100/// nothing to do 102/// nothing to do
101MultiauthGeneralConfig::~MultiauthGeneralConfig() 103MultiauthGeneralConfig::~MultiauthGeneralConfig()
102{} 104{}
103 105
104/// Be sure that explanScreens is checked if allowBypass is 106/// launches the authentication process, as configured, with the option to bypass it
105void MultiauthGeneralConfig::checkScreens() 107void MultiauthGeneralConfig::tryAuth()
106{ 108{
107 if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) ) 109 QMessageBox confirmSave(
108 explanScreens->setChecked(true); 110 tr("Attention"),
109} 111 "<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>" +
112 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>",
113 QMessageBox::Warning,
114 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton,
115 0, QString::null, TRUE, WStyle_StaysOnTop);
116 confirmSave.setButtonText(QMessageBox::Cancel, tr("Cancel"));
117 confirmSave.setButtonText(QMessageBox::Yes, tr("OK"));
110 118
111/// Be sure that allowBypass is not checked if explanScreens is not 119 if ( confirmSave.exec() == QMessageBox::Yes)
112void MultiauthGeneralConfig::checkBypass()
113{ 120{
114 if ( (allowBypass->isChecked() == true) && (explanScreens->isChecked() == false) ) 121 owarn << "writing config as user accepted" << oendl;
115 allowBypass->setChecked(false); 122 m_parentConfig->writeConfigs();
116} 123 owarn << "testing authentication" << oendl;
117
118
119
120 124
125 /* launch the authentication in debug, aka "allowBypass == true", mode
126 */
121 127
128 Opie::Security::MultiauthMainWindow win(true);
129 // resize the QDialog object so it fills all the screen
130 QRect desk = qApp->desktop()->geometry();
131 win.setGeometry( 0, 0, desk.width(), desk.height() );
122 132
133 // the authentication has already succeeded (without win interactions)
134 if ( win.isAlreadyDone() )
135 return;
123 136
137 win.exec();
124 138
139 }
125 140
141}
126 142
127 143
128/// Builds and displays the Opie multi-authentication configuration dialog 144/// Builds and displays the Opie multi-authentication configuration dialog
129static void test_and_start() { 145static void test_and_start() {
130 Config pcfg("Security"); 146 Config pcfg("Security");
131 pcfg.setGroup( "Misc" ); 147 pcfg.setGroup( "Misc" );
132 bool protectConfigDialog = ! pcfg.readBoolEntry("noProtectConfig", true); 148 bool protectConfigDialog = ! pcfg.readBoolEntry("noProtectConfig", true);
133 149
134 if (protectConfigDialog && Opie::Security::Internal::runPlugins() != 0) { 150 if (protectConfigDialog && Opie::Security::Internal::runPlugins() != 0) {
135 owarn << "authentication failed, not showing opie-security" << oendl; 151 owarn << "authentication failed, not showing opie-security" << oendl;
136 exit( -1 ); 152 exit( -1 );
137 } 153 }
138} 154}
139 155
140 156
141 157
142 MultiauthConfig::MultiauthConfig(QWidget* par, const char* w, WFlags f) 158 MultiauthConfig::MultiauthConfig(QWidget* par, const char* w = "MultiauthConfig dialog", WFlags f = 0)
143: QDialog(par, w, TRUE, f), 159: QDialog(par, w, TRUE, f),
144 m_mainTW(0), m_pluginListView(0), m_pluginListWidget(0), 160 m_mainTW(0), m_pluginListView(0), m_pluginListWidget(0),
145 m_generalConfig(0), m_loginWidget(0), m_syncWidget(0), 161 m_generalConfig(0), m_loginWidget(0), m_syncWidget(0),
146 m_nbSuccessReq(0), m_plugins_changed(false) 162 m_nbSuccessReq(0), m_plugins_changed(false)
147{ 163{
148 /* Initializes the global configuration window 164 /* Initializes the global configuration window
149 */ 165 */
150 test_and_start(); 166 test_and_start();
151 167
152 /* Checks (and memorizes) if any authentication plugins are 168 /* Checks (and memorizes) if any authentication plugins are
153 * installed on the system 169 * installed on the system
154 */ 170 */
155 QString path = QPEApplication::qpeDir() + "/plugins/security"; 171 QString path = QPEApplication::qpeDir() + "/plugins/security";
156 QDir dir( path, "lib*.so" ); 172 QDir dir( path, "lib*.so" );
157 QStringList list = dir.entryList(); 173 QStringList list = dir.entryList();
158 174
159 m_pluginsInstalled = ! list.isEmpty(); 175 m_pluginsInstalled = ! list.isEmpty();
160 if (m_pluginsInstalled == false) 176 if (m_pluginsInstalled == false)
161 owarn << "no authentication plugins installed! Talking about it in the last tab..." << oendl; 177 owarn << "no authentication plugins installed! Talking about it in the last tab..." << oendl;
162 178
163 setCaption( tr( "Security configuration" ) ); 179 setCaption( tr( "Security configuration" ) );
164 QVBoxLayout *layout = new QVBoxLayout( this ); 180 QVBoxLayout *layout = new QVBoxLayout( this );
165 m_mainTW = new Opie::Ui::OTabWidget( this ); 181 m_mainTW = new Opie::Ui::OTabWidget( this, "main tab widget" );
166 layout->addWidget(m_mainTW); 182 layout->addWidget(m_mainTW);
167 183
168 if (m_pluginsInstalled) 184 if (m_pluginsInstalled)
169 { 185 {
170 m_pluginListWidget = new QWidget(m_mainTW, "plugin list widget"); 186 m_pluginListWidget = new QWidget(m_mainTW, "plugin list widget");
171 QVBoxLayout * pluginListLayout = new QVBoxLayout(m_pluginListWidget); 187 QVBoxLayout * pluginListLayout = new QVBoxLayout(m_pluginListWidget);
172 pluginListLayout->setSpacing(6); 188 pluginListLayout->setSpacing(6);
173 pluginListLayout->setMargin(11); 189 pluginListLayout->setMargin(11);
174 QLabel * pluginListTitle = new QLabel( tr( "Load which plugins in what order:" ), m_pluginListWidget ); 190 QLabel * pluginListTitle = new QLabel( tr( "Load which plugins in what order:" ), m_pluginListWidget );
175 pluginListLayout->addWidget(pluginListTitle); 191 pluginListLayout->addWidget(pluginListTitle);
176 QHBox * pluginListHB = new QHBox(m_pluginListWidget); 192 QHBox * pluginListHB = new QHBox(m_pluginListWidget);
177 pluginListLayout->addWidget(pluginListHB); 193 pluginListLayout->addWidget(pluginListHB);
178 194
179 m_pluginListView = new QListView(pluginListHB); 195 m_pluginListView = new QListView(pluginListHB);
180 m_pluginListView->addColumn("PluginList"); 196 m_pluginListView->addColumn("PluginList");
181 m_pluginListView->header()->hide(); 197 m_pluginListView->header()->hide();
182 m_pluginListView->setSorting(-1); 198 m_pluginListView->setSorting(-1);
183 QWhatsThis::add(m_pluginListView, tr( "Check a checkbox to activate/deactivate a plugin or use the arrow buttons on the right to change the order they will appear in" )); 199 QWhatsThis::add(m_pluginListView, tr( "Check a checkbox to activate/deactivate a plugin or use the arrow buttons on the right to change the order they will appear in" ));
184 200
185 QVBox * pluginListVB = new QVBox(pluginListHB); 201 QVBox * pluginListVB = new QVBox(pluginListHB);
186 new ToolButton( pluginListVB, tr( "Move Up" ), "up", this , SLOT( moveSelectedUp() ) ); 202 new ToolButton( pluginListVB, tr( "Move Up" ), "up", this , SLOT( moveSelectedUp() ) );
187 new ToolButton( pluginListVB, tr( "Move Down" ), "down", this , SLOT( moveSelectedDown() ) ); 203 new ToolButton( pluginListVB, tr( "Move Down" ), "down", this , SLOT( moveSelectedDown() ) );
188 m_mainTW->addTab( m_pluginListWidget, "pass", tr( "plugins" ) ); 204 m_mainTW->addTab( m_pluginListWidget, "pass", tr( "plugins" ) );
189 205
190 connect ( m_pluginListView , SIGNAL( clicked ( QListViewItem * ) ), this, SLOT( pluginsChanged ( ) ) ); 206 connect ( m_pluginListView , SIGNAL( clicked ( QListViewItem * ) ), this, SLOT( pluginsChanged ( ) ) );
191 207
192 // general Opie multi-authentication configuration tab 208 // general Opie multi-authentication configuration tab
193 m_generalConfig = new MultiauthGeneralConfig(m_mainTW); 209 m_generalConfig = new MultiauthGeneralConfig(this, m_mainTW);
194 m_mainTW->addTab(m_generalConfig, "SettingsIcon", tr( "Authentication") ); 210 m_mainTW->addTab(m_generalConfig, "SettingsIcon", tr( "Authentication") );
195 211
196 } 212 }
197 // login settings page 213 // login settings page
198 m_loginWidget = new LoginBase(m_mainTW, "login config widget"); 214 m_loginWidget = new LoginBase(m_mainTW, "login config widget");
199 m_mainTW->addTab(m_loginWidget, "security/users", tr( "Login") ); 215 m_mainTW->addTab(m_loginWidget, "security/users", tr( "Login") );
200 216
201 // sync settings page 217 // sync settings page
202 m_syncWidget = new SyncBase( m_mainTW, "sync config widget" ); 218 m_syncWidget = new SyncBase( m_mainTW, "sync config widget" );
203 m_mainTW->addTab(m_syncWidget, "security/sync", tr( "Sync") ); 219 m_mainTW->addTab(m_syncWidget, "security/sync", tr( "Sync") );
204 220
205 // read the "Security" Config file and update our UI 221 // read the "Security" Config file and update our UI
206 readConfig(); 222 readConfig();
207 223
208 224
209 if (m_pluginsInstalled) 225 if (m_pluginsInstalled)
210 { 226 {
211 /* loads plugins configuration widgets in mainTW tabs and in pluginListView 227 /* loads plugins configuration widgets in mainTW tabs and in pluginListView
212 */ 228 */
213 229
214 loadPlugins(); 230 loadPlugins();
215 231
216 for ( int i = pluginList.count() - 1; i >= 0; i-- ) { 232 for ( int i = pluginList.count() - 1; i >= 0; i-- ) {
217 MultiauthPlugin plugin = pluginList[i]; 233 MultiauthPlugin plugin = pluginList[i];
@@ -220,127 +236,131 @@ static void test_and_start() {
220 // (configWidget will return 0l if there is no configuration GUI) 236 // (configWidget will return 0l if there is no configuration GUI)
221 MultiauthConfigWidget* widget = plugin.pluginObject->configWidget(m_mainTW); 237 MultiauthConfigWidget* widget = plugin.pluginObject->configWidget(m_mainTW);
222 if ( widget != 0l ) { 238 if ( widget != 0l ) {
223 odebug << "plugin " << plugin.name << " has a configuration widget" << oendl; 239 odebug << "plugin " << plugin.name << " has a configuration widget" << oendl;
224 configWidgetList.append(widget); 240 configWidgetList.append(widget);
225 m_mainTW->addTab( widget, plugin.pluginObject->pixmapNameConfig(), 241 m_mainTW->addTab( widget, plugin.pluginObject->pixmapNameConfig(),
226 plugin.pluginObject->pluginName() ); 242 plugin.pluginObject->pluginName() );
227 } 243 }
228 // set the order/activate tab 244 // set the order/activate tab
229 QPixmap icon = Resource::loadPixmap( plugin.pluginObject->pixmapNameWidget() ); 245 QPixmap icon = Resource::loadPixmap( plugin.pluginObject->pixmapNameWidget() );
230 QCheckListItem * item = new QCheckListItem(m_pluginListView, plugin.pluginObject->pluginName(), QCheckListItem::CheckBox ); 246 QCheckListItem * item = new QCheckListItem(m_pluginListView, plugin.pluginObject->pluginName(), QCheckListItem::CheckBox );
231 if ( !icon.isNull() ) { 247 if ( !icon.isNull() ) {
232 item->setPixmap( 0, icon ); 248 item->setPixmap( 0, icon );
233 } 249 }
234 if ( m_excludePlugins.find( plugin.name ) == m_excludePlugins.end() ) { 250 if ( m_excludePlugins.find( plugin.name ) == m_excludePlugins.end() ) {
235 item->setOn( TRUE ); 251 item->setOn( TRUE );
236 } 252 }
237 m_plugins[plugin.name] = item; 253 m_plugins[plugin.name] = item;
238 } 254 }
239 255
240 // set the first tab as default. 256 // set the first tab as default.
241 m_mainTW->setCurrentTab(m_pluginListWidget); 257 m_mainTW->setCurrentTab(m_pluginListWidget);
242 258
243 // put the number of plugins as the max number of req. auth. 259 // put the number of plugins as the max number of req. auth.
244 m_generalConfig->nbSuccessMin->setMaxValue( pluginList.count() ); 260 m_generalConfig->m_nbSuccessMin->setMaxValue( pluginList.count() );
245 } 261 }
246 else 262 else
247 { 263 {
248 /* we don't have any installed plugin there. Let's tell 264 /* we don't have any installed plugin there. Let's tell
249 * that to the user in a third tab, using the m_pluginListWidget widget 265 * that to the user in a third tab, using the m_pluginListWidget widget
250 */ 266 */
251 m_pluginListWidget = new QWidget(m_mainTW, "plugin list widget (no plugins warning)"); 267 m_pluginListWidget = new QWidget(m_mainTW, "plugin list widget (no plugins warning)");
252 QVBoxLayout * pluginListLayout = new QVBoxLayout(m_pluginListWidget); 268 QVBoxLayout * pluginListLayout = new QVBoxLayout(m_pluginListWidget);
253 pluginListLayout->setSpacing(11); 269 pluginListLayout->setSpacing(11);
254 pluginListLayout->setMargin(11); 270 pluginListLayout->setMargin(11);
255 pluginListLayout->setAlignment( Qt::AlignTop ); 271 pluginListLayout->setAlignment( Qt::AlignTop );
256 QVGroupBox *warningBox = new QVGroupBox(tr("Important notice"), m_pluginListWidget, "noPlugins warning box"); 272 QVGroupBox *warningBox = new QVGroupBox(tr("Important notice"), m_pluginListWidget, "noPlugins warning box");
257 pluginListLayout->addWidget(warningBox); 273 pluginListLayout->addWidget(warningBox);
258 QLabel * warningText = new QLabel( "<p>" + tr("To be able to protect your PDA with one or more authentication plugins (for example, a simple PIN authentication), you must install at least one <em>opie-multiauth-*</em> package! Once you have done that, you will be able to configure your PDA protection here.") + "</p>", warningBox ); 274 QLabel * warningText = new QLabel( "<p>" + tr("To be able to protect your PDA with one or more authentication plugins (for example, a simple PIN authentication), you must install at least one <em>opie-multiauth-*</em> package! Once you have done that, you will be able to configure your PDA protection here.") + "</p>", warningBox );
259 275
260 m_mainTW->addTab(m_pluginListWidget, "security/Security", tr( "Locking") ); 276 m_mainTW->addTab(m_pluginListWidget, "security/Security", tr( "Locking") );
261 277
262 // set the first tab as default. 278 // set the first tab as default.
263 m_mainTW->setCurrentTab(m_loginWidget); 279 m_mainTW->setCurrentTab(m_loginWidget);
264 } 280 }
265 281
266 showMaximized(); 282 showMaximized();
267} 283}
268 284
269/// nothing to do 285/// nothing to do
270MultiauthConfig::~MultiauthConfig() 286MultiauthConfig::~MultiauthConfig()
271{ 287{
272} 288}
273 289
274void MultiauthConfig::accept() { 290/// saves the general and plugin(s) configurations
291void MultiauthConfig::writeConfigs() {
275 writeConfig(); 292 writeConfig();
276 293
277 MultiauthConfigWidget* confWidget = 0; 294 MultiauthConfigWidget* confWidget = 0;
278 for ( confWidget = configWidgetList.first(); confWidget != 0; 295 for ( confWidget = configWidgetList.first(); confWidget != 0;
279 confWidget = configWidgetList.next() ) 296 confWidget = configWidgetList.next() )
280 confWidget->writeConfig(); 297 confWidget->writeConfig();
298}
281 299
300/// on QDialog::accept, we save all the configurations and exit the QDialog normally
301void MultiauthConfig::accept() {
302 writeConfigs();
282 QDialog::accept(); 303 QDialog::accept();
283} 304}
284 305
285void MultiauthConfig::done( int r ) { 306void MultiauthConfig::done( int r ) {
286 QDialog::done( r ); 307 QDialog::done( r );
287 close(); 308 close();
288} 309}
289 310
290/// moves up the selected plugin 311/// moves up the selected plugin
291void MultiauthConfig::moveSelectedUp() 312void MultiauthConfig::moveSelectedUp()
292{ 313{
293 QListViewItem *item = m_pluginListView->selectedItem(); 314 QListViewItem *item = m_pluginListView->selectedItem();
294 if ( item && item->itemAbove() ) { 315 if ( item && item->itemAbove() ) {
295 item->itemAbove()->moveItem( item ); 316 item->itemAbove()->moveItem( item );
296 } 317 }
297} 318}
298 319
299/// moves down the selected plugin 320/// moves down the selected plugin
300void MultiauthConfig::moveSelectedDown() 321void MultiauthConfig::moveSelectedDown()
301{ 322{
302 QListViewItem *item = m_pluginListView->selectedItem(); 323 QListViewItem *item = m_pluginListView->selectedItem();
303 if ( item && item->itemBelow() ) { 324 if ( item && item->itemBelow() ) {
304 item->moveItem( item->itemBelow() ); 325 item->moveItem( item->itemBelow() );
305 } 326 }
306} 327}
307 328
308/// reads the <code>Security.conf</code> Config file, and updates parts of the user interface 329/// reads the <code>Security.conf</code> Config file, and updates parts of the user interface
309void MultiauthConfig::readConfig() 330void MultiauthConfig::readConfig()
310{ 331{
311 // pointer, so we release this Config when we want 332 // pointer, so we release this Config when we want
312 Config* pcfg = new Config("Security"); 333 Config* pcfg = new Config("Security");
313 334
314 if (m_pluginsInstalled) 335 if (m_pluginsInstalled)
315 { 336 {
316 pcfg->setGroup( "Misc" ); 337 pcfg->setGroup( "Misc" );
317 m_generalConfig->onStart->setChecked( pcfg->readBoolEntry( "onStart", false ) ); 338 m_generalConfig->m_onStart->setChecked( pcfg->readBoolEntry( "onStart", false ) );
318 m_generalConfig->onResume->setChecked( pcfg->readBoolEntry( "onResume", false ) ); 339 m_generalConfig->m_onResume->setChecked( pcfg->readBoolEntry( "onResume", false ) );
319 m_generalConfig->nbSuccessMin->setValue( pcfg->readNumEntry( "nbSuccessMin", 1 ) ); 340 m_generalConfig->m_nbSuccessMin->setValue( pcfg->readNumEntry( "nbSuccessMin", 1 ) );
320 m_generalConfig->noProtectConfig->setChecked( pcfg->readBoolEntry( "noProtectConfig", true) ); 341 m_generalConfig->m_noProtectConfig->setChecked( pcfg->readBoolEntry( "noProtectConfig", true) );
321 m_generalConfig->explanScreens->setChecked( pcfg->readBoolEntry( "explanScreens", true ) ); 342 m_generalConfig->m_explanScreens->setChecked( pcfg->readBoolEntry( "explanScreens", true ) );
322 m_generalConfig->allowBypass->setChecked( pcfg->readBoolEntry( "allowBypass", false ) );
323 343
324 pcfg->setGroup( "Plugins" ); 344 pcfg->setGroup( "Plugins" );
325 m_excludePlugins = pcfg->readListEntry( "ExcludePlugins", ',' ); 345 m_excludePlugins = pcfg->readListEntry( "ExcludePlugins", ',' );
326 m_allPlugins = pcfg->readListEntry( "AllPlugins", ',' ); 346 m_allPlugins = pcfg->readListEntry( "AllPlugins", ',' );
327 } 347 }
328 348
329 /* Login and Sync stuff */ 349 /* Login and Sync stuff */
330 pcfg->setGroup("Sync"); 350 pcfg->setGroup("Sync");
331 int auth_peer = pcfg->readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24 351 int auth_peer = pcfg->readNumEntry("auth_peer",0xc0a88100);//new default 192.168.129.0/24
332 int auth_peer_bits = pcfg->readNumEntry("auth_peer_bits",24); 352 int auth_peer_bits = pcfg->readNumEntry("auth_peer_bits",24);
333 353
334 pcfg->setGroup("SyncMode"); 354 pcfg->setGroup("SyncMode");
335 int mode = pcfg->readNumEntry("Mode",2); // Default to Sharp 355 int mode = pcfg->readNumEntry("Mode",2); // Default to Sharp
336 switch( mode ) { 356 switch( mode ) {
337 case 0x01: 357 case 0x01:
338 m_syncWidget->syncModeCombo->setCurrentItem( 0 ); 358 m_syncWidget->syncModeCombo->setCurrentItem( 0 );
339 break; 359 break;
340 case 0x02: 360 case 0x02:
341 default: 361 default:
342 m_syncWidget->syncModeCombo->setCurrentItem( 1 ); 362 m_syncWidget->syncModeCombo->setCurrentItem( 1 );
343 break; 363 break;
344 case 0x04: 364 case 0x04:
345 m_syncWidget->syncModeCombo->setCurrentItem( 2 ); 365 m_syncWidget->syncModeCombo->setCurrentItem( 2 );
346 break; 366 break;
@@ -402,54 +422,53 @@ void MultiauthConfig::writeConfig()
402 QStringList include; 422 QStringList include;
403 QStringList allPlugins; 423 QStringList allPlugins;
404 424
405 QListViewItemIterator list_it( m_pluginListView ); 425 QListViewItemIterator list_it( m_pluginListView );
406 426
407 // this makes sure the names get saved in the order selected 427 // this makes sure the names get saved in the order selected
408 for ( ; list_it.current(); ++list_it ) { 428 for ( ; list_it.current(); ++list_it ) {
409 QMap <QString, QCheckListItem *>::Iterator it; 429 QMap <QString, QCheckListItem *>::Iterator it;
410 for ( it = m_plugins.begin(); it != m_plugins. end (); ++it ) { 430 for ( it = m_plugins.begin(); it != m_plugins. end (); ++it ) {
411 if ( list_it.current() == (*it) && !(*it)-> isOn () ) { 431 if ( list_it.current() == (*it) && !(*it)-> isOn () ) {
412 exclude << it.key(); 432 exclude << it.key();
413 } else if ( list_it.current() == (*it) && (*it)-> isOn () ){ 433 } else if ( list_it.current() == (*it) && (*it)-> isOn () ){
414 include << it.key(); 434 include << it.key();
415 } 435 }
416 if ( list_it.current() == (*it) ) { 436 if ( list_it.current() == (*it) ) {
417 allPlugins << it.key(); 437 allPlugins << it.key();
418 } 438 }
419 } 439 }
420 } 440 }
421 pcfg->writeEntry( "ExcludePlugins", exclude, ',' ); 441 pcfg->writeEntry( "ExcludePlugins", exclude, ',' );
422 pcfg->writeEntry( "IncludePlugins", include, ',' ); 442 pcfg->writeEntry( "IncludePlugins", include, ',' );
423 pcfg->writeEntry( "AllPlugins", allPlugins, ',' ); 443 pcfg->writeEntry( "AllPlugins", allPlugins, ',' );
424 444
425 pcfg->setGroup( "Misc" ); 445 pcfg->setGroup( "Misc" );
426 pcfg->writeEntry( "onStart", m_generalConfig->onStart->isChecked() ); 446 pcfg->writeEntry( "onStart", m_generalConfig->m_onStart->isChecked() );
427 pcfg->writeEntry( "onResume", m_generalConfig->onResume->isChecked() ); 447 pcfg->writeEntry( "onResume", m_generalConfig->m_onResume->isChecked() );
428 pcfg->writeEntry( "nbSuccessMin", m_generalConfig->nbSuccessMin->text() ); 448 pcfg->writeEntry( "nbSuccessMin", m_generalConfig->m_nbSuccessMin->text() );
429 pcfg->writeEntry( "noProtectConfig", m_generalConfig->noProtectConfig->isChecked() ); 449 pcfg->writeEntry( "noProtectConfig", m_generalConfig->m_noProtectConfig->isChecked() );
430 pcfg->writeEntry( "explanScreens", m_generalConfig->explanScreens->isChecked() ); 450 pcfg->writeEntry( "explanScreens", m_generalConfig->m_explanScreens->isChecked() );
431 pcfg->writeEntry( "allowBypass", m_generalConfig->allowBypass->isChecked() );
432 } 451 }
433 452
434 /* Login and Sync stuff */ 453 /* Login and Sync stuff */
435 454
436 pcfg->setGroup("Sync"); 455 pcfg->setGroup("Sync");
437 int auth_peer=0; 456 int auth_peer=0;
438 int auth_peer_bits; 457 int auth_peer_bits;
439 QString sn = m_syncWidget->syncnet->currentText(); 458 QString sn = m_syncWidget->syncnet->currentText();
440 parseNet(sn,auth_peer,auth_peer_bits); 459 parseNet(sn,auth_peer,auth_peer_bits);
441 460
442 //this is the *selected* (active) net range 461 //this is the *selected* (active) net range
443 pcfg->writeEntry("auth_peer",auth_peer); 462 pcfg->writeEntry("auth_peer",auth_peer);
444 pcfg->writeEntry("auth_peer_bits",auth_peer_bits); 463 pcfg->writeEntry("auth_peer_bits",auth_peer_bits);
445 464
446 //write back all other net ranges in *cleartext* 465 //write back all other net ranges in *cleartext*
447 for (int i=0; i<10; i++) { 466 for (int i=0; i<10; i++) {
448 QString target; 467 QString target;
449 target.sprintf("net%d", i); 468 target.sprintf("net%d", i);
450 if ( i < m_syncWidget->syncnet->count() ) 469 if ( i < m_syncWidget->syncnet->count() )
451 pcfg->writeEntry(target, m_syncWidget->syncnet->text(i)); 470 pcfg->writeEntry(target, m_syncWidget->syncnet->text(i));
452 else // no more entry in the syncnet list -> we clear the line 471 else // no more entry in the syncnet list -> we clear the line
453 pcfg->writeEntry(target, ""); 472 pcfg->writeEntry(target, "");
454 } 473 }
455 474
@@ -558,49 +577,49 @@ void MultiauthConfig::loadPlugins() {
558 for( stringit = m_allPlugins.begin(); stringit != m_allPlugins.end(); ++stringit ) { 577 for( stringit = m_allPlugins.begin(); stringit != m_allPlugins.end(); ++stringit ) {
559 tempPlugin = ( sortList.find( *stringit ) ).data(); 578 tempPlugin = ( sortList.find( *stringit ) ).data();
560 if ( !( (tempPlugin.name).isEmpty() ) ) { 579 if ( !( (tempPlugin.name).isEmpty() ) ) {
561 pluginList.append( tempPlugin ); 580 pluginList.append( tempPlugin );
562 } 581 }
563 } 582 }
564 } 583 }
565 584
566} 585}
567 586
568void MultiauthConfig::deleteListEntry() 587void MultiauthConfig::deleteListEntry()
569{ 588{
570 m_syncWidget->syncnet->removeItem(m_syncWidget->syncnet->currentItem()); 589 m_syncWidget->syncnet->removeItem(m_syncWidget->syncnet->currentItem());
571} 590}
572 591
573void MultiauthConfig::restoreDefaults() 592void MultiauthConfig::restoreDefaults()
574{ 593{
575 QMessageBox unrecbox( 594 QMessageBox unrecbox(
576 tr("Attention"), 595 tr("Attention"),
577 "<p>" + tr("All user-defined net ranges will be lost.") + "</p>", 596 "<p>" + tr("All user-defined net ranges will be lost.") + "</p>",
578 QMessageBox::Warning, 597 QMessageBox::Warning,
579 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton, 598 QMessageBox::Cancel, QMessageBox::Yes, QMessageBox::NoButton,
580 0, QString::null, TRUE, WStyle_StaysOnTop); 599 0, QString::null, TRUE, WStyle_StaysOnTop);
581 unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel")); 600 unrecbox.setButtonText(QMessageBox::Cancel, tr("Cancel"));
582 unrecbox.setButtonText(QMessageBox::Yes, tr("Ok")); 601 unrecbox.setButtonText(QMessageBox::Yes, tr("OK"));
583 602
584 if ( unrecbox.exec() == QMessageBox::Yes) 603 if ( unrecbox.exec() == QMessageBox::Yes)
585 { 604 {
586 m_syncWidget->syncnet->clear(); 605 m_syncWidget->syncnet->clear();
587 insertDefaultRanges(); 606 insertDefaultRanges();
588 } 607 }
589 m_syncWidget->syncModeCombo->setCurrentItem( 2 ); 608 m_syncWidget->syncModeCombo->setCurrentItem( 2 );
590} 609}
591 610
592void MultiauthConfig::insertDefaultRanges() 611void MultiauthConfig::insertDefaultRanges()
593{ 612{
594 m_syncWidget->syncnet->insertItem( "192.168.129.0/24" ); 613 m_syncWidget->syncnet->insertItem( "192.168.129.0/24" );
595 m_syncWidget->syncnet->insertItem( "192.168.1.0/24" ); 614 m_syncWidget->syncnet->insertItem( "192.168.1.0/24" );
596 m_syncWidget->syncnet->insertItem( "192.168.0.0/16" ); 615 m_syncWidget->syncnet->insertItem( "192.168.0.0/16" );
597 m_syncWidget->syncnet->insertItem( "172.16.0.0/12" ); 616 m_syncWidget->syncnet->insertItem( "172.16.0.0/12" );
598 m_syncWidget->syncnet->insertItem( "10.0.0.0/8" ); 617 m_syncWidget->syncnet->insertItem( "10.0.0.0/8" );
599 m_syncWidget->syncnet->insertItem( "1.0.0.0/8" ); 618 m_syncWidget->syncnet->insertItem( "1.0.0.0/8" );
600 m_syncWidget->syncnet->insertItem( tr( "Any" ) ); 619 m_syncWidget->syncnet->insertItem( tr( "Any" ) );
601 m_syncWidget->syncnet->insertItem( tr( "None" ) ); 620 m_syncWidget->syncnet->insertItem( tr( "None" ) );
602} 621}
603 622
604void MultiauthConfig::updateGUI() 623void MultiauthConfig::updateGUI()
605{ 624{
606 m_loginWidget->autologinToggle->setChecked(autoLogin); 625 m_loginWidget->autologinToggle->setChecked(autoLogin);
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
@@ -36,110 +36,116 @@
36 36
37#include <opie2/multiauthplugininterface.h> 37#include <opie2/multiauthplugininterface.h>
38#include <opie2/multiauthcommon.h> 38#include <opie2/multiauthcommon.h>
39 39
40/* OPIE */ 40/* OPIE */
41#include <opie2/otabwidget.h> 41#include <opie2/otabwidget.h>
42 42
43/* QT */ 43/* QT */
44#include <qdialog.h> 44#include <qdialog.h>
45#include <qwidget.h> 45#include <qwidget.h>
46#include <qcheckbox.h> 46#include <qcheckbox.h>
47#include <qspinbox.h> 47#include <qspinbox.h>
48#include <qpe/config.h> 48#include <qpe/config.h>
49#include <qlistview.h> 49#include <qlistview.h>
50#include <qmap.h> 50#include <qmap.h>
51#include <qcombobox.h> 51#include <qcombobox.h>
52#include <qpushbutton.h> 52#include <qpushbutton.h>
53#include <qmessagebox.h> 53#include <qmessagebox.h>
54#include <qtextstream.h> 54#include <qtextstream.h>
55 55
56/* UI */ 56/* UI */
57#include "syncbase.h" 57#include "syncbase.h"
58#include "loginbase.h" 58#include "loginbase.h"
59 59
60class MultiauthConfig;
61class MultiauthGeneralConfig;
60 62
61/// the "misc" configuration tab, about general Opie Multiauth settings 63/// the "misc" configuration tab, about general Opie Multiauth settings
62class MultiauthGeneralConfig : public QWidget 64class MultiauthGeneralConfig : public QWidget
63{ 65{
64 Q_OBJECT 66 Q_OBJECT
65public: 67public:
66 MultiauthGeneralConfig(QWidget * parent, const char * name); 68 MultiauthGeneralConfig(MultiauthConfig * parentConfig, QWidget * parent, const char * name);
67 ~MultiauthGeneralConfig(); 69 ~MultiauthGeneralConfig();
68protected: 70protected:
69 QCheckBox *onStart, *onResume, *noProtectConfig, *explanScreens, *allowBypass; 71 QCheckBox *m_onStart, *m_onResume, *m_noProtectConfig, *m_explanScreens;
70 QSpinBox *nbSuccessMin; 72 QSpinBox *m_nbSuccessMin;
71private: 73private:
72 friend class MultiauthConfig; 74 friend class MultiauthConfig;
75 /// pointer to the MultiauthConfig that called us
76 MultiauthConfig *m_parentConfig;
77 QPushButton *m_tryButton;
73private slots: 78private slots:
74 void checkBypass(); 79 void tryAuth();
75 void checkScreens();
76}; 80};
77 81
78/// the whole configuration dialog 82/// the whole configuration dialog
79class MultiauthConfig : public QDialog 83class MultiauthConfig : public QDialog
80{ 84{
81 Q_OBJECT 85 Q_OBJECT
82 86
83public: 87public:
84 static QString appName() { return QString::fromLatin1("security"); } 88 static QString appName() { return QString::fromLatin1("security"); }
85 MultiauthConfig(QWidget *parent, const char* name, WFlags fl); 89 MultiauthConfig(QWidget *parent, const char* name, WFlags fl);
86 virtual ~MultiauthConfig(); 90 virtual ~MultiauthConfig();
87 void writeConfig();
88 QList<Opie::Security::MultiauthConfigWidget> configWidgetList; 91 QList<Opie::Security::MultiauthConfigWidget> configWidgetList;
89 92
90protected slots: 93protected slots:
91 void accept(); 94 void accept();
92 void done(int r); 95 void done(int r);
93 void pluginsChanged(); 96 void pluginsChanged();
94 void moveSelectedUp(); 97 void moveSelectedUp();
95 void moveSelectedDown(); 98 void moveSelectedDown();
99 void writeConfigs();
96 100
97private slots: 101private slots:
98 // Login and Sync stuff 102 // Login and Sync stuff
99 void setSyncNet(const QString&); 103 void setSyncNet(const QString&);
100 void changeLoginName(int); 104 void changeLoginName(int);
101 void toggleAutoLogin(bool); 105 void toggleAutoLogin(bool);
102 void restoreDefaults(); 106 void restoreDefaults();
103 void insertDefaultRanges(); 107 void insertDefaultRanges();
104 void deleteListEntry(); 108 void deleteListEntry();
105 109
106private: 110private:
111 friend class MultiauthGeneralConfig;
107 /// the widget holding all the tabs (or pages) 112 /// the widget holding all the tabs (or pages)
108 Opie::Ui::OTabWidget *m_mainTW; 113 Opie::Ui::OTabWidget *m_mainTW;
109 /// list of authentication plugins in the "Plugins" page 114 /// list of authentication plugins in the "Plugins" page
110 QListView *m_pluginListView; 115 QListView *m_pluginListView;
111 QStringList m_allPlugins, m_excludePlugins; 116 QStringList m_allPlugins, m_excludePlugins;
112 QMap<QString,QCheckListItem*> m_plugins; 117 QMap<QString,QCheckListItem*> m_plugins;
113 /// plugin list page 118 /// plugin list page
114 QWidget *m_pluginListWidget; 119 QWidget *m_pluginListWidget;
115 /// misc config page 120 /// misc config page
116 MultiauthGeneralConfig *m_generalConfig; 121 MultiauthGeneralConfig *m_generalConfig;
117 /// login (root / ...) choice page 122 /// login (root / ...) choice page
118 LoginBase *m_loginWidget; 123 LoginBase *m_loginWidget;
119 /// synchronization settings page 124 /// synchronization settings page
120 SyncBase *m_syncWidget; 125 SyncBase *m_syncWidget;
121 126
122 int m_nbSuccessReq; 127 int m_nbSuccessReq;
123 bool m_plugins_changed; 128 bool m_plugins_changed;
124 bool m_pluginsInstalled; 129 bool m_pluginsInstalled;
125 130
126 void readConfig(); 131 void readConfig();
132 void writeConfig();
127 void loadPlugins(); 133 void loadPlugins();
128 134
129 // Login and Sync stuff 135 // Login and Sync stuff
130 void loadUsers(); 136 void loadUsers();
131 bool telnetAvailable() const; 137 bool telnetAvailable() const;
132 bool sshAvailable() const; 138 bool sshAvailable() const;
133 void updateGUI(); 139 void updateGUI();
134 140
135 static void parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits); 141 static void parseNet(const QString& sn,int& auth_peer,int& auth_peer_bits);
136 void selectNet(int auth_peer,int auth_peer_bits,bool update); 142 void selectNet(int auth_peer,int auth_peer_bits,bool update);
137 143
138 144
139 bool autoLogin; 145 bool autoLogin;
140 QString autoLoginName; 146 QString autoLoginName;
141}; 147};
142 148
143 149
144#endif // MULTIAUTHCONFIG_H 150#endif // MULTIAUTHCONFIG_H
145 151
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
@@ -1,80 +1,87 @@
1#include "multiauthmainwindow.h" 1#include "multiauthmainwindow.h"
2 2
3#include "multiauthcommon.h" 3#include "multiauthcommon.h"
4#include <qpe/config.h> 4#include <qpe/config.h>
5 5
6namespace Opie { 6namespace Opie {
7namespace Security { 7namespace Security {
8 8
9/// Initializes widgets according to allowBypass and explanScreens config 9/// Initializes widgets according to allowBypass argument (false by default) and explanScreens config
10MultiauthMainWindow::MultiauthMainWindow() 10/**
11 * \note if allowBypass is true, we will show explanatory screens anyway
12 */
13MultiauthMainWindow::MultiauthMainWindow(bool allowBypass = false)
11 : QDialog(0, "main Opie multiauth modal dialog", TRUE, 14 : QDialog(0, "main Opie multiauth modal dialog", TRUE,
12 Qt::WStyle_NoBorder | Qt::WStyle_Customize | Qt::WStyle_StaysOnTop) 15 Qt::WStyle_NoBorder | Qt::WStyle_Customize | Qt::WStyle_StaysOnTop)
13 16
14{ 17{
15 alreadyDone = false; 18 alreadyDone = false;
16 // initializes widget pointers which not always point to an object 19 // initializes widget pointers which not always point to an object
17 quit = 0; 20 quit = 0;
18 message2 = 0; 21 message2 = 0;
19 22
23 if (allowBypass == true)
24 explanScreens = true;
25 else
26 {
20 Config *pcfg = new Config("Security"); 27 Config *pcfg = new Config("Security");
21 pcfg->setGroup("Misc"); 28 pcfg->setGroup("Misc");
22 explanScreens = pcfg->readBoolEntry("explanScreens", true); 29 explanScreens = pcfg->readBoolEntry("explanScreens", true);
23 allowBypass = pcfg->readBoolEntry("allowBypass", false);
24 delete pcfg; 30 delete pcfg;
31 }
25 32
26 layout = new QVBoxLayout(this); 33 layout = new QVBoxLayout(this);
27 layout->setSpacing(11); 34 layout->setSpacing(11);
28 layout->setMargin(11); 35 layout->setMargin(11);
29 layout->setAlignment( Qt::AlignTop ); 36 layout->setAlignment( Qt::AlignTop );
30 37
31 // if explanScreens is false, we don't show any text in the QDialog, 38 // if explanScreens is false, we don't show any text in the QDialog,
32 // and we proceed directly 39 // and we proceed directly
33 if ( explanScreens == true ) 40 if ( explanScreens == true )
34 { 41 {
35 title = new QLabel("<center><h1>" + tr("Welcome to Opie Multi-authentication Framework") + "</h1></center>", this); 42 title = new QLabel("<center><h1>" + tr("Welcome to Opie Multi-authentication Framework") + "</h1></center>", this);
36 message = new QLabel("<center><h3>" + tr("Launching authentication plugins...") + "</h3></center>", this); 43 message = new QLabel("<center><h3>" + tr("Launching authentication plugins...") + "</h3></center>", this);
37 } else { 44 } else {
38 title = new QLabel("", this); 45 title = new QLabel("", this);
39 message = new QLabel("", this); 46 message = new QLabel("", this);
40 } 47 }
41 48
42 layout->addWidget(title); 49 layout->addWidget(title);
43 layout->addWidget(message); 50 layout->addWidget(message);
44 proceedButton = new QPushButton(tr("Proceed..."), this); 51 proceedButton = new QPushButton(tr("Proceed..."), this);
45 layout->addWidget(proceedButton, 0, Qt::AlignHCenter); 52 layout->addWidget(proceedButton, 0, Qt::AlignHCenter);
46 53
47 QObject::connect(proceedButton, SIGNAL(clicked()), this, SLOT(proceed())); 54 QObject::connect(proceedButton, SIGNAL(clicked()), this, SLOT(proceed()));
48 55
49 if ( explanScreens == true ) 56 if ( explanScreens == true )
50 { 57 {
51 quit = new QPushButton("Exit", this); 58 quit = new QPushButton("Exit", this);
52 layout->addWidget(quit, 0, Qt::AlignHCenter); 59 layout->addWidget(quit, 0, Qt::AlignHCenter);
53 if ( allowBypass == true ) 60 if ( allowBypass == true )
54 { 61 {
55 // very important: we can close the widget through the quit button, and bypass authentication, only if allowBypass is set! 62 // very important: we can close the widget through the quit button, and bypass authentication, only if allowBypass is set!
56 message2 = new QLabel("<center><i>" + tr("Note: the 'exit' button should be removed for real protection, through Security config dialog") + ".</i></center>", this); 63 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);
57 layout->addWidget(message2); 64 layout->addWidget(message2);
58 QObject::connect(quit, SIGNAL(clicked()), this, SLOT(close())); 65 QObject::connect(quit, SIGNAL(clicked()), this, SLOT(close()));
59 } 66 }
60 else 67 else
61 { 68 {
62 quit->hide(); 69 quit->hide();
63 } 70 }
64 71
65 } 72 }
66 else 73 else
67 { 74 {
68 // we will need this button only if runPlugins() fails in proceed() 75 // we will need this button only if runPlugins() fails in proceed()
69 proceedButton->hide(); 76 proceedButton->hide();
70 // let's proceed now 77 // let's proceed now
71 proceed(); 78 proceed();
72 } 79 }
73} 80}
74 81
75/// nothing to do 82/// nothing to do
76MultiauthMainWindow::~MultiauthMainWindow() { 83MultiauthMainWindow::~MultiauthMainWindow() {
77} 84}
78 85
79/// launch the authentication 86/// launch the authentication
80void MultiauthMainWindow::proceed() { 87void MultiauthMainWindow::proceed() {
@@ -93,43 +100,45 @@ void MultiauthMainWindow::proceed() {
93 } 100 }
94 else 101 else
95 { 102 {
96 103
97 proceedButton->setText("Another try?"); 104 proceedButton->setText("Another try?");
98 QString resultMessage; 105 QString resultMessage;
99 106
100 if (result == 0) 107 if (result == 0)
101 { 108 {
102 // authentication has succeeded, adapt interface then 109 // authentication has succeeded, adapt interface then
103 message->setText( "<center><h3>" + tr("Congratulations! Your authentication has been successful.") + "</h3></center>" ); 110 message->setText( "<center><h3>" + tr("Congratulations! Your authentication has been successful.") + "</h3></center>" );
104 quit->setText("Enter Opie"); 111 quit->setText("Enter Opie");
105 if ( quit->isHidden() ) 112 if ( quit->isHidden() )
106 { 113 {
107 // that means we don't allow to bypass, but now we can show and connect this button 114 // that means we don't allow to bypass, but now we can show and connect this button
108 QObject::connect(quit, SIGNAL(clicked()), this, SLOT(close())); 115 QObject::connect(quit, SIGNAL(clicked()), this, SLOT(close()));
109 quit->show(); 116 quit->show();
110 } else { 117 } else {
111 if ( message2 != 0 ) message2->hide(); 118 if ( message2 != 0 ) message2->hide();
112 } 119 }
113 } 120 }
114 else 121 else
115 { 122 {
116 // authentication has failed, explain that according to allowBypass 123 // authentication has failed, explain that according to allowBypass
117 message->setText( "<center><h3>" + tr("You have not succeeded enough authentication steps!") + "</h3></center>" ); 124 message->setText( "<center><h3>" + tr("You have <b>not</b> succeeded enough authentication steps!") + "</h3></center>" );
118 proceedButton->show(); 125 proceedButton->show();
119 if ( allowBypass == true ) 126 if ( allowBypass == true )
120 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>" ); 127 {
128 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>" );
129 message2->show();
121 } 130 }
122 } 131 }
123} 132}
124 133
125/** When we don't show explanatory screens and we succeed authentication, 134/** When we don't show explanatory screens and we succeed authentication,
126 * as early as during the proceed() call of the constructor, the caller must know 135 * as early as during the proceed() call of the constructor, the caller must know
127 * (through this function) authentication has already been succeeded.. 136 * (through this function) authentication has already been succeeded..
128 * \todo try to avoid this hack? 137 * \todo try to avoid this hack?
129 */ 138 */
130bool MultiauthMainWindow::isAlreadyDone() { 139bool MultiauthMainWindow::isAlreadyDone() {
131 return alreadyDone; 140 return alreadyDone;
132} 141}
133 142
134} 143}
135} 144}
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
@@ -34,49 +34,49 @@
34*/ 34*/
35 35
36#ifndef MULTIAUTHMAINWINDOW_H 36#ifndef MULTIAUTHMAINWINDOW_H
37#define MULTIAUTHMAINWINDOW_H 37#define MULTIAUTHMAINWINDOW_H
38 38
39#include <qdialog.h> 39#include <qdialog.h>
40#include <qlayout.h> 40#include <qlayout.h>
41#include <qpushbutton.h> 41#include <qpushbutton.h>
42#include <qlabel.h> 42#include <qlabel.h>
43 43
44 44
45namespace Opie { 45namespace Opie {
46namespace Security { 46namespace Security {
47 47
48/// Multiauth main window 48/// Multiauth main window
49/** 49/**
50 * This QDialog window displays some information and an exit button, 50 * This QDialog window displays some information and an exit button,
51 * and completely hides the desktop, preventing user interactions 51 * and completely hides the desktop, preventing user interactions
52 * with it. 52 * with it.
53 */ 53 */
54class MultiauthMainWindow : public QDialog { 54class MultiauthMainWindow : public QDialog {
55 Q_OBJECT 55 Q_OBJECT
56 56
57 public: 57 public:
58 MultiauthMainWindow(); 58 MultiauthMainWindow(bool allowBypass = false);
59 ~MultiauthMainWindow(); 59 ~MultiauthMainWindow();
60 bool isAlreadyDone(); 60 bool isAlreadyDone();
61 61
62 private: 62 private:
63 QVBoxLayout * layout; 63 QVBoxLayout * layout;
64 QLabel * title, * message, * message2; 64 QLabel * title, * message, * message2;
65 QPushButton * proceedButton, * quit; 65 QPushButton * proceedButton, * quit;
66 /// whether to show explanatory screens before and after the authentication plugins 66 /// whether to show explanatory screens before and after the authentication plugins
67 bool explanScreens; 67 bool explanScreens;
68 /// allow to bypass authnentication via 'exit' buttons on both explan. screens 68 /// allow to bypass authnentication via 'exit' buttons on both explan. screens
69 bool allowBypass; 69 bool allowBypass;
70 /// true when the authentication has been done successfully 70 /// true when the authentication has been done successfully
71 bool alreadyDone; 71 bool alreadyDone;
72 72
73 private slots: 73 private slots:
74 void proceed(); 74 void proceed();
75 private: 75 private:
76 struct Private; 76 struct Private;
77 Private *d; 77 Private *d;
78}; 78};
79 79
80} 80}
81} 81}
82 82