2017-11-30 09:00:26 +00:00
|
|
|
class Admin::SitePanelController < OrbitAdminController
|
2021-07-19 11:51:29 +00:00
|
|
|
before_action :check_server_ability, only: [:index]
|
2017-11-30 10:49:21 +00:00
|
|
|
def initialize
|
|
|
|
super
|
|
|
|
@app_title = "client_management"
|
|
|
|
end
|
2021-04-19 01:29:53 +00:00
|
|
|
def upload_cert
|
|
|
|
@site_cert = SiteCert.new
|
|
|
|
end
|
|
|
|
def edit_cert
|
|
|
|
@site_cert = SiteCert.find(params[:site_panel_id])
|
|
|
|
end
|
|
|
|
def update_cert
|
|
|
|
@site_cert = SiteCert.find(params[:site_panel_id])
|
|
|
|
@site_cert.update_attributes(site_cert_params)
|
|
|
|
redirect_to cert_management_admin_site_panel_index_path
|
|
|
|
end
|
|
|
|
def create_cert
|
|
|
|
@site_cert = SiteCert.create(site_cert_params)
|
|
|
|
redirect_to cert_management_admin_site_panel_index_path
|
|
|
|
end
|
|
|
|
def destroy_cert
|
|
|
|
@site_cert = SiteCert.find(params[:site_panel_id])
|
|
|
|
@site_cert.destroy
|
|
|
|
redirect_to cert_management_admin_site_panel_index_path
|
|
|
|
end
|
|
|
|
def get_certs_for_site
|
|
|
|
site_construct = SiteConstruct.find(params[:id]) rescue nil
|
2021-04-19 12:35:16 +00:00
|
|
|
@site_construct = site_construct
|
2021-04-19 01:29:53 +00:00
|
|
|
domain_name = site_construct.domain_name rescue ""
|
|
|
|
domain_names = domain_name.split(" ").select{|s| s.present?}
|
|
|
|
domain_names_count = domain_names.count
|
|
|
|
(0...domain_names_count).each do |i|
|
|
|
|
domain_names << domain_names[i].sub(/\w+\./,'\\*.')
|
|
|
|
end
|
|
|
|
if domain_names.count != 0
|
|
|
|
domain_name_search_text = "(" + domain_names.join("|") + ")"
|
|
|
|
else
|
|
|
|
domain_name_search_text = ""
|
|
|
|
end
|
|
|
|
@site_certs = SiteCert.all.where(:is_valid=>true,:domain_names=>/\A#{domain_name_search_text}/)
|
|
|
|
@site_certs = SiteCert.all
|
|
|
|
if site_construct
|
|
|
|
@enable_cert_id = site_construct.site_cert_id
|
|
|
|
end
|
|
|
|
render :layout => false
|
|
|
|
end
|
|
|
|
def cert_management
|
|
|
|
@site_certs = SiteCert.all.page(params[:page]).per(10)
|
|
|
|
@filter_fields = {}
|
|
|
|
params[:keywords] = params[:keywords].to_s.gsub("*","\\*")
|
|
|
|
@site_certs = search_data(@site_certs,[:domain_names])
|
|
|
|
if request.xhr?
|
|
|
|
render :partial => "certs_table"
|
|
|
|
end
|
|
|
|
end
|
2021-02-25 07:09:28 +00:00
|
|
|
def update_cert_setting
|
|
|
|
site_params = params.require('site').permit!
|
|
|
|
if !site_params['cert_ver_file_content'].blank?
|
|
|
|
site_params['cert_ver_file_content'] = Nokogiri::HTML.parse(site_params['cert_ver_file_content'].gsub(/\r\n|\n/,'').gsub(/<br[ \/]*>/, "\n")).inner_text
|
|
|
|
end
|
|
|
|
if !site_params['cert_ver_location_path'].blank? && site_params['cert_ver_location_path'].start_with?('h')
|
|
|
|
site_params['cert_ver_location_path'] = URI(site_params['cert_ver_location_path']).path
|
|
|
|
end
|
|
|
|
site = SiteConstruct.where(id: site_params[:id]).first
|
|
|
|
site.update_attributes(site_params)
|
|
|
|
Thread.new do
|
|
|
|
system("bundle exec rake create_site:add_cert_ver_for_site['#{site_params[:id]}']")
|
|
|
|
end
|
|
|
|
redirect_to "/#{I18n.locale}/admin/site_panel/sites_list?server_name=#{site.server_type}"
|
|
|
|
end
|
|
|
|
|
2017-11-30 09:00:26 +00:00
|
|
|
def index
|
|
|
|
@site_construct = SiteConstruct.new
|
2020-04-24 14:38:28 +00:00
|
|
|
@module_app = ModuleApp.where(:title=>@app_title).first
|
|
|
|
end
|
|
|
|
def server_manager
|
|
|
|
@module_app = ModuleApp.where(:title=>@app_title).first
|
|
|
|
@categories = @module_app.categories
|
|
|
|
@tags = []
|
|
|
|
@filter_fields = filter_fields(@categories,@tags)
|
|
|
|
@site_servers = SiteServer.all.with_categories(filters("category")).with_status(filters("status"))
|
|
|
|
@site_servers = search_data(@site_servers,[:server_name,:ip]).page(params[:page].to_i).per(10)
|
|
|
|
if request.xhr?
|
|
|
|
render :partial => "server_manager_index"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
def edit_server_info
|
|
|
|
@module_app = ModuleApp.where(:title=>@app_title).first
|
|
|
|
if params[:type] == 'update'
|
|
|
|
@site_server = SiteServer.find(params[:id]) rescue nil
|
|
|
|
if @site_server.present?
|
|
|
|
@site_server.update_attributes(site_server_params)
|
|
|
|
else
|
|
|
|
@site_server = SiteServer.create(site_server_params)
|
|
|
|
end
|
|
|
|
redirect_to admin_site_panel_server_manager_path
|
|
|
|
elsif params[:type] == 'create'
|
|
|
|
@site_server = SiteServer.new
|
|
|
|
elsif params[:type] == 'delete'
|
|
|
|
SiteServer.find(params[:id]).destroy
|
|
|
|
redirect_to admin_site_panel_server_manager_path
|
2021-01-19 04:48:03 +00:00
|
|
|
elsif params[:type] == 'detect_sites'
|
2021-04-19 01:29:53 +00:00
|
|
|
extra_text = ""
|
|
|
|
if params[:key].present?
|
2021-04-19 12:35:16 +00:00
|
|
|
extra_text = "[#{params[:key].gsub(/[\(\)\[\]]/){|ff| "\\"+ff }}]"
|
2021-04-19 01:29:53 +00:00
|
|
|
end
|
2021-01-19 04:48:03 +00:00
|
|
|
Thread.new do
|
2021-04-19 01:29:53 +00:00
|
|
|
system("bundle exec rake create_site:detect_sites#{extra_text}")
|
2021-01-19 04:48:03 +00:00
|
|
|
end
|
|
|
|
render :json => {"success"=>true}
|
|
|
|
elsif params[:type] == 'see_infos'
|
|
|
|
if params["key"].blank?
|
|
|
|
thread = Multithread.where(:key=>'detect_sites').first
|
|
|
|
if thread.nil?
|
|
|
|
thread = Multithread.where(:key=>'execing_commands').first
|
|
|
|
else
|
|
|
|
if thread.status["status"] == "finish" || thread.status["status"] == "error"
|
|
|
|
exec_thread = Multithread.where(:key=>'execing_commands').first
|
|
|
|
thread = exec_thread if !exec_thread.nil?
|
|
|
|
end
|
|
|
|
end
|
|
|
|
else
|
|
|
|
thread = Multithread.where(:key=>params["key"]).first
|
|
|
|
end
|
|
|
|
if thread.nil?
|
|
|
|
render :json => {"infos"=>[],"status"=>"starting"}
|
|
|
|
else
|
|
|
|
render :json => thread.status
|
|
|
|
end
|
|
|
|
elsif params[:type] == 'get_server_names'
|
|
|
|
render :json => (SiteServer.all.map{|s| s.server_name rescue ""}.select{|n| !n.blank?} rescue [])
|
2020-04-24 14:38:28 +00:00
|
|
|
else
|
|
|
|
@site_server = SiteServer.find(params[:id])
|
|
|
|
end
|
2017-11-30 09:00:26 +00:00
|
|
|
end
|
|
|
|
def create
|
2021-07-21 04:22:32 +00:00
|
|
|
server_ability = ServerAbility.first
|
2021-07-19 11:51:29 +00:00
|
|
|
if server_ability.available
|
|
|
|
site_construct = SiteConstruct.new(site_construct_params)
|
|
|
|
site_construct.user_id = current_user.id.to_s
|
|
|
|
site_construct.status = "creating"
|
|
|
|
site_construct.save
|
|
|
|
git_url = "http://ruling.digital/git"#"http://gitlab.tp.rulingcom.com/orbit_chiu1/orbit4-5.git"
|
|
|
|
git_template_url = "http://gitlab.tp.rulingcom.com/themes/default-theme.git"
|
|
|
|
git_extension_url = "http://gitlab.tp.rulingcom.com/core/default-modules.git"
|
|
|
|
site_server = SiteServer.where(:server_name=>site_construct.server_type).first
|
|
|
|
ip = site_server.ip
|
|
|
|
user = site_server.account
|
|
|
|
password = site_server.password
|
|
|
|
site_name = site_construct.site_name
|
|
|
|
domain_name = site_construct.domain_name
|
|
|
|
port = site_construct.get_port
|
|
|
|
db_name = site_construct.db_name
|
|
|
|
path = site_construct.path
|
|
|
|
site_construct_id = site_construct.id.to_s
|
|
|
|
if params[:site_construct][:copy_id].blank?
|
|
|
|
Thread.new do
|
|
|
|
system("bundle exec rake create_site:create_site['#{git_template_url}','#{git_extension_url}','#{git_url}','#{ip}','#{user}','#{password}','#{site_name}','#{domain_name}','#{port}','#{db_name}','#{path}','#{site_construct_id}']")
|
|
|
|
end
|
|
|
|
else
|
|
|
|
Thread.new do
|
|
|
|
system("bundle exec rake create_site:copy_site['#{ip}','#{user}','#{password}','#{site_name}','#{domain_name}','#{port}','#{db_name}','#{path}','#{site_construct_id}','#{params[:site_construct][:copy_id]}',#{site_construct.only_copy_installed_module}]")
|
|
|
|
end
|
2021-02-16 08:49:58 +00:00
|
|
|
end
|
2021-07-19 11:51:29 +00:00
|
|
|
redirect_to "#{admin_site_panel_sites_list_path}?id=#{site_construct_id}"
|
2021-02-16 08:49:58 +00:00
|
|
|
else
|
2021-07-19 11:51:29 +00:00
|
|
|
render :text => I18n.t('client_management.over_the_limit')
|
2020-04-24 14:38:28 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
def create_site
|
|
|
|
site_construct = SiteConstruct.find(params[:id])
|
|
|
|
site_construct.user_id = current_user.id.to_s
|
2021-02-06 09:18:52 +00:00
|
|
|
git_url = "http://ruling.digital/git"#"http://gitlab.tp.rulingcom.com/orbit_chiu1/orbit4-5.git"
|
|
|
|
git_template_url = "http://gitlab.tp.rulingcom.com/themes/default-theme.git"
|
|
|
|
git_extension_url = "http://gitlab.tp.rulingcom.com/core/default-modules.git"
|
2020-04-24 14:38:28 +00:00
|
|
|
site_server = SiteServer.where(:server_name=>site_construct.server_type).first
|
|
|
|
ip = site_server.ip
|
|
|
|
user = site_server.account
|
|
|
|
password = site_server.password
|
|
|
|
site_name = site_construct.site_name
|
|
|
|
domain_name = site_construct.domain_name
|
2021-04-19 01:29:53 +00:00
|
|
|
port = site_construct.get_port
|
2020-04-24 14:38:28 +00:00
|
|
|
db_name = site_construct.db_name
|
|
|
|
path = site_construct.path
|
|
|
|
site_construct_id = params[:id]
|
2021-02-23 06:18:25 +00:00
|
|
|
if site_construct.copy_id
|
|
|
|
Thread.new do
|
2021-04-13 03:06:09 +00:00
|
|
|
system("bundle exec rake create_site:copy_site['#{ip}','#{user}','#{password}','#{site_name}','#{domain_name}','#{port}','#{db_name}','#{path}','#{site_construct_id}','#{site_construct.copy_id}',#{site_construct.only_copy_installed_module}]")
|
2021-02-23 06:18:25 +00:00
|
|
|
end
|
|
|
|
else
|
|
|
|
Thread.new do
|
|
|
|
system("bundle exec rake create_site:create_site['#{git_template_url}','#{git_extension_url}','#{git_url}','#{ip}','#{user}','#{password}','#{site_name}','#{domain_name}','#{port}','#{db_name}','#{path}','#{site_construct_id}']")
|
|
|
|
end
|
2020-04-24 14:38:28 +00:00
|
|
|
end
|
|
|
|
render :json =>{"success"=>true}
|
|
|
|
end
|
2020-04-28 13:26:49 +00:00
|
|
|
def edit_site
|
|
|
|
if params[:type] == 'delete'
|
|
|
|
Thread.new do
|
2021-02-18 02:09:31 +00:00
|
|
|
system("bundle exec rake create_site:delete_site[#{params[:id]}]")
|
2020-04-28 13:26:49 +00:00
|
|
|
end
|
|
|
|
elsif params[:type] == 'close'
|
|
|
|
Thread.new do
|
2021-02-18 02:09:31 +00:00
|
|
|
system("bundle exec rake exec_commands:exec_commands[#{params[:id]},,close_site]")
|
2020-04-28 13:26:49 +00:00
|
|
|
end
|
|
|
|
elsif params[:type] == 'open'
|
|
|
|
Thread.new do
|
2021-03-17 11:19:18 +00:00
|
|
|
system("bundle exec rake exec_commands:exec_commands[#{params[:id]},,open_site,,#{params[:env]}]")
|
2020-04-28 13:26:49 +00:00
|
|
|
end
|
2021-01-19 04:48:03 +00:00
|
|
|
elsif params[:type] == 'detail'
|
|
|
|
@site = SiteConstruct.find(params[:id])
|
|
|
|
render 'see_detail_for_created_site' and return
|
2021-02-17 16:59:11 +00:00
|
|
|
elsif params[:type] == 'change_server_name'
|
2021-04-19 01:29:53 +00:00
|
|
|
site_construct = SiteConstruct.find(params[:id])
|
|
|
|
site_construct.update(:domain_name=>params[:site_construct][:domain_name])
|
|
|
|
cmd = "bundle exec rake create_site:change_site_server_name[#{params[:id]},'#{params[:site_construct][:domain_name]}','#{params[:site_construct][:port].to_a.join('////') }']"
|
|
|
|
site_construct.update(:status=>"execing",:infos=>["Execing change domain name task..."])
|
|
|
|
Thread.new do
|
|
|
|
Bundler.with_clean_env{system(cmd)}
|
|
|
|
end
|
|
|
|
redirect_to admin_site_panel_edit_site_path(:id=>params[:id],:type=>'detail',:status=>'changing') and return
|
2021-01-19 04:48:03 +00:00
|
|
|
elsif params[:type] == 'delete_from_list'
|
|
|
|
SiteConstruct.find(params[:id]).destroy
|
|
|
|
redirect_to :back and return
|
2021-04-19 01:29:53 +00:00
|
|
|
elsif params[:type] == 'select_cert'
|
|
|
|
@site_construct = SiteConstruct.find(params[:id])
|
2021-04-19 12:35:16 +00:00
|
|
|
@site_construct.update(:redirect_to_https=>params[:redirect_to_https])
|
2021-04-19 01:29:53 +00:00
|
|
|
@site_construct.update(:site_cert_id=>BSON::ObjectId(params[:site_cert_id]))
|
|
|
|
Thread.new do
|
|
|
|
system("bundle exec rake create_site:change_site_cert[#{params[:id]}]")
|
|
|
|
end
|
2020-04-28 13:26:49 +00:00
|
|
|
else
|
|
|
|
Thread.new do
|
2021-01-19 04:48:03 +00:00
|
|
|
if params[:id].blank? && !params[:server_names].blank?
|
2021-02-18 02:09:31 +00:00
|
|
|
system("bundle exec rake exec_commands:exec_commands[,'#{params[:commands]}',exec_all,'#{params[:server_names].join('////')}']")
|
2021-01-19 04:48:03 +00:00
|
|
|
else
|
2021-02-18 02:09:31 +00:00
|
|
|
system("bundle exec rake exec_commands:exec_commands[#{params[:id]},'#{params[:commands]}',exec_commands]")
|
2021-01-19 04:48:03 +00:00
|
|
|
end
|
2020-04-28 13:26:49 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
render :json =>{"success"=>true}
|
|
|
|
end
|
2020-04-24 14:38:28 +00:00
|
|
|
def sites_list
|
2021-01-19 04:48:03 +00:00
|
|
|
@module_app = ModuleApp.where(:title=>@app_title).first
|
|
|
|
@categories = @module_app.categories
|
2021-04-14 10:55:07 +00:00
|
|
|
@filter_fields = filter_fields(@categories, [])
|
|
|
|
site_modes = ["development","production"]
|
|
|
|
@filter_fields["client_management.site_mode"] = site_modes.map{|mode| {:title=>I18n.t("client_management.#{mode}"), :id=>mode}}
|
2021-01-19 04:48:03 +00:00
|
|
|
@sites = SiteConstruct.any_in(:hidden=>[false,nil]).desc(:id)
|
|
|
|
@site_servers = SiteServer.all.with_categories(filters("category"))
|
|
|
|
@sites = (params[:server_name].blank? ? @sites : @sites.where(:server_type=>params[:server_name]))
|
|
|
|
@sites = @sites.any_in(:server_type => @site_servers.map{|s| s.server_name})
|
2021-04-19 01:29:53 +00:00
|
|
|
@sites = search_data(@sites,[:domain_name,:site_name,:school_name,:status,:port]).page(params[:page].to_i).per(10)
|
2021-04-14 10:55:07 +00:00
|
|
|
if (params[:filters][:site_mode].present? rescue false)
|
|
|
|
site_modes = params[:filters][:site_mode]
|
|
|
|
if site_modes.include?("development")
|
|
|
|
site_modes << nil
|
|
|
|
end
|
|
|
|
@sites = @sites.where(:rails_env.in=>site_modes,:status=>"finish")
|
|
|
|
end
|
2021-01-19 04:48:03 +00:00
|
|
|
if request.xhr?
|
|
|
|
render :partial => "sites_list_table"
|
|
|
|
end
|
2020-04-24 14:38:28 +00:00
|
|
|
end
|
|
|
|
def site_infos
|
|
|
|
site_construct = SiteConstruct.where(:id=>params[:id]).first
|
|
|
|
if site_construct.nil?
|
|
|
|
render :json => {:status=>"creating",:infos=>[]}
|
|
|
|
else
|
|
|
|
render :json => {:status=>site_construct.status,:infos=>site_construct.infos}
|
|
|
|
end
|
2017-11-30 09:00:26 +00:00
|
|
|
end
|
|
|
|
private
|
2021-04-19 01:29:53 +00:00
|
|
|
def site_cert_params
|
|
|
|
site_cert_params = params.require(:site_cert).permit! rescue {}
|
|
|
|
end
|
2017-11-30 09:00:26 +00:00
|
|
|
def site_construct_params
|
2021-04-19 01:29:53 +00:00
|
|
|
site_construct_params = params.require(:site_construct).permit! rescue {}
|
2017-11-30 09:00:26 +00:00
|
|
|
end
|
2020-04-24 14:38:28 +00:00
|
|
|
def site_server_params
|
2021-04-19 01:29:53 +00:00
|
|
|
params.require(:site_server).permit! rescue {}
|
2020-04-24 14:38:28 +00:00
|
|
|
end
|
2021-07-19 11:51:29 +00:00
|
|
|
def check_server_ability
|
|
|
|
store_token = current_site.store_token
|
|
|
|
network = ONetwork.new(OrbitStore::URL,"post")
|
2021-07-21 06:49:15 +00:00
|
|
|
site_num = SiteConstruct.where(:hidden.ne=> true,:status => 'finish').count
|
2021-07-19 11:51:29 +00:00
|
|
|
response = network.request("/xhr/check_server_ability",
|
|
|
|
{"store_token" => store_token,
|
|
|
|
"site_num" => site_num,
|
|
|
|
"site_name" => current_site.title,
|
|
|
|
"site_url" => current_site.root_url})
|
|
|
|
data = JSON.parse(response.body) rescue {}
|
|
|
|
@server_ability = ServerAbility.first
|
|
|
|
if data.keys.length>0 && !data['ability'].blank?
|
|
|
|
@server_ability.update_attributes(ability: data['ability'], site_num: site_num)
|
|
|
|
else
|
|
|
|
@server_ability.update_attributes(site_num: site_num)
|
|
|
|
end
|
|
|
|
end
|
2017-11-30 09:00:26 +00:00
|
|
|
end
|