summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/activitypub.ts7
-rw-r--r--src/server/api/common/get-host-lower.ts2
-rw-r--r--src/server/api/endpoints/users/notes.ts2
-rw-r--r--src/server/api/endpoints/users/recommendation.ts14
-rw-r--r--src/server/api/private/signup.ts1
-rw-r--r--src/server/api/service/twitter.ts80
-rw-r--r--src/server/file/index.ts1
-rw-r--r--src/server/index.ts9
-rw-r--r--src/server/web/url-preview.ts4
9 files changed, 66 insertions, 54 deletions
diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts
index 2a99bccfc4..e27e2552f3 100644
--- a/src/server/activitypub.ts
+++ b/src/server/activitypub.ts
@@ -1,5 +1,6 @@
import * as Router from 'koa-router';
-import { parseRequest } from 'http-signature';
+const json = require('koa-json-body');
+const httpSignature = require('http-signature');
import { createHttp } from '../queue';
import pack from '../remote/activitypub/renderer';
@@ -18,13 +19,13 @@ const router = new Router();
//#region Routing
// inbox
-router.post('/users/:user/inbox', ctx => {
+router.post('/users/:user/inbox', json(), ctx => {
let signature;
ctx.req.headers.authorization = 'Signature ' + ctx.req.headers.signature;
try {
- signature = parseRequest(ctx.req);
+ signature = httpSignature.parseRequest(ctx.req);
} catch (e) {
ctx.status = 401;
return;
diff --git a/src/server/api/common/get-host-lower.ts b/src/server/api/common/get-host-lower.ts
index fc4b30439e..550c233001 100644
--- a/src/server/api/common/get-host-lower.ts
+++ b/src/server/api/common/get-host-lower.ts
@@ -1,5 +1,5 @@
import { toUnicode } from 'punycode';
export default host => {
- return toUnicode(host).replace(/[A-Z]+/, match => match.toLowerCase());
+ return toUnicode(host).toLowerCase();
};
diff --git a/src/server/api/endpoints/users/notes.ts b/src/server/api/endpoints/users/notes.ts
index e91b75e1d3..bd4247c79c 100644
--- a/src/server/api/endpoints/users/notes.ts
+++ b/src/server/api/endpoints/users/notes.ts
@@ -65,7 +65,7 @@ module.exports = (params, me) => new Promise(async (res, rej) => {
const q = userId !== undefined
? { _id: userId }
- : { usernameLower: username.toLowerCase(), hostLower: getHostLower(host) } ;
+ : { usernameLower: username.toLowerCase(), host: getHostLower(host) } ;
// Lookup user
const user = await User.findOne(q, {
diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts
index 2de22da13e..e367e65a6c 100644
--- a/src/server/api/endpoints/users/recommendation.ts
+++ b/src/server/api/endpoints/users/recommendation.ts
@@ -30,15 +30,13 @@ module.exports = (params, me) => new Promise(async (res, rej) => {
_id: {
$nin: followingIds
},
- $or: [
- {
- 'lastUsedAt': {
- $gte: new Date(Date.now() - ms('7days'))
- }
- }, {
- host: { $ne: null }
+ $or: [{
+ 'lastUsedAt': {
+ $gte: new Date(Date.now() - ms('7days'))
}
- ]
+ }, {
+ host: null
+ }]
}, {
limit: limit,
skip: offset,
diff --git a/src/server/api/private/signup.ts b/src/server/api/private/signup.ts
index 15257b869f..cf51dec4d2 100644
--- a/src/server/api/private/signup.ts
+++ b/src/server/api/private/signup.ts
@@ -118,7 +118,6 @@ export default async (ctx: Koa.Context) => {
username: username,
usernameLower: username.toLowerCase(),
host: null,
- hostLower: null,
keypair: generateKeypair(),
token: secret,
email: null,
diff --git a/src/server/api/service/twitter.ts b/src/server/api/service/twitter.ts
index 9fb01b44ef..284ae7ee22 100644
--- a/src/server/api/service/twitter.ts
+++ b/src/server/api/service/twitter.ts
@@ -107,7 +107,7 @@ if (config.twitter == null) {
ctx.redirect(twCtx.url);
});
- router.get('/tw/cb', ctx => {
+ router.get('/tw/cb', async ctx => {
const userToken = getUserToken(ctx);
if (userToken == null) {
@@ -118,21 +118,27 @@ if (config.twitter == null) {
return;
}
- redis.get(sessid, async (_, twCtx) => {
- const result = await twAuth.done(JSON.parse(twCtx), ctx.query.oauth_verifier);
+ const get = new Promise<any>((res, rej) => {
+ redis.get(sessid, async (_, twCtx) => {
+ res(twCtx);
+ });
+ });
- const user = await User.findOne({
- host: null,
- 'twitter.userId': result.userId
- }) as ILocalUser;
+ const twCtx = await get;
- if (user == null) {
- ctx.throw(404, `@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
- return;
- }
+ const result = await twAuth.done(JSON.parse(twCtx), ctx.query.oauth_verifier);
- signin(ctx, user, true);
- });
+ const user = await User.findOne({
+ host: null,
+ 'twitter.userId': result.userId
+ }) as ILocalUser;
+
+ if (user == null) {
+ ctx.throw(404, `@${result.screenName}と連携しているMisskeyアカウントはありませんでした...`);
+ return;
+ }
+
+ signin(ctx, user, true);
} else {
const verifier = ctx.query.oauth_verifier;
@@ -141,31 +147,37 @@ if (config.twitter == null) {
return;
}
- redis.get(userToken, async (_, twCtx) => {
- const result = await twAuth.done(JSON.parse(twCtx), verifier);
-
- const user = await User.findOneAndUpdate({
- host: null,
- token: userToken
- }, {
- $set: {
- twitter: {
- accessToken: result.accessToken,
- accessTokenSecret: result.accessTokenSecret,
- userId: result.userId,
- screenName: result.screenName
- }
- }
+ const get = new Promise<any>((res, rej) => {
+ redis.get(userToken, async (_, twCtx) => {
+ res(twCtx);
});
+ });
+
+ const twCtx = await get;
- ctx.body = `Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`;
+ const result = await twAuth.done(JSON.parse(twCtx), verifier);
- // Publish i updated event
- event(user._id, 'i_updated', await pack(user, user, {
- detail: true,
- includeSecrets: true
- }));
+ const user = await User.findOneAndUpdate({
+ host: null,
+ token: userToken
+ }, {
+ $set: {
+ twitter: {
+ accessToken: result.accessToken,
+ accessTokenSecret: result.accessTokenSecret,
+ userId: result.userId,
+ screenName: result.screenName
+ }
+ }
});
+
+ ctx.body = `Twitter: @${result.screenName} を、Misskey: @${user.username} に接続しました!`;
+
+ // Publish i updated event
+ event(user._id, 'i_updated', await pack(user, user, {
+ detail: true,
+ includeSecrets: true
+ }));
}
});
}
diff --git a/src/server/file/index.ts b/src/server/file/index.ts
index d305286d12..29056c63e7 100644
--- a/src/server/file/index.ts
+++ b/src/server/file/index.ts
@@ -14,6 +14,7 @@ const app = new Koa();
app.use(cors());
app.use(async (ctx, next) => {
+ // Cache 365days
ctx.set('Cache-Control', 'max-age=31536000, immutable');
await next();
});
diff --git a/src/server/index.ts b/src/server/index.ts
index db41a1dcb5..5db3da2b93 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -53,6 +53,7 @@ function createServer() {
Object.keys(config.https).forEach(k => {
certs[k] = fs.readFileSync(config.https[k]);
});
+ certs['allowHTTP1'] = true;
return http2.createSecureServer(certs, app.callback());
} else {
return http.createServer(app.callback());
@@ -62,13 +63,9 @@ function createServer() {
export default () => new Promise(resolve => {
const server = createServer();
- /**
- * Steaming
- */
+ // Init stream server
require('./api/streaming')(server);
- /**
- * Server listen
- */
+ // Listen
server.listen(config.port, resolve);
});
diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts
index 4b3f44a5da..d5464d0cd4 100644
--- a/src/server/web/url-preview.ts
+++ b/src/server/web/url-preview.ts
@@ -5,6 +5,10 @@ module.exports = async (ctx: Koa.Context) => {
const summary = await summaly(ctx.query.url);
summary.icon = wrap(summary.icon);
summary.thumbnail = wrap(summary.thumbnail);
+
+ // Cache 7days
+ ctx.set('Cache-Control', 'max-age=604800, immutable');
+
ctx.body = summary;
};