#!/usr/bin/env python
from __future__ import unicode_literals

from openid.consumer.discover import DiscoveryFailure, discover
from openid.fetchers import HTTPFetchingError

names = [["server_url", "Server URL  "],
         ["local_id", "Local ID    "],
         ["canonicalID", "Canonical ID"],
         ]


def show_services(user_input, normalized, services):
    print(" Claimed identifier:", normalized)
    if services:
        print(" Discovered OpenID services:")
        for n, service in enumerate(services):
            print(" %s." % (n,))
            for attr, name in names:
                val = getattr(service, attr, None)
                if val is not None:
                    print("  %s: %s" % (name, val))

            print("  Type URIs:")
            for type_uri in service.type_uris:
                print("   *", type_uri)

            print()

    else:
        print(" No OpenID services found")
        print()


if __name__ == "__main__":
    import sys

    for user_input in sys.argv[1:]:
        print("=" * 50)
        print("Running discovery on", user_input)
        try:
            normalized, services = discover(user_input)
        except DiscoveryFailure as why:
            print("Discovery failed:", why)
            print()
        except HTTPFetchingError as why:
            print("HTTP request failed:", why)
            print()
        else:
            show_services(user_input, normalized, services)
