From 7acea73539c1821ab94f2e4294aeaa94cf8cc61b Mon Sep 17 00:00:00 2001 From: jysperm Date: Wed, 15 Oct 2014 22:53:06 +0800 Subject: [PATCH] fixbugs in linux plugin --- app.coffee | 3 ++- core/billing.coffee | 16 ++++++++++------ core/model/account.coffee | 2 +- core/pluggable.coffee | 13 +++++++++---- core/router/account.coffee | 2 +- core/view/account/preferences.jade | 2 +- package.json | 3 ++- plugin/linux/index.coffee | 1 + plugin/linux/linux.coffee | 6 +++++- 9 files changed, 32 insertions(+), 16 deletions(-) diff --git a/app.coffee b/app.coffee index 7399707..076ab2b 100644 --- a/app.coffee +++ b/app.coffee @@ -3,6 +3,7 @@ nodemailer = require 'nodemailer' path = require 'path' harp = require 'harp' fs = require 'fs' +morgan = require 'morgan' moment = require 'moment-timezone' redis = require 'redis' express = require 'express' @@ -83,7 +84,7 @@ exports.run = -> app.use connect.json() app.use connect.urlencoded() - app.use connect.logger() + app.use morgan('dev') app.use require('cookie-parser')() app.use require 'middleware-injector' diff --git a/core/billing.coffee b/core/billing.coffee index f421309..444bda2 100644 --- a/core/billing.coffee +++ b/core/billing.coffee @@ -123,7 +123,12 @@ exports.joinPlan = (req, account, plan_name, callback) -> hook.action req, callback , callback , -> - callback() + unless stringify(original_account.resources_limit) == stringify(account.resources_limit) + async.each pluggable.selectHook(account, 'account.resources_limit_changed'), (hook, callback) -> + hook.action account, callback + , callback + else + callback() exports.leavePlan = (req, account, plan_name, callback) -> leaved_services = _.reject account.billing.services, (service_name) -> @@ -133,8 +138,7 @@ exports.leavePlan = (req, account, plan_name, callback) -> return false - original_resources_limit = account.resources_limit - new_resources_limit = exports.calcResourcesLimit _.without account.billing.plans, plan_name + original_account = account modifier = $pull: @@ -142,7 +146,7 @@ exports.leavePlan = (req, account, plan_name, callback) -> $pullAll: 'billing.services': leaved_services $set: - 'resources_limit': new_resources_limit + 'resources_limit': exports.calcResourcesLimit _.without account.billing.plans, plan_name $unset: {} modifier.$unset["billing.last_billing_at.#{plan_name}"] = true @@ -151,11 +155,11 @@ exports.leavePlan = (req, account, plan_name, callback) -> new: true , (err, account) -> async.each leaved_services, (service_name, callback) -> - async.each pluggable.selectHook(account, "service.#{service_name}.disable"), (hook, callback) -> + async.each pluggable.selectHook(original_account, "service.#{service_name}.disable"), (hook, callback) -> hook.action req, callback , callback , -> - unless stringify(original_resources_limit) == stringify(new_resources_limit) + unless stringify(original_account.resources_limit) == stringify(account.resources_limit) async.each pluggable.selectHook(account, 'account.resources_limit_changed'), (hook, callback) -> hook.action account, callback , callback diff --git a/core/model/account.coffee b/core/model/account.coffee index 0c042cd..dbf8c16 100644 --- a/core/model/account.coffee +++ b/core/model/account.coffee @@ -97,7 +97,7 @@ exports.register = (account, callback) -> tokens: [] - async.each pluggable.selectHook({meta: 'any'}, 'account.before_register'), (hook, callback) -> + async.each pluggable.selectHook(account, 'account.before_register'), (hook, callback) -> hook.filter account, callback , -> exports.insert account, (err, result) -> diff --git a/core/pluggable.coffee b/core/pluggable.coffee index 91e6a67..c8e78c3 100644 --- a/core/pluggable.coffee +++ b/core/pluggable.coffee @@ -10,12 +10,17 @@ config = require './../config' exports.plugins = {} +hookHelper = (options) -> + return _.extend [], options + exports.hooks = account: # filter: function(username, callback(is_allow)) - username_filter: [] + username_filter: hookHelper + always_notice: true # filter: function(account, callback) - before_register: [] + before_register: hookHelper + always_notice: true # action: function(account, callback) resources_limit_changed: [] @@ -100,10 +105,10 @@ exports.selectHook = (account, hook_name) -> return _.filter pointer, (hook) -> if hook.plugin_info.type == 'extension' return true + else if pointer.always_notice or hook.always_notice + return true else if !account return false - else if account.meta == 'any' - return true else if hook.plugin_info.name in account.billing.services return true else diff --git a/core/router/account.coffee b/core/router/account.coffee index 3d52353..0e6dce7 100644 --- a/core/router/account.coffee +++ b/core/router/account.coffee @@ -27,7 +27,7 @@ exports.post '/register', errorHandling, (req, res) -> unless utils.rx.password.test req.body.password return res.error 'invalid_password' - async.each pluggable.selectHook({meta: 'any'}, 'account.username_filter'), (hook, callback) -> + async.each pluggable.selectHook(null, 'account.username_filter'), (hook, callback) -> hook.filter req.body.username, (is_allow) -> if is_allow callback() diff --git a/core/view/account/preferences.jade b/core/view/account/preferences.jade index 6e5fc83..77f067b 100644 --- a/core/view/account/preferences.jade +++ b/core/view/account/preferences.jade @@ -10,7 +10,7 @@ block main .form-group label.col-sm-2.col-md-offset-1.control-label= t('view.preferences.qq') .col-sm-5 - input.input-qq.form-control(type='text', value=account.settings.qq) + input.input-qq.form-control(type='text', value=account.preferences.qq) .form-group .col-sm-offset-3 button.action-save.btn.btn-lg.btn-success(type='button')= t('common.save') diff --git a/package.json b/package.json index 5b3ec1c..e54d78a 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "cookie-parser": "^1.3.3", "csrf": "^2.0.1", "connect-redis": "^2.0.1", - "express-session": "^1.8.2" + "express-session": "^1.8.2", + "morgan": "^1.3.2" } } diff --git a/plugin/linux/index.coffee b/plugin/linux/index.coffee index d38cec1..f0149e4 100644 --- a/plugin/linux/index.coffee +++ b/plugin/linux/index.coffee @@ -43,6 +43,7 @@ exports.registerHook 'view.panel.widgets', callback html exports.registerHook 'account.resources_limit_changed', + always_notice: true action: (account, callback) -> linux.setResourceLimit account, callback diff --git a/plugin/linux/linux.coffee b/plugin/linux/linux.coffee index 33db0ba..a5e2bb3 100644 --- a/plugin/linux/linux.coffee +++ b/plugin/linux/linux.coffee @@ -25,7 +25,8 @@ exports.createUser = (account, callback) -> exports.deleteUser = (account, callback) -> async.series [ (callback) -> - child_process.exec "sudo pkill -u #{account.username}", callback + child_process.exec "sudo pkill -u #{account.username}", -> + callback() (callback) -> child_process.exec "sudo userdel -rf #{account.username}", callback @@ -39,6 +40,9 @@ exports.deleteUser = (account, callback) -> callback() exports.setResourceLimit = (account, callback) -> + unless 'linux' in account.billing.services + return callback() + storage_limit = account.resources_limit.storage soft_limit = (storage_limit * 1024 * 0.8).toFixed() hard_limit = (storage_limit * 1024 * 1.2).toFixed()