检测重复的域名

This commit is contained in:
jysperm
2014-07-17 16:10:54 +08:00
parent cfb6a4cf62
commit e4ab50a409
5 changed files with 81 additions and 71 deletions

View File

@@ -1,8 +1,8 @@
child_process = require 'child_process'
service = require './service'
utils = require '../../core/router/utils'
plugin = require '../../core/plugin'
configure = require './configure'
{requestAuthenticate} = require '../../core/router/middleware'
@@ -38,70 +38,6 @@ exports.post '/update_site/', (req, res) ->
unless req.body.action in ['create', 'update', 'delete']
return res.error 'invalid_action'
assertJsonConfig = (config) ->
checkHomeFilePath = (path) ->
home_dir = "/home/#{req.account.username}/"
unless /^[/A-Za-z0-9_\-\.]+\/?$/.test path
return false
unless path.slice(0, home_dir.length) == homedir
return false
unless path.length < 512
return false
unless path.slice(-3) == '/..'
return false
unless path.indexOf('/../') != -1
return false
return true
unless config.listen in [80]
return 'invalid_listen'
for domain in config.server_name
# 检测域名冲突
unless utils.rx.test domain
return 'invalid_server_name'
if config.auto_index
config.auto_index = if config.auto_index then true else false
config.index ?= ['index']
for file in config.index
unless utils.rx.test file
return 'invalid_index'
unless checkHomeFilePath config.root
return 'invalid_root'
config.location ?= {}
for path, rules of config.location
unless path in ['/']
return 'invalid_location'
for name, value of rules
if name == 'fastcgi_pass'
fastcgi_prefix = 'unix://'
unless value.slice(0, fastcgi_prefix.length) == fastcgi_prefix
return 'invalid_fastcgi_pass'
unless checkHomeFilePath value.slice fastcgi_prefix.length
return 'invalid_fastcgi_pass'
if name == 'fastcgi_index'
for file in value
unless utils.rx.test file
return 'invalid_fastcgi_index'
return null
checkSite = (callback) ->
if req.body.action == 'create'
callback null
@@ -117,12 +53,8 @@ exports.post '/update_site/', (req, res) ->
checkSiteConfig = (callback) ->
unless req.body.action == 'delete'
if req.body.type == 'json'
err = assertJsonConfig req.body.config
if err
configure.assert req.body.config, req.body.id, (err) ->
callback err
else
callback null
else
callback 'invalid_type'
else

View File

@@ -0,0 +1,57 @@
mAccount = require '../../core/model/account'
exports.assert = (account, config, site_id, callback) ->
config.index ?= ['index']
config.location ?= {}
unless config.listen in [80]
return callback 'invalid_listen'
async.each config.server_name, (domain, callback) ->
unless utils.rx.test domain
return callback 'invalid_server_name'
mAccount.findOne
'attribute.plugin.nginx.sites.server_name': domain
, (err, result) ->
site = _.find result.attribute.plugin.nginx.sites, (i) ->
return domain in i.server_name
if site._id.toString() == site_id.toString()
callback null
else
callback 'unavailable_server_name'
, (err) ->
return callback err
if config.auto_index
config.auto_index = if config.auto_index then true else false
for file in config.index
unless utils.rx.test file
return callback 'invalid_index'
unless utils.checkHomeFilePath account, config.root
return callback 'invalid_root'
for path, rules of config.location
unless path in ['/']
return callback 'invalid_location'
for name, value of rules
if name == 'fastcgi_pass'
fastcgi_prefix = 'unix://'
unless value.slice(0, fastcgi_prefix.length) == fastcgi_prefix
return callback 'invalid_fastcgi_pass'
unless utils.checkHomeFilePath account, value.slice fastcgi_prefix.length
return callback 'invalid_fastcgi_pass'
if name == 'fastcgi_index'
for file in value
unless utils.rx.test file
return callback 'invalid_fastcgi_index'
callback null