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 param_get => sub { $s->_c()->param($s->{S}{param_name}) },
33 cookie_get => sub { $s->_c()->cookie($s->{S}{cookie_name}) : '' },
38 while (($k,$v,@_) = @_) {
39 die "unknown setting $k" unless exists $s->{S}{$k};
56 $s->{S}{assocdb_dsn} ||= "dbi:SQLite:dbname=$s->{S}{assocdb_path}";
59 $dbh = DBI->open($s->{S}{assocdb_dsn}, $s->{S}{assocdb_user},
60 $s->{S}{assocdb_password}, {
61 AutoCommit => 0, RaiseError => 1,
63 die "${assocdb_dsn} $! ?" unless $dbh;
69 $dbh->do("CREATE TABLE $s->{S}{assocdb_table} (".
70 " associd VARCHAR PRIMARY KEY,".
77 sub record_login ($$) {
78 my ($s,$nusername) = @_;
79 my $rsp = $s->{S}{random_source};
80 my $rsf = new IO::File $rsp, '<' or die "$rsp $!";
81 my $bytes = ($s->{S}{associdlen} + 7) >> 3;
84 read($rsf,$nassocbin,$bytes) == $bytes or die "$rsp $!";
86 my $nassoc = unpack "H*", $nassocbin;
87 my $dbh = $s->_dbopen();
88 $dbh->do("INSERT INTO $s->{S}{assocdb_table}".
89 " (associd, username) VALUES (?,?)", {},
92 $username = $nusername;
97 my $passocid = $s->{S}{param_get}();
98 my $cassocid = $s->{S}{cookie_get}();