summaryrefslogtreecommitdiff
path: root/src/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/api')
-rw-r--r--src/api/service/twitter.ts97
1 files changed, 45 insertions, 52 deletions
diff --git a/src/api/service/twitter.ts b/src/api/service/twitter.ts
index b5dfc2c99a..f164cdc458 100644
--- a/src/api/service/twitter.ts
+++ b/src/api/service/twitter.ts
@@ -49,12 +49,6 @@ module.exports = (app: express.Application) => {
callbackUrl: `${config.api_url}/tw/cb`
});
- const twAuthSignin = autwh({
- consumerKey: config.twitter.consumer_key,
- consumerSecret: config.twitter.consumer_secret,
- callbackUrl: `${config.api_url}/signin/twitter/cb`
- });
-
app.get('/connect/twitter', async (req, res): Promise<any> => {
if (res.locals.user == null) return res.send('plz signin');
const ctx = await twAuth.begin();
@@ -62,36 +56,8 @@ module.exports = (app: express.Application) => {
res.redirect(ctx.url);
});
- app.get('/tw/cb', (req, res): any => {
- if (res.locals.user == null) return res.send('plz signin');
- redis.get(res.locals.user, async (_, ctx) => {
- const result = await twAuth.done(JSON.parse(ctx), req.query.oauth_verifier);
-
- const user = await User.findOneAndUpdate({
- token: res.locals.user
- }, {
- $set: {
- twitter: {
- access_token: result.accessToken,
- access_token_secret: result.accessTokenSecret,
- user_id: result.userId,
- screen_name: result.screenName
- }
- }
- });
-
- res.send(`Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`);
-
- // Publish i updated event
- event(user._id, 'i_updated', await serialize(user, user, {
- detail: true,
- includeSecrets: true
- }));
- });
- });
-
app.get('/signin/twitter', async (req, res): Promise<any> => {
- const ctx = await twAuthSignin.begin();
+ const ctx = await twAuth.begin();
const sessid = uuid();
@@ -110,29 +76,56 @@ module.exports = (app: express.Application) => {
res.redirect(ctx.url);
});
- app.get('/signin/twitter/cb', (req, res): any => {
- // req.headers['cookie'] は常に string ですが、型定義の都合上
- // string | string[] になっているので string を明示しています
- const cookies = cookie.parse((req.headers['cookie'] as string || ''));
+ app.get('/tw/cb', (req, res): any => {
+ if (res.locals.user == null) {
+ // req.headers['cookie'] は常に string ですが、型定義の都合上
+ // string | string[] になっているので string を明示しています
+ const cookies = cookie.parse((req.headers['cookie'] as string || ''));
- const sessid = cookies['signin_with_twitter_session_id'];
+ const sessid = cookies['signin_with_twitter_session_id'];
- if (sessid == undefined) {
- res.status(400).send('invalid session');
- }
+ if (sessid == undefined) {
+ res.status(400).send('invalid session');
+ }
+
+ redis.get(sessid, async (_, ctx) => {
+ const result = await twAuth.done(JSON.parse(ctx), req.query.oauth_verifier);
+
+ const user = await User.findOne({
+ 'twitter.user_id': result.userId
+ });
- redis.get(sessid, async (_, ctx) => {
- const result = await twAuthSignin.done(JSON.parse(ctx), req.query.oauth_verifier);
+ if (user == null) {
+ res.status(404).send(`@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
+ }
- const user = await User.findOne({
- 'twitter.user_id': result.userId
+ signin(res, user, true);
});
+ } else {
+ redis.get(res.locals.user, async (_, ctx) => {
+ const result = await twAuth.done(JSON.parse(ctx), req.query.oauth_verifier);
- if (user == null) {
- res.status(404).send(`@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
- }
+ const user = await User.findOneAndUpdate({
+ token: res.locals.user
+ }, {
+ $set: {
+ twitter: {
+ access_token: result.accessToken,
+ access_token_secret: result.accessTokenSecret,
+ user_id: result.userId,
+ screen_name: result.screenName
+ }
+ }
+ });
- signin(res, user, true);
- });
+ res.send(`Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`);
+
+ // Publish i updated event
+ event(user._id, 'i_updated', await serialize(user, user, {
+ detail: true,
+ includeSecrets: true
+ }));
+ });
+ }
});
};