[savepoint] foerste2
authorMatthias Förste <foerste@schlittermann.de>
Fri, 06 Sep 2013 13:56:57 +0200
branchfoerste2
changeset 57 2b8cf6a91d0b
parent 56 eea8bbbf3818
[savepoint]
bin/ius-dav-htuseradd
bin/ius-dav-htuserdel
bin/ius-dav-htuserexpiry
cgi-bin/ius-dav-htuseradd.cgi
lib/Ius/Dav/Htpasswd.pm
--- a/bin/ius-dav-htuseradd	Fri Jul 22 09:38:29 2011 +0200
+++ b/bin/ius-dav-htuseradd	Fri Sep 06 13:56:57 2013 +0200
@@ -20,7 +20,7 @@
 use strict;
 use warnings;
 
-use Ius::Dav::Htpasswd qw(mkpasswd readconfig useradd usage);
+use Ius::Dav::Htpasswd;
 
 use Getopt::Long;
 use Pod::Usage;
@@ -30,9 +30,9 @@
 GetOptions(
     'u|user=s'   => \$user,
     'e|expiry=i' => \$expiry,
-    'h|help'     => sub { usage( -exit => 0, -verbose => 1 ) },
+    'h|help'     => sub { Ius::Dav::Htpasswd::usage( -exit => 0, -verbose => 1 ) },
     'm|man'      => sub {
-        usage(
+        Ius::Dav::Htpasswd::usage(
             -exit => 0,
 
             # "system('perldoc -V &>/dev/null')" appears shorter, but may not
@@ -44,7 +44,9 @@
     },
   )
   and defined $user
-  or usage;
+  or Ius::Dav::Htpasswd::usage;
 
-$pass = useradd readconfig, $user, mkpasswd, $expiry;
+my $h = Ius::Dav::Htpasswd->new;
+$h->readconfig or die "Can't readconfig";
+$pass = $h->useradd($user, Ius::Dav::Htpasswd::mkpasswd, $expiry);
 print "$pass\n";
--- a/bin/ius-dav-htuserdel	Fri Jul 22 09:38:29 2011 +0200
+++ b/bin/ius-dav-htuserdel	Fri Sep 06 13:56:57 2013 +0200
@@ -21,15 +21,15 @@
 use warnings;
 
 use Getopt::Long;
-use Ius::Dav::Htpasswd qw(readconfig userdel usage);
+use Ius::Dav::Htpasswd;
 
 my $user;
 
 GetOptions(
     'u|user=s' => \$user,
-    "h|help"   => sub { usage( -verbose => 0, -exitval => 0 ) },
+    "h|help"   => sub { Ius::Dav::Htpasswd::usage( -verbose => 0, -exitval => 0 ) },
     "m|man"    => sub {
-        usage(
+        Ius::Dav::Htpasswd::usage(
             -verbose   => 2,
             -exitval   => 0,
             -noperldoc => ( `perldoc -V 2>/dev/null`, $? != 0 )[-1]
@@ -37,6 +37,8 @@
     },
   )
   and defined $user
-  or usage();
+  or Ius::Dav::Htpasswd::usage();
 
-exit userdel readconfig, $user;
+my $h = Ius::Dav::Htpasswd->new;
+$h->readconfig or die "Can't readconfig";
+exit $h->userdel($user);
--- a/bin/ius-dav-htuserexpiry	Fri Jul 22 09:38:29 2011 +0200
+++ b/bin/ius-dav-htuserexpiry	Fri Sep 06 13:56:57 2013 +0200
@@ -20,15 +20,15 @@
 use strict;
 use warnings;
 
-use Ius::Dav::Htpasswd qw(readconfig userexpiry usage);
+use Ius::Dav::Htpasswd;
 
 use Getopt::Long;
 use Pod::Usage;
 
 GetOptions(
-    'h|help' => sub { usage( -exit => 0, -verbose => 1 ) },
+    'h|help' => sub { Ius::Dav::Htpasswd::usage( -exit => 0, -verbose => 1 ) },
     'm|man'  => sub {
-        usage(
+        Ius::Dav::Htpasswd::usage(
             -exit => 0,
 
             # "system('perldoc -V &>/dev/null')" appears shorter, but may not
@@ -38,6 +38,8 @@
             -verbose   => 2
         );
     },
-) or usage;
+) or Ius::Dav::Htpasswd::usage;
 
-exit userexpiry readconfig;
+my $h = Ius::Dav::Htpasswd->new;
+$h->readconfig or die "Can't readconfig";
+exit $h->userexpiry;
--- a/cgi-bin/ius-dav-htuseradd.cgi	Fri Jul 22 09:38:29 2011 +0200
+++ b/cgi-bin/ius-dav-htuseradd.cgi	Fri Sep 06 13:56:57 2013 +0200
@@ -23,7 +23,7 @@
 # restarting apache when everything else works
 # use CGI::Fast;
 use CGI;
-use Ius::Dav::Htpasswd qw(mkpasswd readconfig useradd);
+use Ius::Dav::Htpasswd;
 
 my $css = <<EOC;
 body {
@@ -68,7 +68,8 @@
 
 my $doit = 0;
 
-my $conf = readconfig or die "Can't readconfig";
+my $h = Ius::Dav::Htpasswd->new;
+$h->readconfig or die "Can't readconfig";
 
 if ( defined $p->{add} and $p->{add} ne '' ) {
 
@@ -79,7 +80,7 @@
 
     if ( my $pass = qx(@cmd) ) {
 
-        my $url = "$conf->{dav_base_remote}/$p->{user}";
+        my $url = $h->conf->{dav_base_remote} . "/$p->{user}";
 
         chomp $pass;
 
--- a/lib/Ius/Dav/Htpasswd.pm	Fri Jul 22 09:38:29 2011 +0200
+++ b/lib/Ius/Dav/Htpasswd.pm	Fri Sep 06 13:56:57 2013 +0200
@@ -42,6 +42,29 @@
     @EXPORT_OK = qw(readconfig mkpasswd useradd userdel userexpiry usage);
 }
 
+use constant {
+
+    E_USER_NONALNUM  => 1,
+    E_EXPIRY_NONNUM  => 2,
+    E_EXPIRY_TOOSHORT  => 3,
+    E_EXPIRY_TOOLONG => 4,
+
+};
+
+# can't use constants in the declaration in which they are defined
+use constant {
+    ERRSTR => {
+
+        E_USER_NONALNUM, 'Invalid character in username.',
+        E_EXPIRY_NONNUM, 'Expiry does not look like a positive integer.',
+        E_EXPIRY_TOOSHORT, 'Expiry too short.',
+        E_EXPIRY_TOOLONG, 'Expiry too long.'
+
+    }
+};
+
+
+
 sub usage {
 
     use Pod::Usage;
@@ -51,9 +74,26 @@
 
 }
 
+sub new {
+
+    my ($class, $self) = (shift, {});
+    $self->{ERRNO} = undef;
+    bless $self, $class;
+    return $self;
+}
+
+sub conf {
+
+    my $self = shift;
+    return { $self->{CONF}->varlist('.') };
+
+}
+
 sub readconfig {
 
-    my $conf = new AppConfig(
+    my $self = shift;
+
+    $self->{CONF} = new AppConfig(
         qw(
           expiry=i
           expiry_min=i
@@ -66,24 +106,42 @@
           www_group=s
           master_user=s)
     ) or die 'Failed to read config!';
-    $conf->file($_)
+    $self->{CONF}->file($_)
       for grep -e, map "$_/ius-dav-htpasswd.conf",
       qw(/etc/ius-dav-htpasswd /usr/local/etc/ius-dav-htpasswd ~/.ius-dav-htpasswd .);
-    return { $conf->varlist('.') };
+
+    return 1;
+
+}
+
+sub seterrno {
+
+    my ($self, $e) = @_;
+
+    $self->{ERRNO} = $e;
+    return;
+
+}
+
+sub errstr {
+
+    my $self = shift;
+    return ERRSTR->{$self->{ERRNO}};
 
 }
 
 sub validate {
 
-    my ( $conf, $user, $expiry ) = @_;
+    my ( $self, $user, $expiry ) = @_;
+    my $conf = $self->conf;
 
-    return unless $user =~ /^[[:alnum:]_]+$/;
+    return $self->seterrno(E_USER_NONALNUM) unless $user =~ /^[[:alnum:]_]+$/;
 
     if ( defined $expiry ) {
-        return unless $expiry =~ /^[0-9]+$/;
-        return
-          unless $expiry >= $conf->{expiry_min}
-              and $expiry <= $conf->{expiry_max};
+
+        return $self->seterrno(E_EXPIRY_NONNUM) unless $expiry =~ /^[0-9]+$/;
+        return $self->seterrno(E_EXPIRY_TOOSHORT)  unless $expiry >= $conf->{expiry_min};
+        return $self->seterrno(E_EXPIRY_TOOLONG) unless $expiry <= $conf->{expiry_max};
     }
 
     return 1;
@@ -92,7 +150,8 @@
 
 sub useradd {
 
-    my ( $conf, $user, $pass, $expiry ) = @_;
+    my ( $self, $user, $pass, $expiry ) = @_;
+    my $conf = $self->conf;
 
     for (
         qw(expiry expiry_min expiry_max dav_base_local htpasswd conf_d www_user www_group)
@@ -103,7 +162,7 @@
     }
 
     $expiry = $conf->{expiry} unless defined $expiry and $expiry ne '';
-    die 'Invalid input' unless validate $conf, $user, $expiry;
+    die $self->errstr unless $self->validate($user, $expiry);
 
     my $user_dir = "$conf->{dav_base_local}/$user";
     mkdir "$user_dir" or die "Can't mkdir '$user_dir': $!";
@@ -165,7 +224,8 @@
 
 sub userdel {
 
-    my ( $conf, $user ) = @_;
+    my ( $self, $user ) = @_;
+    my $conf = $self->conf;
 
     my $rc = 0;
 
@@ -201,7 +261,8 @@
 
 sub userexpiry {
 
-    my ($conf) = @_;
+    my $self = shift;
+    my $conf = $self->conf;
 
     my $rc = 0;
 
@@ -218,7 +279,7 @@
 
     for my $u (@users) {
         if ( my $e = $htpasswd->fetchInfo($u) ) {
-            userdel( $conf, $u )
+            $self->userdel( $u )
                 and warn "Error(s) occured during 'userdel $conf, $u'\n"
               if $now >= $e;
         }