Jelajahi Sumber

Added google login script that was forgotten in previous commits

Liron Shimrony 10 tahun lalu
induk
melakukan
7a082d6409
1 mengubah file dengan 109 tambahan dan 0 penghapusan
  1. 109 0
      hackathon_starter/hackathon/scripts/googlePlus.py

+ 109 - 0
hackathon_starter/hackathon/scripts/googlePlus.py

@@ -0,0 +1,109 @@
+import requests
+import urllib
+import simplejson as json
+import random
+import string
+
+
+AUTHORISE_URL = 'https://accounts.google.com/o/oauth2/auth'
+ACCESS_TOKEN_URL = 'https://accounts.google.com/o/oauth2/token'
+REDIRECT_URL = 'http://localhost:8000/hackathon/'
+PROFILE_API = 'https://www.googleapis.com/auth/plus.login'
+
+class GooglePlus:
+
+	access_token = None
+	session_id = None
+
+	def __init__(self, client_id, client_secret):
+		'''
+		Parameters:
+			client_id: string
+				- The client ID from the registering app on Google.
+
+			client_secret: string
+				-The client secret from the registering app on Google.
+		'''
+		self.client_id = client_id
+		self.client_secret = client_secret
+
+
+	def get_session_id(self, length=50):
+		'''
+		Generates a random session ID. As a part from the authentication process
+		we need to verify that the response we get from the server contains the
+		same session ID as we sent.
+
+		Parameters:
+			length: integer
+				- The length of the session ID.
+		'''
+		chars = string.uppercase + string.digits + string.lowercase
+		self.session_id = ''.join(random.choice(chars) for _ in range(length))
+
+
+	def get_authorize_url(self):
+		'''
+		Obtains authorize url link with the given client_id.
+
+		Returns:
+			authURL: string
+				- The authorization URL.
+		'''
+
+		self.get_session_id()
+		authSettings = {'state': self.session_id, 
+		                'redirect_uri':REDIRECT_URL,
+		                'response_type':'code',
+		                'client_id':self.client_id,
+		                'scope': PROFILE_API}
+
+		params = urllib.urlencode(authSettings)
+		return AUTHORISE_URL + '?' + params
+
+
+	def get_access_token(self, code, state):
+		'''
+		Obtains access token.
+
+		Parameters:
+			code: string
+				- The code is retrived from the authorization URL parameter 
+				to obtain access token.
+			state: string
+				- The unique session ID.
+		'''
+
+		#Checking that the sessino ID from the response match the session ID we sent
+		if state != self.session_id:
+			raise(Exception('Danger! Someone is messing up with you connection!'))
+
+		authSettings = {'client_secret': self.client_secret,
+		                'code':code,
+		                'grant_type':'authorization_code', 
+		                'client_id': self.client_id,
+		                'redirect_uri': 'http://localhost:8000/hackathon/'}
+
+		response = requests.post(ACCESS_TOKEN_URL, data=authSettings)
+		if response.status_code != 200:
+			raise(Exception('Invalid response, response code {c}'.format(c=response.status_code)))
+
+		self.access_token = response.json()['access_token']
+
+
+
+	def get_user_info(self):
+		'''
+		Obtain user information.
+
+		Returns:
+			content: dictionary
+				- A dictionary contains user information.
+		'''
+		USER_INFO_API = 'https://www.googleapis.com/oauth2/v2/userinfo'
+		params = urllib.urlencode({'access_token' : self.access_token})
+		response = requests.get(USER_INFO_API + '?' + params)
+		if response.status_code != 200:
+			raise(Exception('Invalid response, response code {c}'.format(c=response.status_code)))
+
+		return response.json()