mirror of
https://github.com/tgbot-collection/YYeTsBot.git
synced 2025-11-25 19:37:34 +08:00
add facebook oauth
This commit is contained in:
2
YYeTsFE
2
YYeTsFE
Submodule YYeTsFE updated: b0961e2986...378c39ee36
@@ -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,
|
||||||
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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"),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user