=================================================================== RCS file: /cvs/palm/Palm-Keyring/examples/cgi/bin/keyring.cgi,v retrieving revision 1.2 retrieving revision 1.6 diff -u -r1.2 -r1.6 --- palm/Palm-Keyring/examples/cgi/bin/keyring.cgi 2009/06/15 18:45:46 1.2 +++ palm/Palm-Keyring/examples/cgi/bin/keyring.cgi 2012/06/10 04:48:05 1.6 @@ -1,5 +1,5 @@ #!/usr/bin/perl -# $RedRiver: keyring.cgi,v 1.1 2009/06/11 20:40:45 andrew Exp $ +# $RedRiver: keyring.cgi,v 1.4 2009/07/16 20:08:45 andrew Exp $ ######################################################################## # keyring.cgi *** Update and modify keyring files # @@ -13,8 +13,6 @@ use strict; use warnings; -use Data::Dumper; - use feature 'state'; use CGI; @@ -25,8 +23,16 @@ use Palm::Keyring; use Template; -my $base_path = '/users'; -my $dir = $ENV{'PATH_INFO'} || '/'; +my @path = '/users'; +if ($ENV{'PATH_INFO'} && $ENV{'PATH_INFO'} ne '/') { + push @path, $ENV{'PATH_INFO'}; +} +elsif ( $ENV{'REMOTE_USER'} ) { + push @path, $ENV{'REMOTE_USER'}; + # This is the users subdir; + push @path, 'rings'; +} +my $dir = catdir( @path ); my $query = CGI->new(); my $tt = Template->new( { INCLUDE_PATH => catdir('../templates') } ); @@ -39,7 +45,7 @@ #$pjx->JSDEBUG(1); #$pjx->DEBUG(1); -my $password = $query->param('password'); +my $password = $query->param('unlock_password'); my $file = $query->param('file') || ''; my $category = $query->param('category'); my $record = $query->param('record'); @@ -49,20 +55,16 @@ } $file = canonpath($file) if $file; -$dir = canonpath($dir) if $dir; +if ( $file =~ /^ \Q$path[0]\E /xms ) { + $dir = dirname($file); +} +$dir = canonpath($dir) if $dir; if ( $dir =~ m{/\.\.//}xms ) { error('Invalid Dir [$dir]'); $dir = ''; } -if ( $file =~ /^ \Q$base_path\E /xms ) { - $dir = dirname($file); -} -else { - $dir = catdir( $base_path, $dir, 'rings' ); -} - files() if !$file; if ( !$file ) { @@ -111,25 +113,30 @@ } sub password { + my $message = ''; if ($password) { my $pdb = open_pdb(); - eval { $pdb->Password($password) }; + my $valid = eval { $pdb->Password($password) }; if ($@) { error($@); + $message = "Error: $@"; } - else { + elsif ($valid) { return 'Unlocked: ' - . $query->hidden( 'password', $password ) + . $query->hidden( 'unlock_password', $password ) . $query->submit( -name => 'lock', -value => 'Lock', ); } + else { + $message = "$message
Invalid Password"; + } } - return 'Password: ' - . $query->password_field( - -name => 'password', - -value => '', - -override => 1, + return 'Locked - Enter Password to Unlock: ' . $query->br() + . $message . $query->password_field( + -name => 'unlock_password', + -value => '', + -override => 1, ); } @@ -152,7 +159,7 @@ -default => $file, -onChange => "changeFile(" . "['file']," - . "['passwords','files','categories','lists','records','errors']);", + . "['unlock_passwords','files','categories','lists','records','errors']);", ); } else { @@ -180,11 +187,14 @@ return $query->popup_menu( -name => 'category', - -values => [ sort { $a <=> $b } keys %categories ], + -values => [ + sort { lc( $categories{$a} ) cmp lc( $categories{$b} ) } + keys %categories + ], -default => $category, -labels => \%categories, -onChange => "changeCategory(" - . "['password','file','category']," + . "['unlock_password','file','category']," . "['lists','errors'], 'POST');", ); } @@ -211,9 +221,8 @@ ], -default => [$record], -labels => \%records, - -size => 25, -onChange => "changeRecord(" - . "['password','file','record']," + . "['unlock_password','file','record']," . "['records','errors'], 'POST');", ); } @@ -250,7 +259,7 @@ my $d = $acct{$label}{data}; $acct{$label}{data} = sprintf "%04d/%02d/%02d", $d->{year} + 1900, - $d->{month}, + $d->{month} + 1, $d->{day}; } @@ -271,13 +280,20 @@ $label = 'Last Change'; } + my $type = 'textfield'; + if ($key eq 'notes') { + $type = 'textarea'; + } + $output - .= $label . ': ' - . $query->textfield( + .= $label . ': ' . + #$acct{$key}{data} . + $query->$type( -name => 'acct_' . $key, -value => $acct{$key}{data}, -override => 1, - ) . $query->br; + ) . + $query->br; } return $output;