18
18
19
19
#include " qgsogrhelperfunctions.h"
20
20
#include " qgslogger.h"
21
+ #include " qgsapplication.h"
22
+ #include " qgsauthmanager.h"
21
23
#include < QRegExp>
22
24
23
- QString createDatabaseURI ( const QString &connectionType, const QString &host, const QString &database, QString port, const QString &user, const QString & password )
25
+ QString createDatabaseURI ( const QString &connectionType, const QString &host, const QString &database, QString port, const QString &configId, QString username, QString password )
24
26
{
25
27
QString uri;
26
28
29
+ // If an auth configuration is set, override username and password
30
+ // Note that only Basic auth (username/password) is for now supported for OGR connections
31
+ if ( ! configId.isEmpty () )
32
+ {
33
+ // Pass to updateDataSourceUriItems empty user/password in the format it likes
34
+ QStringList connectionItems;
35
+ connectionItems << QStringLiteral ( " user=''" ) << QStringLiteral ( " password=''" );
36
+ if ( QgsApplication::authManager ()->updateDataSourceUriItems ( connectionItems, configId, QStringLiteral ( " ogr" ) ) )
37
+ {
38
+ QRegExp userRe ( " ^user='([^']+)'" );
39
+ QRegExp passRe ( " ^password='([^']+)'" );
40
+ // Extracts the username and password
41
+ username = QString ( connectionItems.at ( 0 ) ).replace ( userRe, " \\ 1" );
42
+ password = QString ( connectionItems.at ( 1 ) ).replace ( passRe, " \\ 1" );
43
+ }
44
+ }
45
+
27
46
// todo:add default ports for all kind of databases
28
47
if ( connectionType == QLatin1String ( " ESRI Personal GeoDatabase" ) )
29
48
{
@@ -34,7 +53,7 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
34
53
if ( port.isEmpty () )
35
54
port = QStringLiteral ( " 5151" );
36
55
37
- uri = " SDE:" + host + " ,PORT:" + port + ' ,' + database + ' ,' + user + ' ,' + password;
56
+ uri = " SDE:" + host + " ,PORT:" + port + ' ,' + database + ' ,' + username + ' ,' + password;
38
57
}
39
58
else if ( connectionType == QLatin1String ( " Informix DataBlade" ) )
40
59
{
@@ -44,9 +63,9 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
44
63
if ( !host.isEmpty () )
45
64
uri += QStringLiteral ( " server=%1" ).arg ( host );
46
65
47
- if ( !user .isEmpty () )
66
+ if ( !username .isEmpty () )
48
67
{
49
- uri += QStringLiteral ( " user=%1" ).arg ( user );
68
+ uri += QStringLiteral ( " user=%1" ).arg ( username );
50
69
51
70
if ( !password.isEmpty () )
52
71
uri += QStringLiteral ( " pass=%1" ).arg ( password );
@@ -56,9 +75,9 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
56
75
{
57
76
// not tested
58
77
uri = " @driver=ingres,dbname=" + database;
59
- if ( !user .isEmpty () )
78
+ if ( !username .isEmpty () )
60
79
{
61
- uri += QStringLiteral ( " ,userid=%1" ).arg ( user );
80
+ uri += QStringLiteral ( " ,userid=%1" ).arg ( username );
62
81
63
82
if ( !password.isEmpty () )
64
83
uri += QStringLiteral ( " ,password=%1" ).arg ( password );
@@ -76,9 +95,9 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
76
95
uri += QStringLiteral ( " ,port=%1" ).arg ( port );
77
96
}
78
97
79
- if ( !user .isEmpty () )
98
+ if ( !username .isEmpty () )
80
99
{
81
- uri += QStringLiteral ( " ,user=%1" ).arg ( user );
100
+ uri += QStringLiteral ( " ,user=%1" ).arg ( username );
82
101
83
102
if ( !password.isEmpty () )
84
103
uri += QStringLiteral ( " ,password=%1" ).arg ( password );
@@ -96,9 +115,9 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
96
115
uri += QStringLiteral ( " ,%1" ).arg ( port );
97
116
}
98
117
99
- if ( !user .isEmpty () )
118
+ if ( !username .isEmpty () )
100
119
{
101
- uri += QStringLiteral ( " ;uid=%1" ).arg ( user );
120
+ uri += QStringLiteral ( " ;uid=%1" ).arg ( username );
102
121
103
122
if ( !password.isEmpty () )
104
123
uri += QStringLiteral ( " ;pwd=%1" ).arg ( password );
@@ -111,10 +130,10 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
111
130
}
112
131
else if ( connectionType == QLatin1String ( " Oracle Spatial" ) )
113
132
{
114
- uri = " OCI:" + user ;
133
+ uri = " OCI:" + username ;
115
134
116
- if ( ( !user .isEmpty () && !password.isEmpty () ) ||
117
- ( user .isEmpty () && password.isEmpty () ) )
135
+ if ( ( !username .isEmpty () && !password.isEmpty () ) ||
136
+ ( username .isEmpty () && password.isEmpty () ) )
118
137
{
119
138
uri += ' /' ;
120
139
if ( !password.isEmpty () )
@@ -142,15 +161,15 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
142
161
}
143
162
else if ( connectionType == QLatin1String ( " ODBC" ) )
144
163
{
145
- if ( !user .isEmpty () )
164
+ if ( !username .isEmpty () )
146
165
{
147
166
if ( password.isEmpty () )
148
167
{
149
- uri = " ODBC:" + user + ' @' + database;
168
+ uri = " ODBC:" + username + ' @' + database;
150
169
}
151
170
else
152
171
{
153
- uri = " ODBC:" + user + ' /' + password + ' @' + database;
172
+ uri = " ODBC:" + username + ' /' + password + ' @' + database;
154
173
}
155
174
156
175
}
@@ -174,9 +193,9 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
174
193
uri += QStringLiteral ( " port='%1'" ).arg ( port );
175
194
}
176
195
177
- if ( !user .isEmpty () )
196
+ if ( !username .isEmpty () )
178
197
{
179
- uri += QStringLiteral ( " user='%1'" ).arg ( user );
198
+ uri += QStringLiteral ( " user='%1'" ).arg ( username );
180
199
181
200
if ( !password.isEmpty () )
182
201
uri += QStringLiteral ( " password='%1'" ).arg ( password );
@@ -190,7 +209,7 @@ QString createDatabaseURI( const QString &connectionType, const QString &host, c
190
209
}
191
210
192
211
193
- QString createProtocolURI ( const QString &type, const QString &url )
212
+ QString createProtocolURI ( const QString &type, const QString &url, const QString &configId, const QString &username, const QString &password )
194
213
{
195
214
QString uri;
196
215
if ( type == QLatin1String ( " GeoJSON" ) )
@@ -206,5 +225,19 @@ QString createProtocolURI( const QString &type, const QString &url )
206
225
uri = QStringLiteral ( " DODS:%1" ).arg ( url );
207
226
}
208
227
QgsDebugMsg ( " Connection type is=" + type + " and uri=" + uri );
228
+ // Update URI with authentication information
229
+ if ( ! configId.isEmpty () )
230
+ {
231
+ QStringList connectionItems;
232
+ connectionItems << uri;
233
+ if ( QgsApplication::authManager ()->updateDataSourceUriItems ( connectionItems, configId, QStringLiteral ( " ogr" ) ) )
234
+ {
235
+ uri = connectionItems.join ( QString () );
236
+ }
237
+ }
238
+ else if ( !( username.isEmpty () || password.isEmpty ( ) ) )
239
+ {
240
+ uri.replace ( QStringLiteral ( " ://" ), QStringLiteral ( " ://%1:%2@" ).arg ( username, password ) );
241
+ }
209
242
return uri;
210
243
}
0 commit comments