/*! * \qmlmethod void AccountService::authenticate(jsobject sessionData) * * Perform the authentication on this account. The \a sessionData dictionary is * optional and if not given the value of \l {authData}{authData::parameters} will be used. * * Each call to this method will cause either of \l authenticated or * \l authenticationError signals to be emitted at some time later. Note that * the authentication might involve interactions with the network or with the * end-user, so don't expect these signals to be emitted immediately. * * \sa authenticated, authenticationError */ void AccountService::authenticate(const QVariantMap &sessionData) { DEBUG() << sessionData; if (Q_UNLIKELY(accountService == 0)) { QVariantMap error; error.insert("code", NoAccountError); error.insert("message", QLatin1String("Invalid AccountService")); Q_EMIT authenticationError(error); return; } Accounts::AuthData authData = accountService->authData(); if (identity == 0) { quint32 credentialsId = credentialsIdProperty.read().toUInt(); if (credentialsId == 0) credentialsId = authData.credentialsId(); identity = SignOn::Identity::existingIdentity(credentialsId, this); } if (authSession == 0) { authSession = identity->createSession(authData.method()); QObject::connect(authSession, SIGNAL(response(const SignOn::SessionData&)), this, SLOT(onAuthSessionResponse(const SignOn::SessionData&))); QObject::connect(authSession, SIGNAL(error(const SignOn::Error&)), this, SLOT(onAuthSessionError(const SignOn::Error&))); }
void XTelepathyPasswordAuthOperation::storeCredentials(const QString &secret) { QString username = m_account->parameters().value(QStringLiteral("account")).toString(); Accounts::Manager *manager = KAccounts::accountsManager(); Accounts::Account *account = manager->account(m_accountStorageId); SignOn::Identity *identity; if (account) { Accounts::AccountService *service = new Accounts::AccountService(account, manager->service(QString()), this); Accounts::AuthData authData = service->authData(); identity = SignOn::Identity::existingIdentity(authData.credentialsId(), this); } else { // there's no valid KAccounts account, so let's try creating one QString providerName = QStringLiteral("ktp-"); providerName.append(m_account->serviceName()); qDebug() << "Creating account with providerName" << providerName; account = manager->createAccount(providerName); account->setDisplayName(m_account->displayName()); account->setValue("uid", m_account->objectPath()); account->setValue("username", username); account->setValue(QStringLiteral("auth/mechanism"), QStringLiteral("password")); account->setValue(QStringLiteral("auth/method"), QStringLiteral("password")); account->setEnabled(true); Accounts::ServiceList services = account->services(); Q_FOREACH(const Accounts::Service &service, services) { account->selectService(service); account->setEnabled(true); } }
/*! * \qmlproperty jsobject AccountService::authData * An object providing information about the authentication. * The returned object will have at least these members: * \list * \li \c method is the authentication method * \li \c mechanism is the authentication mechanism (a sub-specification of the * method) * \li \c parameters is a dictionary of authentication parameters * \li \c credentialsId is the numeric identified of the credentials in the * secrets storage. See the \l Credentials element for more info. * \endlist */ QVariantMap AccountService::authData() const { QVariantMap map; if (Q_UNLIKELY(accountService == 0)) return map; Accounts::AuthData data = accountService->authData(); map.insert("method", data.method()); map.insert("mechanism", data.mechanism()); map.insert("credentialsId", data.credentialsId()); map.insert("parameters", data.parameters()); return map; }