1 /*
2     SPDX-FileCopyrightText: 2012 Dario Freddi <drf@kde.org>
3 
4     SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6 
7 #include "TestBackend.h"
8 
9 #include <QDebug>
10 
11 namespace KAuth
12 {
TestBackend()13 TestBackend::TestBackend()
14     : AuthBackend()
15 {
16     qDebug() << "Test backend loaded";
17     setCapabilities(AuthorizeFromHelperCapability | CheckActionExistenceCapability);
18 }
19 
setNewCapabilities(AuthBackend::Capabilities capabilities)20 void TestBackend::setNewCapabilities(AuthBackend::Capabilities capabilities)
21 {
22     qDebug() << "Capabilities changing";
23     setCapabilities(capabilities);
24 }
25 
authorizeAction(const QString & action)26 Action::AuthStatus TestBackend::authorizeAction(const QString &action)
27 {
28     if (action == QLatin1String("doomed.to.fail")) {
29         return Action::DeniedStatus;
30     }
31 
32     return Action::AuthorizedStatus;
33 }
34 
setupAction(const QString & action)35 void TestBackend::setupAction(const QString &action)
36 {
37     if (action == QLatin1String("doomed.to.fail")) {
38         m_actionStatuses.insert(action, Action::DeniedStatus);
39     } else if (action == QLatin1String("requires.auth") || action == QLatin1String("generates.error")) {
40         m_actionStatuses.insert(action, Action::AuthRequiredStatus);
41     } else if (action == QLatin1String("always.authorized")) {
42         m_actionStatuses.insert(action, Action::AuthorizedStatus);
43     } else if (action.startsWith(QLatin1String("org.kde.kf5auth.autotest"))) {
44         m_actionStatuses.insert(action, Action::AuthRequiredStatus);
45     }
46 }
47 
actionStatus(const QString & action)48 Action::AuthStatus TestBackend::actionStatus(const QString &action)
49 {
50     if (m_actionStatuses.contains(action)) {
51         return m_actionStatuses.value(action);
52     }
53 
54     return Action::InvalidStatus;
55 }
56 
callerID() const57 QByteArray TestBackend::callerID() const
58 {
59     return QByteArray("a random caller Id");
60 }
61 
isCallerAuthorized(const QString & action,const QByteArray & callerId,const QVariantMap & details)62 bool TestBackend::isCallerAuthorized(const QString &action, const QByteArray &callerId, const QVariantMap &details)
63 {
64     Q_UNUSED(details);
65 
66     if (action == QLatin1String("doomed.to.fail")) {
67         return false;
68     } else if (action == QLatin1String("requires.auth")) {
69         m_actionStatuses.insert(action, Action::AuthorizedStatus);
70         Q_EMIT actionStatusChanged(action, Action::AuthorizedStatus);
71         return true;
72     } else if (action == QLatin1String("generates.error")) {
73         m_actionStatuses.insert(action, Action::ErrorStatus);
74         Q_EMIT actionStatusChanged(action, Action::ErrorStatus);
75         return false;
76     } else if (action == QLatin1String("always.authorized")) {
77         return true;
78     } else if (action.startsWith(QLatin1String("org.kde.kf5auth.autotest"))) {
79         qDebug() << "Caller ID:" << callerId;
80         if (callerId == callerID()) {
81             m_actionStatuses.insert(action, Action::AuthorizedStatus);
82             Q_EMIT actionStatusChanged(action, Action::AuthorizedStatus);
83             return true;
84         } else {
85             m_actionStatuses.insert(action, Action::DeniedStatus);
86             Q_EMIT actionStatusChanged(action, Action::DeniedStatus);
87         }
88     }
89 
90     return false;
91 }
92 
actionExists(const QString & action)93 bool TestBackend::actionExists(const QString &action)
94 {
95     qDebug() << "Checking if action " << action << "exists";
96     /* clang-format off */
97     if (action != QLatin1String("doomed.to.fail")
98         && action != QLatin1String("requires.auth")
99         && action != QLatin1String("generates.error")
100         && action != QLatin1String("always.authorized")
101         && action != QLatin1String("/safinvalid124%$&")
102         && !action.startsWith(QLatin1String("org.kde.kf5auth.autotest"))) { /* clang-format on */
103         return false;
104     }
105 
106     return true;
107 }
108 
109 } // namespace Auth
110