def parse_auth(cls, entries, raise_on_error=False):
        """
        Parses authentication entries

        Args:
          entries:        Dict of authentication entries.
          raise_on_error: If set to true, an invalid format will raise
                          InvalidConfigFile

        Returns:
          Authentication registry.
        """

        conf = {}
        for registry, entry in six.iteritems(entries):
            if not isinstance(entry, dict):
                log.debug(
                    'Config entry for key {0} is not auth config'.format(
                        registry
                    )
                )
                # We sometimes fall back to parsing the whole config as if it
                # was the auth config by itself, for legacy purposes. In that
                # case, we fail silently and return an empty conf if any of the
                # keys is not formatted properly.
                if raise_on_error:
                    raise errors.InvalidConfigFile(
                        'Invalid configuration for registry {0}'.format(
                            registry
                        )
                    )
                return {}
            if 'identitytoken' in entry:
                log.debug(
                    'Found an IdentityToken entry for registry {0}'.format(
                        registry
                    )
                )
                conf[registry] = {
                    'IdentityToken': entry['identitytoken']
                }
                continue  # Other values are irrelevant if we have a token

            if 'auth' not in entry:
                # Starting with engine v1.11 (API 1.23), an empty dictionary is
                # a valid value in the auths config.
                # https://github.com/docker/compose/issues/3265
                log.debug(
                    'Auth data for {0} is absent. Client might be using a '
                    'credentials store instead.'.format(registry)
                )
                conf[registry] = {}
                continue

            username, password = decode_auth(entry['auth'])
            log.debug(
                'Found entry (registry={0}, username={1})'
                .format(repr(registry), repr(username))
            )

            conf[registry] = {
                'username': username,
                'password': password,
                'email': entry.get('email'),
                'serveraddress': registry,
            }
        return conf
def parse_auth ( cls , entries , raise_on_error = False ) : conf = { } for registry , entry in six . iteritems ( entries ) : if not isinstance ( entry , dict ) : log . debug ( 'Config entry for key {0} is not auth config' . format ( registry ) ) if raise_on_error : raise errors . InvalidConfigFile ( 'Invalid configuration for registry {0}' . format ( registry ) ) return { } if 'identitytoken' in entry : log . debug ( 'Found an IdentityToken entry for registry {0}' . format ( registry ) ) conf [ registry ] = { 'IdentityToken' : entry [ 'identitytoken' ] } continue if 'auth' not in entry : log . debug ( 'Auth data for {0} is absent. Client might be using a ' 'credentials store instead.' . format ( registry ) ) conf [ registry ] = { } continue username , password = decode_auth ( entry [ 'auth' ] ) log . debug ( 'Found entry (registry={0}, username={1})' . format ( repr ( registry ) , repr ( username ) ) ) conf [ registry ] = { 'username' : username , 'password' : password , 'email' : entry . get ( 'email' ) , 'serveraddress' : registry , } return conf
Parses authentication entries

        Args:
          entries:        Dict of authentication entries.
          raise_on_error: If set to true, an invalid format will raise
                          InvalidConfigFile

        Returns:
          Authentication registry.