diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/git-ro-daemon.pl | 18 | ||||
-rwxr-xr-x | src/gitjoe-addsshkey.pl | 28 | ||||
-rwxr-xr-x | src/gitjoe-newrepo.pl | 71 | ||||
-rwxr-xr-x | src/gitjoe-newuser.pl | 77 | ||||
-rwxr-xr-x | src/gitjoe-rmrepo.pl | 33 | ||||
-rwxr-xr-x | src/gitjoe-rmuser.pl | 31 | ||||
-rwxr-xr-x | src/update-gitjoe.pl | 64 | ||||
-rwxr-xr-x | src/update-serv.pl | 28 |
8 files changed, 350 insertions, 0 deletions
diff --git a/src/git-ro-daemon.pl b/src/git-ro-daemon.pl new file mode 100755 index 0000000..93c5339 --- /dev/null +++ b/src/git-ro-daemon.pl @@ -0,0 +1,18 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + system( + '/usr/local/bin/dash', + '-c', + '/usr/local/bin/git daemon --reuseaddr --base-path=/usr/home /usr/home &' + ); + exit; +} + +main(); + +__END__ diff --git a/src/gitjoe-addsshkey.pl b/src/gitjoe-addsshkey.pl new file mode 100755 index 0000000..d7e0477 --- /dev/null +++ b/src/gitjoe-addsshkey.pl @@ -0,0 +1,28 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + my $argc = $#ARGV + 1; + if ($argc < 2) { + print colored("Failed!\n", 'bold red') + . "Missing argument, 2 needed " + . colored("[user - ssh public key]", 'bold') + . "\n"; + exit 1; + } + my $usr = $ARGV[0]; + my $sshkey = "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty "; + $sshkey = $sshkey . $ARGV[1]; + my $home_dir = '/usr/home/' . $usr . '/'; + open(my $fh, '>>:encoding(UTF-8)', $home_dir . '.ssh/authorized_keys'); + print $fh "$sshkey\n"; + close($fh); + exit; +} + +main(); + +__END__ diff --git a/src/gitjoe-newrepo.pl b/src/gitjoe-newrepo.pl new file mode 100755 index 0000000..1bc5a06 --- /dev/null +++ b/src/gitjoe-newrepo.pl @@ -0,0 +1,71 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + my $argc = $#ARGV + 1; + if ($argc < 2) { + print colored("Failed!\n", 'bold red') + . "Missing argument, 2 needed " + . colored("[user - reponame]", 'bold') + . "\n"; + exit 1; + } + my $usr = $ARGV[0]; + my $repo = $ARGV[1]; + my $home_dir = '/usr/home/' . $usr . '/'; + if (substr($repo, -4) ne '.git') { + $repo = $repo . '.git'; + } + $repo = $repo . '/'; + system( + '/usr/local/bin/dash', + '-c', + '/bin/mkdir -v ' . $home_dir . $repo + ); + system( + '/usr/local/bin/dash', + '-c', + '/usr/local/bin/git -C ' . $home_dir . $repo . ' init --bare' + ); + system( + '/usr/local/bin/dash', + '-c', + '/usr/sbin/chown -v -R ' . $usr . ':' . $usr . ' ' . $home_dir . $repo + ); + system( + '/usr/local/bin/dash', + '-c', + '/usr/bin/touch ' . $home_dir . $repo . 'git-daemon-export-ok' + ); + system( + '/usr/local/bin/dash', + '-c', + '/usr/sbin/chown -v ' . $usr . ':' . $usr . ' ' . $home_dir . $repo . 'git-daemon-export-ok' + ); + open(my $owner_fh, '>:encoding(utf-8)', $home_dir . $repo . 'owner'); + print $owner_fh $usr; + close($owner_fh); + system( + '/usr/local/bin/dash', + '-c', + '/usr/sbin/chown -v ' . $usr . ':' . $usr . ' ' . $home_dir . $repo . 'owner' + ); + open(my $url_fh, '>:encoding(utf-8)', $home_dir . $repo . 'url'); + substr($repo, -1) = ""; + print $url_fh 'git://jozanleclerc.xyz/' . $usr . '/' . $repo; + close($url_fh); + $repo = $repo . '/'; + system( + '/usr/local/bin/dash', + '-c', + '/usr/sbin/chown -v ' . $usr . ':' . $usr . ' ' . $home_dir . $repo . 'url' + ); + exit; +} + +main(); + +__END__ diff --git a/src/gitjoe-newuser.pl b/src/gitjoe-newuser.pl new file mode 100755 index 0000000..a141277 --- /dev/null +++ b/src/gitjoe-newuser.pl @@ -0,0 +1,77 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + my $argc = $#ARGV + 1; + if ($argc < 3) { + print colored("Failed!\n", 'bold red') + . "Missing argument, 3 needed " + . colored("[user - password - ssh public key]", 'bold') + . "\n"; + exit 1; + } + my $usr = $ARGV[0]; + my $pass = $ARGV[1]; + my $sshkey = "no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty "; + $sshkey = $sshkey . $ARGV[2]; + my $home_dir = '/usr/home/' . $usr . '/'; + system( + '/usr/local/bin/dash', + '-c', + "adduser << EOF +" . $usr . " + + + + + +git-shell + + + + + +" . $pass . " +" . $pass . " + +yes +no +EOF" + ); + system( + '/usr/local/bin/dash', + '-c', + '/bin/mkdir -v ' . $home_dir . '.ssh/' + ); + system( + '/usr/local/bin/dash', + '-c', + '/usr/sbin/chown -v ' . $usr . ':' . $usr . ' ' . $home_dir . '.ssh/' + ); + system( + '/usr/local/bin/dash', + '-c', + '/bin/chmod -v 700 ' . $home_dir . '.ssh/' + ); + open(my $fh, '>:encoding(UTF-8)', $home_dir . '.ssh/authorized_keys'); + print $fh $sshkey . "\n"; + close($fh); + system( + '/usr/local/bin/dash', + '-c', + '/usr/sbin/chown -v ' . $usr . ':' . $usr . ' ' . $home_dir . '.ssh/authorized_keys' + ); + system( + '/usr/local/bin/dash', + '-c', + '/bin/chmod -v 600 ' . $home_dir . '.ssh/authorized_keys' + ); + exit; +} + +main(); + +__END__ diff --git a/src/gitjoe-rmrepo.pl b/src/gitjoe-rmrepo.pl new file mode 100755 index 0000000..30ce4d2 --- /dev/null +++ b/src/gitjoe-rmrepo.pl @@ -0,0 +1,33 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + my $argc = $#ARGV + 1; + if ($argc < 2) { + print colored("Failed!\n", 'bold red') + . "Missing argument, 2 needed " + . colored("[user - reponame]", 'bold') + . "\n"; + exit 1; + } + my $usr = $ARGV[0]; + my $repo = $ARGV[1]; + my $home_dir = '/usr/home/' . $usr . '/'; + if (substr($repo, -4) ne '.git') { + $repo = $repo . '.git'; + } + $repo = $repo . '/'; + system( + '/usr/local/bin/dash', + '-c', + '/bin/rm -rfv ' . $home_dir . $repo + ); + exit; +} + +main(); + +__END__ diff --git a/src/gitjoe-rmuser.pl b/src/gitjoe-rmuser.pl new file mode 100755 index 0000000..944745f --- /dev/null +++ b/src/gitjoe-rmuser.pl @@ -0,0 +1,31 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + my $argc = $#ARGV + 1; + if ($argc < 1) { + print colored("Failed!\n", 'bold red') + . "Missing argument, 1 needed " + . colored("[user]", 'bold') + . "\n"; + exit 1; + } + my $usr = $ARGV[0]; + system( + '/usr/local/bin/dash', + '-c', + "rmuser << EOF +" . $usr . " +y +y +EOF" + ); + exit; +} + +main(); + +__END__ diff --git a/src/update-gitjoe.pl b/src/update-gitjoe.pl new file mode 100755 index 0000000..a0471ee --- /dev/null +++ b/src/update-gitjoe.pl @@ -0,0 +1,64 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub get_repos_index { + my $user = $_[0]; + my $home_dir = '/usr/home/' . $user . '/'; + opendir(DIR, $home_dir); + my @repos; + my $i = 0; + while (my $dir = readdir(DIR)) { + next if ($dir =~ m/^\./); + next if (!(-e $home_dir . $dir . '/git-daemon-export-ok')); + $repos[$i] = $dir; + $i += 1; + } + $i = 0; + print 'User - ' . colored($user, 'bold') . " - repositories: \n"; + while ($i < @repos) { + print $repos[$i] . "\n"; + $i += 1; + } + closedir(DIR); + print "\n"; + return @repos; +} + +sub stagit_generate { + my ($user, @repos) = @_; + my $i = 0; + my $site_dir = '/usr/local/www/git-jozan/'; + chdir($site_dir); + while ($i < @repos) { + $i += 1; + } + return; +} + +sub main { + my $home_dir = '/usr/home/'; + my @users; + opendir(DIR, $home_dir); + my $i = 0; + while (my $dir = readdir(DIR)) { + next if ($dir eq 'git-ro'); + next if ($dir =~ m/^\./); + $users[$i] = $dir; + $i += 1; + } + closedir(DIR); + $i = 0; + while ($i < @users) { + my @repos = get_repos_index($users[$i]); + stagit_generate($users[$i], @repos); + $i += 1; + } + exit; +} + +main(); + +__END__ diff --git a/src/update-serv.pl b/src/update-serv.pl new file mode 100755 index 0000000..77c64ff --- /dev/null +++ b/src/update-serv.pl @@ -0,0 +1,28 @@ +#!/usr/local/bin/perl + +use strict; +use warnings; +use Term::ANSIColor; + +sub main { + system( + '/usr/local/bin/dash', + '-c', + 'git -C /usr/local/www/jozan pull >/dev/null 2>&1' + ); + system( + '/usr/local/bin/dash', + '-c', + 'git -C /usr/local/www/git-jozan pull >/dev/null 2>&1' + ); + system( + '/usr/local/bin/dash', + '-c', + 'git -C /root/scripts pull >/dev/null 2>&1' + ); + exit; +} + +main(); + +__END__ |