This commit is contained in:
parent
cfedf1d0f6
commit
41f37d09e6
1 changed files with 48 additions and 55 deletions
|
@ -49,12 +49,6 @@ module.exports = (app: express.Application) => {
|
||||||
callbackUrl: `${config.api_url}/tw/cb`
|
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> => {
|
app.get('/connect/twitter', async (req, res): Promise<any> => {
|
||||||
if (res.locals.user == null) return res.send('plz signin');
|
if (res.locals.user == null) return res.send('plz signin');
|
||||||
const ctx = await twAuth.begin();
|
const ctx = await twAuth.begin();
|
||||||
|
@ -62,36 +56,8 @@ module.exports = (app: express.Application) => {
|
||||||
res.redirect(ctx.url);
|
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> => {
|
app.get('/signin/twitter', async (req, res): Promise<any> => {
|
||||||
const ctx = await twAuthSignin.begin();
|
const ctx = await twAuth.begin();
|
||||||
|
|
||||||
const sessid = uuid();
|
const sessid = uuid();
|
||||||
|
|
||||||
|
@ -110,29 +76,56 @@ module.exports = (app: express.Application) => {
|
||||||
res.redirect(ctx.url);
|
res.redirect(ctx.url);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.get('/signin/twitter/cb', (req, res): any => {
|
app.get('/tw/cb', (req, res): any => {
|
||||||
// req.headers['cookie'] は常に string ですが、型定義の都合上
|
if (res.locals.user == null) {
|
||||||
// string | string[] になっているので string を明示しています
|
// req.headers['cookie'] は常に string ですが、型定義の都合上
|
||||||
const cookies = cookie.parse((req.headers['cookie'] as 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) {
|
if (sessid == undefined) {
|
||||||
res.status(400).send('invalid session');
|
res.status(400).send('invalid session');
|
||||||
}
|
|
||||||
|
|
||||||
redis.get(sessid, async (_, ctx) => {
|
|
||||||
const result = await twAuthSignin.done(JSON.parse(ctx), req.query.oauth_verifier);
|
|
||||||
|
|
||||||
const user = await User.findOne({
|
|
||||||
'twitter.user_id': result.userId
|
|
||||||
});
|
|
||||||
|
|
||||||
if (user == null) {
|
|
||||||
res.status(404).send(`@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
signin(res, user, true);
|
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
|
||||||
|
});
|
||||||
|
|
||||||
|
if (user == null) {
|
||||||
|
res.status(404).send(`@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
|
||||||
|
}
|
||||||
|
|
||||||
|
signin(res, user, true);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
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
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue