5 our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
10 %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
12 @EXPORT_OK = qw(setup);
22 assocdb_path => 'cah-assocs.db';
25 assocdb_password => '',
26 assocdb_table => 'assocs',
27 random_source => '/dev/urandom',
28 associdlen => 128, # bits
29 param_name => 'cah_associd',
30 cookie_name => 'cah_associd', # make undef to disable cookie
32 get_param => sub { $s->_c()->param($s->{S}{param_name}) },
33 get_cookie => sub { $s->{S}{cookie_name}
34 ? $s->_c()->cookie($s->{S}{cookie_name})
36 get_method => sub { $s->_c()->request_method() },
41 while (($k,$v,@_) = @_) {
42 die "unknown setting $k" unless exists $s->{S}{$k};
59 $s->{S}{assocdb_dsn} ||= "dbi:SQLite:dbname=$s->{S}{assocdb_path}";
62 $dbh = DBI->open($s->{S}{assocdb_dsn}, $s->{S}{assocdb_user},
63 $s->{S}{assocdb_password}, {
64 AutoCommit => 0, RaiseError => 1,
66 die "${assocdb_dsn} $! ?" unless $dbh;
72 $dbh->do("CREATE TABLE $s->{S}{assocdb_table} (".
73 " associd VARCHAR PRIMARY KEY,".
80 sub record_login ($$) {
81 my ($s,$nusername) = @_;
82 my $rsp = $s->{S}{random_source};
83 my $rsf = new IO::File $rsp, '<' or die "$rsp $!";
84 my $bytes = ($s->{S}{associdlen} + 7) >> 3;
87 read($rsf,$nassocbin,$bytes) == $bytes or die "$rsp $!";
89 my $nassoc = unpack "H*", $nassocbin;
90 my $dbh = $s->_dbopen();
91 $dbh->do("INSERT INTO $s->{S}{assocdb_table}".
92 " (associd, username) VALUES (?,?)", {},
95 $username = $nusername;
100 my $qassocid = $s->{S}{param_get}();
101 if (!defined $qassocid) {
102 $qassocid = $s->{S}{cookie_get}();
103 return 0 unless defined $qassocid;
104 return 0 unless $s->{S}{get_method}() eq 'GET';