package Ernad::Login; use strict; use warnings; use Carp qw(confess); use Data::Dumper; # use Ernad::Common; use Krichel::Password; ## show login pape sub show { my $message=shift // ''; my $e=$main::e or confess "no erimp"; my $ernad_doc=$e->{'x'}->get_ernad_doc; if($message) { $ernad_doc->documentElement->setAttribute('message',$message); } my $html_doc=$e->{'t'}->transform($ernad_doc,'login_screen'); my $out=$html_doc->toString; return $out; } ## tries to login, returns 1 on success, 0 otherwise sub process { my $repcode=shift; my $proposed_password=shift; ## Roger Fouquet's problem 2019-08-21 $repcode=~s|^\s+||; $repcode=~s|\s+$||; my $e=$main::e // confess "Where is my erimp?"; my $r=$e->{'r'}; if(not $e->{'r'}) { confess "I should have a repcon object here."; } my $now=time; my $loaded; if($e->{'report'}->{$repcode}) { if($now - $e->{'load_time'}->{$repcode} > 60) { my $load=$r->reload($repcode); if(not ref($load)) { ## failure return error return $load; } } } else { my $load=$r->load($repcode); if(not ref($load)) { ## failure return error return $load; } } my $password=$e->{'report'}->{$repcode}->{'password'}; my $universal_password=$e->{'conf'}->{'universal_password'}; if(not $password) { return 'no_password'; } ## case of correct password if($password eq $proposed_password) { return 0; } ## case of correct encoded password if(&Krichel::Password::make($proposed_password) eq $password) { return 0; } ## case of universal password ## the universal password is not required if(not $universal_password) { return 'password_incorrect'; } ## but it is always encrypted if(&Krichel::Password::make($proposed_password) eq $universal_password) { return 0; } return 'password_incorrect'; } 1;