if ($config{sslcookie}) {
print $session->header(-charset => 'utf-8',
-cookie => $session->cookie(-httponly => 1, -secure => 1));
- } else {
+ }
+ else {
print $session->header(-charset => 'utf-8',
-cookie => $session->cookie(-httponly => 1));
}
sub redirect ($$) {
my $q=shift;
- my $url=shift;
+ eval q{use URI};
+ my $url=URI->new(shift);
if (! $config{w3mmode}) {
print $q->redirect($url);
}
}
sub decode_cgi_utf8 ($) {
- # decode_form_utf8 method is needed for 5.10
+ # decode_form_utf8 method is needed for 5.01
if ($] < 5.01) {
my $cgi = shift;
foreach my $f ($cgi->param) {
if ($] >= 5.01) {
my $form = shift;
foreach my $f ($form->field) {
+ my @value=map { decode_utf8($_) } $form->field($f);
$form->field(name => $f,
- value => decode_utf8($form->field($f)),
+ value => \@value,
force => 1,
);
}
template => {type => 'div'},
stylesheet => baseurl()."style.css",
);
- my $buttons=["Login"];
-
+ # MITLOGIN: These should be restored when logins are allowed again.
+ #my $buttons=["Login"];
+ my $buttons=[];
+
if ($q->param("do") ne "signin" && !$form->submitted) {
- $form->text(gettext("You need to log in first."));
+ #$form->text(gettext("You need to log in first."));
+ $form->text(
+ "You must have an MIT personal certificate to edit");
}
$form->field(name => "do", type => "hidden", value => "signin",
force => 1);
exit;
}
else {
- error(gettext("login failed, perhaps you need to turn on cookies?"));
+ if ($config{sslcookie} && ! $q->https()) {
+ error(gettext("probable misconfiguration: sslcookie is set, but you are attempting to login via http, not https"));
+ }
+ else {
+ error(gettext("login failed, perhaps you need to turn on cookies?"));
+ }
}
}
force => 1);
$form->field(name => "sid", type => "hidden", value => $session->id,
force => 1);
- $form->field(name => "email", size => 50, fieldset => "preferences");
+ #$form->field(name => "email", size => 50, fieldset => "preferences");
+ $form->field(name => "realname", size => 50, fieldset => "preferences");
my $user_name=$session->param("name");
if (! $form->submitted) {
- $form->field(name => "email", force => 1,
- value => userinfo_get($user_name, "email"));
+ #$form->field(name => "email", force => 1,
+ #value => userinfo_get($user_name, "email"));
+ $form->field(name => "realname", force => 1,
+ value => userinfo_get($user_name, "realname"));
}
if ($form->submitted eq 'Logout') {
userinfo_set($user_name, 'email', $form->field('email')) ||
error("failed to set email");
}
-
+ if (defined $form->field('realname')) {
+ userinfo_set($user_name, 'realname', $form->field('realname')) ||
+ error("failed to set realname");
+ }
$form->text(gettext("Preferences saved."));
}
showform($form, $buttons, $session, $q);
}
+sub cgi_custom_failure ($$$) {
+ my $q=shift;
+ my $httpstatus=shift;
+ my $message=shift;
+
+ print $q->header(
+ -status => $httpstatus,
+ -charset => 'utf-8',
+ );
+ print $message;
+
+ # Internet Explod^Hrer won't show custom 404 responses
+ # unless they're >= 512 bytes
+ print ' ' x 512;
+
+ exit;
+}
+
sub check_banned ($$) {
my $q=shift;
my $session=shift;
+ my $banned=0;
my $name=$session->param("name");
- if (defined $name) {
- if (grep { $name eq $_ } @{$config{banned_users}}) {
- print $q->header(-status => "403 Forbidden");
- $session->delete();
- print gettext("You are banned.");
- cgi_savesession($session);
- exit;
+ if (defined $name &&
+ grep { $name eq $_ } @{$config{banned_users}}) {
+ $banned=1;
+ }
+
+ foreach my $b (@{$config{banned_users}}) {
+ if (pagespec_match("", $b,
+ ip => $ENV{REMOTE_ADDR},
+ name => defined $name ? $name : "",
+ )) {
+ $banned=1;
+ last;
}
}
+
+ if ($banned) {
+ $session->delete();
+ cgi_savesession($session);
+ cgi_custom_failure(
+ $q, "403 Forbidden",
+ gettext("You are banned."));
+ }
}
sub cgi_getsession ($) {
error("\"do\" parameter missing");
}
}
-
+
# Need to lock the wiki before getting a session.
lockwiki();
loadindex();