diff --git a/bin/mozilla/login.pl b/bin/mozilla/login.pl index 8cffe238..ee368509 100644 --- a/bin/mozilla/login.pl +++ b/bin/mozilla/login.pl @@ -15,11 +15,22 @@ use SL::User; use SL::Form; use SL::Locale; +use Storable (); + +sub h { + my ($s) = @_; + $s = '' unless defined $s; + $s =~ s/&/&/g; + $s =~ s/</g; + $s =~ s/>/>/g; + $s =~ s/"/"/g; + $s =~ s/'/'/g; + return $s; +} $form = SL::Form->new; - $locale = SL::Locale->new($slconfig{language}, "login"); # $form->{charset} = $slconfig{charset}; @@ -42,98 +53,176 @@ &login_screen; } - 1; +sub login_env_html { + my ($form, $locale) = @_; -sub login_screen { + my $env = $form->environment; - $form->{stylesheet} = "sql-ledger.css"; - $form->{favicon} = "favicon.ico"; + my %env_label = ( + dev => $locale->text('Development Environment'), + test => $locale->text('Test Environment'), + ); - $form->header; + my $version_label = $locale->text('Version'); - $focus = ($form->{login}) ? "password" : "login"; + if (exists $env_label{$env}) { + return qq{ +
+sub login_screen {
+ $form->{stylesheet} = "blue.css";
+ $form->{favicon} = "favicon.ico";
+ $form->header;
+ $focus = ($form->{login}) ? "user" : "login";
+ my $env_html = login_env_html($form, $locale);
+ print qq|
+
+
+
-
+
@@ -146,76 +235,117 @@ sub login_screen {
sub selectdataset {
my ($login) = @_;
- if (-f "css/sql-ledger.css") {
- $form->{stylesheet} = "sql-ledger.css";
+ if (-f "css/blue.css") {
+ $form->{stylesheet} = "blue.css";
}
if (-f 'favicon.ico') {
$form->{favicon} = "favicon.ico";
}
- delete $self->{sessioncookie};
+ delete $form->{sessioncookie};
$form->header(1);
- print qq|
-
-
-
+ my $env_html = login_env_html($form, $locale);
+ my $login_h = h($form->{login});
-
-
-
-|.$locale->text('Version').qq| $form->{version}- -- - + @@ -227,7 +357,7 @@ sub selectdataset { sub login { - $form->{stylesheet} = "sql-ledger.css"; + $form->{stylesheet} = "blue.css"; $form->{favicon} = "favicon.ico"; $form->error($locale->text('You did not enter a name!')) unless ($form->{login}); @@ -249,8 +379,9 @@ sub login { $form->error($locale->text('Incorrect Username or Password!')); } } else { - if ($form->{login} !~ /\@/) { - $form->{login} .= "\@$dbname"; + if ($form->{login} !~ /\@/ && keys %login == 1) { + my ($only) = keys %login; + $form->{login} = $only if defined $only && $only =~ /\@/; } } } @@ -279,7 +410,18 @@ sub login { $form->info($err[4]); - $form->info("{login}&path=$form->{path}&action=display&main=company_logo&js=$form->{js}&password=$form->{password}>".$locale->text('Continue').""); + my $login_u = $form->escape($form->{login}, 1); + my $path_u = $form->escape($form->{path}, 1); + my $js_u = $form->escape($form->{js}, 1); + my $sess_u = defined $form->{sessioncookie} ? $form->escape($form->{sessioncookie}, 1) : ''; + my $sd_u = defined $form->{small_device} ? $form->escape($form->{small_device}, 1) : ''; + + my $href = "menu.pl?action=display&main=company_logo&login=$login_u&path=$path_u&js=$js_u"; + $href .= "&sessioncookie=$sess_u" if defined $form->{sessioncookie} && length $form->{sessioncookie}; + $href .= "&small_device=$sd_u" if defined $form->{small_device} && length $form->{small_device}; + + my $href_h = h($href); + $form->info(' ' . $locale->text('Continue') . ''); exit; @@ -288,7 +430,7 @@ sub login { if ($errno == 5) { if (-f "$slconfig{userspath}/$user->{dbname}.LCK") { if (-s "$slconfig{userspath}/$user->{dbname}.LCK") { - open my $fh, "$slconfig{userspath}/$user->{dbname}.LCK" ; + open my $fh, '<', "$slconfig{userspath}/$user->{dbname}.LCK" or $form->error("$slconfig{userspath}/$user->{dbname}.LCK : $!"); $msg = <$fh>; close $fh; if ($form->{admin}) { @@ -308,7 +450,18 @@ sub login { } else { # upgrade dataset and log in again - open FH, ">$slconfig{userspath}/$user->{dbname}.LCK" or $form->error($!); + my $login_u = $form->escape($form->{login}, 1); + my $path_u = $form->escape($form->{path}, 1); + my $js_u = $form->escape($form->{js}, 1); + my $sess_u = defined $form->{sessioncookie} ? $form->escape($form->{sessioncookie}, 1) : ''; + my $sd_u = defined $form->{small_device} ? $form->escape($form->{small_device}, 1) : ''; + + my $href = "menu.pl?action=display&main=company_logo&login=$login_u&path=$path_u&js=$js_u"; + $href .= "&sessioncookie=$sess_u" if defined $form->{sessioncookie} && length $form->{sessioncookie}; + $href .= "&small_device=$sd_u" if defined $form->{small_device} && length $form->{small_device}; + + my $href_h = h($href); + $form->info(' ' . $locale->text('Continue') . ''); for (qw(dbname dbhost dbport dbdriver dbconnect dbuser dbpasswd)) { $form->{$_} = $user->{$_} } @@ -321,7 +474,25 @@ sub login { } - $form->info(" {login}&path=$form->{path}&action=display&main=company_logo&js=$form->{js}&password=$form->{password}>".$locale->text('Continue').""); + # Do NOT put password in query string. Hand off via POST. + my $login_h = h($form->{login}); + my $path_h = h($form->{path}); + my $js_h = h($form->{js}); + my $pwd_h = h($form->{password}); + + my $post = qq| + + - -- -
+
+
+
+
+|;
+ exit;
}
@@ -538,19 +806,13 @@ sub totp_screen {
SL::TOTP::add_secret($user, $slconfig{memberfile}, $slconfig{userspath});
$qrcode = qq|
-
+
+
+
+ |.$locale->text('Scan the following code with your Authenticator App:').qq| |
- |
+ |
-
+ |.$locale->text('Scan the following code with your Authenticator App:').qq|
+
|. SL::QRCode::plot_svg(SL::TOTP::url($user), scale => 4) . qq|
- $user->{totp_secret} |
- | $user->{totp_secret}
+ |;
}
$form->{stylesheet} = $user->{stylesheet};
@@ -559,50 +821,75 @@ sub totp_screen {
$form->header;
- print qq|
-
-
-
-- -- -
| |||||||||