|
|
# coding: utf-8
|
|
|
|
|
|
hestiacp_ruby_gem_version = "3.3.0"
|
|
|
Gem.paths = {
|
|
|
"GEM_HOME" => "#{__dir__}/vendor/bundle/ruby/#{hestiacp_ruby_gem_version}",
|
|
|
"GEM_PATH" => "#{__dir__}/vendor/bundle/ruby/#{hestiacp_ruby_gem_version}",
|
|
|
}
|
|
|
|
|
|
require "rubygems"
|
|
|
require "sinatra"
|
|
|
require "puma"
|
|
|
|
|
|
require_relative "classes/config"
|
|
|
require_relative "classes/gitinfo"
|
|
|
require_relative "classes/db"
|
|
|
require_relative "classes/systeminfo"
|
|
|
require_relative "classes/utilities"
|
|
|
require_relative "classes/projects"
|
|
|
require_relative "classes/configs"
|
|
|
|
|
|
def print_error_page(error_status, error_meaasge)
|
|
|
@page_name = "Ошибка выполнения"
|
|
|
@status_err = error_status
|
|
|
@error_msg = error_meaasge
|
|
|
halt erb(:page5xx)
|
|
|
end
|
|
|
|
|
|
cfg = IniConfig.new()
|
|
|
db = DBase.new()
|
|
|
|
|
|
set :port, cfg.get_port
|
|
|
set :public_folder, File.dirname(__FILE__) + "/public"
|
|
|
use Rack::Session::Pool, :expire_after => 2592000
|
|
|
|
|
|
get "/" do
|
|
|
@page_name = "Система сборки rpm пакетов"
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo_data = repo.getrepos
|
|
|
@repos_number = repo_data.length
|
|
|
@rcp_number = db.get_recips.length
|
|
|
@prj_number = prj.get_projects.length
|
|
|
erb :index
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/repos/:reponame/:branch" do
|
|
|
@page_name = params["reponame"]
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
tmp_result = repo.repo_info(params["reponame"], params["branch"])
|
|
|
if tmp_result[:error].nil?
|
|
|
@repo_data = tmp_result
|
|
|
@ip_addr = systeminfo_get_ip
|
|
|
@user_name = systeminfo_get_username
|
|
|
@path_to_repo = File.join(repo.path, params["reponame"] + ".git")
|
|
|
erb :gitinfo
|
|
|
else
|
|
|
print_error_page(503, tmp_result[:error])
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/repos/:reponame" do
|
|
|
@page_name = params["reponame"]
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
tmp_result = repo.repo_info(params["reponame"])
|
|
|
if tmp_result[:error].nil?
|
|
|
@repo_data = tmp_result
|
|
|
@ip_addr = systeminfo_get_ip
|
|
|
@user_name = systeminfo_get_username
|
|
|
@path_to_repo = File.join(repo.path, params["reponame"] + ".git")
|
|
|
erb :gitinfo
|
|
|
else
|
|
|
print_error_page(503, tmp_result[:error])
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/gitdelete/:reponame" do
|
|
|
input_name = params["reponamedup"]
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
if params["reponame"] == input_name
|
|
|
repo.delete_repo(input_name)
|
|
|
end
|
|
|
redirect "/repos"
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/gitdelete" do
|
|
|
redirect "/repos"
|
|
|
end
|
|
|
|
|
|
get "/repos" do
|
|
|
@page_name = "Список доступных git репозиториев"
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
@repo_data = repo.getrepos
|
|
|
erb :gits
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/gitcreate" do
|
|
|
@page_name = "Создать новый пустой git репозиторий"
|
|
|
@error_data = session[:gitcreate_error]
|
|
|
session[:gitcreate_error] = nil
|
|
|
erb :newgit
|
|
|
end
|
|
|
|
|
|
post "/gitcreate" do
|
|
|
if request.form_data?
|
|
|
if params["gitname"].nil?
|
|
|
session[:gitcreate_error] = "Не задано имя репозитория"
|
|
|
else
|
|
|
filename = sanitize_filename(params["gitname"])
|
|
|
if filename != ""
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
if repo.create_git(filename, params["gitdescr"]) != 0
|
|
|
session[:gitcreate_error] = repo.error
|
|
|
else
|
|
|
redirect "/repos"
|
|
|
return
|
|
|
end
|
|
|
end
|
|
|
else
|
|
|
session[:gitcreate_error] = "Название репозитория должно содержать только символы a-z, A-Z. 0-9 и _"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
redirect "/gitcreate"
|
|
|
end
|
|
|
|
|
|
get "/recips" do
|
|
|
@page_name = "Список доступных сценариев сборки"
|
|
|
@rcp_data = db.get_recips
|
|
|
erb :receips
|
|
|
end
|
|
|
|
|
|
get "/recips/:rcp_id" do
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
@repo_data = repo.getrepos
|
|
|
@rcp_id = params["rcp_id"]
|
|
|
info = db.get_rcp_info_by_id(@rcp_id)
|
|
|
@page_name = info[:filepath]
|
|
|
@rcp_name = info[:filepath]
|
|
|
if session[:rcp_old_description].nil?
|
|
|
@old_filepath = info[:filepath]
|
|
|
else
|
|
|
@old_filepath = session[:rcp_old_filepath]
|
|
|
end
|
|
|
if session[:rcp_old_description].nil?
|
|
|
@old_description = info[:descr]
|
|
|
else
|
|
|
@old_description = session[:rcp_old_description]
|
|
|
end
|
|
|
if session[:rcp_old_codedata].nil?
|
|
|
@old_codedata = info[:content]
|
|
|
else
|
|
|
@old_codedata = session[:rcp_old_codedata]
|
|
|
end
|
|
|
if session[:rcp_old_gitlst].nil?
|
|
|
@old_gitlst = info[:repos_list]
|
|
|
else
|
|
|
@old_gitlst = session[:rcp_old_gitlst]
|
|
|
end
|
|
|
@error_data = session[:rcpcreate_error]
|
|
|
session[:rcpcreate_error] = nil
|
|
|
session[:rcp_old_filepath] = nil
|
|
|
session[:rcp_old_description] = nil
|
|
|
session[:rcp_old_codedata] = nil
|
|
|
session[:rcp_old_gitlst] = nil
|
|
|
erb :rcpedit
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/recips/:rcp_id" do
|
|
|
rcp_id = params["rcp_id"]
|
|
|
session[:rcp_old_filepath] = params["filepath"]
|
|
|
session[:rcp_old_description] = params["description"]
|
|
|
session[:rcp_old_codedata] = params["codedata"]
|
|
|
session[:rcp_old_gitlst] = params["gitlst"]
|
|
|
if params["filepath"].nil? || params["description"].nil? || params["filepath"].strip == "" || params["description"].strip == ""
|
|
|
session[:rcpcreate_error] = "Имя рецепта и описание не должны быть пустыми"
|
|
|
redirect url("/recips/#{rcp_id}")
|
|
|
else
|
|
|
@error_data = db.updaterecip(rcp_id, params["filepath"], params["description"], params["codedata"], params["gitlst"])
|
|
|
unless @error_data.nil?
|
|
|
session[:rcpcreate_error] = @error_data
|
|
|
redirect url("/recips/#{rcp_id}")
|
|
|
else
|
|
|
redirect "/recips"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/rcpdelete/:rcp_id" do
|
|
|
input_name = params["rcpnamedup"]
|
|
|
rcp_id = params["rcp_id"]
|
|
|
info = db.get_rcp_info_by_id(rcp_id)
|
|
|
if info.nil?
|
|
|
print_error_page(404, "Рецепта не существует")
|
|
|
else
|
|
|
if info[:filepath] == input_name
|
|
|
db.delete_rcp(rcp_id)
|
|
|
end
|
|
|
redirect "/recips"
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/rcpdelete" do
|
|
|
redirect "/recips"
|
|
|
end
|
|
|
|
|
|
get "/rcpcreate" do
|
|
|
@page_name = "Создать новый рецепт"
|
|
|
@old_filepath = session[:rcp_old_filepath]
|
|
|
@old_description = session[:rcp_old_description]
|
|
|
@old_codedata = session[:rcp_old_codedata]
|
|
|
@old_gitlst = session[:rcp_old_gitlst]
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
@repo_data = repo.getrepos
|
|
|
@error_data = session[:rcpcreate_error]
|
|
|
session[:rcpcreate_error] = nil
|
|
|
erb :rcpcrt
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/rcpcreate" do
|
|
|
session[:rcp_old_filepath] = params["filepath"]
|
|
|
session[:rcp_old_description] = params["description"]
|
|
|
session[:rcp_old_codedata] = params["codedata"]
|
|
|
session[:rcp_old_gitlst] = params["gitlst"]
|
|
|
if params["filepath"].nil? || params["description"].nil? || params["filepath"].strip == "" || params["description"].strip == ""
|
|
|
session[:rcpcreate_error] = "Имя рецепта и описание не должны быть пустыми"
|
|
|
redirect "/rcpcreate"
|
|
|
else
|
|
|
@error_data = db.createrecip(params["filepath"], params["description"], params["codedata"], params["gitlst"])
|
|
|
unless @error_data.nil?
|
|
|
session[:rcpcreate_error] = @error_data
|
|
|
redirect "/rcpcreate"
|
|
|
else
|
|
|
redirect "/recips"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/bldcfg" do
|
|
|
@page_name = "Список конфигураций сборки"
|
|
|
cfgs = ConfigsList.new(cfg)
|
|
|
result = cfgs.get_configs
|
|
|
@list_global = result[:global]
|
|
|
@list_local = result[:local]
|
|
|
@list_selected = result[:selected]
|
|
|
erb :cfgslist
|
|
|
end
|
|
|
|
|
|
get "/bldcfginfo" do
|
|
|
@filename = params["info"]
|
|
|
if @filename.nil?
|
|
|
print_error_page(503, "Не задано имя конфигурационного файла")
|
|
|
else
|
|
|
@page_name = @filename
|
|
|
@content = File.readlines(@filename)
|
|
|
erb :cfgsinfo
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/projs" do
|
|
|
@page_name = "Список проектов"
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
@prj_list = prj.get_projects
|
|
|
erb :prjlist
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjcreate" do
|
|
|
@page_name = "Создать новый проект"
|
|
|
@old_name = session[:prj_old_name]
|
|
|
@old_description = session[:prj_old_description]
|
|
|
@old_list = session[:prj_old_list]
|
|
|
cfgs = ConfigsList.new(cfg)
|
|
|
result = cfgs.get_configs
|
|
|
@global_list = result[:global]
|
|
|
@local_list = result[:local]
|
|
|
@error_data = session[:prjcreate_error]
|
|
|
session[:prjcreate_error] = nil
|
|
|
erb :prjcrt
|
|
|
end
|
|
|
|
|
|
not_found do
|
|
|
status 404
|
|
|
@page_name = "Кто-то потерялся"
|
|
|
@req_referer = request.referer
|
|
|
erb :page404
|
|
|
end
|