Added ability to login to buzz and store oacurl.java compatible credentials in ~/.oacurl.properties
diff --git a/oacurl.py b/oacurl.py
index 68b4ca9..64493b5 100644
--- a/oacurl.py
+++ b/oacurl.py
@@ -11,13 +11,18 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-import optparse
+from apiclient.discovery import build
+from apiclient.oauth import FlowThreeLegged
+
+import datetime
 import httplib2
 import logging
 import oauth_wrap
+import optparse
 import os
 import sys
 
+
 def load_properties_file(path):
 	properties = {}
 	for line in open(path):
@@ -29,6 +34,20 @@
 		properties[key.strip()] = value.strip()
 	return properties
 
+
+def save_properties(consumer_key, consumer_secret, token_key, token_secret, path):
+	file = open(path, 'w')
+	
+	# File format and order is based on oacurl.java's defaults
+	now = datetime.datetime.today()
+	now_string = now.strftime('%a %b %d %H:%m:%S %Z %Y')
+	file.write('#%s\n' % now_string)
+	file.write('consumerSecret=%s\n' % consumer_secret)
+	file.write('accessToken=%s\n' % token_key)
+	file.write('consumerKey=%s\n' % consumer_key)
+	file.write('accessTokenSecret=%s\n' % token_secret)
+	file.close()
+
 def fetch(url):
 	logging.debug('Now fetching: %s' % url)
 	
@@ -38,6 +57,7 @@
 		
 		print 'You are not logged in'
 		sys.exit(1)
+
 	properties = load_properties_file(path)
 	oauth_parameters = {
 		'consumer_key': properties['consumerKey'], 
@@ -52,7 +72,48 @@
 	
 	return response,content
 
+
+def buzz_login():
+	buzz_discovery = build("buzz", "v1").auth_discovery()
+
+	flow = FlowThreeLegged(buzz_discovery,
+	                       consumer_key='anonymous',
+	                       consumer_secret='anonymous',
+	                       user_agent='google-api-client-python-buzz-cmdline/1.0',
+	                       domain='anonymous',
+	                       scope='https://www.googleapis.com/auth/buzz',
+	                       xoauth_displayname='oacurl.py')
+
+	authorize_url = flow.step1_get_authorize_url()
+
+	print 'Go to the following link in your browser:'
+	print authorize_url
+	print
+
+	accepted = 'n'
+	while accepted.lower() == 'n':
+	    accepted = raw_input('Have you authorized me? (y/n) ')
+	verification = raw_input('What is the verification code? ').strip()
+
+	credentials = flow.step2_exchange(verification)
+	path = os.path.expanduser('~/.oacurl.properties')
+	save_properties('anonymous', 'anonymous', credentials.token.key, credentials.token.secret,path)
+	
+	
+def generic_login():
+	#TODO(ade) Implement support for other services
+	print 'Support for services other than Buzz is not implemented yet. Sorry.'
+
+def login(options):
+	if options.buzz:
+		buzz_login()
+	else:
+		generic_login()
+
+
 def get_command(args):
+	if args[0] == 'login':
+		return 'login'
 	if args[0] == 'fetch':
 		return 'fetch'
 	return None
@@ -69,6 +130,7 @@
 	parser.set_defaults(verbose=False)
 	parser.add_option('-v', '--verbose', action='store_true', dest='verbose')
 	parser.add_option('-q', '--quiet', action='store_false', dest='verbose')
+	parser.add_option('--buzz', action='store_true', dest='buzz')
 	
 	(options, args) = parser.parse_args()
 
@@ -85,6 +147,10 @@
 		response, content = fetch(args[1])
 		print response
 		print content
+		return
+	
+	if command == 'login':
+		login(options)
 
 if __name__ == '__main__':
 	main()
\ No newline at end of file