|
|
# 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 "ptools"
|
|
|
|
|
|
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"
|
|
|
|
|
|
configure do
|
|
|
log_file = File.new("logs/actions.log", "a+")
|
|
|
|
|
|
STDOUT.reopen(log_file)
|
|
|
STDERR.reopen(log_file)
|
|
|
|
|
|
STDOUT.sync = true
|
|
|
STDERR.sync = true
|
|
|
end
|
|
|
|
|
|
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(cfg)
|
|
|
|
|
|
set :bind, "0.0.0.0"
|
|
|
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
|
|
|
@rpm_number = db.get_rpms.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
|
|
|
session[:rcp_old_filepath] = nil
|
|
|
session[:rcp_old_description] = nil
|
|
|
session[:rcp_old_codedata] = nil
|
|
|
session[:rcp_old_gitlst] = nil
|
|
|
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
|
|
|
codedata = params["codedata"].gsub(/\r$/, "")
|
|
|
@error_data = db.createrecip(params["filepath"], params["description"], codedata, params["gitlst"])
|
|
|
unless @error_data.nil?
|
|
|
session[:rcpcreate_error] = @error_data
|
|
|
redirect "/rcpcreate"
|
|
|
else
|
|
|
session[:rcp_old_filepath] = nil
|
|
|
session[:rcp_old_description] = nil
|
|
|
session[:rcp_old_codedata] = nil
|
|
|
session[:rcp_old_gitlst] = nil
|
|
|
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
|
|
|
unless check_safe_path(@filename)
|
|
|
print_error_page(503, "Доступ к файлу #{@filename} запрещен")
|
|
|
else
|
|
|
unless File.exist?(@filename)
|
|
|
print_error_page(503, "Файл #{@filename} не существует")
|
|
|
else
|
|
|
@page_name = @filename
|
|
|
@content = File.readlines(@filename)
|
|
|
erb :cfgsinfo
|
|
|
end
|
|
|
end
|
|
|
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]
|
|
|
@old_nopublic = session[:prj_old_nopublic]
|
|
|
@error_data = session[:prjcreate_error]
|
|
|
session[:prjcreate_error] = nil
|
|
|
erb :prjcrt
|
|
|
end
|
|
|
|
|
|
post "/prjcreate" do
|
|
|
session[:prj_old_name] = params["projname"]
|
|
|
session[:prj_old_description] = params["description"]
|
|
|
session[:prj_old_list] = params["conflist"]
|
|
|
session[:prj_old_nopublic] = params["nopublic"]
|
|
|
if params["projname"].nil? || params["description"].nil? || params["projname"].strip == "" || params["description"].strip == "" || params["conflist"].nil? || params["conflist"].strip == ""
|
|
|
session[:rcpcreate_error] = "Имя проекта, описание и окружение сборки не должны быть пустыми"
|
|
|
redirect "/prjcreate"
|
|
|
else
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
result = prj.create_project(params["projname"], params["description"], params["conflist"], params["nopublic"])
|
|
|
if result != 0
|
|
|
session[:prjcreate_error] = prj.error
|
|
|
redirect "/prjcreate"
|
|
|
else
|
|
|
session[:prj_old_name] = nil
|
|
|
session[:prj_old_description] = nil
|
|
|
session[:prj_old_list] = nil
|
|
|
session[:prj_old_nopublic] = nil
|
|
|
redirect "/projs"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjedit/:id" do
|
|
|
unless session[:prj_modal_text].nil?
|
|
|
@modal_info = session[:prj_modal_info]
|
|
|
@modal_text = session[:prj_modal_text]
|
|
|
session[:prj_modal_info] = nil
|
|
|
session[:prj_modal_text] = nil
|
|
|
end
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
@page_name = prj_info[:projname]
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_descr = prj_info[:descr]
|
|
|
@proj_id = prj_info[:id]
|
|
|
@proj_public = prj_info[:public]
|
|
|
repo_lst = repo.getrepos
|
|
|
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
|
|
|
@repo_list = repo_lst.reject do |item|
|
|
|
fnd = false
|
|
|
proj_repo_list.each do |item2|
|
|
|
if item2[:id] == item[:id]
|
|
|
fnd = true
|
|
|
break
|
|
|
end
|
|
|
end
|
|
|
fnd
|
|
|
end
|
|
|
@proj_repo = proj_repo_list
|
|
|
erb :prjinfo
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjagit/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
|
|
|
git_info = repo.get_repo_short_info_by_id(params["gitlist"].to_i)
|
|
|
if git_info.nil?
|
|
|
print_error_page(503, "Репозиторий исчез")
|
|
|
else
|
|
|
fnd = false
|
|
|
proj_repo_list.each do |item|
|
|
|
if item[:id] == git_info[:id]
|
|
|
fnd = true
|
|
|
break
|
|
|
end
|
|
|
end
|
|
|
if fnd
|
|
|
session[:prj_modal_info] = "Ошибка"
|
|
|
session[:prj_modal_text] = "Данный git-репозиторий уже добавлен к проекту"
|
|
|
else
|
|
|
err = prj.add_git_to_project(prj_info[:id], git_info[:id], repo, git_info[:reponame])
|
|
|
if err.nil?
|
|
|
session[:prj_modal_info] = nil
|
|
|
session[:prj_modal_text] = nil
|
|
|
else
|
|
|
session[:prj_modal_info] = "Ошибка добавления git проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
redirect back
|
|
|
end
|
|
|
|
|
|
get "/prjrgit/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
if git_info.nil?
|
|
|
print_error_page(503, "Репозиторий исчез")
|
|
|
else
|
|
|
err = prj.renew_git_to_project(prj_info[:id], git_info[:id], repo, git_info[:reponame])
|
|
|
if err.nil?
|
|
|
session[:prj_modal_info] = nil
|
|
|
session[:prj_modal_text] = nil
|
|
|
else
|
|
|
session[:prj_modal_info] = "Ошибка обновления git проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
redirect back
|
|
|
end
|
|
|
|
|
|
get "/prjgitf/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
if git_info.nil?
|
|
|
print_error_page(503, "Репозиторий исчез")
|
|
|
else
|
|
|
if params["p"].nil?
|
|
|
filepath = ""
|
|
|
else
|
|
|
filepath = params["p"]
|
|
|
end
|
|
|
proj_path = prj.get_project_path_git(prj_info[:id], git_info[:reponame])
|
|
|
f_path = File.join(proj_path, filepath)
|
|
|
if File.exist?(f_path)
|
|
|
if File.directory?(f_path)
|
|
|
@file_content = []
|
|
|
@files_list = Dir[File.join(f_path, "*")].map do |item|
|
|
|
if File.directory?(item)
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => true }
|
|
|
else
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => false }
|
|
|
end
|
|
|
end
|
|
|
else
|
|
|
if File.binary?(f_path)
|
|
|
@file_content = ["Двоичный файл"]
|
|
|
else
|
|
|
@file_content = File.readlines(f_path)
|
|
|
end
|
|
|
@files_list = Dir[File.join(File.dirname(f_path), "*")].map do |item|
|
|
|
if File.directory?(item)
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => true }
|
|
|
else
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => false }
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if filepath != ""
|
|
|
if File.dirname(f_path) == proj_path
|
|
|
fn = ""
|
|
|
else
|
|
|
if File.directory?(f_path)
|
|
|
fn = File.dirname(f_path).delete_prefix(proj_path + "/")
|
|
|
else
|
|
|
f_path = File.dirname(f_path)
|
|
|
if File.dirname(f_path) == proj_path
|
|
|
fn = ""
|
|
|
else
|
|
|
fn = File.dirname(f_path).delete_prefix(proj_path + "/")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@files_list = [{ :file => "..", :isdir => true, :fname => fn }] + @files_list
|
|
|
end
|
|
|
@page_name = "#{prj_info[:projname]} информация из репозитория #{git_info[:reponame]}"
|
|
|
@proj_info = prj_info
|
|
|
@proj_git_name = git_info
|
|
|
@file_name = filepath
|
|
|
erb :fileinfo
|
|
|
else
|
|
|
print_error_page(503, "Файл не существует")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjcfg/:id" do
|
|
|
unless session[:prjcfg_modal_text].nil?
|
|
|
@modal_info = session[:prjcfg_modal_info]
|
|
|
@modal_text = session[:prjcfg_modal_text]
|
|
|
session[:prjcfg_modal_info] = nil
|
|
|
session[:prjcfg_modal_text] = nil
|
|
|
end
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
@page_name = "#{prj_info[:projname]} редактирование конфигурации сборки"
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_descr = prj_info[:descr]
|
|
|
project_cfg = prj.get_project_config(params["id"])
|
|
|
@project_cfg_tmpl = File.basename(project_cfg)
|
|
|
@file_content = File.readlines(project_cfg).join("")
|
|
|
@proj_id = prj_info[:id]
|
|
|
erb :prjcfged
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjcfg/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
pp params
|
|
|
unless params["cancel"].nil?
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
else
|
|
|
if params["cfginfo"].nil? || params["cfginfo"].strip == ""
|
|
|
session[:prjcfg_modal_info] = "Ошибка сохранения файла"
|
|
|
session[:prjcfg_modal_text] = "Содержимое файла не может быть пустым"
|
|
|
redirect "/prjcfg/#{params["id"]}"
|
|
|
else
|
|
|
project_cfg = prj.get_project_config(params["id"])
|
|
|
File.open(project_cfg, "w") { |f| f.write(params["cfginfo"]) }
|
|
|
redirect "/prjcfg/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/gitspec/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
spec_f = db.get_project_repo_spec(params["id"], params["git_id"])
|
|
|
if spec_f.nil?
|
|
|
@spec_file = ""
|
|
|
else
|
|
|
@spec_file = spec_f[:spec_name]
|
|
|
end
|
|
|
@page_name = "#{prj_info[:projname]} редактирование spec для git проекта #{git_info[:reponame]}"
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_descr = prj_info[:descr]
|
|
|
@git_name = git_info[:reponame]
|
|
|
@proj_id = prj_info[:id]
|
|
|
@git_id = git_info[:id]
|
|
|
git_path = prj.get_project_path_git(prj_info[:id], git_info[:reponame])
|
|
|
@files_list = get_spec_files_in_dir(git_path)
|
|
|
current_spec_data = db.get_project_repo_spec(prj_info[:id], git_info[:id])
|
|
|
@current_spec = nil
|
|
|
unless current_spec_data.nil?
|
|
|
@current_spec = current_spec_data[:spec_name]
|
|
|
end
|
|
|
erb :prjspec
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/gitspec/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
unless params["cancel"].nil?
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
else
|
|
|
unless params["save"].nil?
|
|
|
save_spec = ""
|
|
|
if params["useCustom"].nil?
|
|
|
save_spec = params["filelst"].strip
|
|
|
else
|
|
|
save_spec = params["speccustom"].strip
|
|
|
end
|
|
|
if save_spec != ""
|
|
|
db.save_project_repo_spec(prj_info[:id], git_info[:id], save_spec)
|
|
|
end
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
else
|
|
|
db.delete_project_repo_spec(prj_info[:id], git_info[:id])
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjaddrepo/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
@page_name = "#{prj_info[:projname]} - добавить связанные проекты"
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_descr = prj_info[:descr]
|
|
|
@proj_id = prj_info[:id]
|
|
|
@projects_list = prj.get_related_projects_list(params["id"])
|
|
|
@all_projects = prj.get_projects
|
|
|
erb :prjprj
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjaddrepo/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
unless params["cancel"].nil?
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
else
|
|
|
if params["disableLinks"].nil?
|
|
|
list_id = params["prjlst"]
|
|
|
unless list_id.nil?
|
|
|
current_list = prj.get_related_projects_list(params["id"])
|
|
|
current_list_id = current_list.map { |item| item[:proj_id_repository] }
|
|
|
new_ids = list_id - current_list_id
|
|
|
removed_ids = current_list_id - list_id
|
|
|
prj.save_linked_projects(params["id"], new_ids, removed_ids)
|
|
|
prj.regenerate_linked_repos(params["id"])
|
|
|
end
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
else
|
|
|
prj.delete_linked_projects(params["id"])
|
|
|
prj.regenerate_linked_repos(params["id"])
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/gitbld/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
@page_name = "#{prj_info[:projname]} - сборка #{git_info[:reponame]}"
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_descr = prj_info[:descr]
|
|
|
@git_name = git_info[:reponame]
|
|
|
@proj_id = params["id"]
|
|
|
|
|
|
@build_id = prj.build_projects_git(prj_info[:id], git_info[:id], cfg.get_counter_path)
|
|
|
|
|
|
if @build_id == 0
|
|
|
print_error_page(503, "Ошибка создания или получения информации о сборке, возможно проблемы с файлом блокировки")
|
|
|
else
|
|
|
erb :prjbld
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/buildinfo/:build_id" do
|
|
|
content_type "text/plain"
|
|
|
build_id = params["build_id"].to_i
|
|
|
if build_id > 0
|
|
|
info = db.get_build_task_process_log(build_id)
|
|
|
unless info.nil?
|
|
|
if File.exist?(info[:errlogpath])
|
|
|
output = ""
|
|
|
File.readlines(info[:errlogpath]).last(100).each do |line|
|
|
|
output << line
|
|
|
end
|
|
|
output
|
|
|
else
|
|
|
"Файла для чтения сборки уже не существует #{info[:errlogpath]}"
|
|
|
end
|
|
|
else
|
|
|
"Такого build id #{params["build_id"]} нет в базе"
|
|
|
end
|
|
|
else
|
|
|
"Ошибка чтения build id #{params["build_id"]}"
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/buildinforaw/:build_id" do
|
|
|
content_type "text/plain"
|
|
|
build_id = params["build_id"].to_i
|
|
|
if build_id > 0
|
|
|
info = db.get_build_task_process_log(build_id)
|
|
|
unless info.nil?
|
|
|
if File.exist?(info[:errlogpath])
|
|
|
send_file info[:errlogpath]
|
|
|
else
|
|
|
"Файла для чтения сборки уже не существует #{info[:errlogpath]}"
|
|
|
end
|
|
|
else
|
|
|
"Такого build id #{params["build_id"]} нет в базе"
|
|
|
end
|
|
|
else
|
|
|
"Ошибка чтения build id #{params["build_id"]}"
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/rpms" do
|
|
|
@page_name = "Список доступных пакетов"
|
|
|
@gits_rpms_list = db.get_gits_rpms
|
|
|
erb :rpmlistglobal
|
|
|
end
|
|
|
|
|
|
get "/gitpackages/:git_id" do
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
if git_info.nil?
|
|
|
print_error_page(503, "Репозиторий исчез")
|
|
|
else
|
|
|
@page_name = "Список пакетов собранных из git репозитория #{git_info[:reponame]}"
|
|
|
rpms_lst = db.get_rpms_for_git(params["git_id"])
|
|
|
if params["p"].nil?
|
|
|
@page = 1
|
|
|
else
|
|
|
@page = params["p"].to_i
|
|
|
if @page < 1
|
|
|
@page = 1
|
|
|
end
|
|
|
end
|
|
|
if rpms_lst.nil?
|
|
|
rpms_lst = []
|
|
|
end
|
|
|
items_per_page = cfg.get_items_per_page
|
|
|
@rpms_list = rpms_lst[(@page - 1) * items_per_page, items_per_page]
|
|
|
if @rpms_list.nil?
|
|
|
@rpms_list = []
|
|
|
end
|
|
|
@max_pages = rpms_lst.length / items_per_page
|
|
|
if (@max_pages * items_per_page) != rpms_lst.length
|
|
|
@max_pages = @max_pages + 1
|
|
|
end
|
|
|
@git_id = params["git_id"]
|
|
|
erb :rpmlistgit
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/rpminfo/:rpm_id" do
|
|
|
rpm_info = db.get_rpm_info(params["rpm_id"])
|
|
|
if rpm_info.nil?
|
|
|
print_error_page(503, "Пакета не существует")
|
|
|
else
|
|
|
@page_name = "Информация о пакете #{rpm_info[:rpmname]}"
|
|
|
@rpm_data = rpm_info
|
|
|
@repo_id = rpm_info[:repo_id]
|
|
|
rpm_reader = RPMReader.new()
|
|
|
rpm_pkg = rpm_reader.get_rpm_info(rpm_info[:savepath])
|
|
|
if rpm_pkg[:error].nil?
|
|
|
@build_id = db.get_rpm_build(params["rpm_id"])
|
|
|
@pkg_info = rpm_pkg[:pkginfo]
|
|
|
@rpms_info = db.get_rpm_srpms(params["rpm_id"])
|
|
|
erb :rpminfo
|
|
|
else
|
|
|
print_error_page(503, "Ошибка чтения пакета #{rpm_info[:rpmname]}: #{rpm_pkg[:error]}")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/builds" do
|
|
|
@page_name = "Список всех сборок"
|
|
|
builds_lst = db.get_builds
|
|
|
if params["p"].nil?
|
|
|
@page = 1
|
|
|
else
|
|
|
@page = params["p"].to_i
|
|
|
if @page < 1
|
|
|
@page = 1
|
|
|
end
|
|
|
end
|
|
|
if builds_lst.nil?
|
|
|
builds_lst = []
|
|
|
end
|
|
|
items_per_page = cfg.get_items_per_page
|
|
|
@builds_list = builds_lst[(@page - 1) * items_per_page, items_per_page]
|
|
|
if @builds_list.nil?
|
|
|
@builds_list = []
|
|
|
end
|
|
|
@max_pages = builds_lst.length / items_per_page
|
|
|
if (@max_pages * items_per_page) != builds_lst.length
|
|
|
@max_pages = @max_pages + 1
|
|
|
end
|
|
|
erb :buildslist
|
|
|
end
|
|
|
|
|
|
get "/buildinfof/:build_id" do
|
|
|
build_info = db.get_build_info(params["build_id"])
|
|
|
if build_info.nil?
|
|
|
print_error_page(503, "Сборки не сущестует")
|
|
|
else
|
|
|
if build_info[:result] == 0
|
|
|
redirect url("/buildinfo/#{params["build_id"].to_i}")
|
|
|
else
|
|
|
result_path = build_info[:logpath]
|
|
|
if File.exist?(result_path)
|
|
|
@logs_list = get_log_paths_success(result_path)
|
|
|
@process_log = File.join(result_path, "process.log")
|
|
|
@rpm_list = db.get_rpms_for_build(params["build_id"])
|
|
|
unless params["file"].nil?
|
|
|
file_name = params["file"]
|
|
|
else
|
|
|
file_name = @process_log
|
|
|
end
|
|
|
unless File.exist?(file_name)
|
|
|
print_error_page(503, "Запрашиваемый файл отсутствует")
|
|
|
else
|
|
|
@file_content = []
|
|
|
File.readlines(file_name).last(100).each do |line|
|
|
|
@file_content << line
|
|
|
end
|
|
|
@file_disp = File.basename(file_name)
|
|
|
@file_disp_raw = file_name
|
|
|
@build_id = params["build_id"]
|
|
|
@repo = db.get_repo_info_by_id(build_info[:repo_id])
|
|
|
@proj = db.proj(build_info[:proj_id])
|
|
|
erb :buildinfo
|
|
|
end
|
|
|
else
|
|
|
print_error_page(503, "Для данной сборки уже не существует результатов")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/buildinfofraw" do
|
|
|
if params["file"].nil? || !File.exist?(params["file"])
|
|
|
print_error_page(503, "Файл не найден")
|
|
|
else
|
|
|
if !File.binary?(params["file"]) && params["file"].start_with?(File.join(Dir.pwd(), cfg.get_projects_path))
|
|
|
send_file params["file"]
|
|
|
else
|
|
|
print_error_page(503, "Файл не может быть скачан")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjbuilds/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
@prj = prj_info
|
|
|
@page_name = "Список всех сборок для проекта #{prj_info[:projname]}"
|
|
|
builds_lst = db.get_builds_for_project(params["id"])
|
|
|
if params["p"].nil?
|
|
|
@page = 1
|
|
|
else
|
|
|
@page = params["p"].to_i
|
|
|
if @page < 1
|
|
|
@page = 1
|
|
|
end
|
|
|
end
|
|
|
if builds_lst.nil?
|
|
|
builds_lst = []
|
|
|
end
|
|
|
items_per_page = cfg.get_items_per_page
|
|
|
@builds_list = builds_lst[(@page - 1) * items_per_page, items_per_page]
|
|
|
if @builds_list.nil?
|
|
|
@builds_list = []
|
|
|
end
|
|
|
@max_pages = builds_lst.length / items_per_page
|
|
|
if (@max_pages * items_per_page) != builds_lst.length
|
|
|
@max_pages = @max_pages + 1
|
|
|
end
|
|
|
erb :prjbuildslist
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjrpm/:id" do
|
|
|
@raw = nil
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if params["p"].nil?
|
|
|
filepath = ""
|
|
|
else
|
|
|
filepath = params["p"]
|
|
|
end
|
|
|
proj_path = prj.get_project_repo(params["id"])
|
|
|
f_path = File.join(proj_path, filepath)
|
|
|
if File.exist?(f_path)
|
|
|
if File.directory?(f_path)
|
|
|
@file_content = []
|
|
|
@files_list = Dir[File.join(f_path, "*")].reject do |item|
|
|
|
item =~ /repodata$/
|
|
|
end.map do |item|
|
|
|
if File.directory?(item)
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => true }
|
|
|
else
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => false }
|
|
|
end
|
|
|
end
|
|
|
else
|
|
|
if File.binary?(f_path)
|
|
|
if f_path =~ /\.rpm$/
|
|
|
rpm_rd = RPMReader.new
|
|
|
rpm_info = rpm_rd.get_rpm_info(f_path)
|
|
|
if rpm_info[:error].nil?
|
|
|
@raw = f_path
|
|
|
rpm_info = rpm_info[:pkginfo]
|
|
|
@file_content = []
|
|
|
@file_content << "Имя пакета: #{rpm_info.name}"
|
|
|
@file_content << "Версия пакета: #{rpm_info.version}"
|
|
|
@file_content << ""
|
|
|
@file_content << "Changelog:"
|
|
|
rpm_info.changelog.first(10).each do |entry|
|
|
|
@file_content << "#{entry.time} #{entry.name}"
|
|
|
@file_content << "#{entry.text}"
|
|
|
@file_content << "---------------"
|
|
|
end
|
|
|
@file_content << "---------------"
|
|
|
@file_content << "Файлы:"
|
|
|
rpm_info.files.each do |file|
|
|
|
@file_content << "#{file.path} (#{file.size})"
|
|
|
end
|
|
|
@file_content << "---------------"
|
|
|
@file_content << "Зависимости:"
|
|
|
rpm_info.provides.each do |item|
|
|
|
@file_content << "Provides: #{item.name}"
|
|
|
end
|
|
|
rpm_info.requires.each do |item|
|
|
|
@file_content << "Requires: #{item.name}"
|
|
|
end
|
|
|
rpm_info.obsoletes.each do |item|
|
|
|
@file_content << "Obsoletes: #{item.name}"
|
|
|
end
|
|
|
rpm_info.conflicts.each do |item|
|
|
|
@file_content << "Conflicts: #{item.name}"
|
|
|
end
|
|
|
else
|
|
|
@file_content = ["Двоичный файл"]
|
|
|
end
|
|
|
else
|
|
|
@file_content = ["Двоичный файл"]
|
|
|
end
|
|
|
else
|
|
|
@file_content = File.readlines(f_path)
|
|
|
end
|
|
|
@files_list = Dir[File.join(File.dirname(f_path), "*")].map do |item|
|
|
|
if File.directory?(item)
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => true }
|
|
|
else
|
|
|
{ :file => item.delete_prefix(proj_path + "/"), :isdir => false }
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
if filepath != ""
|
|
|
if File.dirname(f_path) == proj_path
|
|
|
fn = ""
|
|
|
else
|
|
|
if File.directory?(f_path)
|
|
|
fn = File.dirname(f_path).delete_prefix(proj_path + "/")
|
|
|
else
|
|
|
f_path = File.dirname(f_path)
|
|
|
if File.dirname(f_path) == proj_path
|
|
|
fn = ""
|
|
|
else
|
|
|
fn = File.dirname(f_path).delete_prefix(proj_path + "/")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
@files_list = [{ :file => "..", :isdir => true, :fname => fn }] + @files_list
|
|
|
end
|
|
|
@page_name = "Список пакетов для репозитория #{prj_info[:projname]}"
|
|
|
@proj_info = prj_info
|
|
|
@file_name = filepath
|
|
|
erb :repoinfo
|
|
|
else
|
|
|
print_error_page(503, "Файл не существует")
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjdgit/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
@page_name = "Удалить репозиторий #{git_info[:reponame]} из проекта #{prj_info[:projname]} "
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@git_name = git_info[:reponame]
|
|
|
@proj_id = params["id"]
|
|
|
@git_id = params["git_id"]
|
|
|
|
|
|
erb :deletegitprj
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjdgit/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
if params["cancel"].nil? && params["delete"] == "delete" && !params["isdelete"].nil?
|
|
|
err = prj.delete_git_from_project(params["id"], params["git_id"])
|
|
|
unless err.nil?
|
|
|
session[:prj_modal_info] = "Ошибка удаления git репозитория из проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
end
|
|
|
end
|
|
|
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjgitbld/:id/:git_id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
if repo.path.nil?
|
|
|
print_error_page(503, "Путь к репозиториям не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
git_info = repo.get_repo_short_info_by_id(params["git_id"].to_i)
|
|
|
@git_data = git_info
|
|
|
@prj = prj_info
|
|
|
@git_id = params["git_id"]
|
|
|
@page_name = "Список всех сборок для проекта #{prj_info[:projname]} и репозитория #{git_info[:reponame]}"
|
|
|
builds_lst = db.get_builds_for_project_git(params["id"], params["git_id"])
|
|
|
if params["p"].nil?
|
|
|
@page = 1
|
|
|
else
|
|
|
@page = params["p"].to_i
|
|
|
if @page < 1
|
|
|
@page = 1
|
|
|
end
|
|
|
end
|
|
|
if builds_lst.nil?
|
|
|
builds_lst = []
|
|
|
end
|
|
|
items_per_page = cfg.get_items_per_page
|
|
|
@builds_list = builds_lst[(@page - 1) * items_per_page, items_per_page]
|
|
|
if @builds_list.nil?
|
|
|
@builds_list = []
|
|
|
end
|
|
|
@max_pages = builds_lst.length / items_per_page
|
|
|
if (@max_pages * items_per_page) != builds_lst.length
|
|
|
@max_pages = @max_pages + 1
|
|
|
end
|
|
|
erb :prjbuildslistgit
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjdelete/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
@page_name = "Удалить проект #{prj_info[:projname]} "
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_id = params["id"]
|
|
|
|
|
|
erb :deleteprj
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjdelete/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
if params["cancel"].nil? && params["delete"] == "delete" && !params["isdelete"].nil?
|
|
|
err = prj.delete_project(params["id"])
|
|
|
unless err.nil?
|
|
|
session[:prj_modal_info] = "Ошибка удаления git репозитория из проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
else
|
|
|
redirect "/projs"
|
|
|
end
|
|
|
end
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjsign/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
gpgKeys = RepoManagerKeys.new(cfg.get_keys_path)
|
|
|
if gpgKeys.check_key_exists
|
|
|
@pass_exists = gpgKeys.check_password_exists
|
|
|
@page_name = "Подписать проект #{prj_info[:projname]}"
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_id = params["id"]
|
|
|
erb :signconfirm
|
|
|
else
|
|
|
@page_name = "Ошибка подписания проекта #{prj_info[:projname]}"
|
|
|
erb :gpgerror
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjsign/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
if params["cancel"].nil? && params["sign"] == "sign"
|
|
|
err = prj.sign_project(params["id"], cfg.get_keys_path, params["password"], "/prjsignview/#{prj_info[:id]}", cfg.get_repoview_path)
|
|
|
unless err.nil?
|
|
|
session[:prj_modal_info] = "Ошибка добавления подписи пакетов проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
end
|
|
|
end
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjremoteaddr/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
@page_name = "Подписать проект #{prj_info[:projname]}"
|
|
|
@proj_name = prj_info[:projname]
|
|
|
@proj_id = params["id"]
|
|
|
@addres = prj_info[:remote_address]
|
|
|
erb :projremote
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
post "/prjremoteaddr/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
if params["cancel"].nil? && params["addr"] == "addr"
|
|
|
err = prj.set_address(params["id"], params["address"])
|
|
|
unless err.nil?
|
|
|
session[:prj_modal_info] = "Ошибка установки адреса проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
end
|
|
|
end
|
|
|
if params["cancel"].nil? && params["reset"] == "reset"
|
|
|
err = prj.set_address(params["id"], "")
|
|
|
unless err.nil?
|
|
|
session[:prj_modal_info] = "Ошибка установки адреса проекта"
|
|
|
session[:prj_modal_text] = err
|
|
|
end
|
|
|
end
|
|
|
redirect "/prjedit/#{params["id"]}"
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjsignview/:id" do
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
gpgKeys = RepoManagerKeys.new(cfg.get_keys_path)
|
|
|
if gpgKeys.check_key_exists
|
|
|
redirect "/prjsignview/#{params["id"]}/"
|
|
|
else
|
|
|
@page_name = "Ошибка подписания проекта #{prj_info[:projname]}"
|
|
|
erb :gpgerror
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/prjsignview/:id/*" do
|
|
|
data_path = params[:splat]
|
|
|
pp data_path
|
|
|
if data_path.nil? || data_path.first.strip == ""
|
|
|
data_path = "index.html"
|
|
|
end
|
|
|
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
|
|
if prj.path.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
prj_info = prj.get_project(params["id"])
|
|
|
if prj_info.nil?
|
|
|
print_error_page(503, "Путь к проектам не существует")
|
|
|
else
|
|
|
gpgKeys = RepoManagerKeys.new(cfg.get_keys_path)
|
|
|
if gpgKeys.check_key_exists
|
|
|
sign_path = prj.get_sign_path(params["id"])
|
|
|
f_path = File.join(sign_path, data_path)
|
|
|
if File.exist? (f_path)
|
|
|
send_file f_path
|
|
|
else
|
|
|
status 404
|
|
|
end
|
|
|
else
|
|
|
@page_name = "Ошибка подписания проекта #{prj_info[:projname]}"
|
|
|
erb :gpgerror
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
end
|
|
|
|
|
|
get "/sanitize" do
|
|
|
#Подчистим гит проекты, которые есть в базе, но нет в файловой системе
|
|
|
all_gits = db.get_gits
|
|
|
deleted_items = 0
|
|
|
unless all_gits.nil?
|
|
|
repo = GitRepo.new(cfg.get_repo, db)
|
|
|
repos = repo.getrepos
|
|
|
list_for_delete = []
|
|
|
all_gits.each do |item|
|
|
|
find_item = false
|
|
|
repos.each do |rep|
|
|
|
if rep[:reponame] == item[:reponame]
|
|
|
find_item = true
|
|
|
break
|
|
|
end
|
|
|
end
|
|
|
unless find_item
|
|
|
list_for_delete << item[:id]
|
|
|
end
|
|
|
end
|
|
|
deleted_items = deleted_items + list_for_delete.length
|
|
|
list_for_delete.each do |item|
|
|
|
db.delete_git_by_id(item)
|
|
|
end
|
|
|
end
|
|
|
@deleted_items = deleted_items
|
|
|
@page_name = "Очистка устаревших или потерянных записей базы данных"
|
|
|
erb :sanitize
|
|
|
end
|
|
|
|
|
|
not_found do
|
|
|
status 404
|
|
|
@page_name = "Кто-то потерялся"
|
|
|
@req_referer = request.referer
|
|
|
erb :page404
|
|
|
end
|