summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiesecurity/multiauthcommon.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/libopie2/opiesecurity/multiauthcommon.cpp b/libopie2/opiesecurity/multiauthcommon.cpp
index d8e26d5..9de62d2 100644
--- a/libopie2/opiesecurity/multiauthcommon.cpp
+++ b/libopie2/opiesecurity/multiauthcommon.cpp
@@ -1,186 +1,195 @@
1#include "multiauthplugininterface.h" 1#include "multiauthplugininterface.h"
2#include "multiauthcommon.h" 2#include "multiauthcommon.h"
3 3
4/* Opie */ 4/* Opie */
5#include <opie2/odebug.h> 5#include <opie2/odebug.h>
6#include <opie2/oapplication.h> 6#include <opie2/oapplication.h>
7 7
8/* Qt */ 8/* Qt */
9#include <qpe/qpeapplication.h> 9#include <qpe/qpeapplication.h>
10#include <qpe/qlibrary.h> 10#include <qpe/qlibrary.h>
11#include <qpe/qcom.h> 11#include <qpe/qcom.h>
12#include <qtextview.h> 12#include <qtextview.h>
13#include <qdir.h> 13#include <qdir.h>
14 14
15/* UNIX */ 15/* UNIX */
16#include <unistd.h> 16#include <unistd.h>
17#include <qpe/config.h> 17#include <qpe/config.h>
18 18
19namespace Opie { 19namespace Opie {
20namespace Security { 20namespace Security {
21 21
22SecOwnerDlg::SecOwnerDlg( QWidget *parent, const char * name, Contact c, 22SecOwnerDlg::SecOwnerDlg( QWidget *parent, const char * name, Contact c,
23 bool modal, bool fullscreen = FALSE ) 23 bool modal, bool fullscreen = FALSE )
24: QDialog( parent, name, modal, 24: QDialog( parent, name, modal,
25 fullscreen ? 25 fullscreen ?
26 WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 ) 26 WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 )
27{ 27{
28 if ( fullscreen ) { 28 if ( fullscreen ) {
29 QRect desk = qApp->desktop()->geometry(); 29 QRect desk = qApp->desktop()->geometry();
30 setGeometry( 0, 0, desk.width(), desk.height() ); 30 setGeometry( 0, 0, desk.width(), desk.height() );
31 } 31 }
32 // set up contents. 32 // set up contents.
33 QString text("<H3>" + tr("Please contact the owner (directions follow), or try again clicking of this screen (and waiting for the penalty time) if you are the legitimate owner") + "</H3>"); 33 QString text("<H3>" + tr("Please contact the owner (directions follow), or try again clicking of this screen (and waiting for the penalty time) if you are the legitimate owner") + "</H3>");
34 text += c.toRichText(); 34 text += c.toRichText();
35 tv = new QTextView(this); 35 tv = new QTextView(this);
36 tv->setText(text); 36 tv->setText(text);
37 37
38 tv->viewport()->installEventFilter(this); 38 tv->viewport()->installEventFilter(this);
39} 39}
40 40
41void SecOwnerDlg::resizeEvent( QResizeEvent * ) 41void SecOwnerDlg::resizeEvent( QResizeEvent * )
42{ 42{
43 tv->resize( size() ); 43 tv->resize( size() );
44} 44}
45 45
46bool SecOwnerDlg::eventFilter(QObject *o, QEvent *e) 46bool SecOwnerDlg::eventFilter(QObject *o, QEvent *e)
47{ 47{
48 if (e->type() == QEvent::KeyPress || e->type() == QEvent::MouseButtonPress ) { 48 if (e->type() == QEvent::KeyPress || e->type() == QEvent::MouseButtonPress ) {
49 accept(); 49 accept();
50 return TRUE; 50 return TRUE;
51 } 51 }
52 return QWidget::eventFilter(o, e); 52 return QWidget::eventFilter(o, e);
53} 53}
54 54
55void SecOwnerDlg::mousePressEvent( QMouseEvent * ) { accept(); } 55void SecOwnerDlg::mousePressEvent( QMouseEvent * ) { accept(); }
56 56
57 57
58namespace Internal { 58namespace Internal {
59/// run plugins until we reach nbSuccessMin successes 59/// run plugins until we reach nbSuccessMin successes
60int runPlugins() { 60int runPlugins() {
61 61
62 SecOwnerDlg *oi = 0; 62 SecOwnerDlg *oi = 0;
63 // see if there is contact information. 63 // see if there is contact information.
64 QString vfilename = Global::applicationFileName("addressbook", 64 QString vfilename = Global::applicationFileName("addressbook",
65 "businesscard.vcf"); 65 "businesscard.vcf");
66 if (QFile::exists(vfilename)) { 66 if (QFile::exists(vfilename)) {
67 Contact c; 67 Contact c;
68 c = Contact::readVCard( vfilename )[0]; 68 c = Contact::readVCard( vfilename )[0];
69 69
70 oi = new SecOwnerDlg(0, 0, c, TRUE, TRUE); 70 oi = new SecOwnerDlg(0, 0, c, TRUE, TRUE);
71 } 71 }
72 72
73 Config config("Security"); 73 Config config("Security");
74 config.setGroup("Plugins"); 74 config.setGroup("Plugins");
75 QStringList plugins = config.readListEntry("IncludePlugins", ','); 75 QStringList plugins = config.readListEntry("IncludePlugins", ',');
76 /* if there are no configured plugins, we simply return 0 to
77 * let the user in:
78 */
79 if (plugins.isEmpty() == true) {
80 owarn << "No authentication plugin has been configured yet!" << oendl;
81 odebug << "Letting the user in..." << oendl;
82 if(oi) delete oi;
83 return 0;
84 }
76 config.setGroup("Misc"); 85 config.setGroup("Misc");
77 int nbSuccessMin = config.readNumEntry("nbSuccessMin", 1); 86 int nbSuccessMin = config.readNumEntry("nbSuccessMin", 1);
78 int nbSuccess = 0; 87 int nbSuccess = 0;
79 88
80 /* tries to launch successively each plugin in $OPIEDIR/plugins/security 89 /* tries to launch successively each plugin in $OPIEDIR/plugins/security
81 * directory which file name is in Security.conf / [Misc] / IncludePlugins 90 * directory which file name is in Security.conf / [Misc] / IncludePlugins
82 */ 91 */
83 QString path = QPEApplication::qpeDir() + "/plugins/security"; 92 QString path = QPEApplication::qpeDir() + "/plugins/security";
84 QStringList::Iterator libIt; 93 QStringList::Iterator libIt;
85 94
86 for ( libIt = plugins.begin(); libIt != plugins.end(); ++libIt ) { 95 for ( libIt = plugins.begin(); libIt != plugins.end(); ++libIt ) {
87 QInterfacePtr<MultiauthPluginInterface> iface; 96 QInterfacePtr<MultiauthPluginInterface> iface;
88 QLibrary *lib = new QLibrary( path + "/" + *libIt ); 97 QLibrary *lib = new QLibrary( path + "/" + *libIt );
89 98
90 if ( lib->queryInterface( 99 if ( lib->queryInterface(
91 IID_MultiauthPluginInterface, 100 IID_MultiauthPluginInterface,
92 (QUnknownInterface**)&iface ) == QS_OK ) 101 (QUnknownInterface**)&iface ) == QS_OK )
93 { 102 {
94 // the plugin is a true Multiauth plugin 103 // the plugin is a true Multiauth plugin
95 odebug << "Accepted plugin: " << QString( path + "/" + *libIt ) << oendl; 104 odebug << "Accepted plugin: " << QString( path + "/" + *libIt ) << oendl;
96 odebug << "Plugin name: " << iface->plugin()->pluginName() << oendl; 105 odebug << "Plugin name: " << iface->plugin()->pluginName() << oendl;
97 106
98 int resultCode; 107 int resultCode;
99 int tries = 0; 108 int tries = 0;
100 109
101 // perform authentication 110 // perform authentication
102 resultCode = iface->plugin()->authenticate(); 111 resultCode = iface->plugin()->authenticate();
103 112
104 // display the result in command line 113 // display the result in command line
105 QString resultMessage; 114 QString resultMessage;
106 switch (resultCode) 115 switch (resultCode)
107 { 116 {
108 case MultiauthPluginObject::Success: 117 case MultiauthPluginObject::Success:
109 resultMessage = "Success!"; 118 resultMessage = "Success!";
110 nbSuccess++; 119 nbSuccess++;
111 break; 120 break;
112 case MultiauthPluginObject::Failure: 121 case MultiauthPluginObject::Failure:
113 resultMessage = "Failure..."; 122 resultMessage = "Failure...";
114 break; 123 break;
115 case MultiauthPluginObject::Skip: 124 case MultiauthPluginObject::Skip:
116 resultMessage = "Skip"; 125 resultMessage = "Skip";
117 break; 126 break;
118 } 127 }
119 odebug << "Plugin result: " << resultMessage << oendl; 128 odebug << "Plugin result: " << resultMessage << oendl;
120 129
121 // if failure, wait, reperform, wait, reperform... until right 130 // if failure, wait, reperform, wait, reperform... until right
122 while (resultCode == MultiauthPluginObject::Failure) 131 while (resultCode == MultiauthPluginObject::Failure)
123 { 132 {
124 tries++; 133 tries++;
125 owarn << "This plugin has failed " << tries << " times already" << oendl; 134 owarn << "This plugin has failed " << tries << " times already" << oendl;
126 135
127 // displays owner information, if any 136 // displays owner information, if any
128 if (oi) 137 if (oi)
129 { 138 {
130 oi->exec(); 139 oi->exec();
131 odebug << "Contact information displayed" << oendl; 140 odebug << "Contact information displayed" << oendl;
132 } 141 }
133 142
134 /// \todo parametrize the time penalty according to \em mode (exponential, 143 /// \todo parametrize the time penalty according to \em mode (exponential,
135 /// linear or fixed) and \em basetime (time penalty for the first failure) 144 /// linear or fixed) and \em basetime (time penalty for the first failure)
136 sleep(2 * tries); 145 sleep(2 * tries);
137 146
138 if (oi) 147 if (oi)
139 { 148 {
140 oi->hide(); 149 oi->hide();
141 /** \todo fix the focus here: should go back to the current plugin widget 150 /** \todo fix the focus here: should go back to the current plugin widget
142 * but it doesn't, so we have to tap once on the widget before e.g. buttons 151 * but it doesn't, so we have to tap once on the widget before e.g. buttons
143 * are active again 152 * are active again
144 */ 153 */
145 odebug << "Contact information hidden" << oendl; 154 odebug << "Contact information hidden" << oendl;
146 } 155 }
147 156
148 // perform authentication 157 // perform authentication
149 resultCode = iface->plugin()->authenticate(); 158 resultCode = iface->plugin()->authenticate();
150 159
151 // display the result in command line 160 // display the result in command line
152 switch (resultCode) 161 switch (resultCode)
153 { 162 {
154 case MultiauthPluginObject::Success: 163 case MultiauthPluginObject::Success:
155 resultMessage = "Success!"; 164 resultMessage = "Success!";
156 nbSuccess++; 165 nbSuccess++;
157 break; 166 break;
158 case MultiauthPluginObject::Failure: 167 case MultiauthPluginObject::Failure:
159 resultMessage = "Failure..."; 168 resultMessage = "Failure...";
160 break; 169 break;
161 case MultiauthPluginObject::Skip: 170 case MultiauthPluginObject::Skip:
162 resultMessage = "Skip"; 171 resultMessage = "Skip";
163 break; 172 break;
164 } 173 }
165 odebug << "Plugin result: " << resultMessage << oendl; 174 odebug << "Plugin result: " << resultMessage << oendl;
166 } 175 }
167 delete lib; 176 delete lib;
168 177
169 if (resultCode == MultiauthPluginObject::Success && nbSuccess == nbSuccessMin) 178 if (resultCode == MultiauthPluginObject::Success && nbSuccess == nbSuccessMin)
170 { 179 {
171 if(oi) delete oi; 180 if(oi) delete oi;
172 // we have reached the required number of successes, we can exit the plugin loop 181 // we have reached the required number of successes, we can exit the plugin loop
173 return 0; 182 return 0;
174 } 183 }
175 } else { 184 } else {
176 owarn << "Could not recognize plugin " << QString( path + "/" + *libIt ) << oendl; 185 owarn << "Could not recognize plugin " << QString( path + "/" + *libIt ) << oendl;
177 delete lib; 186 delete lib;
178 } // end if plugin recognized 187 } // end if plugin recognized
179 } //end for 188 } //end for
180 if(oi) delete oi; 189 if(oi) delete oi;
181 return 1; 190 return 1;
182} 191}
183 192
184} 193}
185} 194}
186} 195}