securitysettings/qtconfigutils/eapqtconfiginterface/src/eapqtvalidatorpacstorepasswordconfirm.cpp
author hgs
Thu, 16 Sep 2010 13:07:04 +0300
changeset 49 43351a4f2da3
parent 34 ad1f037f1ac2
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description: 
hgs
parents:
diff changeset
    15
 *   EAP-FAST PAC store password correctness validator
hgs
parents:
diff changeset
    16
 *
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
/*
49
hgs
parents: 34
diff changeset
    20
 * %version: 7 %
34
hgs
parents:
diff changeset
    21
 */
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
// System includes
hgs
parents:
diff changeset
    24
#include <HbEditorInterface>
hgs
parents:
diff changeset
    25
#include <HbLineEdit>
49
hgs
parents: 34
diff changeset
    26
#include <QDebug>
34
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
// User includes
hgs
parents:
diff changeset
    29
#include "eapqtvalidatorpacstorepasswordconfirm.h"
hgs
parents:
diff changeset
    30
#include "eapqtconfiginterface_p.h"
49
hgs
parents: 34
diff changeset
    31
#include "EapFastPacStore.h"
34
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
/*!
hgs
parents:
diff changeset
    34
 *  \class EapQtValidatorPacStorePasswordConfirm
hgs
parents:
diff changeset
    35
 *  \brief EAP-FAST PAC store password correctness validator, checks if the
hgs
parents:
diff changeset
    36
 *         supplied password can be used for opening the existing PAC store
hgs
parents:
diff changeset
    37
 */
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
// External function prototypes
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// Local constants
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
// ======== LOCAL FUNCTIONS ========
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    46
49
hgs
parents: 34
diff changeset
    47
EapQtValidatorPacStorePasswordConfirm::EapQtValidatorPacStorePasswordConfirm() :
hgs
parents: 34
diff changeset
    48
    mPacStoreIf(NULL)
34
hgs
parents:
diff changeset
    49
{
49
hgs
parents: 34
diff changeset
    50
    qDebug("EapQtValidatorPacStorePasswordConfirm() - starts");
hgs
parents: 34
diff changeset
    51
hgs
parents: 34
diff changeset
    52
    // try to create PAC store instance,
hgs
parents: 34
diff changeset
    53
    // this will throw if EAP-FAST is not supported
hgs
parents: 34
diff changeset
    54
    CEapFastPacStore* tmpPacStoreIf = NULL;
hgs
parents: 34
diff changeset
    55
    QT_TRAP_THROWING(tmpPacStoreIf = CEapFastPacStore::NewL());
hgs
parents: 34
diff changeset
    56
hgs
parents: 34
diff changeset
    57
    Q_ASSERT(tmpPacStoreIf);
hgs
parents: 34
diff changeset
    58
hgs
parents: 34
diff changeset
    59
    // move the result to scoped member pointer
hgs
parents: 34
diff changeset
    60
    mPacStoreIf.reset(tmpPacStoreIf);
hgs
parents: 34
diff changeset
    61
hgs
parents: 34
diff changeset
    62
    qDebug("EapQtValidatorPacStorePasswordConfirm() - ends");
34
hgs
parents:
diff changeset
    63
}
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
EapQtValidatorPacStorePasswordConfirm::~EapQtValidatorPacStorePasswordConfirm()
hgs
parents:
diff changeset
    66
{
49
hgs
parents: 34
diff changeset
    67
    qDebug("~EapQtValidatorPacStorePasswordConfirm()");
hgs
parents: 34
diff changeset
    68
    // mPacStoreIf deleted automatically
34
hgs
parents:
diff changeset
    69
}
hgs
parents:
diff changeset
    70
49
hgs
parents: 34
diff changeset
    71
EapQtValidator::Status EapQtValidatorPacStorePasswordConfirm::validate(const QVariant& value)
34
hgs
parents:
diff changeset
    72
{
hgs
parents:
diff changeset
    73
    qDebug("EapQtValidatorPacStorePasswordConfirm::validate()");
49
hgs
parents: 34
diff changeset
    74
hgs
parents: 34
diff changeset
    75
    Status status(StatusOk);
hgs
parents: 34
diff changeset
    76
    const QString str = value.toString();
hgs
parents: 34
diff changeset
    77
hgs
parents: 34
diff changeset
    78
    // input must be of correct type
hgs
parents: 34
diff changeset
    79
    if (value.type() != QVariant::String) {
hgs
parents: 34
diff changeset
    80
        status = StatusInvalid;
hgs
parents: 34
diff changeset
    81
    }
hgs
parents: 34
diff changeset
    82
    else if (str.length() > EapQtConfigInterfacePrivate::PacPasswordMaxLength) {
hgs
parents: 34
diff changeset
    83
        status = StatusTooLong;
hgs
parents: 34
diff changeset
    84
    }
hgs
parents: 34
diff changeset
    85
    else {
hgs
parents: 34
diff changeset
    86
        TBool match(EFalse);
hgs
parents: 34
diff changeset
    87
        // TBufC8 must be twice as long as QString
hgs
parents: 34
diff changeset
    88
        TBufC8<EapQtConfigInterfacePrivate::StringMaxLength> tmpPassword;
hgs
parents: 34
diff changeset
    89
        QByteArray tmp = str.toUtf8();
hgs
parents: 34
diff changeset
    90
hgs
parents: 34
diff changeset
    91
        // Convert to suitable format
hgs
parents: 34
diff changeset
    92
        tmpPassword.Des().Copy(reinterpret_cast<const TUint8*> (tmp.data()), tmp.count());
hgs
parents: 34
diff changeset
    93
hgs
parents: 34
diff changeset
    94
        // check if given password can be used to open the PAC store,
hgs
parents: 34
diff changeset
    95
        // this will fail in all other cases except if PAC store exists
hgs
parents: 34
diff changeset
    96
        // and the password can open it
hgs
parents: 34
diff changeset
    97
        TRAPD(err, match = mPacStoreIf->IsMasterKeyAndPasswordMatchingL(tmpPassword));
hgs
parents: 34
diff changeset
    98
hgs
parents: 34
diff changeset
    99
        qDebug() << "EapQtValidatorPacStorePasswordConfirm::validate() -"
hgs
parents: 34
diff changeset
   100
            << "IsMasterKeyAndPasswordMatchingL trap returned:" << err;
hgs
parents: 34
diff changeset
   101
hgs
parents: 34
diff changeset
   102
        if (err == KErrNone && match != EFalse) {
hgs
parents: 34
diff changeset
   103
            qDebug() << "EapQtValidatorPacStorePasswordConfirm::validate() - password matches";
hgs
parents: 34
diff changeset
   104
            status = StatusOk;
hgs
parents: 34
diff changeset
   105
        }
hgs
parents: 34
diff changeset
   106
        else {
hgs
parents: 34
diff changeset
   107
            qDebug()
hgs
parents: 34
diff changeset
   108
                << "EapQtValidatorPacStorePasswordConfirm::validate() - password does not match";
hgs
parents: 34
diff changeset
   109
            status = StatusInvalid;
hgs
parents: 34
diff changeset
   110
        }
hgs
parents: 34
diff changeset
   111
    }
hgs
parents: 34
diff changeset
   112
hgs
parents: 34
diff changeset
   113
    qDebug("EapQtValidatorPacStorePasswordConfirm::validate - return status: %d", status);
hgs
parents: 34
diff changeset
   114
    return status;
34
hgs
parents:
diff changeset
   115
}
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
void EapQtValidatorPacStorePasswordConfirm::updateEditor(HbLineEdit* const edit)
hgs
parents:
diff changeset
   118
{
hgs
parents:
diff changeset
   119
    qDebug("EapQtValidatorPacStorePasswordConfirm::updateEditor()");
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
    Q_ASSERT(edit);
hgs
parents:
diff changeset
   122
49
hgs
parents: 34
diff changeset
   123
    edit->setMaxLength(EapQtConfigInterfacePrivate::PacPasswordMaxLength);
34
hgs
parents:
diff changeset
   124
    edit->setInputMethodHints(Qt::ImhNoAutoUppercase | Qt::ImhPreferLowercase
hgs
parents:
diff changeset
   125
        | Qt::ImhNoPredictiveText);
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    // do not set editor class or auto completing since they might leak the pwd
hgs
parents:
diff changeset
   128
    HbEditorInterface editInterface(edit);
hgs
parents:
diff changeset
   129
    editInterface.setSmileyTheme(HbSmileyTheme());
hgs
parents:
diff changeset
   130
}