~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/http/_urllib2_wrappers.py

  • Committer: Robert J. Tanner
  • Date: 2009-04-20 08:37:32 UTC
  • mfrom: (4299 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4300.
  • Revision ID: tanner@real-time.com-20090420083732-bzx919oo7wpmqc2u
[merge] 1.14rc2 back into bzr.dev (Bob Tanner)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1127
1127
        if user is None:
1128
1128
            user = auth_conf.get_user(auth['protocol'], auth['host'],
1129
1129
                                      port=auth['port'], path=auth['path'],
1130
 
                                      realm=realm)
 
1130
                                      realm=realm, ask=True,
 
1131
                                      prompt=self.build_username_prompt(auth))
1131
1132
        if user is not None and password is None:
1132
1133
            password = auth_conf.get_password(
1133
1134
                auth['protocol'], auth['host'], user, port=auth['port'],
1154
1155
        prompt += ' password'
1155
1156
        return prompt
1156
1157
 
 
1158
    def _build_username_prompt(self, auth):
 
1159
        """Build a prompt taking the protocol used into account.
 
1160
 
 
1161
        The AuthHandler is used by http and https, we want that information in
 
1162
        the prompt, so we build the prompt from the authentication dict which
 
1163
        contains all the needed parts.
 
1164
 
 
1165
        Also, http and proxy AuthHandlers present different prompts to the
 
1166
        user. The daughter classes should implements a public
 
1167
        build_username_prompt using this method.
 
1168
        """
 
1169
        prompt = '%s' % auth['protocol'].upper() + ' %(host)s'
 
1170
        realm = auth['realm']
 
1171
        if realm is not None:
 
1172
            prompt += ", Realm: '%s'" % realm
 
1173
        prompt += ' username'
 
1174
        return prompt
 
1175
 
1157
1176
    def http_request(self, request):
1158
1177
        """Insert an authentication header if information is available"""
1159
1178
        auth = self.get_auth(request)
1225
1244
        auth_header = 'Basic ' + raw.encode('base64').strip()
1226
1245
        return auth_header
1227
1246
 
 
1247
    def extract_realm(self, header_value):
 
1248
        match = self.auth_regexp.search(header_value)
 
1249
        realm = None
 
1250
        if match:
 
1251
            realm = match.group(1)
 
1252
        return match, realm
 
1253
 
1228
1254
    def auth_match(self, header, auth):
1229
1255
        scheme, raw_auth = self._parse_auth_header(header)
1230
1256
        if scheme != 'basic':
1231
1257
            return False
1232
1258
 
1233
 
        match = self.auth_regexp.search(raw_auth)
 
1259
        match, realm = self.extract_realm(raw_auth)
1234
1260
        if match:
1235
 
            realm = match.groups()
1236
1261
            if scheme != 'basic':
1237
1262
                return False
1238
1263
 
1385
1410
    def build_password_prompt(self, auth):
1386
1411
        return self._build_password_prompt(auth)
1387
1412
 
 
1413
    def build_username_prompt(self, auth):
 
1414
        return self._build_username_prompt(auth)
 
1415
 
1388
1416
    def http_error_401(self, req, fp, code, msg, headers):
1389
1417
        return self.auth_required(req, headers)
1390
1418
 
1416
1444
        prompt = 'Proxy ' + prompt
1417
1445
        return prompt
1418
1446
 
 
1447
    def build_username_prompt(self, auth):
 
1448
        prompt = self._build_username_prompt(auth)
 
1449
        prompt = 'Proxy ' + prompt
 
1450
        return prompt
 
1451
 
1419
1452
    def http_error_407(self, req, fp, code, msg, headers):
1420
1453
        return self.auth_required(req, headers)
1421
1454