Sign. Part 1

master
alexey 2 weeks ago
parent a57d0a0f15
commit c6a89e7be1

@ -330,6 +330,7 @@ get "/prjcreate" do
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
@ -339,12 +340,13 @@ 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"])
result = prj.create_project(params["projname"], params["description"], params["conflist"], params["nopublic"])
if result != 0
session[:prjcreate_error] = prj.error
redirect "/prjcreate"
@ -352,6 +354,7 @@ post "/prjcreate" do
session[:prj_old_name] = nil
session[:prj_old_description] = nil
session[:prj_old_list] = nil
session[:prj_old_nopublic] = nil
redirect "/projs"
end
end
@ -380,6 +383,7 @@ get "/prjedit/:id" do
@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|
@ -1218,7 +1222,6 @@ post "/prjdelete/:id" do
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_project(params["id"])
unless err.nil?
@ -1234,6 +1237,27 @@ post "/prjdelete/:id" do
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(cgf.get_keys_path)
if gpgKeys.check_key_exists
@page_name = "Подписать проект #{prj_info[:projname]} "
@proj_name = prj_info[:projname]
@proj_id = params["id"]
else
erb :gpgerror
end
end
end
end
not_found do
status 404
@page_name = "Кто-то потерялся"

@ -82,4 +82,12 @@ class IniConfig
30
end
end
def get_keys_path()
unless @config["sign"]["path"].nil?
@config["sign"]["path"].to_s
else
"keys"
end
end
end

@ -145,11 +145,15 @@ class DBase
Projects[id]
end
def proj_create(proj_name, proj_descr)
def proj_create(proj_name, proj_descr, nopublic)
@error = nil
data = Projects.where(projname: proj_name).first
if data.nil?
id = Projects.insert(projname: proj_name, descr: proj_descr, public: 1)
public_proj = 1
unless nopublic.nil?
public_proj = 0
end
id = Projects.insert(projname: proj_name, descr: proj_descr, public: public_proj)
@last_id = id
else
@error = "Данный проект уже существует"
@ -256,8 +260,8 @@ class DBase
$DDB = Sequel.connect(@cfg.get_db)
end
def save_rpm(build_id, path_to_rpm, rpm_name, git_id)
id = Rpms.insert(savepath: path_to_rpm, rpmname: rpm_name, sign: 0, signpath: "", repo_id: git_id.to_i)
def save_rpm(build_id, path_to_rpm, rpm_name, git_id, sha256)
id = Rpms.insert(savepath: path_to_rpm, rpmname: rpm_name, sign: 0, signpath: "", repo_id: git_id.to_i, filehash: sha256)
@last_id = id
BuildRpms.insert(build_id: build_id.to_i, rpm_id: id)
end
@ -344,11 +348,12 @@ class DBase
ReposProjects.where(proj_id: prj_id.to_i).delete
ProjectsReposSpec.where(proj_id: prj_id.to_i).delete
builds = BuildTask.where(proj_id: prj_id.to_i)
build.each do |item|
builds.each do |item|
rpms = BuildRpms.where(build_id: item[:id])
Rpms.where(id: rpms[:rpm_id]).delete
end
BuildTask.where(proj_id: prj_id.to_i).delete
Projects.where(id: prj_id.to_i).delete
end
def projects_with_current_as_link(prj_id)

@ -3,6 +3,7 @@ require_relative "runner"
require "fileutils"
require "logger"
require_relative "repomanage"
require "digest"
BUILD_STRUCTURE = {
:SRC => "src",
@ -206,12 +207,25 @@ class MockManager
File.open(@repo_lock, File::RDWR | File::CREAT) do |f|
f.flock(File::LOCK_EX)
# выклдака пакетов и пересоздание repodata
packages_uniq = true
prep_rpms.each do |item|
FileUtils.mkdir_p(File.dirname(item[:dst]))
FileUtils.cp_r(item[:src], item[:dst], verbose: true, remove_destination: true)
@db.save_rpm(@build_id, item[:dst], item[:name], @git_id)
@log.info("Копируется пакет #{item[:src]} в репозиторий #{item[:dst]}")
if File.exist?(item[:dst])
packages_uniq = false
break
end
end
if packages_uniq
prep_rpms.each do |item|
@log.info("Копируется пакет #{item[:src]} в репозиторий #{item[:dst]}")
FileUtils.mkdir_p(File.dirname(item[:dst]))
FileUtils.cp_r(item[:src], item[:dst], verbose: true, remove_destination: true)
sha256 = Digest::SHA256.file(item[:dst])
@db.save_rpm(@build_id, item[:dst], item[:name], @git_id, sha256.hexdigest)
end
repo.create_repo
else
@error = true
@log.error("Такие пакеты уже существуют в репозитории. Поднимите версию пакета")
end
end
end

@ -144,7 +144,7 @@ class ProjectsActions
generate_linked_repos(id, proj_path, proj_name, prj_incl_path)
end
def create_project(name, description, configuration)
def create_project(name, description, configuration, nopublic)
@error = nil
ret_val = 0
project_name = sanitize_rcptname(name)
@ -162,7 +162,7 @@ class ProjectsActions
end
if File.exist?(configuration)
generate_config(nil, configuration, fname, project_name)
@error = @db.proj_create(project_name, description)
@error = @db.proj_create(project_name, description, nopublic)
if @error.nil?
created = true
end
@ -361,10 +361,10 @@ class ProjectsActions
@error = "Нельзя удалить git репозиторий с незавершенными сборками"
else
linked = @db.projects_with_current_as_link(prj_id)
if linked.nil?
if linked.nil? || linked.length == 0
proj_path = get_project_path(prj_id)
FileUtils.rm_rf(proj_path, secure: true)
@db.delete_project(prj_id, git_id)
@db.delete_project(prj_id)
else
@error = "На текущий проект ссылаются другие проекты. Удаление запрещено"
end

@ -17,6 +17,22 @@ class RPMReader
end
end
class RepoManagerKeys
attr :path, :error
def initialize(path)
@error = nil
@path = path
end
def check_key_exists()
key_file = File.join(@path, "public", "mockgui-gpg-key")
File.exist?(key_file)
end
end
#rpm --define "_gpg_sign_cmd_extra_args --pinentry-mode loopback --passphrase 1234" --addsign bayrepo-neuro-farm-0.1-2.x86_64.rpm
class RepoManager
attr :path, :error, :last_status, :last_pid

@ -17,4 +17,7 @@ hide=open,amazon,anolis,circle,custom,euro,fedora,mageia,navy,alma,rocky
selected=msvsphere
[pages]
items_per_page = 30
items_per_page = 30
[sign]
path = "keys"

@ -44,6 +44,7 @@ Sequel.migration do
String :rpmname, text: true
Integer :sign
String :signpath, text: true
String :filehash, text: true
foreign_key :repo_id, :repos, :key => :id
end

@ -47,3 +47,5 @@ cat >~/.rpmmacros <<EOF
%_gpgbin /usr/bin/gpg
EOF
echo "${phassphrase}" > ../keys/save

@ -0,0 +1,3 @@
<%= erb :header %>
<%= erb :footer %>

@ -15,6 +15,14 @@
<label for="description" class="form-label">Описание проекта</label>
<textarea class="form-control" id="description" name="description" rows="3"><%= @old_description %></textarea>
</div>
<div class="form-check form-switch">
<% if @old_nopublic.nil? %>
<input class="form-check-input" type="checkbox" role="switch" id="nopublic" name="nopublic" vlaue="nopublic">
<% else %>
<input class="form-check-input" type="checkbox" role="switch" id="nopublic" name="nopublic" vlaue="nopublic" checked>
<% end %>
<label class="form-check-label" for="nopublic">Не публиковать отладочные пакеты и исходные коды</label>
</div>
<div class="mb-3">
<label for="conflist" class="form-label">Выберите конфигурацию окружения сборки для проекта</label>
<div class="conflist">

@ -26,6 +26,13 @@
<%= @proj_name %>
</h3>
<div class="pb-2"><%= @proj_descr %></div>
<div class="pb-2">
<% if @proj_public == 1 %>
Разрешена публикация пакетов с исходными кодами
<% else %>
Запрещена публикация пакетов с исходными кодами
<% end %>
</div>
<div class="list-group">
<a href="/prjcfg/<%= ERB::Util.url_encode(@proj_id) %>" class="list-group-item list-group-item-action list-group-item-dark icon-link"><i
class="bi bi-pen"></i><span class="ms-2">Редактировать

Loading…
Cancel
Save