示例#1
0
    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,
            },
        )
示例#2
0
文件: kakao.py 项目: actumn/jauth
    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
            })
示例#3
0
    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,
            },
        )
示例#4
0
文件: google.py 项目: pjongy/jauth
    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,
            },
        )
示例#5
0
文件: apple.py 项目: pjongy/jauth
    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
示例#6
0
文件: dummy.py 项目: pjongy/jauth
 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,
         },
     )
示例#7
0
文件: google.py 项目: actumn/jauth
    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,
        })
示例#8
0
文件: apple.py 项目: actumn/jauth
    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,
            })
示例#9
0
    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,
            })