mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-05-13 00:29:02 +08:00
检测重复的域名
This commit is contained in:
@@ -31,7 +31,7 @@ module.exports =
|
||||
|
||||
plans:
|
||||
all:
|
||||
price: 8
|
||||
price: 10
|
||||
t_name: '所有服务(默认)'
|
||||
t_service: '支持所有服务'
|
||||
t_resources: '磁盘: 520MB, 内存: 27MB, 流量: 37GB'
|
||||
|
||||
@@ -13,6 +13,7 @@ global.async = require 'async'
|
||||
global.app = express()
|
||||
global.config = require './../config'
|
||||
global.i18n = require './i18n'
|
||||
global.utils = require './router/utils'
|
||||
|
||||
bindRouters = (app) ->
|
||||
app.use require 'middleware-injector'
|
||||
|
||||
@@ -4,3 +4,23 @@ exports.rx =
|
||||
password: /^.+$/
|
||||
domain: /(\*\.)?[A-Za-z0-9]+(\-[A-Za-z0-9]+)*(\.[A-Za-z0-9]+(\-[A-Za-z0-9]+)*)*/
|
||||
filename: /[A-Za-z0-9_\-\.]+/
|
||||
|
||||
exports.checkHomeFilePath = (account, path) ->
|
||||
home_dir = "/home/#{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
|
||||
|
||||
@@ -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