From 360de90f99447492eb1c412db4f8aa3df7c29bb8 Mon Sep 17 00:00:00 2001 From: jysperm Date: Sun, 29 Jun 2014 12:23:54 +0800 Subject: [PATCH] nginx modify site --- core/model/account.coffee | 3 ++ plugin/nginx/API.md | 1 + plugin/nginx/action.coffee | 62 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/core/model/account.coffee b/core/model/account.coffee index f4a95ed..4fa1c34 100644 --- a/core/model/account.coffee +++ b/core/model/account.coffee @@ -40,6 +40,9 @@ sample = phpfpm: is_enbale: false + nginx: + sites: [] + resources_limit: cpu: 144 storage: 520 diff --git a/plugin/nginx/API.md b/plugin/nginx/API.md index 90a96b7..83dd5e3 100644 --- a/plugin/nginx/API.md +++ b/plugin/nginx/API.md @@ -19,4 +19,5 @@ Exception: * not_in_service * invalid_action * invalid_type +* forbidden diff --git a/plugin/nginx/action.coffee b/plugin/nginx/action.coffee index b04f023..fea7449 100644 --- a/plugin/nginx/action.coffee +++ b/plugin/nginx/action.coffee @@ -25,6 +25,9 @@ sample = fastcgi_pass: 'unix:///home/user/phpfpm.sock' fastcgi_index: ['index.php'] +assertJsonConfig = (config) -> + + exports.use (req, res, next) -> req.inject [requestAuthenticate], -> unless 'nginx' in req.account.attribute.services @@ -36,7 +39,60 @@ exports.post '/update_site/', (req, res) -> unless req.body.action in ['create', 'update', 'delete'] return res.error 'invalid_action' - if req.body.type == 'json' + checkSite = (callback) -> + if req.body.action == 'create' + callback null + else + mAccount.findOne + 'attribute.plugin.nginx.sites._id': new ObjectID req.body.id + , (err, account) -> + if account?._id.toString() == req.account._id.toString() + callback null + else + callback true - else - return res.json 'invalid_type' + checkSiteConfig = (callback) -> + unless req.body.action == 'delete' + if req.body.type == 'json' + err = assertJsonConfig req.body.config + + if err + callback err + else + callback null + else + callback 'invalid_type' + else + callback null + + checkSite (err) -> + if err + return res.error 'forbidden' + + checkSiteConfig (err) -> + if err + return res.json err + + removeSite = (callback) -> + mAccount.update _id: account._id, + $pull: + 'attribute.plugin.nginx.sites': new ObjectID req.body.id + , callback + + addSite = (callback) -> + mAccount.update _id: req.account._id, + $push: + 'attribute.plugin.nginx.sites': req.body.config + , callback + + execModification = (callback) -> + if req.body.action = 'create' + addSite callback + else if req.body.action = 'update' + removeSite -> + addSite callback + else if req.body.action = 'delete' + removeSite callback + + execModification -> + res.json {}