summaryrefslogtreecommitdiff
authorzecke <zecke>2005-01-22 11:30:46 (UTC)
committer zecke <zecke>2005-01-22 11:30:46 (UTC)
commit8a0b6e6d1d5043466c4211b2d89da562ab9fd91c (patch) (side-by-side diff)
tree7be6947fe33013cb35b85e4fff6e0093b3557dab
parent55eccecc08f839878e5743d6e6be25af386b5a3f (diff)
downloadopie-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
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiesecurity/multiauthcommon.cpp19
-rw-r--r--libopie2/opiesecurity/multiauthcommon.h3
-rw-r--r--libopie2/opiesecurity/opiesecurity.pro1
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 )