~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/config.py

  • Committer: Vincent Ladeuil
  • Date: 2007-10-13 10:23:22 UTC
  • mto: (2961.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 2962.
  • Revision ID: v.ladeuil+lp@free.fr-20071013102322-0bn7g2dh4tq63la6
Cosmetic changes.

* bzrlib/tests/test_config.py: 
Fix the imports.
(TestAuthenticationConfig.test_broken_config): Add test.

* bzrlib/config.py:
(AuthenticationConfig.get_credentials): Add doc string. Cometic changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
945
945
 
946
946
    def __init__(self, _file=None):
947
947
        super(AuthenticationConfig, self).__init__()
948
 
        # The ConfigObj
949
 
        self._config = None
 
948
        self._config = None # The ConfigObj
950
949
        if _file is None:
951
950
            self._input = authentication_config_filename()
952
951
        else:
956
955
        if self._config is not None:
957
956
            return self._config
958
957
        try:
 
958
            # FIXME: Should we validate something here ? Includes: port must be
 
959
            # numeric, empty sections are useless, verify_certificates is
 
960
            # boolean, at least one of user/password/password_encoding should
 
961
            # be defined, etc.
 
962
 
 
963
            # Note: the encoding below declares that the file itself is utf-8
 
964
            # encoded, but the values in the ConfigObj are always Unicode.
959
965
            self._config = ConfigObj(self._input, encoding='utf-8')
960
966
        except configobj.ConfigObjError, e:
961
967
            raise errors.ParseConfigError(e.errors, e.config.filename)
962
968
        return self._config
963
969
 
964
970
    def get_credentials(self, scheme, host, port=None, user=None, path=None):
 
971
        """Returns the matching credentials from authentication.conf file.
 
972
 
 
973
        :param scheme: protocol
 
974
 
 
975
        :param host: the server address
 
976
 
 
977
        :param port: the associated port (optional)
 
978
 
 
979
        :param user: login (optional)
 
980
 
 
981
        :param path: the absolute path on the server (optional)
 
982
 
 
983
        :return: A dict with containing thematching credentials or None.
 
984
           This includes:
 
985
           - name: the section name of the credentials in the
 
986
             authentication.conf file,
 
987
           - user: can't de different from the provided user if any,
 
988
           - password: the decoded password,
 
989
           - verify_certificates: https specific, True if the server
 
990
             certificate should be verified, False otherwise.
 
991
        """
965
992
        credentials = None
966
993
        for auth_def_name, auth_def in self._get_config().items():
967
 
            a_scheme, a_user, a_host, a_port, a_path = map(
968
 
                auth_def.get, ['scheme', 'user', 'host', 'port',
969
 
                               'path'])
 
994
            a_scheme, a_host, a_port, a_user, a_path = map(
 
995
                auth_def.get, ['scheme', 'host', 'port', 'user', 'path'])
 
996
 
 
997
            # Sanitize credentials
 
998
            if a_port is not None: a_port = int(a_port)
 
999
            try:
 
1000
                a_verify_certificates = auth_def.as_bool('verify_certificates')
 
1001
            except KeyError:
 
1002
                a_verify_certificates = True
 
1003
 
 
1004
            # Attempt matching
970
1005
            if a_scheme is not None and scheme != a_scheme:
971
1006
                continue
972
1007
            if a_host is not None:
973
1008
                if not (host == a_host
974
1009
                        or (a_host.startswith('.') and host.endswith(a_host))):
975
1010
                    continue
976
 
            if a_port is not None and port != int(a_port):
 
1011
            if a_port is not None and port != a_port:
977
1012
                continue
978
1013
            if (a_path is not None and path is not None
979
1014
                and not path.startswith(a_path)):
988
1023
            a_password, a_encoding = map(auth_def.get,
989
1024
                                         ['password', 'password_encoding'])
990
1025
            password = self.decode_password(a_password, a_encoding)
991
 
            try:
992
 
                verify_certificates = auth_def.as_bool('verify_certificates')
993
 
            except KeyError:
994
 
                verify_certificates = True
995
1026
            credentials = {'name': auth_def_name,
996
1027
                           'user': user, 'password': password,
997
 
                           'verify_certificates': verify_certificates,
 
1028
                           'verify_certificates': a_verify_certificates,
998
1029
                           }
999
1030
            break
1000
1031