|
|
# 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"
|
|
|
|
|
|
def print_error_page(error_status, error_meaasge)
|
|
|
@page_name = "Ошибка выполнения"
|
|
|
@status_err = error_status
|
|
|
@error_msg = error_meaasge
|
|
|
halt erb(:page5xx)
|
|
|
end
|
|
|
|
|
|
def sanitize_filename(filename)
|
|
|
filename = filename.strip
|
|
|
sanitized = filename.gsub(/[^a-zA-Z0-9_]/, "_")
|
|
|
sanitized.gsub!(/_+/, "_")
|
|
|
sanitized.gsub!(/^_+|_+$/, "")
|
|
|
sanitized
|
|
|
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 пакетов"
|
|
|
erb :index
|
|
|
end
|
|
|
|
|
|
get "/repos/:reponame" do
|
|
|
@page_name = params["reponame"]
|
|
|
erb :gits
|
|
|
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
|
|
|
|
|
|
not_found do
|
|
|
status 404
|
|
|
@page_name = "Кто-то потерялся"
|
|
|
@req_referer = request.referer
|
|
|
erb :page404
|
|
|
end
|