Cleaned up OAuth 2.0 support fully using Storage() and updating samples.
diff --git a/oauth2client/tools.py b/oauth2client/tools.py
index d541eeb..644e72b 100644
--- a/oauth2client/tools.py
+++ b/oauth2client/tools.py
@@ -23,111 +23,16 @@
 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
 __all__ = ["run"]
 
-import socket
-import sys
-import BaseHTTPServer
-import logging
 
-from optparse import OptionParser
-from oauth2client.file import Storage
-
-try:
-    from urlparse import parse_qsl
-except ImportError:
-    from cgi import parse_qsl
-
-# TODO(jcgregorio)
-#  - docs
-#  - error handling
-
-HOST_NAME = 'localhost'
-PORT_NUMBERS = [8080, 8090]
-
-class ClientRedirectServer(BaseHTTPServer.HTTPServer):
-  """A server to handle OAuth 2.0 redirects back to localhost.
-
-  Waits for a single request and parses the query parameters
-  into query_params and then stops serving.
-  """
-  query_params = {}
-
-class ClientRedirectHandler(BaseHTTPServer.BaseHTTPRequestHandler):
-  """A handler for OAuth 2.0 redirects back to localhost.
-
-  Waits for a single request and parses the query parameters
-  into the servers query_params and then stops serving.
-  """
-
-  def do_GET(s):
-    """Handle a GET request
-
-    Checks the query parameters and if an error
-    occurred print a message of failure, otherwise
-    indicate success.
-    """
-    s.send_response(200)
-    s.send_header("Content-type", "text/html")
-    s.end_headers()
-    query = s.path.split('?', 1)[-1]
-    query = dict(parse_qsl(query))
-    s.server.query_params = query
-    s.wfile.write("<html><head><title>Authentication Status</title></head>")
-    if 'error' in query:
-      s.wfile.write("<body><p>The authentication request failed.</p>")
-    else:
-      s.wfile.write("<body><p>You have successfully authenticated</p>")
-    s.wfile.write("</body></html>")
-
-  def log_message(self, format, *args):
-    """Do not log messages to stdout while running as a command line program."""
-    pass
-
-def run(flow, filename):
+def run(flow, storage):
   """Core code for a command-line application.
   """
-  parser = OptionParser()
-  parser.add_option("-f", "--file", dest="filename",
-      default=filename, help="write credentials to FILE", metavar="FILE")
-
-  # The support for localhost is a work in progress and does not
-  # work at this point.
-  #parser.add_option("-p", "--no_local_web_server", dest="localhost",
-  #    action="store_false",
-  #    default=True,
-  #    help="Do not run a web server on localhost to handle redirect URIs")
-
-  (options, args) = parser.parse_args()
-
-#if options.localhost:
-#  server_class = BaseHTTPServer.HTTPServer
-#  try:
-#    port_number = PORT_NUMBERS[0]
-#    httpd = server_class((HOST_NAME, port_number), ClientRedirectHandler)
-#  except socket.error:
-#    port_number = PORT_NUMBERS[1]
-#    try:
-#      httpd = server_class((HOST_NAME, port_number), ClientRedirectHandler)
-#    except socket.error:
-#      options.localhost = False
-#  redirect_uri = 'http://%s:%s/' % (HOST_NAME, port_number)
-#else:
-#  redirect_uri = 'oob'
-
-  redirect_uri = 'oob'
-
-  authorize_url = flow.step1_get_authorize_url(redirect_uri)
+  authorize_url = flow.step1_get_authorize_url('oob')
 
   print 'Go to the following link in your browser:'
   print authorize_url
   print
 
-#if options.localhost:
-#  httpd.handle_request()
-#  if 'error' in httpd.query_params:
-#    sys.exit('Authentication request was rejected.')
-#  if 'code' in httpd.query_params:
-#    code = httpd.query_params['code']
-#else:
   accepted = 'n'
   while accepted.lower() == 'n':
     accepted = raw_input('Have you authorized me? (y/n) ')
@@ -135,5 +40,9 @@
 
   credentials = flow.step2_exchange(code)
 
-  Storage(options.filename).put(credentials)
-  print "You have successfully authenticated."
+  storage.put(credentials)
+  credentials.set_store(storage.put)
+
+  print 'You have successfully authenticated.'
+
+  return credentials