This commit is contained in:
Iliyan Angelov
2025-09-14 23:24:25 +03:00
commit c67067a2a4
71311 changed files with 6800714 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
from allauth.socialaccount.providers.base import ProviderAccount
from allauth.socialaccount.providers.oauth.provider import OAuthProvider
class VimeoAccount(ProviderAccount):
pass
class VimeoProvider(OAuthProvider):
id = "vimeo"
name = "Vimeo"
account_class = VimeoAccount
def get_default_scope(self):
scope = []
return scope
def extract_uid(self, data):
return data["id"]
def extract_common_fields(self, data):
return dict(name=data.get("display_name"), username=data.get("username"))
provider_classes = [VimeoProvider]

View File

@@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
from allauth.socialaccount.tests import OAuthTestsMixin
from allauth.tests import MockedResponse, TestCase
from .provider import VimeoProvider
class VimeoTests(OAuthTestsMixin, TestCase):
provider_id = VimeoProvider.id
def get_mocked_response(self):
return [
MockedResponse(
200,
"""
{"generated_in":"0.0137",
"stat":"ok","person":{
"created_on": "2013-04-08 14:24:47",
"id":"17574504",
"is_contact":"0",
"is_plus":"0","is_pro":"0","is_staff":"0","is_subscribed_to":"0",
"username":"user17574504","display_name":"Raymond Penners","location":"",
"url":[""],"bio":"","number_of_contacts":"0","number_of_uploads":"0",
"number_of_likes":"0","number_of_videos":"0",
"number_of_videos_appears_in":"0","number_of_albums":"0",
"number_of_channels":"0","number_of_groups":"0",
"profileurl":"http:\\/\\/vimeo.com\\/user17574504",
"videosurl":"http:\\/\\/vimeo.com\\/user17574504\\/videos",
"portraits":{"portrait":[{"height":"30","width":"30",
"_content":
"http:\\/\\/a.vimeocdn.com\\/images_v6\\/portraits\\/portrait_30_yellow.png"},
{"height":"75","width":"75","_content":
"http:\\/\\/a.vimeocdn.com\\/images_v6\\/portraits\\/portrait_75_yellow.png"},
{"height":"100","width":"100","_content":
"http:\\/\\/a.vimeocdn.com\\/images_v6\\/portraits\\/portrait_100_yellow.png"},
{"height":"300","width":"300","_content":
"http:\\/\\/a.vimeocdn.com\\/images_v6\\/portraits\\/portrait_300_yellow.png"}]}}}
""",
)
]

View File

@@ -0,0 +1,6 @@
from allauth.socialaccount.providers.oauth.urls import default_urlpatterns
from .provider import VimeoProvider
urlpatterns = default_urlpatterns(VimeoProvider)

View File

@@ -0,0 +1,35 @@
import json
from allauth.socialaccount.providers.oauth.client import OAuth
from allauth.socialaccount.providers.oauth.views import (
OAuthAdapter,
OAuthCallbackView,
OAuthLoginView,
)
from .provider import VimeoProvider
class VimeoAPI(OAuth):
url = "http://vimeo.com/api/rest/v2?method=vimeo.people.getInfo"
def get_user_info(self):
url = self.url
data = json.loads(self.query(url, params=dict(format="json")))
return data["person"]
class VimeoOAuthAdapter(OAuthAdapter):
provider_id = VimeoProvider.id
request_token_url = "https://vimeo.com/oauth/request_token"
access_token_url = "https://vimeo.com/oauth/access_token"
authorize_url = "https://vimeo.com/oauth/authorize"
def complete_login(self, request, app, token, response):
client = VimeoAPI(request, app.client_id, app.secret, self.request_token_url)
extra_data = client.get_user_info()
return self.get_provider().sociallogin_from_response(request, extra_data)
oauth_login = OAuthLoginView.adapter_view(VimeoOAuthAdapter)
oauth_callback = OAuthCallbackView.adapter_view(VimeoOAuthAdapter)