mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-13 07:01:20 +08:00
reconfigure for supervisor, shadowsocks
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
{async, fs, child_process, _} = app.libs
|
||||
{Account} = app.models
|
||||
{utils} = app
|
||||
|
||||
linux = require './linux'
|
||||
|
||||
@@ -32,14 +33,9 @@ module.exports = (callback) ->
|
||||
return callback
|
||||
|
||||
console.log "removed /home/#{user}"
|
||||
backup_filename = "#{__dirname}/../.backup/linux/#{user}-#{utils.randomString(5)}"
|
||||
child_process.exec "sudo mv /home/#{user} #{backup_filename}", callback
|
||||
|
||||
async.series [
|
||||
(callback) ->
|
||||
child_process.exec "sudo mv /home/#{user} #{__dirname}/../.backup/linux/#{user}-#{utils.randomString(5)}", callback
|
||||
|
||||
(callback) ->
|
||||
child_process.exec "sudo rm -r #{user}", callback
|
||||
], callback
|
||||
, callback
|
||||
|
||||
], (err) ->
|
||||
|
||||
@@ -1,2 +1,81 @@
|
||||
{async, _, child_process} = app.libs
|
||||
{Account} = app.models
|
||||
{config, utils} = app
|
||||
|
||||
shadowsocks = require './shadowsocks'
|
||||
|
||||
module.exports = (callback) ->
|
||||
callback()
|
||||
async.series [
|
||||
(callback) ->
|
||||
async.each config.plugins.shadowsocks.available_ciphers, (method, callback) ->
|
||||
shadowsocks.writeSupervisorConfigure method, callback
|
||||
, callback
|
||||
|
||||
(callback) ->
|
||||
default_method = _.first config.plugins.shadowsocks.available_ciphers
|
||||
|
||||
Account.find
|
||||
'billing.service': 'shadowsocks'
|
||||
, (err, accounts) ->
|
||||
async.eachSeries accounts, (account, callback) ->
|
||||
{port, method, password} = account.pluggable.shadowsocks
|
||||
|
||||
unless method
|
||||
console.log "created shadowsocks method for #{account.username}}"
|
||||
account.pluggable.shadowsocks.method = default_method
|
||||
account.markModified 'pluggable.shadowsocks.method'
|
||||
|
||||
unless password
|
||||
console.log "created shadowsocks password for #{account.username}}"
|
||||
account.pluggable.shadowsocks.password = utils.randomString 10
|
||||
account.markModified 'pluggable.shadowsocks.password'
|
||||
|
||||
if port
|
||||
account.save callback
|
||||
else
|
||||
shadowsocks.generatePort (port) ->
|
||||
console.log "created shadowsocks port for #{account.username}}"
|
||||
account.pluggable.shadowsocks.port = port
|
||||
account.markModified 'pluggable.shadowsocks.port'
|
||||
account.save callback
|
||||
|
||||
, callback
|
||||
|
||||
(callback) ->
|
||||
shadowsocks.queryIptablesInfo (iptables_info) ->
|
||||
Account.find
|
||||
'billing.service': 'shadowsocks'
|
||||
, (err, accounts) ->
|
||||
async.series [
|
||||
(callback) ->
|
||||
async.eachSeries accounts, (account, callback) ->
|
||||
port = iptables_info[account.pluggable.shadowsocks.port]
|
||||
|
||||
if port
|
||||
callback()
|
||||
else
|
||||
child_process.exec "sudo iptables -I OUTPUT -p tcp --sport #{port}", callback
|
||||
, callback
|
||||
|
||||
(callback) ->
|
||||
async.eachSeries _.keys(iptables_info), (port) ->
|
||||
matched_account = _.find accounts, (account) ->
|
||||
return account.pluggable.shadowsocks.port == port
|
||||
|
||||
if matched_account
|
||||
callback()
|
||||
else
|
||||
child_process.exec "sudo iptables -D OUTPUT #{iptables_info[port].num}", callback
|
||||
, callback
|
||||
|
||||
], callback
|
||||
|
||||
(callback) ->
|
||||
child_process.exec 'sudo iptables-save | sudo tee /etc/iptables.rules', callback
|
||||
|
||||
(callback) ->
|
||||
shadowsocks.updateConfigure callback
|
||||
|
||||
], (err) ->
|
||||
throw err if err
|
||||
callback()
|
||||
|
||||
@@ -16,22 +16,27 @@ exports.initSupervisor = (callback) ->
|
||||
if program_name in _.pluck program_status, 'name'
|
||||
return callback()
|
||||
|
||||
configure = exports.generateConfigure [],
|
||||
method: method
|
||||
exports.writeSupervisorConfigure method, ->
|
||||
supervisor.updateProgram {}, {program_name: program_name}, ->
|
||||
callback()
|
||||
|
||||
filename = "/etc/shadowsocks/#{method}.json"
|
||||
ShadowsocksPlugin.writeConfigFile filename, configure, {mode: 0o755}, ->
|
||||
supervisor.writeConfig {username: 'nobody'},
|
||||
program_name: program_name
|
||||
command: "ssserver -c #{filename}"
|
||||
name: program_name
|
||||
autostart: true
|
||||
autorestart: true
|
||||
stdout_logfile: false
|
||||
, ->
|
||||
supervisor.updateProgram {}, {program_name: program_name}, ->
|
||||
callback()
|
||||
, callback
|
||||
|
||||
exports.writeSupervisorConfigure = (method, callback) ->
|
||||
program_name = "shadowsocks-#{method}"
|
||||
|
||||
configure = exports.generateConfigure [],
|
||||
method: method
|
||||
|
||||
filename = "/etc/shadowsocks/#{method}.json"
|
||||
ShadowsocksPlugin.writeConfigFile filename, configure, {mode: 0o755}, ->
|
||||
supervisor.writeConfig {username: 'nobody'},
|
||||
program_name: program_name
|
||||
command: "ssserver -c #{filename}"
|
||||
name: program_name
|
||||
autostart: true
|
||||
autorestart: true
|
||||
stdout_logfile: false
|
||||
, ->
|
||||
callback()
|
||||
|
||||
|
||||
@@ -1,2 +1,49 @@
|
||||
{async, fs, _, child_process} = app.libs
|
||||
{Account} = app.models
|
||||
{utils} = app
|
||||
|
||||
supervisor = require './supervisor'
|
||||
|
||||
fs.mkdirSync "#{__dirname}/../.backup/supervisor", 0o750
|
||||
|
||||
module.exports = (callback) ->
|
||||
callback()
|
||||
async.series [
|
||||
(callback) ->
|
||||
Account.find
|
||||
'billing.service': 'supervisor'
|
||||
'pluggable.supervisor.programs.0':
|
||||
$exists: true
|
||||
, (err, accounts) ->
|
||||
async.eachSeries accounts, (account, callback) ->
|
||||
async.eachSeries account.pluggable.supervisor.programs, (program, callback) ->
|
||||
supervisor.writeConfig account, program, callback
|
||||
, callback
|
||||
, callback
|
||||
|
||||
(callback) ->
|
||||
exists_configures = _.filter fs.readdirSync('/etc/supervisor/conf.d'), (file) ->
|
||||
return file[ ... 1] == '@'
|
||||
|
||||
async.eachSeries exists_configures, (filename, callback) ->
|
||||
[__, username, name] = filename.match /@([^-]+)-(.*)/
|
||||
|
||||
Account.findOne
|
||||
'username': username
|
||||
'billing.service': 'supervisor'
|
||||
'pluggable.supervisor.programs.name': name
|
||||
, (err, account) ->
|
||||
if account
|
||||
return callback()
|
||||
else
|
||||
console.log "removed /etc/supervisor/conf.d/#{filename}"
|
||||
backup_filename = "#{__dirname}/../.backup/supervisor/#{filename}-#{utils.randomString(5)}"
|
||||
child_process.exec "sudo mv /etc/supervisor/conf.d/#{filename} #{backup_filename}", callback
|
||||
|
||||
, callback
|
||||
|
||||
(callback) ->
|
||||
child_process.exec 'sudo service supervisor restart', callback
|
||||
|
||||
], (err) ->
|
||||
throw err if err
|
||||
callback()
|
||||
|
||||
Reference in New Issue
Block a user