summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-12-10 17:50:02 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-12-10 17:50:02 +0900
commitc60b83f0dd6febc7842612acf16fe1bc1d523987 (patch)
treeebb09f98397f479af654356900c0f3fe6f86da11 /src
parentv3322 (diff)
downloadsharkey-c60b83f0dd6febc7842612acf16fe1bc1d523987.tar.gz
sharkey-c60b83f0dd6febc7842612acf16fe1bc1d523987.tar.bz2
sharkey-c60b83f0dd6febc7842612acf16fe1bc1d523987.zip
Refactor
Diffstat (limited to 'src')
-rw-r--r--src/api/server.ts7
-rw-r--r--src/api/service/twitter.ts34
2 files changed, 23 insertions, 18 deletions
diff --git a/src/api/server.ts b/src/api/server.ts
index 026357b465..463b3f0176 100644
--- a/src/api/server.ts
+++ b/src/api/server.ts
@@ -49,13 +49,6 @@ endpoints.forEach(endpoint =>
app.post('/signup', require('./private/signup').default);
app.post('/signin', require('./private/signin').default);
-app.use((req, res, next) => {
- // req.headers['cookie'] は常に string ですが、型定義の都合上
- // string | string[] になっているので string を明示しています
- res.locals.user = ((req.headers['cookie'] as string || '').match(/i=(!\w+)/) || [null, null])[1];
- next();
-});
-
require('./service/github')(app);
require('./service/twitter')(app);
diff --git a/src/api/service/twitter.ts b/src/api/service/twitter.ts
index f164cdc458..e03cd5accb 100644
--- a/src/api/service/twitter.ts
+++ b/src/api/service/twitter.ts
@@ -12,15 +12,24 @@ import config from '../../conf';
import signin from '../common/signin';
module.exports = (app: express.Application) => {
+ function getUserToken(req) {
+ // req.headers['cookie'] は常に string ですが、型定義の都合上
+ // string | string[] になっているので string を明示しています
+ return ((req.headers['cookie'] as string || '').match(/i=(!\w+)/) || [null, null])[1];
+ }
+
app.get('/disconnect/twitter', async (req, res): Promise<any> => {
- if (res.locals.user == null) return res.send('plz signin');
+ const userToken = getUserToken(req);
+
+ if (userToken == null) return res.send('plz signin');
+
const user = await User.findOneAndUpdate({
- token: res.locals.user
+ token: userToken
}, {
- $set: {
- twitter: null
- }
- });
+ $set: {
+ twitter: null
+ }
+ });
res.send(`Twitterの連携を解除しました :v:`);
@@ -50,9 +59,10 @@ module.exports = (app: express.Application) => {
});
app.get('/connect/twitter', async (req, res): Promise<any> => {
- if (res.locals.user == null) return res.send('plz signin');
+ const userToken = getUserToken(req);
+ if (userToken == null) return res.send('plz signin');
const ctx = await twAuth.begin();
- redis.set(res.locals.user, JSON.stringify(ctx));
+ redis.set(userToken, JSON.stringify(ctx));
res.redirect(ctx.url);
});
@@ -77,7 +87,9 @@ module.exports = (app: express.Application) => {
});
app.get('/tw/cb', (req, res): any => {
- if (res.locals.user == null) {
+ const userToken = getUserToken(req);
+
+ if (userToken == null) {
// req.headers['cookie'] は常に string ですが、型定義の都合上
// string | string[] になっているので string を明示しています
const cookies = cookie.parse((req.headers['cookie'] as string || ''));
@@ -102,11 +114,11 @@ module.exports = (app: express.Application) => {
signin(res, user, true);
});
} else {
- redis.get(res.locals.user, async (_, ctx) => {
+ redis.get(userToken, async (_, ctx) => {
const result = await twAuth.done(JSON.parse(ctx), req.query.oauth_verifier);
const user = await User.findOneAndUpdate({
- token: res.locals.user
+ token: userToken
}, {
$set: {
twitter: {