1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 2009 Michael Leupold <lemma@confuego.org>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6*/
7
8#ifndef KPASSWDSERVERCLIENT_H
9#define KPASSWDSERVERCLIENT_H
10
11#include <kiocore_export.h>
12#include <qglobal.h>
13
14#include <memory>
15
16class QString;
17class OrgKdeKPasswdServerInterface;
18
19namespace KIO
20{
21class AuthInfo;
22}
23
24class KPasswdServerClientPrivate;
25
26/*!
27 * \class KPasswdServerClient
28 * \inmodule KIOCore
29 *
30 * \brief Interface class for kpasswdserver.
31 *
32 * KIO workers should not use this directly but via the WorkerBase API.
33 * \since 5.30
34 */
35class KIOCORE_EXPORT KPasswdServerClient
36{
37public:
38 /*!
39 * Creates a client instance for kpasswdserver.
40 * The instance should be kept for the lifetime of the process, not created for each request.
41 */
42 KPasswdServerClient();
43 ~KPasswdServerClient();
44
45 KPasswdServerClient(const KPasswdServerClient &) = delete;
46 KPasswdServerClient &operator=(const KPasswdServerClient &) = delete;
47
48 /*!
49 * Check if kpasswdserver has cached authentication information regarding
50 * an AuthInfo object.
51 *
52 * \a info information to check cache for
53 *
54 * \a windowId used as parent for dialogs, comes from QWidget::winId() on the toplevel widget
55 *
56 * \a usertime the X11 user time from the calling application, so that any dialog
57 * (e.g. wallet password) respects focus-prevention rules.
58 * Use KUserTimestamp::userTimestamp in the GUI application from which the request originates.
59 *
60 * Returns \c true if kpasswdserver provided cached information, false if not
61 *
62 * Info will contain the results of the check. To see if
63 * information was retrieved, check info.isModified().
64 */
65 bool checkAuthInfo(KIO::AuthInfo *info, qlonglong windowId, qlonglong usertime);
66
67 /*!
68 * Let kpasswdserver ask the user for authentication information.
69 *
70 * \a info information to query the user for
71 *
72 * \a errorMsg error message that will be displayed to the user
73 *
74 * \a windowId used as parent for dialogs, comes from QWidget::winId() on the toplevel widget
75 *
76 * \a usertime the X11 user time from the calling application, so that the dialog
77 * (e.g. wallet password) respects focus-prevention rules.
78 * Use KUserTimestamp::userTimestamp in the GUI application from which the request originates.
79 *
80 * Returns a KIO error code: KJob::NoError (0) on success, otherwise ERR_USER_CANCELED if the user canceled,
81 * or ERR_PASSWD_SERVER if we couldn't communicate with kpasswdserver.
82 *
83 * If NoError is returned, then \a info will contain the authentication information that was retrieved.
84 */
85 int queryAuthInfo(KIO::AuthInfo *info, const QString &errorMsg, qlonglong windowId, qlonglong usertime);
86
87 /*!
88 * Manually add authentication information to kpasswdserver's cache.
89 *
90 * \a info information to add
91 *
92 * \a windowId used as parent window for dialogs, comes from QWidget::winId() on the toplevel widget
93 */
94 void addAuthInfo(const KIO::AuthInfo &info, qlonglong windowId);
95
96 /*!
97 * Manually remove authentication information from kpasswdserver's cache.
98 *
99 * \a host hostname of the information to remove
100 *
101 * \a protocol protocol to remove information for
102 *
103 * \a user username to remove information for
104 */
105 void removeAuthInfo(const QString &host, const QString &protocol, const QString &user);
106
107private:
108 OrgKdeKPasswdServerInterface *m_interface;
109 std::unique_ptr<KPasswdServerClientPrivate> d;
110};
111
112#endif
113

source code of kio/src/core/kpasswdserverclient.h