perl/keyring/kdewallet / experiments / kwallet_by_dbus.pl

#!/usr/bin/perl -w

# See http://stderr.org/doc/kde/HTML/en/kdelibs-apidocs/kwallet/html/classKWallet_1_1Wallet.html

use strict;
use Net::DBus;
use Data::Dumper;
use feature 'say';

my $APP_NAME = "DBUStest";

my $dbus = Net::DBus->session()
  or die("KWallet not available (can't access DBus)");
#print "dbus: ", Dumper($dbus);
say "DBus connected"; 

my $kwallet_svc = $dbus->get_service('org.kde.kwalletd')
  or die("KWallet not available (can't access KWallet, likely kwalletd not running)");
#print "kwalletd: ", Dumper($kwallet_svc);
say "org.kde.kwalletd connected";

my $kwallet = $kwallet_svc->get_object('/modules/kwalletd', 'org.kde.KWallet')
  or die("Kwallet not available (can't find wallet)");
#print "kwallet: ", Dumper($kwallet);
say "/modules/kwalletd connected";
# $kwallet = $kwallet->as_interface(...);

# This is text name
my $net_wallet = $kwallet->networkWallet()
  or die "No net wallet";
say "net_wallet id: $net_wallet";

my $handle = $kwallet->open($net_wallet, 0, $APP_NAME)
  or die "No handle";
say "Opened, handle = $handle";

say "*****************************************************************";
say "* API information";
say "*****************************************************************";

use List::MoreUtils qw(pairwise zip);

say "Supported interfaces:\n    ", join("\n    ", keys(%{$kwallet->{introspector}->{interfaces}}));
say "org.kde.KWallet methods:";
my $methods = $kwallet->{introspector}->{interfaces}->{'org.kde.KWallet'}->{methods};
foreach my $methodName (sort keys %$methods) {
    my $spec = $methods->{$methodName};
    say "- $methodName ", $spec->{deprecated} ? "DEPRECATED" : "";
    say "    Params:";
    foreach my $paramSpec (pairwise {"$a: $b"} @{$spec->{paramnames}}, @{$spec->{params}}) {
        say "      $paramSpec";
    }
    unless($spec->{no_reply}) {
        say "    Returns:";
        foreach my $retSpec (pairwise {($a || ''). ": $b"} @{$spec->{returnnames}}, @{$spec->{returns}}) {
            say "      $retSpec";
        }
    } else {
        say "    No reply";
    }
    #print Dumper($spec);
}

say "*****************************************************************";


my $is_open = $kwallet->isOpen($handle);
say "is open: $is_open";

my $folders = $kwallet->folderList($handle, $APP_NAME);
say "Folders = ", join(", ", @$folders);


$kwallet->close($handle, 'force');
say "Closed $handle";

$is_open = $kwallet->isOpen($handle);
say "is open($handle): $is_open";


__END__


$kwallet->createFolder($kwallet_handle, "Test Folder", $APP_NAME);

$kwallet->writePassword( handle, folder, key, value, appid ):
#???$kwallet->changePassword($kwallet_handle

$kwallet->close();


my $pwd = $KWallet->readPassword($kwallet_handle, 'Test Folder', 'Some Key', $APP_NAME);

my $pwd = $KWallet->readPasswordList($kwallet_handle, 'Test Folder', 'Some Key', $APP_NAME);

# entryList( handle, folder, appid )
# entryType( handle, folder, key, appid)
# hasEntry( handle, folder, key, appid )
# hasFolder( handle, folder, appid )
# removeFolder( handle, folder, appid )
# isEnabled
# isOpen(handle)
# readEntry(handle, folder, key, appid)
# readEntryList(handle, folder, key, appid)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.