mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-03-06 12:11:02 +01:00
feat(users): add ban reason when admin banned a user
This commit is contained in:
@@ -19,8 +19,8 @@
|
||||
DEMO_INFO: 'Welcome to demo site, you can sign up manual to create a normal account or sign in as demo admin with account <mark>demo</mark> and password <mark>demoAdmin12#</mark>, but don`t delete any demo data please, thanks!',
|
||||
WARNING_POPUP_STRING: 'This is a <strong style="color:#f00">DEMO SITE</strong>, all resources are for download testing only, please delete it within 24 hours after the test is completed, we recommend that you buy genuine resources!',
|
||||
|
||||
VALUE_NULL: 'NULL',
|
||||
VALUE_CUSTOM: 'CUSTOM',
|
||||
VALUE_NULL: 'Null',
|
||||
VALUE_CUSTOM: 'Custom',
|
||||
VALUE_SELECT_ALL: 'Select All',
|
||||
BTN_REMOVE: 'Remove',
|
||||
BTN_CONTINUE: 'Continue',
|
||||
@@ -479,7 +479,7 @@
|
||||
TORRENT_DELETE_SUCCESSFULLY: 'Torrent delete successfully',
|
||||
TORRENT_DELETE_ERROR: 'Torrent delete failed',
|
||||
TORRENT_DELETE_REASON: 'Please select or enter the delete reason for uploader:',
|
||||
TORRENT_ENTER_DELETE_REASON: 'Please enter custom delete reason',
|
||||
TORRENT_ENTER_DELETE_REASON: 'Please enter custom operate reason',
|
||||
TORRENT_DELETE_REASON_OVERVIEW: 'The torrent overview info is not complete or missing',
|
||||
TORRENT_DELETE_REASON_NFO: 'The torrent NFO info is not complete or missing',
|
||||
TORRENT_DELETE_REASON_QUALITY: 'The torrent quality is too low',
|
||||
@@ -643,6 +643,18 @@
|
||||
RESET_VIP_DATA_SUCCESSFULLY: 'reset user vip data successfully',
|
||||
RESET_VIP_DATA_FAILED: 'reset user vip data failed',
|
||||
|
||||
BANNED: {
|
||||
CONFIRM_CANCEL: 'Cancel',
|
||||
CONFIRM_OK: 'Ok',
|
||||
CONFIRM_HEADER_TEXT: 'Banned confirm',
|
||||
CONFIRM_BODY_TEXT: 'Are you sure want to banned user: {{uname}} ?',
|
||||
REASON_TITLE: 'Please select the banned reason to notice user:',
|
||||
REASON_ILLEGAL_SIGN_IN: 'Illegal sign in',
|
||||
REASON_ACCOUNT_TRADE: 'Account trade',
|
||||
REASON_EXAMINATION_NOT_FINISHED: 'Examination not finished',
|
||||
REASON_VIOLATED_RULES: 'Violated the sites user behavior rules'
|
||||
},
|
||||
|
||||
SCORE_NUMBER: 'Score number',
|
||||
SCORE_TITLE: 'Add user score',
|
||||
SET_SCORE_SUCCESSFULLY: 'Add user score successfully',
|
||||
@@ -1809,7 +1821,7 @@
|
||||
//admin operate user account history message
|
||||
HISTORY: {
|
||||
ADMIN_UPDATE_USER_ROLE: '`{{by.displayName}}` update account role to: `{{role}}`',
|
||||
ADMIN_UPDATE_USER_STATUS: '`{{by.displayName}}` update account status to: `{{status}}`',
|
||||
ADMIN_UPDATE_USER_STATUS: '`{{by.displayName}}` update account status to: `{{status}}`, reason: {{reason | translate}}',
|
||||
ADMIN_UPDATE_USER_SCORE: '`{{by.displayName}}` update account score: `{{score}}`',
|
||||
ADMIN_UPDATE_USER_UPLOADED: '`{{by.displayName}}` update account uploaded: `{{uploaded | bytes:2}}`',
|
||||
ADMIN_UPDATE_USER_DOWNLOADED: '`{{by.displayName}}` update account downloaded: `{{downloaded | bytes:2}}`',
|
||||
@@ -1838,7 +1850,7 @@
|
||||
RESET_PASSWORD_TO_FREQUENT: 'Reset password operation is too frequent, you can do once only in {{hours}} hours, next time is: {{nextTime | date: "yyyy-MM-dd HH:mm:ss"}}',
|
||||
INVALID_USERNAME: 'Invalid username!',
|
||||
INVALID_PASSWORD: 'Invalid password!',
|
||||
YOU_ARE_BANNED: 'You are banned from the server!',
|
||||
YOU_ARE_BANNED: 'You are banned from the server, The banned reason is: {{reason}}',
|
||||
ACCOUNT_IS_NOT_ACTIVATED: 'Your account is not activated, you should active first!',
|
||||
ONLY_VIP_CAN_DOWNLOAD: 'This torrent is only for Vip users',
|
||||
CAN_NOT_DOWNLOAD_BANNED: 'Download failed, you are banned from server',
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
TORRENT_DELETE_SUCCESSFULLY: '種子刪除成功',
|
||||
TORRENT_DELETE_ERROR: '種子刪除失敗',
|
||||
TORRENT_DELETE_REASON: '請選擇或輸入一個刪除種子的理由給上傳者:',
|
||||
TORRENT_ENTER_DELETE_REASON: '請輸入自定義刪除理由',
|
||||
TORRENT_ENTER_DELETE_REASON: '請輸入自定義操作理由',
|
||||
TORRENT_DELETE_REASON_OVERVIEW: '種子簡介資訊缺少或者不完整',
|
||||
TORRENT_DELETE_REASON_NFO: '種子NFO資訊缺少或者不完整',
|
||||
TORRENT_DELETE_REASON_QUALITY: '種子資源質量太低下',
|
||||
@@ -643,6 +643,18 @@
|
||||
RESET_VIP_DATA_SUCCESSFULLY: '重置用戶vip狀態資料成功',
|
||||
RESET_VIP_DATA_FAILED: '重置用戶vip狀態資料失敗',
|
||||
|
||||
BANNED: {
|
||||
CONFIRM_CANCEL: '取消',
|
||||
CONFIRM_OK: '確定',
|
||||
CONFIRM_HEADER_TEXT: 'Banned 確認',
|
||||
CONFIRM_BODY_TEXT: '您確定要 ban 掉用戶 {{uname}} 嗎?',
|
||||
REASON_TITLE: '請選擇或自定義一個理由通知用戶:',
|
||||
REASON_ILLEGAL_SIGN_IN: '非法的註冊',
|
||||
REASON_ACCOUNT_TRADE: '涉嫌帳戶交易',
|
||||
REASON_EXAMINATION_NOT_FINISHED: '考核未完成',
|
||||
REASON_VIOLATED_RULES: '違返站內用戶行為準則'
|
||||
},
|
||||
|
||||
SCORE_NUMBER: '積分數',
|
||||
SCORE_TITLE: '新增積分',
|
||||
SET_SCORE_SUCCESSFULLY: '新增用戶積分成功',
|
||||
@@ -1809,7 +1821,7 @@
|
||||
//admin operate user account history message
|
||||
HISTORY: {
|
||||
ADMIN_UPDATE_USER_ROLE: '`{{by.displayName}}` 改變帳戶角色為: `{{role}}`',
|
||||
ADMIN_UPDATE_USER_STATUS: '`{{by.displayName}}` 改變帳戶狀態為: `{{status}}`',
|
||||
ADMIN_UPDATE_USER_STATUS: '`{{by.displayName}}` 改變帳戶狀態為: `{{status}}`,理由: {{reason | translate}}',
|
||||
ADMIN_UPDATE_USER_SCORE: '`{{by.displayName}}` 修改帳戶積分: `{{score}}`',
|
||||
ADMIN_UPDATE_USER_UPLOADED: '`{{by.displayName}}` 修改帳戶上傳量: `{{uploaded | bytes:2}}`',
|
||||
ADMIN_UPDATE_USER_DOWNLOADED: '`{{by.displayName}}` 修改帳戶下載量: `{{downloaded | bytes:2}}`',
|
||||
@@ -1838,7 +1850,7 @@
|
||||
RESET_PASSWORD_TO_FREQUENT: '密碼重置操作過於頻繁, 您在 {{hours}} 小時內只能操作一次, 下次可操作時間為: {{nextTime | date: "yyyy-MM-dd HH:mm:ss"}}',
|
||||
INVALID_USERNAME: '無效的用戶名稱!',
|
||||
INVALID_PASSWORD: '無效的密碼!',
|
||||
YOU_ARE_BANNED: '您已被伺服器禁止(banned)!',
|
||||
YOU_ARE_BANNED: '您已被伺服器禁止(banned),被禁止的理由為:{{reason}}',
|
||||
ACCOUNT_IS_NOT_ACTIVATED: '您的帳戶未啟用, 請啟用後再試!',
|
||||
ONLY_VIP_CAN_DOWNLOAD: '該種子只有VIP用戶才可以下載',
|
||||
CAN_NOT_DOWNLOAD_BANNED: '下載失敗, 您被伺服器禁止(banned)',
|
||||
|
||||
@@ -479,7 +479,7 @@
|
||||
TORRENT_DELETE_SUCCESSFULLY: '种子删除成功',
|
||||
TORRENT_DELETE_ERROR: '种子删除失败',
|
||||
TORRENT_DELETE_REASON: '请选择或输入一个删除种子的理由给上传者:',
|
||||
TORRENT_ENTER_DELETE_REASON: '请输入自定义删除理由',
|
||||
TORRENT_ENTER_DELETE_REASON: '请输入自定义操作理由',
|
||||
TORRENT_DELETE_REASON_OVERVIEW: '种子简介信息缺少或者不完整',
|
||||
TORRENT_DELETE_REASON_NFO: '种子NFO信息缺少或者不完整',
|
||||
TORRENT_DELETE_REASON_QUALITY: '种子资源质量太低下',
|
||||
@@ -643,6 +643,18 @@
|
||||
RESET_VIP_DATA_SUCCESSFULLY: '重置用户vip状态数据成功',
|
||||
RESET_VIP_DATA_FAILED: '重置用户vip状态数据失败',
|
||||
|
||||
BANNED: {
|
||||
CONFIRM_CANCEL: '取消',
|
||||
CONFIRM_OK: '确定',
|
||||
CONFIRM_HEADER_TEXT: 'Banned 确认',
|
||||
CONFIRM_BODY_TEXT: '您确定要 ban 掉用户 {{uname}} 吗?',
|
||||
REASON_TITLE: '请选择或自定义一个理由通知用户:',
|
||||
REASON_ILLEGAL_SIGN_IN: '非法的注册',
|
||||
REASON_ACCOUNT_TRADE: '涉嫌帐户交易',
|
||||
REASON_EXAMINATION_NOT_FINISHED: '考核未完成',
|
||||
REASON_VIOLATED_RULES: '违返站内用户行为准则'
|
||||
},
|
||||
|
||||
SCORE_NUMBER: '积分数',
|
||||
SCORE_TITLE: '添加积分',
|
||||
SET_SCORE_SUCCESSFULLY: '添加用户积分成功',
|
||||
@@ -1809,7 +1821,7 @@
|
||||
//admin operate user account history message
|
||||
HISTORY: {
|
||||
ADMIN_UPDATE_USER_ROLE: '`{{by.displayName}}` 改变帐户角色为: `{{role}}`',
|
||||
ADMIN_UPDATE_USER_STATUS: '`{{by.displayName}}` 改变帐户状态为: `{{status}}`',
|
||||
ADMIN_UPDATE_USER_STATUS: '`{{by.displayName}}` 改变帐户状态为: `{{status}}`,理由: {{reason | translate}}',
|
||||
ADMIN_UPDATE_USER_SCORE: '`{{by.displayName}}` 修改帐户积分: `{{score}}`',
|
||||
ADMIN_UPDATE_USER_UPLOADED: '`{{by.displayName}}` 修改帐户上传量: `{{uploaded | bytes:2}}`',
|
||||
ADMIN_UPDATE_USER_DOWNLOADED: '`{{by.displayName}}` 修改帐户下载量: `{{downloaded | bytes:2}}`',
|
||||
@@ -1838,7 +1850,7 @@
|
||||
RESET_PASSWORD_TO_FREQUENT: '密码重置操作过于频繁, 您在 {{hours}} 小时内只能操作一次, 下次可操作时间为: {{nextTime | date: "yyyy-MM-dd HH:mm:ss"}}',
|
||||
INVALID_USERNAME: '无效的用户名!',
|
||||
INVALID_PASSWORD: '无效的密码!',
|
||||
YOU_ARE_BANNED: '您已被服务器禁止(banned)!',
|
||||
YOU_ARE_BANNED: '您已被服务器禁止(banned),被禁止的理由为:{{reason}}',
|
||||
ACCOUNT_IS_NOT_ACTIVATED: '您的帐户未激活, 请激活后再试!',
|
||||
ONLY_VIP_CAN_DOWNLOAD: '该种子只有VIP用户才可以下载',
|
||||
CAN_NOT_DOWNLOAD_BANNED: '下载失败, 您被服务器禁止(banned)',
|
||||
|
||||
@@ -387,7 +387,12 @@ exports.banAllUnfinishedUser = function (req, res) {
|
||||
if (req.user.isAdmin) {
|
||||
var user = req.model;
|
||||
|
||||
User.update({'examinationData.isFinished': false}, {$set: {status: 'banned'}}, {multi: true}, function (err, num) {
|
||||
User.update({'examinationData.isFinished': false}, {
|
||||
$set: {
|
||||
status: 'banned',
|
||||
banReason: 'BANNED.REASON_EXAMINATION_NOT_FINISHED'
|
||||
}
|
||||
}, {multi: true}, function (err, num) {
|
||||
if (err) {
|
||||
return res.status(422).send({
|
||||
message: errorHandler.getErrorMessage(err)
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
|
||||
UserController.$inject = ['$scope', '$state', '$window', 'Authentication', 'userResolve', 'Notification', 'NotifycationService', 'MeanTorrentConfig',
|
||||
'AdminService', 'ScoreLevelService', 'DebugConsoleService', 'TorrentGetInfoServices', 'SideOverlay', 'MakerGroupService', '$filter', '$translate',
|
||||
'marked'];
|
||||
'marked', 'ModalConfirmService'];
|
||||
|
||||
function UserController($scope, $state, $window, Authentication, user, Notification, NotifycationService, MeanTorrentConfig,
|
||||
AdminService, ScoreLevelService, mtDebug, TorrentGetInfoServices, SideOverlay, MakerGroupService, $filter, $translate,
|
||||
marked) {
|
||||
marked, ModalConfirmService) {
|
||||
var vm = this;
|
||||
vm.TGI = TorrentGetInfoServices;
|
||||
vm.authentication = Authentication;
|
||||
@@ -326,12 +326,47 @@
|
||||
*/
|
||||
vm.onUserStatusChanged = function () {
|
||||
var user = vm.user;
|
||||
AdminService.setUserStatus({
|
||||
userId: user._id,
|
||||
userStatus: vm.selectedStatus
|
||||
})
|
||||
.then(onSuccess)
|
||||
.catch(onError);
|
||||
|
||||
if (vm.selectedStatus === 'banned') {
|
||||
var modalOptions = {
|
||||
closeButtonText: $translate.instant('BANNED.CONFIRM_CANCEL'),
|
||||
actionButtonText: $translate.instant('BANNED.CONFIRM_OK'),
|
||||
headerText: $translate.instant('BANNED.CONFIRM_HEADER_TEXT'),
|
||||
bodyText: $translate.instant('BANNED.CONFIRM_BODY_TEXT', {uname: user.displayName}),
|
||||
|
||||
selectOptions: {
|
||||
enable: true,
|
||||
title: 'BANNED.REASON_TITLE',
|
||||
options: [
|
||||
'BANNED.REASON_ILLEGAL_SIGN_IN',
|
||||
'BANNED.REASON_ACCOUNT_TRADE',
|
||||
'BANNED.REASON_EXAMINATION_NOT_FINISHED',
|
||||
'BANNED.REASON_VIOLATED_RULES'
|
||||
]
|
||||
}
|
||||
};
|
||||
ModalConfirmService.showModal({}, modalOptions)
|
||||
.then(function (result) {
|
||||
var reason = result.reason;
|
||||
if (reason === 'CUSTOM') reason = result.custom;
|
||||
|
||||
AdminService.setUserStatus({
|
||||
userId: user._id,
|
||||
userStatus: vm.selectedStatus,
|
||||
banReason: reason
|
||||
})
|
||||
.then(onSuccess)
|
||||
.catch(onError);
|
||||
});
|
||||
} else {
|
||||
AdminService.setUserStatus({
|
||||
userId: user._id,
|
||||
userStatus: vm.selectedStatus,
|
||||
banReason: ''
|
||||
})
|
||||
.then(onSuccess)
|
||||
.catch(onError);
|
||||
}
|
||||
|
||||
function onSuccess(response) {
|
||||
vm.user = response;
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
}
|
||||
|
||||
function onUserSigninError(response) {
|
||||
NotifycationService.showErrorNotify(response.data.message, 'SIGN.SIGNIN_ERROR');
|
||||
NotifycationService.showErrorNotify(response.data.message, 'SIGN.SIGNIN_ERROR', {reason: $translate.instant(response.data.reason)});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -251,7 +251,8 @@
|
||||
url: '/api/users/:userId/status',
|
||||
params: {
|
||||
userId: '@userId',
|
||||
userStatus: '@userStatus'
|
||||
userStatus: '@userStatus',
|
||||
banReason: '@banReason'
|
||||
},
|
||||
interceptor: {response: removeCache}
|
||||
},
|
||||
|
||||
@@ -45,7 +45,8 @@ module.exports = function () {
|
||||
}
|
||||
if (user.status === 'banned') {
|
||||
return done(null, false, {
|
||||
message: 'SERVER.YOU_ARE_BANNED'
|
||||
message: 'SERVER.YOU_ARE_BANNED',
|
||||
reason: user.banReason
|
||||
});
|
||||
}
|
||||
if (user.status === 'inactive') {
|
||||
@@ -54,13 +55,6 @@ module.exports = function () {
|
||||
});
|
||||
}
|
||||
|
||||
// if ((moment(Date.now()) - moment(user.last_signed)) > signConfig.idle.accountIdleForTime) {
|
||||
// user.update({
|
||||
// $set: {status: 'idle'}
|
||||
// }).exec();
|
||||
// user.status = 'idle';
|
||||
// }
|
||||
|
||||
user.updateSignedTime();
|
||||
|
||||
return done(null, user);
|
||||
|
||||
@@ -270,7 +270,10 @@ exports.updateUserRole = function (req, res) {
|
||||
*/
|
||||
exports.updateUserStatus = function (req, res) {
|
||||
var user = req.model;
|
||||
var tp = {status: req.body.userStatus};
|
||||
var tp = {
|
||||
status: req.body.userStatus,
|
||||
banReason: req.body.banReason
|
||||
};
|
||||
|
||||
if (user.status === 'idle' && req.body.userStatus === 'normal') {
|
||||
tp.last_signed = Date.now();
|
||||
@@ -290,11 +293,13 @@ exports.updateUserStatus = function (req, res) {
|
||||
//create trace log
|
||||
traceLogCreate(req, traceConfig.action.adminUpdateUserStatus, {
|
||||
user: user._id,
|
||||
status: req.body.userStatus
|
||||
status: req.body.userStatus,
|
||||
reason: req.body.banReason === '' ? 'VALUE_NULL' : req.body.banReason
|
||||
});
|
||||
// write history
|
||||
history.insert(user._id, historyConfig.action.adminUpdateUserStatus, {
|
||||
status: req.body.userStatus,
|
||||
reason: req.body.banReason === '' ? 'VALUE_NULL' : req.body.banReason,
|
||||
by: req.user._id
|
||||
});
|
||||
}
|
||||
|
||||
@@ -149,6 +149,10 @@ var UserSchema = new Schema({
|
||||
type: String,
|
||||
default: 'inactive'
|
||||
},
|
||||
banReason: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
vip_start_at: {
|
||||
type: Date,
|
||||
default: ''
|
||||
|
||||
Reference in New Issue
Block a user