add facebook oauth

This commit is contained in:
Benny
2023-02-10 18:40:46 +01:00
parent 0c1d37c29c
commit 6eb5dc8319
3 changed files with 43 additions and 11 deletions

Submodule YYeTsFE updated: b0961e2986...378c39ee36

View File

@@ -1029,8 +1029,12 @@ class OAuth2Handler(BaseHandler, OAuth2Mixin):
args.update(extra_fields) args.update(extra_fields)
return requests.post(self._OAUTH_ACCESS_TOKEN_URL, headers={"Accept": "application/json"}, data=args).json() return requests.post(self._OAUTH_ACCESS_TOKEN_URL, headers={"Accept": "application/json"}, data=args).json()
def oauth2_sync_request(self, access_token): def oauth2_sync_request(self, access_token, extra_fields=None):
return requests.get(self._OAUTH_API_REQUEST_URL, headers={"Authorization": f"Bearer {access_token}"}).json() return requests.get(
self._OAUTH_API_REQUEST_URL,
headers={"Authorization": f"Bearer {access_token}"},
params=extra_fields
).json()
def get_secret(self, settings_key): def get_secret(self, settings_key):
settings = self.settings.get(settings_key) settings = self.settings.get(settings_key)
@@ -1117,3 +1121,28 @@ class TwitterOAuth2LoginHandler(TwitterMixin, OAuth2Handler):
self.add_oauth_user(username, "Twitter") self.add_oauth_user(username, "Twitter")
else: else:
await self.authorize_redirect(extra_params={"x_auth_access_type": "read"}) await self.authorize_redirect(extra_params={"x_auth_access_type": "read"})
class FacebookAuth2LoginHandler(OAuth2Handler):
_OAUTH_AUTHORIZE_URL = "https://www.facebook.com/v16.0/dialog/oauth"
_OAUTH_ACCESS_TOKEN_URL = "https://graph.facebook.com/oauth/access_token"
_OAUTH_API_REQUEST_URL = "https://graph.facebook.com/me"
def get(self):
client_id, client_secret, redirect_uri = self.get_secret("fb_oauth")
code = self.get_argument('code', None)
if code:
access = self.get_authenticated_user(
client_id, client_secret, code,
{"redirect_uri": redirect_uri}
)
resp = self.oauth2_sync_request(access["access_token"], {"fields": "email"})
email = resp["email"]
self.add_oauth_user(email, "Facebook")
else:
self.authorize_redirect(
redirect_uri=redirect_uri,
client_id=client_id,
)

View File

@@ -21,19 +21,20 @@ from tornado import httpserver, ioloop, options, web
from tornado.log import enable_pretty_logging from tornado.log import enable_pretty_logging
import dump_db import dump_db
from Mongo import OtherMongoResource, ResourceLatestMongoResource
from handler import (AnnouncementHandler, BlacklistHandler, CaptchaHandler, from handler import (AnnouncementHandler, BlacklistHandler, CaptchaHandler,
CategoryHandler, CommentChildHandler, CommentHandler, CategoryHandler, CommentChildHandler, CommentHandler,
CommentNewestHandler, CommentReactionHandler, CommentNewestHandler, CommentReactionHandler,
DBDumpHandler, DoubanHandler, DoubanReportHandler, DBDumpHandler, DoubanHandler, DoubanReportHandler,
GitHubOAuth2LoginHandler, GoogleOAuth2LoginHandler, FacebookAuth2LoginHandler, GitHubOAuth2LoginHandler,
GrafanaIndexHandler, GrafanaQueryHandler, GoogleOAuth2LoginHandler, GrafanaIndexHandler,
GrafanaSearchHandler, IndexHandler, LikeHandler, GrafanaQueryHandler, GrafanaSearchHandler, IndexHandler,
MetricsHandler, MSOAuth2LoginHandler, NameHandler, LikeHandler, MetricsHandler, MSOAuth2LoginHandler,
NotFoundHandler, NotificationHandler, ResourceHandler, NameHandler, NotFoundHandler, NotificationHandler,
ResourceLatestHandler, SpamProcessHandler, TopHandler, ResourceHandler, ResourceLatestHandler,
TwitterOAuth2LoginHandler, UserEmailHandler, UserHandler) SpamProcessHandler, TopHandler, TwitterOAuth2LoginHandler,
UserEmailHandler, UserHandler)
from migration.douban_sync import sync_douban from migration.douban_sync import sync_douban
from Mongo import OtherMongoResource, ResourceLatestMongoResource
from utils import Cloudflare from utils import Cloudflare
enable_pretty_logging() enable_pretty_logging()
@@ -74,6 +75,7 @@ class RunServer:
(r'/auth/google', GoogleOAuth2LoginHandler), (r'/auth/google', GoogleOAuth2LoginHandler),
(r'/auth/twitter', TwitterOAuth2LoginHandler), (r'/auth/twitter', TwitterOAuth2LoginHandler),
(r'/auth/microsoft', MSOAuth2LoginHandler), (r'/auth/microsoft', MSOAuth2LoginHandler),
(r'/auth/facebook', FacebookAuth2LoginHandler),
(r'/(.*\.html|.*\.js|.*\.css|.*\.png|.*\.jpg|.*\.ico|.*\.gif|.*\.woff2|.*\.gz|.*\.zip|' (r'/(.*\.html|.*\.js|.*\.css|.*\.png|.*\.jpg|.*\.ico|.*\.gif|.*\.woff2|.*\.gz|.*\.zip|'
r'.*\.svg|.*\.json|.*\.txt)', r'.*\.svg|.*\.json|.*\.txt)',
@@ -87,6 +89,7 @@ class RunServer:
"google_oauth": {"key": os.getenv("GOOGLE_CLIENT_ID"), "secret": os.getenv("GOOGLE_CLIENT_SECRET")}, "google_oauth": {"key": os.getenv("GOOGLE_CLIENT_ID"), "secret": os.getenv("GOOGLE_CLIENT_SECRET")},
"github_oauth": {"key": os.getenv("GITHUB_CLIENT_ID"), "secret": os.getenv("GITHUB_CLIENT_SECRET")}, "github_oauth": {"key": os.getenv("GITHUB_CLIENT_ID"), "secret": os.getenv("GITHUB_CLIENT_SECRET")},
"ms_oauth": {"key": os.getenv("MS_CLIENT_ID"), "secret": os.getenv("MS_CLIENT_SECRET")}, "ms_oauth": {"key": os.getenv("MS_CLIENT_ID"), "secret": os.getenv("MS_CLIENT_SECRET")},
"fb_oauth": {"key": os.getenv("FB_CLIENT_ID"), "secret": os.getenv("FB_CLIENT_SECRET")},
"twitter_consumer_key": os.getenv("TWITTER_CONSUMER_KEY"), "twitter_consumer_key": os.getenv("TWITTER_CONSUMER_KEY"),
"twitter_consumer_secret": os.getenv("TWITTER_CONSUMER_SECRET"), "twitter_consumer_secret": os.getenv("TWITTER_CONSUMER_SECRET"),
} }