# Time-stamp: <2009-04-21 17:16:22 phm>

package A2E::I2P::SkribAuth;
use base A2E::Daba;
use strict;

sub skrib_auth_defvars {
    my $m = shift;
    $m->dpuc('skrib_auth_defvars', @_);
    $m->{konfig}->define('authdata_stag_fmt=s', { DEFAULT => qq{\# <authdata group="%s" level="%d" time="%s">} });
    $m->{konfig}->define('authdata_etag=s', { DEFAULT => qq{\# </authdata>} });
    $m->{konfig}->define('asolvl_select_uid_pass=s', { DEFAULT => qq{select uid, pass from asoc natural join pass natural left outer join asolack where acklvl >= %d or editp} });
    $m->{konfig}->define('projlvl_select_uid_pass=s', { DEFAULT => qq{select prmuid, pass from projprm natural join proj join pass on ( pass.uid = projprm.prmuid ) where proj = '%s' and prmlvl >= %d} });
    $m->{konfig}->define('uid_pass_fmt=s', { DEFAULT => '%s:%s' });
    $m->konfayl('i2p_skrib_auth.konf');
    $m->konfayl('i2p_skrib_auth.konf');
    $m->dpop('skrib_auth_defvars', 1);
    return 1;
}

sub defvars {
    my $m = shift;
    $m->SUPER::defvars;
    $m->skrib_auth_defvars;
    return 1;
};

sub skrib_auth_lastkonfig {
    my $m = shift;
    $m->dpuc('skrib_auth_lastkonfig', @_);
    $m->{konfig}->daba('ffii');
    $m->dpop('skrib_auth_lastkonfig', 1);
    return 1;
};

sub lastkonfig {
    my $m = shift;
    $m->SUPER::lastkonfig;
    $m->skrib_auth_lastkonfig;
    return 1;
}

sub skrib_auth {
    my $m = shift;
    $m->dpuc('skrib_auth', @_);
    my $fo = shift || '';
    my $grp = shift || '';
    my $lvl = shift || 0;
    my $select = shift || '';
    $m->open_fayl($fo, 'o', 'w');
    my $datum = $m->timestamp('%Y-%m-%d %H:%M');
    $m->print_tu_fayl('o', sprintf($m->{konfig}->authdata_stag_fmt, $grp, $lvl, $datum) . "\n");
    my @records = $m->get_records($select) or die 'failed to fetch records';
    my $uid = '';my $pass = '';my $fmt = $m->{konfig}->uid_pass_fmt;
    for (@records) { ($uid, $pass) = @$_;next unless length $pass;my $str = sprintf $fmt, $uid, $pass;$m->print_tu_fayl('o', $str . "\n") };
    $m->print_tu_fayl('o', $m->{konfig}->authdata_etag);
    $m->kloz_fayl('o');
    $m->dpop('skrib_auth', 1);return 1;
};

sub skrib_asoc_auth {
    my $m = shift;
    $m->dpuc('skrib_asoc_auth', @_);
    my $fo = shift;
    my ($lvl) = $fo =~ m(.*(\d)\Z);
    die sprintf 'cant parse filename %s', $fo unless length $lvl;
    my $select = sprintf $m->{konfig}->asolvl_select_uid_pass, $lvl;
    my $ok = $m->skrib_auth($fo, 'ffii', $lvl, $select);
    $m->dpop('skrib_asoc_auth', $ok);return $ok;
};

sub skrib_proj_auth {
    my $m = shift;
    $m->dpuc('skrib_proj_auth', @_);
    my $fo = shift;
    my ($proj, $lvl) = $fo =~ m(\Aauth\_proj\_(.+)\_hlplvl(\d)\Z);
    die sprintf 'cant parse filename %s', $fo unless length $lvl;
    my $select = sprintf $m->{konfig}->projlvl_select_uid_pass, $proj, $lvl;
    my $ok = $m->skrib_auth($fo, $proj, $lvl, $select);
    $m->dpop('skrib_proj_auth', $ok);return $ok;
};


return 1;
 
# Local Variables:
# coding: utf-8
# mode: perl
# srcfile: /i2p/perl/SkribAuth.pm
# url: https://a2e.de/i2p/perl/SkribAuth.pm
# End:
