Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgscredentials.cpp - interface for requesting credentials
3 : : ----------------------
4 : : begin : February 2010
5 : : copyright : (C) 2010 by Juergen E. Fischer
6 : : email : jef at norbit dot de
7 : : ***************************************************************************
8 : : * *
9 : : * This program is free software; you can redistribute it and/or modify *
10 : : * it under the terms of the GNU General Public License as published by *
11 : : * the Free Software Foundation; either version 2 of the License, or *
12 : : * (at your option) any later version. *
13 : : * *
14 : : ***************************************************************************/
15 : :
16 : : #include "qgscredentials.h"
17 : : #include "qgslogger.h"
18 : :
19 : : #include <QTextStream>
20 : :
21 : : QgsCredentials *QgsCredentials::sInstance = nullptr;
22 : :
23 : 0 : void QgsCredentials::setInstance( QgsCredentials *instance )
24 : : {
25 : 0 : if ( sInstance )
26 : : {
27 : 0 : QgsDebugMsg( QStringLiteral( "already registered an instance of QgsCredentials" ) );
28 : 0 : }
29 : :
30 : 0 : sInstance = instance;
31 : 0 : }
32 : :
33 : 0 : QgsCredentials *QgsCredentials::instance()
34 : : {
35 : 0 : if ( sInstance )
36 : 0 : return sInstance;
37 : :
38 : 0 : return new QgsCredentialsNone();
39 : 0 : }
40 : :
41 : 0 : bool QgsCredentials::get( const QString &realm, QString &username, QString &password, const QString &message )
42 : : {
43 : : {
44 : 0 : QMutexLocker locker( &mCacheMutex );
45 : 0 : if ( mCredentialCache.contains( realm ) )
46 : : {
47 : 0 : QPair<QString, QString> credentials = mCredentialCache.take( realm );
48 : 0 : username = credentials.first;
49 : 0 : password = credentials.second;
50 : 0 : QgsDebugMsgLevel( QStringLiteral( "retrieved realm:%1 username:%2" ).arg( realm, username ), 2 );
51 : :
52 : 0 : if ( !password.isNull() )
53 : 0 : return true;
54 : 0 : }
55 : 0 : }
56 : :
57 : 0 : if ( request( realm, username, password, message ) )
58 : : {
59 : 0 : QgsDebugMsgLevel( QStringLiteral( "requested realm:%1 username:%2" ).arg( realm, username ), 2 );
60 : 0 : return true;
61 : : }
62 : : else
63 : : {
64 : 0 : QgsDebugMsgLevel( QStringLiteral( "unset realm:%1" ).arg( realm ), 4 );
65 : 0 : return false;
66 : : }
67 : 0 : }
68 : :
69 : 0 : void QgsCredentials::put( const QString &realm, const QString &username, const QString &password )
70 : : {
71 : 0 : QMutexLocker locker( &mCacheMutex );
72 : 0 : QgsDebugMsgLevel( QStringLiteral( "inserting realm:%1 username:%2" ).arg( realm, username ), 2 );
73 : 0 : mCredentialCache.insert( realm, QPair<QString, QString>( username, password ) );
74 : 0 : }
75 : :
76 : 0 : bool QgsCredentials::getMasterPassword( QString &password, bool stored )
77 : : {
78 : 0 : if ( requestMasterPassword( password, stored ) )
79 : : {
80 : 0 : QgsDebugMsgLevel( QStringLiteral( "requested master password" ), 2 );
81 : 0 : return true;
82 : : }
83 : 0 : return false;
84 : 0 : }
85 : :
86 : 0 : void QgsCredentials::lock()
87 : : {
88 : 0 : mAuthMutex.lock();
89 : 0 : }
90 : :
91 : 0 : void QgsCredentials::unlock()
92 : : {
93 : 0 : mAuthMutex.unlock();
94 : 0 : }
95 : :
96 : :
97 : : ////////////////////////////////
98 : : // QgsCredentialsNone
99 : :
100 : 0 : QgsCredentialsNone::QgsCredentialsNone()
101 : 0 : {
102 : 0 : setInstance( this );
103 : 0 : }
104 : :
105 : 0 : bool QgsCredentialsNone::request( const QString &realm, QString &username, QString &password, const QString &message )
106 : : {
107 : 0 : Q_UNUSED( realm );
108 : 0 : Q_UNUSED( username );
109 : 0 : Q_UNUSED( password );
110 : 0 : Q_UNUSED( message );
111 : 0 : return false;
112 : : }
113 : :
114 : 0 : bool QgsCredentialsNone::requestMasterPassword( QString &password, bool stored )
115 : : {
116 : 0 : Q_UNUSED( password );
117 : : Q_UNUSED( stored );
118 : 0 : return false;
119 : : }
120 : :
121 : : ////////////////////////////////
122 : : // QgsCredentialsConsole
123 : :
124 : 0 : QgsCredentialsConsole::QgsCredentialsConsole()
125 : 0 : {
126 : 0 : setInstance( this );
127 : 0 : }
128 : :
129 : 0 : bool QgsCredentialsConsole::request( const QString &realm, QString &username, QString &password, const QString &message )
130 : : {
131 : 0 : QTextStream in( stdin, QIODevice::ReadOnly );
132 : 0 : QTextStream out( stdout, QIODevice::WriteOnly );
133 : :
134 : : #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
135 : : out << "credentials for " << realm << endl;
136 : : #else
137 : 0 : out << "credentials for " << realm << Qt::endl;
138 : : #endif
139 : 0 : if ( !message.isEmpty() )
140 : : #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
141 : : out << "message: " << message << endl;
142 : : #else
143 : 0 : out << "message: " << message << Qt::endl;
144 : : #endif
145 : 0 : out << "username: ";
146 : 0 : in >> username;
147 : 0 : out << "password: ";
148 : 0 : in >> password;
149 : :
150 : : return true;
151 : 0 : }
152 : :
153 : 0 : bool QgsCredentialsConsole::requestMasterPassword( QString &password, bool stored )
154 : : {
155 : : Q_UNUSED( stored );
156 : :
157 : 0 : QTextStream in( stdin, QIODevice::ReadOnly );
158 : 0 : QTextStream out( stdout, QIODevice::WriteOnly );
159 : :
160 : 0 : QString msg( stored ? "Master password for authentication configs: " : "Set master password for authentication configs: " );
161 : :
162 : 0 : out << msg;
163 : 0 : in >> password;
164 : :
165 : : return true;
166 : 0 : }
|