author | zecke <zecke> | 2005-01-22 11:30:46 (UTC) |
---|---|---|
committer | zecke <zecke> | 2005-01-22 11:30:46 (UTC) |
commit | 8a0b6e6d1d5043466c4211b2d89da562ab9fd91c (patch) (side-by-side diff) | |
tree | 7be6947fe33013cb35b85e4fff6e0093b3557dab | |
parent | 55eccecc08f839878e5743d6e6be25af386b5a3f (diff) | |
download | opie-8a0b6e6d1d5043466c4211b2d89da562ab9fd91c.zip opie-8a0b6e6d1d5043466c4211b2d89da562ab9fd91c.tar.gz opie-8a0b6e6d1d5043466c4211b2d89da562ab9fd91c.tar.bz2 |
-Fix for #1533
Use OPimContactAccess to load the Owner Information. This should
fix the displaying of the contact for non latin1 encoded users.
To use OPimContactAccess OpieSecurity now depends on opiepim2
-rw-r--r-- | libopie2/opiesecurity/multiauthcommon.cpp | 19 | ||||
-rw-r--r-- | libopie2/opiesecurity/multiauthcommon.h | 3 | ||||
-rw-r--r-- | libopie2/opiesecurity/opiesecurity.pro | 1 |
3 files changed, 13 insertions, 10 deletions
diff --git a/libopie2/opiesecurity/multiauthcommon.cpp b/libopie2/opiesecurity/multiauthcommon.cpp index e563193..2760760 100644 --- a/libopie2/opiesecurity/multiauthcommon.cpp +++ b/libopie2/opiesecurity/multiauthcommon.cpp @@ -1,195 +1,198 @@ #include "multiauthplugininterface.h" #include "multiauthcommon.h" /* Opie */ #include <opie2/odebug.h> #include <opie2/oapplication.h> +#include <opie2/ocontactaccessbackend_vcard.h> +#include <opie2/ocontactaccess.h> /* Qt */ #include <qpe/qpeapplication.h> #include <qpe/qlibrary.h> #include <qpe/qcom.h> #include <qtextview.h> #include <qdir.h> /* UNIX */ #include <unistd.h> #include <qpe/config.h> namespace Opie { namespace Security { -SecOwnerDlg::SecOwnerDlg( QWidget *parent, const char * name, Contact c, +SecOwnerDlg::SecOwnerDlg( QWidget *parent, const char * name, const QString& c, bool modal, bool fullscreen = FALSE ) : QDialog( parent, name, modal, fullscreen ? WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop : 0 ) { if ( fullscreen ) { QRect desk = qApp->desktop()->geometry(); setGeometry( 0, 0, desk.width(), desk.height() ); } // set up contents. 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>"); - text += c.toRichText(); + text += c; tv = new QTextView(this); tv->setText(text); tv->viewport()->installEventFilter(this); } void SecOwnerDlg::resizeEvent( QResizeEvent * ) { tv->resize( size() ); } bool SecOwnerDlg::eventFilter(QObject *o, QEvent *e) { if (e->type() == QEvent::KeyPress || e->type() == QEvent::MouseButtonPress ) { accept(); return TRUE; } return QWidget::eventFilter(o, e); } void SecOwnerDlg::mousePressEvent( QMouseEvent * ) { accept(); } namespace Internal { /// run plugins until we reach nbSuccessMin successes int runPlugins() { SecOwnerDlg *oi = 0; // see if there is contact information. QString vfilename = Global::applicationFileName("addressbook", "businesscard.vcf"); - if (QFile::exists(vfilename)) { - Contact c; - c = Contact::readVCard( vfilename )[0]; - - oi = new SecOwnerDlg(0, 0, c, TRUE, TRUE); + Opie::OPimContactAccess acc( "multiauth", vfilename, + new Opie::OPimContactAccessBackend_VCard( "multiauth", vfilename ) ); + if ( acc.load() ) { + Opie::OPimContact contact = acc.allRecords()[0]; + if ( !contact.isEmpty() ) + oi = new SecOwnerDlg(0, 0, contact.toRichText(), TRUE, TRUE); } Config config("Security"); config.setGroup("Plugins"); QStringList plugins = config.readListEntry("IncludePlugins", ','); /* if there are no configured plugins, we simply return 0 to * let the user in: */ if (plugins.isEmpty() == true) { owarn << "No authentication plugin has been configured yet!" << oendl; odebug << "Letting the user in..." << oendl; if(oi) delete oi; return 0; } config.setGroup("Misc"); int nbSuccessMin = config.readNumEntry("nbSuccessMin", 1); int nbSuccess = 0; /* tries to launch successively each plugin in $OPIEDIR/plugins/security * directory which file name is in Security.conf / [Misc] / IncludePlugins */ QString path = QPEApplication::qpeDir() + "plugins/security"; QStringList::Iterator libIt; for ( libIt = plugins.begin(); libIt != plugins.end(); ++libIt ) { QInterfacePtr<MultiauthPluginInterface> iface; QLibrary *lib = new QLibrary( path + "/" + *libIt ); if ( lib->queryInterface( IID_MultiauthPluginInterface, (QUnknownInterface**)&iface ) == QS_OK ) { // the plugin is a true Multiauth plugin odebug << "Accepted plugin: " << QString( path + "/" + *libIt ) << oendl; odebug << "Plugin name: " << iface->plugin()->pluginName() << oendl; int resultCode; int tries = 0; // perform authentication resultCode = iface->plugin()->authenticate(); // display the result in command line QString resultMessage; switch (resultCode) { case MultiauthPluginObject::Success: resultMessage = "Success!"; nbSuccess++; break; case MultiauthPluginObject::Failure: resultMessage = "Failure..."; break; case MultiauthPluginObject::Skip: resultMessage = "Skip"; break; } odebug << "Plugin result: " << resultMessage << oendl; // if failure, wait, reperform, wait, reperform... until right while (resultCode == MultiauthPluginObject::Failure) { tries++; owarn << "This plugin has failed " << tries << " times already" << oendl; // displays owner information, if any if (oi) { oi->exec(); odebug << "Contact information displayed" << oendl; } /// \todo parametrize the time penalty according to \em mode (exponential, /// linear or fixed) and \em basetime (time penalty for the first failure) sleep(2 * tries); if (oi) { oi->hide(); /** \todo fix the focus here: should go back to the current plugin widget * but it doesn't, so we have to tap once on the widget before e.g. buttons * are active again */ odebug << "Contact information hidden" << oendl; } // perform authentication resultCode = iface->plugin()->authenticate(); // display the result in command line switch (resultCode) { case MultiauthPluginObject::Success: resultMessage = "Success!"; nbSuccess++; break; case MultiauthPluginObject::Failure: resultMessage = "Failure..."; break; case MultiauthPluginObject::Skip: resultMessage = "Skip"; break; } odebug << "Plugin result: " << resultMessage << oendl; } delete lib; if (resultCode == MultiauthPluginObject::Success && nbSuccess == nbSuccessMin) { if(oi) delete oi; // we have reached the required number of successes, we can exit the plugin loop return 0; } } else { owarn << "Could not recognize plugin " << QString( path + "/" + *libIt ) << oendl; delete lib; } // end if plugin recognized } //end for - if(oi) delete oi; + delete oi; return 1; } } } } diff --git a/libopie2/opiesecurity/multiauthcommon.h b/libopie2/opiesecurity/multiauthcommon.h index b728dae..42dff17 100644 --- a/libopie2/opiesecurity/multiauthcommon.h +++ b/libopie2/opiesecurity/multiauthcommon.h @@ -1,76 +1,75 @@ /** * \file multiauthcommon.h * \brief Objects and functions for Opie multiauth framework * \author Cl�ment S�veillac (clement . seveillac (at) via . ecp . fr) */ /* =. This file is part of the Opie Project .=l. Copyright (C) 2004 Opie Developer Team <opie-devel@handhelds.org> .>+-= _;:, .> :=|. This library is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This library is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=|` MERCHANTABILITY or FITNESS FOR A _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. .` .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-=` this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef MULTIAUTHCOMMON_H #define MULTIAUTHCOMMON_H /* OwnerDialog stuff */ #include <qpe/global.h> #include <qpe/contact.h> #include <qtextview.h> #include <qdialog.h> - namespace Opie { namespace Security { /// QDialog simply showing the owner information class SecOwnerDlg : public QDialog { Q_OBJECT public: - SecOwnerDlg( QWidget *parent, const char * name, Contact c, + SecOwnerDlg( QWidget *parent, const char * name, const QString& owner, bool modal, bool fullscreen); void resizeEvent( QResizeEvent * ); bool eventFilter(QObject *o, QEvent *e); void mousePressEvent( QMouseEvent * ); private: QTextView *tv; private: struct Private; Private *d; }; namespace Internal { int runPlugins(); } } } #endif // MULTIAUTHCOMMON_H diff --git a/libopie2/opiesecurity/opiesecurity.pro b/libopie2/opiesecurity/opiesecurity.pro index 7171e67..d4d7925 100644 --- a/libopie2/opiesecurity/opiesecurity.pro +++ b/libopie2/opiesecurity/opiesecurity.pro @@ -1,17 +1,18 @@ TEMPLATE = lib CONFIG += qt warn_on DESTDIR = $(OPIEDIR)/lib HEADERS = multiauthcommon.h \ multiauthmainwindow.h \ multiauthconfigwidget.h \ multiauthplugininterface.h \ multiauthpassword.h SOURCES = multiauthcommon.cpp \ multiauthmainwindow.cpp \ multiauthpassword.cpp TARGET = opiesecurity2 VERSION = 0.0.2 INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include +LIBS += -lopiepim2 include( $(OPIEDIR)/include.pro ) |