def google(self): access_token_url = 'https://accounts.google.com/o/oauth2/token' people_api_url = 'https://www.googleapis.com/plus/v1/people/me/openIdConnect' payload = dict(client_id=request.json['clientId'], redirect_uri=request.json['redirectUri'], client_secret=self._secrets.google_secret, code=request.json['code'], grant_type='authorization_code') # Step 1. Exchange authorization code for access token. r = requests.post(access_token_url, data=payload) token = json.loads(r.text) headers = {'Authorization': 'Bearer {0}'.format(token['access_token'])} # Step 2. Retrieve information about the current user. r = requests.get(people_api_url, headers=headers) profile = json.loads(r.text) maybe_user = self._user_repository.get_by_google_id( google_id=profile['sub']) if maybe_user.exists(): user = maybe_user.values()[0] token = create_token(user) return jsonify(token=token) maybe_user_with_same_email = self._user_repository.get_by_email( email=profile['email']) # Link accounts if maybe_user_with_same_email.exists(): user = maybe_user_with_same_email.values()[0].copy_user() user_already_have_google_id = user.google is not None and str( user.google).strip() != '' if user_already_have_google_id: raise KeyError( "user already exist for this email address with another facebook account" ) user.google = profile['sub'] if user.display_name is None: user.display_name = profile['name'] if user.pic_link is None: user.pic_link = profile['picture'] self._user_repository.update(user.id, user) token = create_token(user) return jsonify(token=token) u = User(facebook=profile['id'], display_name=profile['name'], email=profile['email'], pic_link=profile['image']) self._user_repository.add(u) token = create_token(u) return jsonify(token=token)
def signup(self): hashed_password = self._password_hasher.encode( request.json['password']) user = User(email=request.json['email'], hashed_password=hashed_password, display_name=request.json['displayName']) self._user_repository.add(user) token = create_token(user) return jsonify(token=token)
def google(self): access_token_url = 'https://accounts.google.com/o/oauth2/token' people_api_url = 'https://www.googleapis.com/plus/v1/people/me/openIdConnect' payload = dict(client_id=request.json['clientId'], redirect_uri=request.json['redirectUri'], client_secret=self._secrets.google_secret, code=request.json['code'], grant_type='authorization_code') # Step 1. Exchange authorization code for access token. r = requests.post(access_token_url, data=payload) token = json.loads(r.text) headers = {'Authorization': 'Bearer {0}'.format(token['access_token'])} # Step 2. Retrieve information about the current user. r = requests.get(people_api_url, headers=headers) profile = json.loads(r.text) maybe_user = self._user_repository.get_by_google_id(google_id=profile['sub']) if maybe_user.exists(): user = maybe_user.values()[0] token = create_token(user) return jsonify(token=token) maybe_user_with_same_email = self._user_repository.get_by_email(email=profile['email']) # Link accounts if maybe_user_with_same_email.exists(): user = maybe_user_with_same_email.values()[0].copy_user() user_already_have_google_id = user.google is not None and str(user.google).strip() != '' if user_already_have_google_id: raise KeyError("user already exist for this email address with another facebook account") user.google = profile['sub'] if user.display_name is None: user.display_name = profile['name'] if user.pic_link is None: user.pic_link = profile['picture'] self._user_repository.update(user.id, user) token = create_token(user) return jsonify(token=token) u = User(facebook=profile['id'], display_name=profile['name'], email=profile['email'], pic_link=profile['image']) self._user_repository.add(u) token = create_token(u) return jsonify(token=token)
def login(self): maybe_user = self._user_repository.get_by_email(email=request.json['email']) if maybe_user.exists(): user = maybe_user.values()[0] if not maybe_user.exists() or not user.hashed_password or not self._password_hasher.verify(request.json['password'], user.hashed_password): response = jsonify(message='Wrong Email or Password') response.status_code = 401 return response token = create_token(user) return jsonify(token=token)
def login(self): maybe_user = self._user_repository.get_by_email( email=request.json['email']) if maybe_user.exists(): user = maybe_user.values()[0] if not maybe_user.exists( ) or not user.hashed_password or not self._password_hasher.verify( request.json['password'], user.hashed_password): response = jsonify(message='Wrong Email or Password') response.status_code = 401 return response token = create_token(user) return jsonify(token=token)
def signup(self): hashed_password = self._password_hasher.encode(request.json['password']) user = User(email=request.json['email'], hashed_password=hashed_password, display_name=request.json['displayName']) self._user_repository.add(user) token = create_token(user) return jsonify(token=token)
def facebook(self): if self._secrets.facebook_secret is None or str(self._secrets.facebook_secret).strip() == '': raise ValueError("facebook_secret") access_token_url = 'https://graph.facebook.com/v2.3/oauth/access_token' graph_api_url = 'https://graph.facebook.com/v2.3/me' params = { 'client_id': request.json['clientId'], 'redirect_uri': request.json['redirectUri'], 'client_secret': self._secrets.facebook_secret, 'code': request.json['code'] } # Step 1. Exchange authorization code for access token. r = requests.get(access_token_url, params=params) access_token = json.loads(r.text) # Step 2. Retrieve information about the current user. r = requests.get(graph_api_url, params=access_token) profile = json.loads(r.text) # Step 3. (optional) Link accounts. if request.headers.get('Authorization'): maybe_user = self._user_repository.get_by_facebook_id(facebook_id=profile['id']) if maybe_user.exists(): response = jsonify(message='There is already a Facebook account that belongs to you') response.status_code = 409 return response payload = parse_token(request) maybe_user = self._user_repository.get_by_id(user_id=payload['sub']) if not maybe_user.exists(): response = jsonify(message='User not found') response.status_code = 400 return response user = maybe_user.values()[0] user.facebook = profile['id'] user.display_name = profile['name'] if user.email is None: user.email = profile['email'] if user.pic_link is None: user.pic_link = self._create_facebook_pic_link(user.facebook) self._user_repository.update(user.id, user) token = create_token(user) return jsonify(token=token) # Step 4. Create a new account or return an existing one. maybe_user = self._user_repository.get_by_facebook_id(facebook_id=profile['id']) if maybe_user.exists(): user = maybe_user.values()[0] token = create_token(user) return jsonify(token=token) maybe_user_with_same_email = self._user_repository.get_by_email(email=profile['email']) # Link accounts if maybe_user_with_same_email.exists(): user = maybe_user_with_same_email.values()[0].copy_user() user_already_have_facebook_id = user.facebook is not None and str(user.facebook).strip() != '' if user_already_have_facebook_id: raise KeyError("user already exist for this email address with another facebook account") user.facebook = profile['id'] if user.display_name is None: user.display_name = profile['name'] if user.pic_link is None: user.pic_link = self._create_facebook_pic_link(user.facebook) self._user_repository.update(user.id, user) token = create_token(user) return jsonify(token=token) pic_link = self._create_facebook_pic_link(profile['id']) u = User(facebook=profile['id'], display_name=profile['name'], email=profile['email'], pic_link=pic_link) self._user_repository.add(u) token = create_token(u) return jsonify(token=token)
def facebook(self): if self._secrets.facebook_secret is None or str( self._secrets.facebook_secret).strip() == '': raise ValueError("facebook_secret") access_token_url = 'https://graph.facebook.com/v2.3/oauth/access_token' graph_api_url = 'https://graph.facebook.com/v2.3/me' params = { 'client_id': request.json['clientId'], 'redirect_uri': request.json['redirectUri'], 'client_secret': self._secrets.facebook_secret, 'code': request.json['code'] } # Step 1. Exchange authorization code for access token. r = requests.get(access_token_url, params=params) access_token = json.loads(r.text) # Step 2. Retrieve information about the current user. r = requests.get(graph_api_url, params=access_token) profile = json.loads(r.text) # Step 3. (optional) Link accounts. if request.headers.get('Authorization'): maybe_user = self._user_repository.get_by_facebook_id( facebook_id=profile['id']) if maybe_user.exists(): response = jsonify( message= 'There is already a Facebook account that belongs to you') response.status_code = 409 return response payload = parse_token(request) maybe_user = self._user_repository.get_by_id( user_id=payload['sub']) if not maybe_user.exists(): response = jsonify(message='User not found') response.status_code = 400 return response user = maybe_user.values()[0] user.facebook = profile['id'] user.display_name = profile['name'] if user.email is None: user.email = profile['email'] if user.pic_link is None: user.pic_link = self._create_facebook_pic_link(user.facebook) self._user_repository.update(user.id, user) token = create_token(user) return jsonify(token=token) # Step 4. Create a new account or return an existing one. maybe_user = self._user_repository.get_by_facebook_id( facebook_id=profile['id']) if maybe_user.exists(): user = maybe_user.values()[0] token = create_token(user) return jsonify(token=token) maybe_user_with_same_email = self._user_repository.get_by_email( email=profile['email']) # Link accounts if maybe_user_with_same_email.exists(): user = maybe_user_with_same_email.values()[0].copy_user() user_already_have_facebook_id = user.facebook is not None and str( user.facebook).strip() != '' if user_already_have_facebook_id: raise KeyError( "user already exist for this email address with another facebook account" ) user.facebook = profile['id'] if user.display_name is None: user.display_name = profile['name'] if user.pic_link is None: user.pic_link = self._create_facebook_pic_link(user.facebook) self._user_repository.update(user.id, user) token = create_token(user) return jsonify(token=token) pic_link = self._create_facebook_pic_link(profile['id']) u = User(facebook=profile['id'], display_name=profile['name'], email=profile['email'], pic_link=pic_link) self._user_repository.add(u) token = create_token(u) return jsonify(token=token)