From 046efee6e84b3c37554bebf367ea5e0b1185bd59 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Sun, 21 Apr 2019 16:53:41 -0700 Subject: [PATCH] Work on actually creating repos --- package-updates/create_repo.cgi | 12 ++++++++++++ package-updates/index.cgi | 6 +++++- package-updates/lang/en | 2 ++ software/lang/en | 1 + software/yum-lib.pl | 19 +++++++++++++++++-- 5 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 package-updates/create_repo.cgi diff --git a/package-updates/create_repo.cgi b/package-updates/create_repo.cgi new file mode 100644 index 000000000..3f760530e --- /dev/null +++ b/package-updates/create_repo.cgi @@ -0,0 +1,12 @@ +#!/usr/local/bin/perl +# Create one new repository + +require './package-updates-lib.pl'; +&ReadParse(); +&error_setup($text{'repos_err_create'}); + +$repo = &software::create_repo_parse(\%in); +&error($repo) if (!ref($repo)); +&software::create_package_repo($repo); +&webmin_log("create", "repo", $repo->{'id'}); +&redirect("index.cgi?tab=repos"); diff --git a/package-updates/index.cgi b/package-updates/index.cgi index 102a77ba9..1c00ea2d6 100755 --- a/package-updates/index.cgi +++ b/package-updates/index.cgi @@ -255,7 +255,11 @@ if ($has_repos) { } # Form to add a repo - # XXX + print &ui_form_start("create_repo.cgi", "post"); + print &ui_table_start($text{'index_repoheader'}, undef, 2); + print &software::create_repo_form(); + print &ui_table_end(); + print &ui_form_end([ [ undef, $text{'create'} ] ]); print &ui_tabs_end_tab("tab", "repos"); } diff --git a/package-updates/lang/en b/package-updates/lang/en index 3b75672ef..b1463c34c 100644 --- a/package-updates/lang/en +++ b/package-updates/lang/en @@ -56,6 +56,7 @@ index_reposurl=Package URL index_reposdisable=Disable Repositories index_reposenable=Enable Repositories index_reposdelete=Delete Repositories +index_repoheader=New package repository options update_title=Update Packages update_title2=Install Packages @@ -136,6 +137,7 @@ system_tgz=Webmin or Usermin tar.gz repos_err_disable=Failed to disable repositories repos_err_enable=Failed to enable repositories repos_err_delete=Failed to delete repositories +repos_err_create=Failed to create repository repos_ebutton=No button clicked! repos_enone=None selected repos_title=Delete Repositories diff --git a/software/lang/en b/software/lang/en index c7f36dd88..3f29aa433 100644 --- a/software/lang/en +++ b/software/lang/en @@ -270,6 +270,7 @@ yum_repo_eidclash=Repository ID is already in use yum_repo_ename=Missing repository name yum_repo_eurl=Missing or invalid repository URL yum_repo_egpg=GPG cert file missing or does not exist +yum_repo_efile=Repository file already exists! urpmi_name=URPMI urpmi_input=Package from URPMI diff --git a/software/yum-lib.pl b/software/yum-lib.pl index a2ebdedea..189d1e2b6 100755 --- a/software/yum-lib.pl +++ b/software/yum-lib.pl @@ -388,7 +388,8 @@ foreach my $repo (@rv) { $name =~ s/\s*-.*//; $name =~ s/\s*\$[a-z0-9]+//gi; $repo->{'name'} = $repo->{'id'}." (".$name.")"; - $repo->{'url'} = $repo->{'raw'}->{'baseurl'}; + $repo->{'url'} = $repo->{'raw'}->{'baseurl'} || + $repo->{'raw'}->{'mirrorlist'}; $repo->{'enabled'} = defined($repo->{'raw'}->{'enabled'}) ? $repo->{'raw'}->{'enabled'} : 1; } @@ -418,7 +419,7 @@ return $rv; sub create_repo_parse { my ($in) = @_; -my $repo = { 'raw' => { } }; +my $repo = { 'raw' => { 'enabled' => 1 } }; # ID must be valid and unique $in->{'id'} =~ /^[a-z0-9\-\_]+$/i || return $text{'yum_repo_eid'}; @@ -448,6 +449,20 @@ return $repo; # Creates a new repository from the given hash (returned by create_repo_parse) sub create_package_repo { +my ($repo) = @_; +my $file = "$yum_repos_dir/$repo->{'id'}.repo"; +-r $file && return $text{'yum_repo_efile'}; + +&lock_file($file); +my $lref = &read_file_lines($file); +push(@$lref, "[$repo->{'id'}]"); +foreach my $r (keys %{$repo->{'raw'}}) { + push(@$lref, $r."=".$repo->{'raw'}->{$r}); + } +&flush_file_lines($file); +&unlock_file($file); + +return undef; } # delete_package_repo(&repo)