#!/usr/bin/env ruby
require "openid/consumer/discovery"
require 'openid/fetchers'

OpenID::fetcher_use_env_http_proxy

$names = [[:server_url,   "Server URL  "],
          [:local_id,     "Local ID    "],
          [:canonical_id, "Canonical ID"],
         ]

def show_services(user_input, normalized, services)
  puts " Claimed identifier: #{normalized}"
  if services.empty?
    puts " No OpenID services found"
    puts
  else
    puts " Discovered services:"
    n = 0
    services.each do |service|
      n += 1
      puts "  #{n}."
      $names.each do |meth, name|
        val = service.send(meth)
        if val
          printf("     %s: %s\n", name, val)
        end
      end
      puts "     Type URIs:"
      for type_uri in service.type_uris
        puts "       * #{type_uri}"
      end
      puts
    end
  end
end

ARGV.each do |openid_identifier|
  puts "=" * 50
  puts "Running discovery on #{openid_identifier}"
  begin
    normalized_identifier, services = OpenID.discover(openid_identifier)
  rescue OpenID::DiscoveryFailure => why
    puts "Discovery failed: #{why.message}"
    puts
  else
    show_services(openid_identifier, normalized_identifier, services)
  end
end
