165
165
#really use bzrlib.auth get_password for this
166
166
#or possibly better gnome-keyring?
167
167
auth = config.AuthenticationConfig()
168
parsed_url = urlutils.URL.from_string(self.url)
168
(scheme, urluser, urlpassword, host, port, urlpath) = \
169
urlutils.parse_url(self.url)
170
171
if (flags & gio.ASK_PASSWORD_NEED_USERNAME and
171
172
flags & gio.ASK_PASSWORD_NEED_DOMAIN):
172
prompt = (u'%s' % (parsed_url.scheme.upper(),) +
173
u' %(host)s DOMAIN\\username')
174
user_and_domain = auth.get_user(parsed_url.scheme,
175
parsed_url.host, port=parsed_url.port, ask=True,
173
prompt = u'%s' % (scheme.upper(),) + u' %(host)s DOMAIN\\username'
174
user_and_domain = auth.get_user(scheme, host,
175
port=port, ask=True, prompt=prompt)
177
176
(domain, user) = user_and_domain.split('\\', 1)
178
177
op.set_username(user)
179
178
op.set_domain(domain)
180
179
elif flags & gio.ASK_PASSWORD_NEED_USERNAME:
181
user = auth.get_user(parsed_url.scheme, parsed_url.host,
182
port=parsed_url.port, ask=True)
180
user = auth.get_user(scheme, host,
183
182
op.set_username(user)
184
183
elif flags & gio.ASK_PASSWORD_NEED_DOMAIN:
185
184
#Don't know how common this case is, but anyway
186
185
#a DOMAIN and a username prompt should be the
187
186
#same so I will missuse the ui_factory get_username
188
187
#a little bit here.
189
prompt = (u'%s' % (parsed_url.scheme.upper(),) +
188
prompt = u'%s' % (scheme.upper(),) + u' %(host)s DOMAIN'
191
189
domain = ui.ui_factory.get_username(prompt=prompt)
192
190
op.set_domain(domain)
194
192
if flags & gio.ASK_PASSWORD_NEED_PASSWORD:
196
194
user = op.get_username()
197
password = auth.get_password(parsed_url.scheme, parsed_url.host,
198
user, port=parsed_url.port)
195
password = auth.get_password(scheme, host,
199
197
op.set_password(password)
200
198
op.reply(gio.MOUNT_OPERATION_HANDLED)
210
208
def _create_connection(self, credentials=None):
211
209
if credentials is None:
212
user, password = self._parsed_url.user, self._parsed_url.password
210
user, password = self._user, self._password
214
212
user, password = credentials
250
248
self._set_connection(connection, credentials)
252
250
def _remote_path(self, relpath):
253
return self._parsed_url.clone(relpath).path
251
relative = urlutils.unescape(relpath).encode('utf-8')
252
remote_path = self._combine_paths(self._path, relative)
255
255
def has(self, relpath):
256
256
"""Does the target location exist?"""