From 8301ef9d8ecd950059e8ea957a79c02b35f5c8a3 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Tue, 24 Apr 2018 12:40:40 +0800 Subject: [PATCH] feat(torrents): limit to upload torrent if uploader access is limit to maker group --- config/env/torrents.js | 2 +- modules/core/client/app/trans-string-en.js | 6 +- modules/core/client/app/trans-string-zh.js | 6 +- .../controllers/uploads.client.controller.js | 12 ++ .../views/uploads-torrents.client.view.html | 166 +++++++++--------- .../controllers/torrents.server.controller.js | 20 ++- 6 files changed, 128 insertions(+), 84 deletions(-) diff --git a/config/env/torrents.js b/config/env/torrents.js index 94b9cab6..0c0453de 100644 --- a/config/env/torrents.js +++ b/config/env/torrents.js @@ -230,7 +230,7 @@ module.exports = { limitedIp: ['127.0.0.1'] }, upload: { - limitToMakerGroup: false + limitToMakerGroup: true } }, diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 9e2abff4..4050e363 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -480,6 +480,7 @@ BUTTON_UNSHOW_NEXT_TIME: 'I know, don`t show this next time', POPUP_UPLOADED_TOOLTIP: 'The torrent is uploaded successfully and is waiting for the administrator to review. The new torrent file with your Passkey will be automatically downloaded after you click the "OK" button, and you can use this new torrent file to start seeding.', TORRENT_DOWNLOADING_FILENAME: 'Downloading file name: ', + UPLOAD_ACCESS_TOOLTIP: '{{site}} only accepts resource maker group to upload torrents, you can list and join them!', SELECT_RESOURCE_TYPE: '2. Please select the resource type', SELECT_TORRENT_FILE: '1. Please select the torrent file', @@ -1578,7 +1579,10 @@ EMAIL_ALREADY_REGISTERED: 'This email address has been used by other user', EMAIL_ALREADY_INVITED: 'This email address has been invited', INVITE_MAIL_SEND_FAILED: 'Invitation mail send failed (SERVER)', - EMAIL_ADDRESS_IS_NOT_ALLOW: 'The domain of this email address is not allowable from server' + EMAIL_ADDRESS_IS_NOT_ALLOW: 'The domain of this email address is not allowable from server', + INFO_HASH_IS_EMPTY: 'Info hash field of torrent file is empty', + INFO_HASH_ALREADY_EXISTS: 'This info hash value is already exists', + UPLOAD_ACCESS_DENY: 'System only accepts resource maker group to upload torrents' }, //server message string, content string support markdown and emoji diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index 306bfae5..005ec84d 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -480,6 +480,7 @@ BUTTON_UNSHOW_NEXT_TIME: '我知道了,下次不用再提示了!', POPUP_UPLOADED_TOOLTIP: '种子上传成功并等待管理员的审核,带有您 Passkey 的种子文件会在您点击 "确定" 按钮后被自动下载,然后您就可以使用这个自动下载的种子文件开始做种了。', TORRENT_DOWNLOADING_FILENAME: '种子文件名: ', + UPLOAD_ACCESS_TOOLTIP: '{{site}} 只接受资源制作小组上传种子,您可以 查看并加入他们!', SELECT_RESOURCE_TYPE: '2. 请选择上传资源类型', SELECT_TORRENT_FILE: '1. 请选择种子文件', @@ -1578,7 +1579,10 @@ EMAIL_ALREADY_REGISTERED: '这个邮件地址已被其它用户注册使用了', EMAIL_ALREADY_INVITED: '这个邮件地址已经被邀请过了', INVITE_MAIL_SEND_FAILED: '邀请邮件发送失败(SERVER)', - EMAIL_ADDRESS_IS_NOT_ALLOW: '该邮件地址不允许被邀请或注册' + EMAIL_ADDRESS_IS_NOT_ALLOW: '该邮件地址不允许被邀请或注册', + INFO_HASH_IS_EMPTY: 'Info hash 字段值不能为空', + INFO_HASH_ALREADY_EXISTS: '该 info hash 值已经存在,不能重复提交', + UPLOAD_ACCESS_DENY: '当前系统只接受资源制作小组上传种子' }, //server message string, content string support markdown and emoji diff --git a/modules/torrents/client/controllers/uploads.client.controller.js b/modules/torrents/client/controllers/uploads.client.controller.js index 543b09ac..0b45ace3 100644 --- a/modules/torrents/client/controllers/uploads.client.controller.js +++ b/modules/torrents/client/controllers/uploads.client.controller.js @@ -82,6 +82,18 @@ } }); + /** + * getAccessUploader + * @returns {boolean} + */ + vm.getAccessUploader = function () { + if (!vm.accessConfig.upload.limitToMakerGroup) { + return true; + } else { + return vm.user.makers.length > 0; + } + }; + /** * getTemplateFileContent * @param file diff --git a/modules/torrents/client/views/uploads-torrents.client.view.html b/modules/torrents/client/views/uploads-torrents.client.view.html index b20c3ff4..1670028b 100644 --- a/modules/torrents/client/views/uploads-torrents.client.view.html +++ b/modules/torrents/client/views/uploads-torrents.client.view.html @@ -8,92 +8,100 @@ -
-
- -
-
- +
+ +
-
- +
+
+
+ +
+
+ + +
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+
+
-
- -
-
- -
-
- -
-
-
-
-
- -
- -
-
-
- -
- -
-
- -
- - -
-
-
-
- -
- -
- -
-
- - -
-
- {{vm.error_msg}} +
+ + +
+
+ {{vm.error_msg}} +
diff --git a/modules/torrents/server/controllers/torrents.server.controller.js b/modules/torrents/server/controllers/torrents.server.controller.js index a0b55a25..bd17bc1d 100644 --- a/modules/torrents/server/controllers/torrents.server.controller.js +++ b/modules/torrents/server/controllers/torrents.server.controller.js @@ -44,6 +44,7 @@ var serverNoticeConfig = config.meanTorrentConfig.serverNotice; var announceConfig = config.meanTorrentConfig.announce; var appConfig = config.meanTorrentConfig.app; var tmdbConfig = config.meanTorrentConfig.tmdbConfig; +var accessConfig = config.meanTorrentConfig.access; const PEERSTATE_SEEDER = 'seeder'; const PEERSTATE_LEECHER = 'leecher'; @@ -153,6 +154,7 @@ exports.upload = function (req, res) { uploadFile() .then(checkAnnounce) .then(checkHash) + .then(checkCanUpload) .then(function () { res.status(200).send(torrentinfo); }) @@ -241,7 +243,7 @@ exports.upload = function (req, res) { var message = ''; if (torrentinfo.info_hash === '' || !torrentinfo.info_hash) { - message = 'INFO_HASH_IS_EMPTY'; + message = 'SERVER.INFO_HASH_IS_EMPTY'; reject(message); } else { Torrent.findOne({ @@ -251,7 +253,7 @@ exports.upload = function (req, res) { reject(err); } else { if (torrent) { - message = 'INFO_HASH_ALREADY_EXISTS'; + message = 'SERVER.INFO_HASH_ALREADY_EXISTS'; reject(message); } else { @@ -262,6 +264,20 @@ exports.upload = function (req, res) { } }); } + + function checkCanUpload() { + return new Promise(function (resolve, reject) { + if (!accessConfig.upload.limitToMakerGroup) { + resolve(); + } else { + if (req.user.makers.length > 0) { + resolve(); + } else { + reject('SERVER.UPLOAD_ACCESS_DENY'); + } + } + }); + } }; /**