File: [local] / palm / Palm-Keyring / examples / example3.pl (download)
Revision 1.12, Wed Dec 16 22:54:55 2009 UTC (14 years, 9 months ago) by andrew
Branch: MAIN
CVS Tags: HEAD Changes since 1.11: +2 -1 lines
handy dandy (but wrong) getting of names.
|
#!/usr/bin/perl
# $RedRiver: example3.pl,v 1.11 2008/09/17 14:49:50 andrew Exp $
########################################################################
# palmkeyring.pl *** a command line client for Keyring databases.
#
# 2007.02.10 #*#*# andrew fresh <andrew@cpan.org>
########################################################################
# Copyright (C) 2007 by Andrew Fresh
#
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
########################################################################
use strict;
use warnings;
use Getopt::Long;
Getopt::Long::Configure('bundling');
use Term::ReadLine;
use Palm::PDB;
use Palm::Keyring;
my $Default_File = $ENV{'HOME'} . '/.jpilot/Keys-Gtkr.pdb';
my $PDBFile;
my $Categories;
my $Names;
my $Accounts;
my $Action_List;
my $Action_Show;
my $result = GetOptions (
"file|f=s" => \$PDBFile,
"categories|c:s@" => \$Categories,
"name|n=s@" => \$Names,
"account|a=s@" => \$Accounts,
"list|l" => \$Action_List,
"show|s" => \$Action_Show,
);
$PDBFile ||= $Default_File;
my $pdb = new Palm::PDB();
$pdb->Load($PDBFile) || die "Couldn't load '$PDBFile': $!";
if ($Action_List) {
show_list();
} elsif ($Action_Show) {
push @{ $Names }, @ARGV;
show_items($Names);
} elsif (defined $Categories) {
show_categories();
} else {
help();
}
exit;
sub show_list
{
print "Showing List\n";
foreach my $r (@{ $pdb->{records} }) {
my $category =
$pdb->{appinfo}->{categories}->[ $r->{category} ]->{name};
my $matched = 0;
foreach my $cat (@{ $Categories }) {
$matched++ if uc($category) eq uc($cat);
}
foreach my $name (@{ $Names}) {
$matched++ if uc($r->{'name'}) eq uc($name);
}
next if ( @{ $Categories } || @{ $Names } ) && not $matched;
# XXX Fix up formatting
print $r->{plaintext}->{0}->{data} .
":" .
$r->{category} .
":" .
$category .
"\n";
}
}
sub show_categories
{
foreach my $c (sort @{ $pdb->{'appinfo'}->{'categories'} }) {
next unless $c->{'name'};
# Fix formatting
print $c->{'name'}, "\n";
}
}
sub show_items
{
get_password() || die "Couldn't decrypt file!";
foreach (0..$#{ $pdb->{'records'} }) {
my $r = $pdb->{'records'}->[$_];
my $category =
$pdb->{'appinfo'}->{'categories'}->[ $r->{'category'} ]->{'name'};
my $matched = 0;
foreach my $cat (@{ $Categories }) {
$matched++ if uc($category) eq uc($cat);
}
foreach my $name (@{ $Names}) {
$matched++ if uc($r->{plaintext}->{0}->{data}) eq uc($name);
}
next if ( @{ $Categories } || @{ $Names } ) && not $matched;
my $a = $pdb->Decrypt($r);
$matched = 0;
foreach my $account (@{ $Accounts }) {
$matched++ if uc($a->{1}->{data}) eq uc($account);
}
next if ( @{ $Accounts } ) && not $matched;
# XXX Fix up formatting
print $a->{0}->{data} . "\n\t" .
"Category: " . $category . "\n\t" .
"Account: " . $a->{1}->{data} . "\n\t" .
"Password: " . $a->{2}->{data} . "\n";
print "\tNotes: " . $a->{255}->{data} . "\n" if $a->{255}->{data};
}
}
sub add_item
{
die "not implemented!";
}
sub delete_item
{
die "not implemented!";
}
sub get_password
{
while (1) {
print "Enter Password: ";
system("stty", "-echo");
chop(my $read = <STDIN>);
system("stty", "echo");
print "\n";
$read =~ s/^\s*//;
$read =~ s/\s*$//;
#return 1 if
$pdb->Password($read) && return 1;
#print Dump $read, $pdb;
#exit;
}
return undef;
}
sub help
{
print STDERR "$0 [options] action\n";
exit 255;
}