From 815d0fba7abfcad9924820a35e6c3531a4fa6f70 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Fri, 11 Mar 2011 20:46:03 +0100 Subject: Add SYNOPSIS to newalias --- fripost-newalias | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fripost-newalias b/fripost-newalias index 2668943..fb50a0c 100755 --- a/fripost-newalias +++ b/fripost-newalias @@ -8,6 +8,11 @@ use strict; fripost-newalias - Add a new alias to the system +=head1 SYNOPSIS + +fripost-newalias +fripost-newalias GOTO FROM... + =cut our $VERSION = '0.01'; -- cgit v1.2.3 From c965c8bf6ec78123110ad0ad3ca623634f950814 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Fri, 11 Mar 2011 21:05:53 +0100 Subject: Use scalar context for File::Slurp --- fripost-adduser | 2 +- fripost-newalias | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/fripost-adduser b/fripost-adduser index 86da15d..28141da 100755 --- a/fripost-adduser +++ b/fripost-adduser @@ -99,7 +99,7 @@ my $msg = MIME::Lite->new( From => 'admin@fripost.org', To => $user->{username}, Subject => 'Välkommen till Fripost!', - Data => slurp('templ/new_user_mail.tt'), # TODO: actually use TT + Data => scalar slurp('templ/new_user_mail.tt'), # TODO: actually use TT ); $msg->send(); diff --git a/fripost-newalias b/fripost-newalias index fb50a0c..53dd3e4 100755 --- a/fripost-newalias +++ b/fripost-newalias @@ -21,6 +21,7 @@ use FindBin qw($Bin); use lib "$Bin/lib"; use Data::Dumper; +use Email::Valid; use Fripost::Password; use Fripost::Prompt; use Fripost::Schema; @@ -43,11 +44,10 @@ my $schema = Fripost::Schema->connect( $conf->{dbi_dsn}, $conf->{admuser}, $conf->{admpass}, {} #\%dbi_params ); +# Get information my $goto = shift @ARGV; my @addr = @ARGV; - $goto //= prompt_username("Alias goto address: "); - @addr || push @addr, prompt "Alias address: "; if ($conf->{pretend}) { @@ -61,6 +61,10 @@ for my $addr (@addr) { address => $addr, }); if (!$rs->count) { + unless (Email::Valid->address($addr)) { + say "WARN: skipping invalid address $addr"; + next; + } my $db_alias = $schema->resultset('Alias')->new({ address => $addr, goto => $goto, -- cgit v1.2.3 From df00a5d274e5c06162255ac68b213afe66ec56b0 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Fri, 11 Mar 2011 21:25:38 +0100 Subject: Make newalias nice --- fripost-newalias | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/fripost-newalias b/fripost-newalias index 53dd3e4..162f787 100755 --- a/fripost-newalias +++ b/fripost-newalias @@ -15,8 +15,6 @@ fripost-newalias GOTO FROM... =cut -our $VERSION = '0.01'; - use FindBin qw($Bin); use lib "$Bin/lib"; @@ -45,7 +43,7 @@ my $schema = Fripost::Schema->connect( ); # Get information -my $goto = shift @ARGV; +my $goto = fix_username(shift @ARGV); my @addr = @ARGV; $goto //= prompt_username("Alias goto address: "); @addr || push @addr, prompt "Alias address: "; @@ -55,16 +53,32 @@ if ($conf->{pretend}) { exit 0; } +# Show goto adress +say "goto adress: $goto"; + +# Show from adresses +@addr = grep { + if (Email::Valid->address($_)) { + 1; + } + else { + say "WARN: skipping invalid address $_"; + undef; + } +} @addr; +if (@addr == 0) { + say "No valid destination adresses. Aborting..."; + exit 1; +} +say "dest adress: " . (join " ", @addr); +ask_if_ok_or_abort(); + ## Insert alias into database for my $addr (@addr) { my $rs = $schema->resultset('Alias')->search({ address => $addr, }); if (!$rs->count) { - unless (Email::Valid->address($addr)) { - say "WARN: skipping invalid address $addr"; - next; - } my $db_alias = $schema->resultset('Alias')->new({ address => $addr, goto => $goto, -- cgit v1.2.3 From 2b9012f0d2631a6a6705fbe914f6cb8223d3d2e1 Mon Sep 17 00:00:00 2001 From: Stefan Kangas Date: Sat, 12 Mar 2011 13:35:19 +0100 Subject: adduser will not echo the password --- fripost-adduser | 19 ++++--------------- lib/Fripost/Prompt.pm | 38 ++++++++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/fripost-adduser b/fripost-adduser index 28141da..15a4447 100755 --- a/fripost-adduser +++ b/fripost-adduser @@ -41,26 +41,18 @@ sub read_user_info { domain => $domain, maildir => $maildir, active => $active, - password => smd5($password), + password => $password, }; print Dumper $user; - say "Using password $password"; - # Ask the user if the information is OK - my $confirmed = prompt "Is this OK? ", -yn; - - if ($confirmed) { - return $user; - } else { - return undef; - } + return $user; } ## Get command line options our $conf = LoadFile('default.yml'); GetOptions( - 'dbi_dsn' => \$conf->{dbi_dsn}, + 'dbi_dsn' => \$conf->{dbi_dsn}, 'admuser=s' => \$conf->{admuser}, 'admpass=s' => \$conf->{admpass}, 'pretend' => \$conf->{pretend}, @@ -75,10 +67,7 @@ say "Adding a new virtual user."; my $user = read_user_info(); -if (!defined $user) { - say "Aborted by user."; - exit 1; -} +ask_if_ok_or_abort(); if ($conf->{pretend}) { say "Nothing to do since we are pretending..."; diff --git a/lib/Fripost/Prompt.pm b/lib/Fripost/Prompt.pm index ad6f1ae..a857cc1 100755 --- a/lib/Fripost/Prompt.pm +++ b/lib/Fripost/Prompt.pm @@ -20,10 +20,19 @@ use String::MkPasswd qw/mkpasswd/; our @EXPORT = qw(prompt_password prompt_username); +sub fix_username { + my ($nam) = @_; + if ($nam !~ /\@/) { + $nam .= '@fripost.org'; + say "Using $nam"; + } + return $nam; +} + sub prompt_password { my $prompt = shift; $prompt //= "Enter new password (blank for random): "; - my $password = prompt $prompt; + my $password = prompt $prompt, -e => '*'; if (!length $password) { $password = mkpasswd( -length => 10, @@ -32,25 +41,30 @@ sub prompt_password { ); say "Generated password: $password"; } - return $password; + return smd5($password); } sub prompt_username { my $prompt = shift; $prompt //= "Enter username: "; - my $username; - while (not defined $username) { - $username = prompt $prompt; - if (!($username =~ /\@/)) { - $username .= '@fripost.org'; - say "Using $username"; - } - if (!Email::Valid->address($username)) { - undef $username; + my $nam; + while (not defined $nam) { + $nam = prompt $prompt; + $nam = fix_username($nam); + if (!Email::Valid->address($nam)) { + undef $nam; say "This is not a valid e-mail address. Try again." } } - return $username; + return $nam; +} + +sub ask_if_ok_or_abort { + my $confirmed = prompt "Is this OK? [no will abort]", -ynt; + unless ($confirmed) { + say "User aborted"; + exit 1; + } } =head1 AUTHOR -- cgit v1.2.3