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 : : #include <QIODevice>
21 : :
22 : : QgsCredentials *QgsCredentials::sInstance = nullptr;
23 : :
24 : 0 : void QgsCredentials::setInstance( QgsCredentials *instance )
25 : : {
26 : 0 : if ( sInstance )
27 : : {
28 : 0 : QgsDebugMsg( QStringLiteral( "already registered an instance of QgsCredentials" ) );
29 : 0 : }
30 : :
31 : 0 : sInstance = instance;
32 : 0 : }
33 : :
34 : 0 : QgsCredentials *QgsCredentials::instance()
35 : : {
36 : 0 : if ( sInstance )
37 : 0 : return sInstance;
38 : :
39 : 0 : return new QgsCredentialsNone();
40 : 0 : }
41 : :
42 : 0 : bool QgsCredentials::get( const QString &realm, QString &username, QString &password, const QString &message )
43 : : {
44 : : {
45 : 0 : QMutexLocker locker( &mCacheMutex );
46 : 0 : if ( mCredentialCache.contains( realm ) )
47 : : {
48 : 0 : QPair<QString, QString> credentials = mCredentialCache.take( realm );
49 : 0 : username = credentials.first;
50 : 0 : password = credentials.second;
51 : 0 : QgsDebugMsgLevel( QStringLiteral( "retrieved realm:%1 username:%2" ).arg( realm, username ), 2 );
52 : :
53 : 0 : if ( !password.isNull() )
54 : 0 : return true;
55 : 0 : }
56 : 0 : }
57 : :
58 : 0 : if ( request( realm, username, password, message ) )
59 : : {
60 : 0 : QgsDebugMsgLevel( QStringLiteral( "requested realm:%1 username:%2" ).arg( realm, username ), 2 );
61 : 0 : return true;
62 : : }
63 : : else
64 : : {
65 : 0 : QgsDebugMsgLevel( QStringLiteral( "unset realm:%1" ).arg( realm ), 4 );
66 : 0 : return false;
67 : : }
68 : 0 : }
69 : :
70 : 0 : void QgsCredentials::put( const QString &realm, const QString &username, const QString &password )
71 : : {
72 : 0 : QMutexLocker locker( &mCacheMutex );
73 : 0 : QgsDebugMsgLevel( QStringLiteral( "inserting realm:%1 username:%2" ).arg( realm, username ), 2 );
74 : 0 : mCredentialCache.insert( realm, QPair<QString, QString>( username, password ) );
75 : 0 : }
76 : :
77 : 0 : bool QgsCredentials::getMasterPassword( QString &password, bool stored )
78 : : {
79 : 0 : if ( requestMasterPassword( password, stored ) )
80 : : {
81 : 0 : QgsDebugMsgLevel( QStringLiteral( "requested master password" ), 2 );
82 : 0 : return true;
83 : : }
84 : 0 : return false;
85 : 0 : }
86 : :
87 : 0 : void QgsCredentials::lock()
88 : : {
89 : 0 : mAuthMutex.lock();
90 : 0 : }
91 : :
92 : 0 : void QgsCredentials::unlock()
93 : : {
94 : 0 : mAuthMutex.unlock();
95 : 0 : }
96 : :
97 : :
98 : : ////////////////////////////////
99 : : // QgsCredentialsNone
100 : :
101 : 0 : QgsCredentialsNone::QgsCredentialsNone()
102 : 0 : {
103 : 0 : setInstance( this );
104 : 0 : }
105 : :
106 : 0 : bool QgsCredentialsNone::request( const QString &realm, QString &username, QString &password, const QString &message )
107 : : {
108 : 0 : Q_UNUSED( realm );
109 : 0 : Q_UNUSED( username );
110 : 0 : Q_UNUSED( password );
111 : 0 : Q_UNUSED( message );
112 : 0 : return false;
113 : : }
114 : :
115 : 0 : bool QgsCredentialsNone::requestMasterPassword( QString &password, bool stored )
116 : : {
117 : 0 : Q_UNUSED( password );
118 : : Q_UNUSED( stored );
119 : 0 : return false;
120 : : }
121 : :
122 : : ////////////////////////////////
123 : : // QgsCredentialsConsole
124 : :
125 : 0 : QgsCredentialsConsole::QgsCredentialsConsole()
126 : 0 : {
127 : 0 : setInstance( this );
128 : 0 : }
129 : :
130 : 0 : bool QgsCredentialsConsole::request( const QString &realm, QString &username, QString &password, const QString &message )
131 : : {
132 : 0 : QTextStream in( stdin, QIODevice::ReadOnly );
133 : 0 : QTextStream out( stdout, QIODevice::WriteOnly );
134 : :
135 : : #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
136 : : out << "credentials for " << realm << endl;
137 : : #else
138 : 0 : out << "credentials for " << realm << Qt::endl;
139 : : #endif
140 : 0 : if ( !message.isEmpty() )
141 : : #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
142 : : out << "message: " << message << endl;
143 : : #else
144 : 0 : out << "message: " << message << Qt::endl;
145 : : #endif
146 : 0 : out << "username: ";
147 : 0 : in >> username;
148 : 0 : out << "password: ";
149 : 0 : in >> password;
150 : :
151 : : return true;
152 : 0 : }
153 : :
154 : 0 : bool QgsCredentialsConsole::requestMasterPassword( QString &password, bool stored )
155 : : {
156 : : Q_UNUSED( stored );
157 : :
158 : 0 : QTextStream in( stdin, QIODevice::ReadOnly );
159 : 0 : QTextStream out( stdout, QIODevice::WriteOnly );
160 : :
161 : 0 : QString msg( stored ? "Master password for authentication configs: " : "Set master password for authentication configs: " );
162 : :
163 : 0 : out << msg;
164 : 0 : in >> password;
165 : :
166 : : return true;
167 : 0 : }
|