File indexing completed on 2024-04-14 14:17:57

0001 /*
0002     SPDX-FileCopyrightText: 2012 Dario Freddi <drf@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "TestBackend.h"
0008 
0009 #include <QDebug>
0010 
0011 namespace KAuth
0012 {
0013 TestBackend::TestBackend()
0014     : AuthBackend()
0015 {
0016     qDebug() << "Test backend loaded";
0017     setCapabilities(AuthorizeFromHelperCapability | CheckActionExistenceCapability);
0018 }
0019 
0020 void TestBackend::setNewCapabilities(AuthBackend::Capabilities capabilities)
0021 {
0022     qDebug() << "Capabilities changing";
0023     setCapabilities(capabilities);
0024 }
0025 
0026 Action::AuthStatus TestBackend::authorizeAction(const QString &action)
0027 {
0028     if (action == QLatin1String("doomed.to.fail")) {
0029         return Action::DeniedStatus;
0030     }
0031 
0032     return Action::AuthorizedStatus;
0033 }
0034 
0035 void TestBackend::setupAction(const QString &action)
0036 {
0037     if (action == QLatin1String("doomed.to.fail")) {
0038         m_actionStatuses.insert(action, Action::DeniedStatus);
0039     } else if (action == QLatin1String("requires.auth") || action == QLatin1String("generates.error")) {
0040         m_actionStatuses.insert(action, Action::AuthRequiredStatus);
0041     } else if (action == QLatin1String("always.authorized")) {
0042         m_actionStatuses.insert(action, Action::AuthorizedStatus);
0043     } else if (action.startsWith(QLatin1String("org.kde.kf5auth.autotest"))) {
0044         m_actionStatuses.insert(action, Action::AuthRequiredStatus);
0045     }
0046 }
0047 
0048 Action::AuthStatus TestBackend::actionStatus(const QString &action)
0049 {
0050     if (m_actionStatuses.contains(action)) {
0051         return m_actionStatuses.value(action);
0052     }
0053 
0054     return Action::InvalidStatus;
0055 }
0056 
0057 QByteArray TestBackend::callerID() const
0058 {
0059     return QByteArray("a random caller Id");
0060 }
0061 
0062 bool TestBackend::isCallerAuthorized(const QString &action, const QByteArray &callerId, const QVariantMap &details)
0063 {
0064     Q_UNUSED(details);
0065 
0066     if (action == QLatin1String("doomed.to.fail")) {
0067         return false;
0068     } else if (action == QLatin1String("requires.auth")) {
0069         m_actionStatuses.insert(action, Action::AuthorizedStatus);
0070         Q_EMIT actionStatusChanged(action, Action::AuthorizedStatus);
0071         return true;
0072     } else if (action == QLatin1String("generates.error")) {
0073         m_actionStatuses.insert(action, Action::ErrorStatus);
0074         Q_EMIT actionStatusChanged(action, Action::ErrorStatus);
0075         return false;
0076     } else if (action == QLatin1String("always.authorized")) {
0077         return true;
0078     } else if (action.startsWith(QLatin1String("org.kde.kf5auth.autotest"))) {
0079         qDebug() << "Caller ID:" << callerId;
0080         if (callerId == callerID()) {
0081             m_actionStatuses.insert(action, Action::AuthorizedStatus);
0082             Q_EMIT actionStatusChanged(action, Action::AuthorizedStatus);
0083             return true;
0084         } else {
0085             m_actionStatuses.insert(action, Action::DeniedStatus);
0086             Q_EMIT actionStatusChanged(action, Action::DeniedStatus);
0087         }
0088     }
0089 
0090     return false;
0091 }
0092 
0093 bool TestBackend::actionExists(const QString &action)
0094 {
0095     qDebug() << "Checking if action " << action << "exists";
0096     /* clang-format off */
0097     if (action != QLatin1String("doomed.to.fail")
0098         && action != QLatin1String("requires.auth")
0099         && action != QLatin1String("generates.error")
0100         && action != QLatin1String("always.authorized")
0101         && action != QLatin1String("/safinvalid124%$&")
0102         && !action.startsWith(QLatin1String("org.kde.kf5auth.autotest"))) { /* clang-format on */
0103         return false;
0104     }
0105 
0106     return true;
0107 }
0108 
0109 } // namespace Auth
0110 
0111 #include "moc_TestBackend.cpp"