package Net::PSYC::Storage; # # this provides access to information in ~/.psyc files -lynX # and PSYC environment variables according to http://www.psyc.eu/storage # # ... and maybe one day implements also _request_retrieve and _request_store # but then i'd have to do the linking as well.. and that doesn't belong here # our $VERSION = '1.0'; use strict; use Carp; use Net::PSYC; use base 'Exporter'; our @EXPORT = qw(UNI nick pass); my $UNL = $ENV{PSYCUNL}; my $UNI = $ENV{PSYC}; my $pass = $ENV{PSYCPASS}; my $nick = undef; sub path () { "/.psyc/" } sub readUNI () { my $I; unless (open($I, $ENV{HOME}.path.'me')) { warn "Consider putting your into ~/.psyc/me\n..."; return 0; } while(<$I>) { # last if ($nick, $UNI, $pass) = /^(\S+)\s+(psyc:\S+)\s*(\S*)$/; last if ($UNI) = /^(psyc:\S+)$/; } close $I; return $UNI; } sub readUNL () { my $I; unless (open($I, $ENV{HOME}.path.'unl')) { warn "Consider putting your (containing your dyndns.host) into ~/.psyc/unl\n..."; return 0; } while(<$I>) { # last if ($nick, $UNI, $pass) = /^(\S+)\s+(psyc:\S+)\s*(\S*)$/; last if ($UNL) = /^(psyc:\S+)$/; } close $I; return $UNL; } sub readpass { my $me = lc(shift); my ($I, $UNI); return 0 unless ($me); unless (open($I, $ENV{HOME}.path.'auth')) { warn "Consider putting ' ' into ~/.psyc/auth\n..."; return 0; } while(<$I>) { ($UNI, $pass) = /^(psyc:\S+)\s+(\S+)$/; if (lc($UNI) eq $me) { close($I); return $pass; } } close $I; return 0; } sub location () { $UNL || readUNL; } # was: UNL sub UNI () { $UNI || readUNI; } sub pass { $pass || readpass($_[0]||$UNI); } sub nick () { return $nick if $nick; return $nick if $nick = $ENV{PSYCNICK} || $ENV{NICK}; if (UNI) { my ($user, $host, $port, $type, $object) = parse_uniform(UNI); return $nick = $user if $user; return $nick = $1 if $object =~ m#~(\S+)/?#; } return $nick if $nick = $ENV{IRCNICK}; return $nick if $nick = $ENV{USER} and $nick ne 'root' && $nick ne 'daemon'; return $nick = $ENV{HOST} || 'someone'; } 1;