mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-05-12 16:12:54 +08:00
检测重复的域名
This commit is contained in:
@@ -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
|
||||
|
||||
57
plugin/nginx/configure.coffee
Normal file
57
plugin/nginx/configure.coffee
Normal 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
|
||||
Reference in New Issue
Block a user