/
qgscredentials.h
143 lines (108 loc) · 4.56 KB
/
qgscredentials.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/***************************************************************************
qgscredentials.h - interface for requesting credentials
----------------------
begin : Feburary 2010
copyright : (C) 2010 by Juergen E. Fischer
email : jef at norbit dot de
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSCREDENTIALS_H
#define QGSCREDENTIALS_H
#include <QString>
#include <QObject>
#include <QPair>
#include <QMap>
#include <QMutex>
#include "qgis_core.h"
/** \ingroup core
* Interface for requesting credentials in QGIS in GUI independent way.
* This class provides abstraction of a dialog for requesting credentials to the user.
* By default QgsCredentials will be used if not overridden with other
* credential creator function.
* QGIS application uses QgsCredentialDialog class for displaying a dialog to the user.
* Object deletes itself when it's not needed anymore. Children should use
* signal destroyed() to be notified of the deletion
*/
class CORE_EXPORT QgsCredentials
{
public:
virtual ~QgsCredentials() = default;
bool get( const QString& realm, QString &username, QString &password, const QString& message = QString::null );
void put( const QString& realm, const QString& username, const QString& password );
bool getMasterPassword( QString &password, bool stored = false );
//! retrieves instance
static QgsCredentials *instance();
/**
* Lock the instance against access from multiple threads. This does not really lock access to get/put methds,
* it will just prevent other threads to lock the instance and continue the execution. When the class is used
* from non-GUI threads, they should call lock() before the get/put calls to avoid race conditions.
* @note added in 2.4
*/
void lock();
/**
* Unlock the instance after being locked.
* @note added in 2.4
*/
void unlock();
/**
* Return pointer to mutex
* @note added in 2.4
*/
QMutex *mutex() { return &mMutex; }
protected:
QgsCredentials();
//! request a password
virtual bool request( const QString& realm, QString &username, QString &password, const QString& message = QString::null ) = 0;
//! request a master password
virtual bool requestMasterPassword( QString &password, bool stored = false ) = 0;
//! register instance
void setInstance( QgsCredentials *theInstance );
private:
Q_DISABLE_COPY( QgsCredentials )
//! cache for already requested credentials in this session
QMap< QString, QPair<QString, QString> > mCredentialCache;
//! Pointer to the credential instance
static QgsCredentials *smInstance;
QMutex mMutex;
};
/** \ingroup core
\brief Default implementation of credentials interface
This class doesn't prompt or return credentials
*/
class CORE_EXPORT QgsCredentialsNone : public QObject, public QgsCredentials
{
Q_OBJECT
public:
QgsCredentialsNone();
signals:
//! signals that object will be destroyed and shouldn't be used anymore
void destroyed();
protected:
virtual bool request( const QString& realm, QString &username, QString &password, const QString& message = QString::null ) override;
virtual bool requestMasterPassword( QString &password, bool stored = false ) override;
};
/** \ingroup core
\brief Implementation of credentials interface for the console
This class outputs message to the standard output and retrieves input from
standard input. Therefore it won't be the right choice for apps without
GUI.
*/
class CORE_EXPORT QgsCredentialsConsole : public QObject, public QgsCredentials
{
Q_OBJECT
public:
QgsCredentialsConsole();
signals:
//! signals that object will be destroyed and shouldn't be used anymore
void destroyed();
protected:
virtual bool request( const QString& realm, QString &username, QString &password, const QString& message = QString::null ) override;
virtual bool requestMasterPassword( QString &password, bool stored = false ) override;
};
#endif