Sign. Part 1
This commit is contained in:
28
app.rb
28
app.rb
@@ -330,6 +330,7 @@ get "/prjcreate" do
|
|||||||
result = cfgs.get_configs
|
result = cfgs.get_configs
|
||||||
@global_list = result[:global]
|
@global_list = result[:global]
|
||||||
@local_list = result[:local]
|
@local_list = result[:local]
|
||||||
|
@old_nopublic = session[:prj_old_nopublic]
|
||||||
@error_data = session[:prjcreate_error]
|
@error_data = session[:prjcreate_error]
|
||||||
session[:prjcreate_error] = nil
|
session[:prjcreate_error] = nil
|
||||||
erb :prjcrt
|
erb :prjcrt
|
||||||
@@ -339,12 +340,13 @@ post "/prjcreate" do
|
|||||||
session[:prj_old_name] = params["projname"]
|
session[:prj_old_name] = params["projname"]
|
||||||
session[:prj_old_description] = params["description"]
|
session[:prj_old_description] = params["description"]
|
||||||
session[:prj_old_list] = params["conflist"]
|
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 == ""
|
if params["projname"].nil? || params["description"].nil? || params["projname"].strip == "" || params["description"].strip == "" || params["conflist"].nil? || params["conflist"].strip == ""
|
||||||
session[:rcpcreate_error] = "Имя проекта, описание и окружение сборки не должны быть пустыми"
|
session[:rcpcreate_error] = "Имя проекта, описание и окружение сборки не должны быть пустыми"
|
||||||
redirect "/prjcreate"
|
redirect "/prjcreate"
|
||||||
else
|
else
|
||||||
prj = ProjectsActions.new(cfg.get_projects_path, db)
|
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
|
if result != 0
|
||||||
session[:prjcreate_error] = prj.error
|
session[:prjcreate_error] = prj.error
|
||||||
redirect "/prjcreate"
|
redirect "/prjcreate"
|
||||||
@@ -352,6 +354,7 @@ post "/prjcreate" do
|
|||||||
session[:prj_old_name] = nil
|
session[:prj_old_name] = nil
|
||||||
session[:prj_old_description] = nil
|
session[:prj_old_description] = nil
|
||||||
session[:prj_old_list] = nil
|
session[:prj_old_list] = nil
|
||||||
|
session[:prj_old_nopublic] = nil
|
||||||
redirect "/projs"
|
redirect "/projs"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -380,6 +383,7 @@ get "/prjedit/:id" do
|
|||||||
@proj_name = prj_info[:projname]
|
@proj_name = prj_info[:projname]
|
||||||
@proj_descr = prj_info[:descr]
|
@proj_descr = prj_info[:descr]
|
||||||
@proj_id = prj_info[:id]
|
@proj_id = prj_info[:id]
|
||||||
|
@proj_public = prj_info[:public]
|
||||||
repo_lst = repo.getrepos
|
repo_lst = repo.getrepos
|
||||||
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
|
proj_repo_list = prj.get_project_gits(prj_info[:id], repo)
|
||||||
@repo_list = repo_lst.reject do |item|
|
@repo_list = repo_lst.reject do |item|
|
||||||
@@ -1218,7 +1222,6 @@ post "/prjdelete/:id" do
|
|||||||
if prj_info.nil?
|
if prj_info.nil?
|
||||||
print_error_page(503, "Путь к проектам не существует")
|
print_error_page(503, "Путь к проектам не существует")
|
||||||
else
|
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?
|
if params["cancel"].nil? && params["delete"] == "delete" && !params["isdelete"].nil?
|
||||||
err = prj.delete_project(params["id"])
|
err = prj.delete_project(params["id"])
|
||||||
unless err.nil?
|
unless err.nil?
|
||||||
@@ -1234,6 +1237,27 @@ post "/prjdelete/:id" do
|
|||||||
end
|
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(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
|
not_found do
|
||||||
status 404
|
status 404
|
||||||
@page_name = "Кто-то потерялся"
|
@page_name = "Кто-то потерялся"
|
||||||
|
|||||||
@@ -82,4 +82,12 @@ class IniConfig
|
|||||||
30
|
30
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_keys_path()
|
||||||
|
unless @config["sign"]["path"].nil?
|
||||||
|
@config["sign"]["path"].to_s
|
||||||
|
else
|
||||||
|
"keys"
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -145,11 +145,15 @@ class DBase
|
|||||||
Projects[id]
|
Projects[id]
|
||||||
end
|
end
|
||||||
|
|
||||||
def proj_create(proj_name, proj_descr)
|
def proj_create(proj_name, proj_descr, nopublic)
|
||||||
@error = nil
|
@error = nil
|
||||||
data = Projects.where(projname: proj_name).first
|
data = Projects.where(projname: proj_name).first
|
||||||
if data.nil?
|
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
|
@last_id = id
|
||||||
else
|
else
|
||||||
@error = "Данный проект уже существует"
|
@error = "Данный проект уже существует"
|
||||||
@@ -256,8 +260,8 @@ class DBase
|
|||||||
$DDB = Sequel.connect(@cfg.get_db)
|
$DDB = Sequel.connect(@cfg.get_db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_rpm(build_id, path_to_rpm, rpm_name, git_id)
|
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)
|
id = Rpms.insert(savepath: path_to_rpm, rpmname: rpm_name, sign: 0, signpath: "", repo_id: git_id.to_i, filehash: sha256)
|
||||||
@last_id = id
|
@last_id = id
|
||||||
BuildRpms.insert(build_id: build_id.to_i, rpm_id: id)
|
BuildRpms.insert(build_id: build_id.to_i, rpm_id: id)
|
||||||
end
|
end
|
||||||
@@ -344,11 +348,12 @@ class DBase
|
|||||||
ReposProjects.where(proj_id: prj_id.to_i).delete
|
ReposProjects.where(proj_id: prj_id.to_i).delete
|
||||||
ProjectsReposSpec.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)
|
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 = BuildRpms.where(build_id: item[:id])
|
||||||
Rpms.where(id: rpms[:rpm_id]).delete
|
Rpms.where(id: rpms[:rpm_id]).delete
|
||||||
end
|
end
|
||||||
BuildTask.where(proj_id: prj_id.to_i).delete
|
BuildTask.where(proj_id: prj_id.to_i).delete
|
||||||
|
Projects.where(id: prj_id.to_i).delete
|
||||||
end
|
end
|
||||||
|
|
||||||
def projects_with_current_as_link(prj_id)
|
def projects_with_current_as_link(prj_id)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ require_relative "runner"
|
|||||||
require "fileutils"
|
require "fileutils"
|
||||||
require "logger"
|
require "logger"
|
||||||
require_relative "repomanage"
|
require_relative "repomanage"
|
||||||
|
require "digest"
|
||||||
|
|
||||||
BUILD_STRUCTURE = {
|
BUILD_STRUCTURE = {
|
||||||
:SRC => "src",
|
:SRC => "src",
|
||||||
@@ -206,12 +207,25 @@ class MockManager
|
|||||||
File.open(@repo_lock, File::RDWR | File::CREAT) do |f|
|
File.open(@repo_lock, File::RDWR | File::CREAT) do |f|
|
||||||
f.flock(File::LOCK_EX)
|
f.flock(File::LOCK_EX)
|
||||||
# выклдака пакетов и пересоздание repodata
|
# выклдака пакетов и пересоздание repodata
|
||||||
|
packages_uniq = true
|
||||||
prep_rpms.each do |item|
|
prep_rpms.each do |item|
|
||||||
FileUtils.mkdir_p(File.dirname(item[:dst]))
|
if File.exist?(item[:dst])
|
||||||
FileUtils.cp_r(item[:src], item[:dst], verbose: true, remove_destination: true)
|
packages_uniq = false
|
||||||
@db.save_rpm(@build_id, item[:dst], item[:name], @git_id)
|
break
|
||||||
@log.info("Копируется пакет #{item[:src]} в репозиторий #{item[:dst]}")
|
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
|
repo.create_repo
|
||||||
|
else
|
||||||
|
@error = true
|
||||||
|
@log.error("Такие пакеты уже существуют в репозитории. Поднимите версию пакета")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ class ProjectsActions
|
|||||||
generate_linked_repos(id, proj_path, proj_name, prj_incl_path)
|
generate_linked_repos(id, proj_path, proj_name, prj_incl_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_project(name, description, configuration)
|
def create_project(name, description, configuration, nopublic)
|
||||||
@error = nil
|
@error = nil
|
||||||
ret_val = 0
|
ret_val = 0
|
||||||
project_name = sanitize_rcptname(name)
|
project_name = sanitize_rcptname(name)
|
||||||
@@ -162,7 +162,7 @@ class ProjectsActions
|
|||||||
end
|
end
|
||||||
if File.exist?(configuration)
|
if File.exist?(configuration)
|
||||||
generate_config(nil, configuration, fname, project_name)
|
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?
|
if @error.nil?
|
||||||
created = true
|
created = true
|
||||||
end
|
end
|
||||||
@@ -361,10 +361,10 @@ class ProjectsActions
|
|||||||
@error = "Нельзя удалить git репозиторий с незавершенными сборками"
|
@error = "Нельзя удалить git репозиторий с незавершенными сборками"
|
||||||
else
|
else
|
||||||
linked = @db.projects_with_current_as_link(prj_id)
|
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)
|
proj_path = get_project_path(prj_id)
|
||||||
FileUtils.rm_rf(proj_path, secure: true)
|
FileUtils.rm_rf(proj_path, secure: true)
|
||||||
@db.delete_project(prj_id, git_id)
|
@db.delete_project(prj_id)
|
||||||
else
|
else
|
||||||
@error = "На текущий проект ссылаются другие проекты. Удаление запрещено"
|
@error = "На текущий проект ссылаются другие проекты. Удаление запрещено"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,6 +17,22 @@ class RPMReader
|
|||||||
end
|
end
|
||||||
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
|
class RepoManager
|
||||||
attr :path, :error, :last_status, :last_pid
|
attr :path, :error, :last_status, :last_pid
|
||||||
|
|
||||||
|
|||||||
@@ -18,3 +18,6 @@ selected=msvsphere
|
|||||||
|
|
||||||
[pages]
|
[pages]
|
||||||
items_per_page = 30
|
items_per_page = 30
|
||||||
|
|
||||||
|
[sign]
|
||||||
|
path = "keys"
|
||||||
@@ -44,6 +44,7 @@ Sequel.migration do
|
|||||||
String :rpmname, text: true
|
String :rpmname, text: true
|
||||||
Integer :sign
|
Integer :sign
|
||||||
String :signpath, text: true
|
String :signpath, text: true
|
||||||
|
String :filehash, text: true
|
||||||
foreign_key :repo_id, :repos, :key => :id
|
foreign_key :repo_id, :repos, :key => :id
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -47,3 +47,5 @@ cat >~/.rpmmacros <<EOF
|
|||||||
%_gpgbin /usr/bin/gpg
|
%_gpgbin /usr/bin/gpg
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
echo "${phassphrase}" > ../keys/save
|
||||||
|
|
||||||
|
|||||||
3
views/gpgerror.erb
Normal file
3
views/gpgerror.erb
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<%= erb :header %>
|
||||||
|
|
||||||
|
<%= erb :footer %>
|
||||||
@@ -15,6 +15,14 @@
|
|||||||
<label for="description" class="form-label">Описание проекта</label>
|
<label for="description" class="form-label">Описание проекта</label>
|
||||||
<textarea class="form-control" id="description" name="description" rows="3"><%= @old_description %></textarea>
|
<textarea class="form-control" id="description" name="description" rows="3"><%= @old_description %></textarea>
|
||||||
</div>
|
</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">
|
<div class="mb-3">
|
||||||
<label for="conflist" class="form-label">Выберите конфигурацию окружения сборки для проекта</label>
|
<label for="conflist" class="form-label">Выберите конфигурацию окружения сборки для проекта</label>
|
||||||
<div class="conflist">
|
<div class="conflist">
|
||||||
|
|||||||
@@ -26,6 +26,13 @@
|
|||||||
<%= @proj_name %>
|
<%= @proj_name %>
|
||||||
</h3>
|
</h3>
|
||||||
<div class="pb-2"><%= @proj_descr %></div>
|
<div class="pb-2"><%= @proj_descr %></div>
|
||||||
|
<div class="pb-2">
|
||||||
|
<% if @proj_public == 1 %>
|
||||||
|
Разрешена публикация пакетов с исходными кодами
|
||||||
|
<% else %>
|
||||||
|
Запрещена публикация пакетов с исходными кодами
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
<div class="list-group">
|
<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
|
<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">Редактировать
|
class="bi bi-pen"></i><span class="ms-2">Редактировать
|
||||||
|
|||||||
Reference in New Issue
Block a user