async def get_user(self, token) -> ThirdPartyUser: status, response, _ = await self.get( url=f"{self.API_HOST}{self.USER_RESOURCE}", parameters={ "fields": "picture,name,id,email", "access_token": token }, ) if not 200 <= status < 300: raise ThirdPartyTokenVerifyError( f"Status is not OK: {status} / {response}") facebook_user: FacebookUser = deserialize.deserialize( FacebookUser, response) return deserialize.deserialize( ThirdPartyUser, { "email": facebook_user.email, "id": facebook_user.id, "type": UserType.FACEBOOK, "name": facebook_user.name, "image_url": facebook_user.picture.data.url, }, )
async def get_user(self, token) -> ThirdPartyUser: headers = {**self.DEFAULT_HEADERS, 'Authorization': f'Bearer {token}'} status, response, _ = await self.get( url=f'{self.API_HOST}{self.USER_RESOURCE}', headers=headers) if not 200 <= status < 300: raise ThirdPartyTokenVerifyError( f'Status is not OK: {status} / {response}') kakao_user: KakaoUser = deserialize.deserialize(KakaoUser, response) kakao_account = kakao_user.kakao_account return deserialize.deserialize( ThirdPartyUser, { 'email': kakao_account.email, 'id': kakao_user.id, 'type': UserType.KAKAO, 'name': kakao_account.profile.nickname, 'image_url': kakao_account.profile.profile_image_url, 'is_email_verified': kakao_account.is_email_verified and kakao_account.is_email_valid })
async def get_user(self, token) -> ThirdPartyUser: headers = {**self.DEFAULT_HEADERS, "Authorization": f"Bearer {token}"} status, response, _ = await self.get( url=f"{self.API_HOST}{self.USER_RESOURCE}", headers=headers) if not 200 <= status < 300: raise ThirdPartyTokenVerifyError( f"Status is not OK: {status} / {response}") kakao_user: KakaoUser = deserialize.deserialize(KakaoUser, response) kakao_account = kakao_user.kakao_account return deserialize.deserialize( ThirdPartyUser, { "email": kakao_account.email, "id": kakao_user.id, "type": UserType.KAKAO, "name": kakao_account.profile.nickname, "image_url": kakao_account.profile.profile_image_url, "is_email_verified": kakao_account.is_email_verified and kakao_account.is_email_valid, }, )
async def get_user(self, token) -> ThirdPartyUser: status, response, _ = await self.get( url=f"{self.API_HOST}{self.USER_RESOURCE}", parameters={ "id_token": token, }, ) if not 200 <= status < 300: raise ThirdPartyTokenVerifyError( f"Status is not OK: {status} / {response}") google_user: GoogleUser = deserialize.deserialize(GoogleUser, response) return deserialize.deserialize( ThirdPartyUser, { "email": google_user.email, "id": google_user.sub, "type": UserType.GOOGLE, "name": google_user.name, "image_url": google_user.picture, "is_email_verified": google_user.email_verified, }, )
async def _get_jwk_sets(self): status, response, _ = await self.get( url=f"{self.JWK_HOST}{self.JWK_RESOURCE}") if not 200 <= status < 300: raise ThirdPartyTokenVerifyError( f"status is not OK: {status} / {response}") key_sets = response["keys"] public_keys = {} for key in key_sets: public_keys[key["kid"]] = key return public_keys
async def get_user(self, external_token: str) -> ThirdPartyUser: if external_token not in self.available_third_party_tokens: raise ThirdPartyTokenVerifyError("invalid third party token") return deserialize.deserialize( ThirdPartyUser, { "id": self.available_third_party_tokens[external_token], "name": "dummy user", "email": "*****@*****.**", "image_url": "dummy.png", "is_email_verified": False, "type": self.user_type, }, )
async def get_user(self, token) -> ThirdPartyUser: status, response, _ = await self.get( url=f'{self.API_HOST}{self.USER_RESOURCE}', parameters={ 'id_token': token, } ) if not 200 <= status < 300: raise ThirdPartyTokenVerifyError(f'Status is not OK: {status} / {response}') google_user: GoogleUser = deserialize.deserialize(GoogleUser, response) return deserialize.deserialize(ThirdPartyUser, { 'email': google_user.email, 'id': google_user.sub, 'type': UserType.GOOGLE, 'name': google_user.name, 'image_url': google_user.picture, 'is_email_verified': google_user.email_verified, })
async def get_user(self, token) -> ThirdPartyUser: public_keys = await self._get_jwk_sets() key_id = pyjwt.get_unverified_header(token)['kid'] jwt_public_key = public_keys[key_id] apple_jwk = jwk.JWK(**jwt_public_key) try: apple_jwt = jwt.JWT(key=apple_jwk, jwt=token) except BaseException: raise ThirdPartyTokenVerifyError("invalid jwt") apple_user: AppleUser = deserialize.deserialize( AppleUser, jwt.json_decode(apple_jwt.claims)) return deserialize.deserialize( ThirdPartyUser, { 'email': apple_user.email, 'id': apple_user.sub, 'type': UserType.APPLE, 'is_email_verified': apple_user.email_verified, })
async def get_user(self, token) -> ThirdPartyUser: status, response, _ = await self.get( url=f'{self.API_HOST}{self.USER_RESOURCE}', parameters={ 'fields': 'picture,name,id,email', 'access_token': token }) if not 200 <= status < 300: raise ThirdPartyTokenVerifyError( f'Status is not OK: {status} / {response}') facebook_user: FacebookUser = deserialize.deserialize( FacebookUser, response) return deserialize.deserialize( ThirdPartyUser, { 'email': facebook_user.email, 'id': facebook_user.id, 'type': UserType.FACEBOOK, 'name': facebook_user.name, 'image_url': facebook_user.picture.data.url, })