From 2b0a919fb5bb1e6b9a216234b1a8f75c9beb80dc Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Sat, 13 Oct 2018 13:13:15 +0900
Subject: [PATCH] Resolve #2894

---
 src/config/types.ts                           |  2 ++
 src/remote/activitypub/resolver.ts            |  1 +
 .../api/endpoints/users/recommendation.ts     | 28 +++++++++----------
 src/server/api/service/github.ts              |  1 +
 src/server/web/url-preview.ts                 |  1 +
 src/services/drive/upload-from-url.ts         |  1 +
 6 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/src/config/types.ts b/src/config/types.ts
index 5c2b554285..3074cecabf 100644
--- a/src/config/types.ts
+++ b/src/config/types.ts
@@ -62,6 +62,8 @@ export type Source = {
 	 */
 	ghost?: string;
 
+	proxy?: string;
+
 	summalyProxy?: string;
 
 	accesslog?: string;
diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts
index ff26971758..8ec0d125a0 100644
--- a/src/remote/activitypub/resolver.ts
+++ b/src/remote/activitypub/resolver.ts
@@ -51,6 +51,7 @@ export default class Resolver {
 
 		const object = await request({
 			url: value,
+			proxy: config.proxy,
 			timeout: this.timeout,
 			headers: {
 				'User-Agent': config.user_agent,
diff --git a/src/server/api/endpoints/users/recommendation.ts b/src/server/api/endpoints/users/recommendation.ts
index f54326b566..df85343f0f 100644
--- a/src/server/api/endpoints/users/recommendation.ts
+++ b/src/server/api/endpoints/users/recommendation.ts
@@ -30,22 +30,20 @@ export default (params: any, me: ILocalUser) => new Promise(async (res, rej) =>
 			.replace('{{limit}}', limit)
 			.replace('{{offset}}', offset);
 
-			request(
-			{
-				url: url,
-				timeout: timeout,
-				json: true,
-				followRedirect: true,
-				followAllRedirects: true
-			},
-			(error: any, response: any, body: any) => {
-				if (!error && response.statusCode == 200) {
-					res(body);
-				} else {
-					res([]);
-				}
+		request({
+			url: url,
+			proxy: config.proxy,
+			timeout: timeout,
+			json: true,
+			followRedirect: true,
+			followAllRedirects: true
+		}, (error: any, response: any, body: any) => {
+			if (!error && response.statusCode == 200) {
+				res(body);
+			} else {
+				res([]);
 			}
-		);
+		});
 	} else {
 		// Get 'limit' parameter
 		const [limit = 10, limitErr] = $.num.optional.range(1, 100).get(params.limit);
diff --git a/src/server/api/service/github.ts b/src/server/api/service/github.ts
index c8d588eaaf..ac18cf90ae 100644
--- a/src/server/api/service/github.ts
+++ b/src/server/api/service/github.ts
@@ -63,6 +63,7 @@ handler.on('status', event => {
 			// Fetch parent status
 			request({
 				url: `${parent.url}/statuses`,
+				proxy: config.proxy,
 				headers: {
 					'User-Agent': 'misskey'
 				}
diff --git a/src/server/web/url-preview.ts b/src/server/web/url-preview.ts
index 41ca6bad8b..eb835b05ac 100644
--- a/src/server/web/url-preview.ts
+++ b/src/server/web/url-preview.ts
@@ -7,6 +7,7 @@ module.exports = async (ctx: Koa.Context) => {
 	try {
 		const summary = config.summalyProxy ? await request.get({
 			url: config.summalyProxy,
+			proxy: config.proxy,
 			qs: {
 				url: ctx.query.url
 			},
diff --git a/src/services/drive/upload-from-url.ts b/src/services/drive/upload-from-url.ts
index 35d4ec9883..2184edf005 100644
--- a/src/services/drive/upload-from-url.ts
+++ b/src/services/drive/upload-from-url.ts
@@ -37,6 +37,7 @@ export default async (url: string, user: IUser, folderId: mongodb.ObjectID = nul
 		const requestUrl = URL.parse(url).pathname.match(/[^\u0021-\u00ff]/) ? encodeURI(url) : url;
 		request({
 			url: requestUrl,
+			proxy: config.proxy,
 			headers: {
 				'User-Agent': config.user_agent
 			}