summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-02-14 01:13:28 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-02-14 01:13:28 +0900
commit8fc170109fc3f2ccf4037e852e78019ad9f97890 (patch)
tree96179f79c86b8f6de9c0d1d56731524c88260b7d /src
parentハッシュタグの集計期間を短くした (diff)
parentDocker: Remove unnecessary workaround for BusyBox's "free" (#4199) (#4213) (diff)
downloadmisskey-8fc170109fc3f2ccf4037e852e78019ad9f97890.tar.gz
misskey-8fc170109fc3f2ccf4037e852e78019ad9f97890.tar.bz2
misskey-8fc170109fc3f2ccf4037e852e78019ad9f97890.zip
Merge branch 'develop' of https://github.com/syuilo/misskey into develop
Diffstat (limited to 'src')
-rw-r--r--src/client/app/common/scripts/get-static-image-url.ts12
-rw-r--r--src/prelude/url.ts7
-rw-r--r--src/server/activitypub/followers.ts13
-rw-r--r--src/server/activitypub/following.ts13
-rw-r--r--src/server/activitypub/outbox.ts17
5 files changed, 48 insertions, 14 deletions
diff --git a/src/client/app/common/scripts/get-static-image-url.ts b/src/client/app/common/scripts/get-static-image-url.ts
index f84adf709c..7460ca38f2 100644
--- a/src/client/app/common/scripts/get-static-image-url.ts
+++ b/src/client/app/common/scripts/get-static-image-url.ts
@@ -1,9 +1,11 @@
import { url as instanceUrl } from '../../config';
+import * as url from '../../../../prelude/url';
-export function getStaticImageUrl(url: string): string {
- const u = new URL(url);
+export function getStaticImageUrl(baseUrl: string): string {
+ const u = new URL(baseUrl);
const dummy = `${u.host}${u.pathname}`; // 拡張子がないとキャッシュしてくれないCDNがあるので
- let result = `${instanceUrl}/proxy/${dummy}?url=${encodeURIComponent(u.href)}`;
- result += '&static=1';
- return result;
+ return `${instanceUrl}/proxy/${dummy}?${url.query({
+ url: u.href,
+ static: '1'
+ })}`;
}
diff --git a/src/prelude/url.ts b/src/prelude/url.ts
new file mode 100644
index 0000000000..ff1012d4c1
--- /dev/null
+++ b/src/prelude/url.ts
@@ -0,0 +1,7 @@
+import { stringify } from 'querystring';
+
+export function query(obj: {}): string {
+ return stringify(Object.entries(obj)
+ .filter(([, v]) => Array.isArray(v) ? v.length : v !== undefined)
+ .reduce((a, [k, v]) => (a[k] = v, a), {} as Record<string, any>));
+}
diff --git a/src/server/activitypub/followers.ts b/src/server/activitypub/followers.ts
index bf5066008d..563b3da653 100644
--- a/src/server/activitypub/followers.ts
+++ b/src/server/activitypub/followers.ts
@@ -5,6 +5,7 @@ import $ from 'cafy';
import ID, { transform } from '../../misc/cafy-id';
import User from '../../models/user';
import Following from '../../models/following';
+import * as url from '../../prelude/url';
import { renderActivity } from '../../remote/activitypub/renderer';
import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';
import renderOrderedCollectionPage from '../../remote/activitypub/renderer/ordered-collection-page';
@@ -20,7 +21,7 @@ export default async (ctx: Router.IRouterContext) => {
const userId = new ObjectID(ctx.params.user);
// Get 'cursor' parameter
- const [cursor = null, cursorErr] = $.optional.type(ID).get(ctx.request.query.cursor);
+ const [cursor, cursorErr] = $.optional.type(ID).get(ctx.request.query.cursor);
// Get 'page' parameter
const pageErr = !$.optional.str.or(['true', 'false']).ok(ctx.request.query.page);
@@ -72,10 +73,16 @@ export default async (ctx: Router.IRouterContext) => {
const renderedFollowers = await Promise.all(followings.map(following => renderFollowUser(following.followerId)));
const rendered = renderOrderedCollectionPage(
- `${partOf}?page=true${cursor ? `&cursor=${cursor}` : ''}`,
+ `${partOf}?${url.query({
+ page: 'true',
+ cursor
+ })}`,
user.followersCount, renderedFollowers, partOf,
null,
- inStock ? `${partOf}?page=true&cursor=${followings[followings.length - 1]._id}` : null
+ inStock ? `${partOf}?${url.query({
+ page: 'true',
+ cursor: followings[followings.length - 1]._id.toHexString()
+ })}` : null
);
ctx.body = renderActivity(rendered);
diff --git a/src/server/activitypub/following.ts b/src/server/activitypub/following.ts
index cb86546f1c..f23e177e25 100644
--- a/src/server/activitypub/following.ts
+++ b/src/server/activitypub/following.ts
@@ -5,6 +5,7 @@ import $ from 'cafy';
import ID, { transform } from '../../misc/cafy-id';
import User from '../../models/user';
import Following from '../../models/following';
+import * as url from '../../prelude/url';
import { renderActivity } from '../../remote/activitypub/renderer';
import renderOrderedCollection from '../../remote/activitypub/renderer/ordered-collection';
import renderOrderedCollectionPage from '../../remote/activitypub/renderer/ordered-collection-page';
@@ -20,7 +21,7 @@ export default async (ctx: Router.IRouterContext) => {
const userId = new ObjectID(ctx.params.user);
// Get 'cursor' parameter
- const [cursor = null, cursorErr] = $.optional.type(ID).get(ctx.request.query.cursor);
+ const [cursor, cursorErr] = $.optional.type(ID).get(ctx.request.query.cursor);
// Get 'page' parameter
const pageErr = !$.optional.str.or(['true', 'false']).ok(ctx.request.query.page);
@@ -72,10 +73,16 @@ export default async (ctx: Router.IRouterContext) => {
const renderedFollowees = await Promise.all(followings.map(following => renderFollowUser(following.followeeId)));
const rendered = renderOrderedCollectionPage(
- `${partOf}?page=true${cursor ? `&cursor=${cursor}` : ''}`,
+ `${partOf}?${url.query({
+ page: 'true',
+ cursor
+ })}`,
user.followingCount, renderedFollowees, partOf,
null,
- inStock ? `${partOf}?page=true&cursor=${followings[followings.length - 1]._id}` : null
+ inStock ? `${partOf}?${url.query({
+ page: 'true',
+ cursor: followings[followings.length - 1]._id.toHexString()
+ })}` : null
);
ctx.body = renderActivity(rendered);
diff --git a/src/server/activitypub/outbox.ts b/src/server/activitypub/outbox.ts
index 508e7e5ec9..8b65ce993a 100644
--- a/src/server/activitypub/outbox.ts
+++ b/src/server/activitypub/outbox.ts
@@ -14,6 +14,7 @@ import renderNote from '../../remote/activitypub/renderer/note';
import renderCreate from '../../remote/activitypub/renderer/create';
import renderAnnounce from '../../remote/activitypub/renderer/announce';
import { countIf } from '../../prelude/array';
+import * as url from '../../prelude/url';
export default async (ctx: Router.IRouterContext) => {
if (!ObjectID.isValid(ctx.params.user)) {
@@ -88,10 +89,20 @@ export default async (ctx: Router.IRouterContext) => {
const activities = await Promise.all(notes.map(note => packActivity(note)));
const rendered = renderOrderedCollectionPage(
- `${partOf}?page=true${sinceId ? `&since_id=${sinceId}` : ''}${untilId ? `&until_id=${untilId}` : ''}`,
+ `${partOf}?${url.query({
+ page: 'true',
+ since_id: sinceId,
+ until_id: untilId
+ })}`,
user.notesCount, activities, partOf,
- notes.length > 0 ? `${partOf}?page=true&since_id=${notes[0]._id}` : null,
- notes.length > 0 ? `${partOf}?page=true&until_id=${notes[notes.length - 1]._id}` : null
+ notes.length ? `${partOf}?${url.query({
+ page: 'true',
+ since_id: notes[0]._id.toHexString()
+ })}` : null,
+ notes.length ? `${partOf}?${url.query({
+ page: 'true',
+ until_id: notes[notes.length - 1]._id.toHexString()
+ })}` : null
);
ctx.body = renderActivity(rendered);