#
# Patch for #1518: guest management login doesn't work
# http://packetfence.org/bugs/view.php?id=1518
#
# Prepared by Olivier Bilodeau <obilodeau@inverse.ca> on 2012-08-16
# Copyright (C) 2012 Inverse inc.
#
diff -ru a/html/admin/guest-management.cgi b/html/admin/guest-management.cgi
--- a/html/admin/guest-management.cgi	2012-08-16 11:12:46.000000000 -0400
+++ b/html/admin/guest-management.cgi	2012-08-16 11:57:28.000000000 -0400
@@ -75,7 +75,7 @@
           print $cgi->redirect("/login.php?logout=true");
         }
         else {
-          pf::web::guest::generate_custom_login_page($cgi, $session, undef, "guest/mgmt_login.html");
+          pf::web::guest::generate_admin_login_page($cgi, $session, undef, "guest/mgmt_login.html");
         }
 
     }
@@ -193,12 +193,12 @@
 else {
     # User is not logged and didn't provide username or password: show login form
     if (!($cgi->param("username") && $cgi->param("password"))) {
-        pf::web::guest::generate_custom_login_page($cgi, $session, undef, "guest/mgmt_login.html");
+        pf::web::guest::generate_admin_login_page($cgi, $session, undef, "guest/mgmt_login.html");
         exit(0);
     }
 
     # User provided username and password: authenticate
-    my ($auth_return, $authenticator) = pf::web::web_user_authenticate($cgi, $session, "guest_managers");
+    my ($auth_return, $authenticator) = pf::web::guest::manager_authenticate($cgi, $session, "guest_managers");
     if ($auth_return != 1) {
         $logger->info("authentication failed for user ".$cgi->param("username"));
         my $error;
@@ -207,7 +207,7 @@
         } else {
             $error = $authenticator->getLastError();
         }
-        pf::web::guest::generate_custom_login_page($cgi, $session, $error, "guest/mgmt_login.html");
+        pf::web::guest::generate_admin_login_page($cgi, $session, $error, "guest/mgmt_login.html");
         exit(0);
     }
 
diff -ru a/lib/pf/web/guest.pm b/lib/pf/web/guest.pm
--- a/lib/pf/web/guest.pm	2012-08-16 11:12:46.000000000 -0400
+++ b/lib/pf/web/guest.pm	2012-08-16 11:57:07.000000000 -0400
@@ -575,6 +575,67 @@
     exit;
 }
 
+=item generate_admin_login_page
+
+Sub to present a admin login form.
+
+=cut
+# Note: quick fix for #1518. Long term goal is to have that functionality in the Catalyst-based admin
+sub generate_admin_login_page {
+    my ( $cgi, $session, $err, $html_template ) = @_;
+    my $logger = Log::Log4perl::get_logger('pf::web::guest');
+
+    setlocale( LC_MESSAGES, pf::web::web_get_locale($cgi, $session) );
+    bindtextdomain( "packetfence", "$conf_dir/locale" );
+    textdomain("packetfence");
+
+    my $cookie = $cgi->cookie( CGISESSID => $session->id );
+    print $cgi->header( -cookie => $cookie );
+    my $ip   = $cgi->remote_addr;
+    my $vars = {
+        logo => $Config{'general'}{'logo'},
+        i18n => \&i18n
+    };
+
+    $vars->{'txt_auth_error'} = i18n($err) if (defined($err));
+
+    # return login
+    $vars->{'username'} = encode_entities($cgi->param("username"));
+
+    my $template = Template->new({
+        INCLUDE_PATH => ["$install_dir/html/admin/templates", $CAPTIVE_PORTAL{'TEMPLATE_DIR'}]
+    });
+    $template->process($html_template, $vars) || $logger->error($template->error());
+    exit;
+}
+
+=item manager_authenticate
+
+    return (1, pf::web::auth subclass) for successfull authentication
+    return (0, undef) for inability to check credentials
+    return (0, pf::web::auth subclass) otherwise (pf::web::auth can give detailed error)
+
+=cut
+# Note: quick fix for #1518. Long term goal is to have that functionality in the Catalyst-based admin
+sub manager_authenticate {
+    my ( $cgi, $session, $auth_module ) = @_;
+    my $logger = Log::Log4perl::get_logger(__PACKAGE__);
+    $logger->trace("authentication attempt");
+
+    my $authenticator = pf::web::auth::instantiate($auth_module);
+    return (0, undef) if (!defined($authenticator));
+
+    # validate login and password
+    my $return = $authenticator->authenticate( $cgi->param("username"), $cgi->param("password") );
+
+    if (defined($return) && $return == 1) {
+        #save login into session
+        $session->param( "username", $cgi->param("username") );
+        $session->param( "authType", $auth_module );
+    }
+    return ($return, $authenticator);
+}
+
 =item preregister
 
 =cut
Only in a/lib/pf: .web.pm.swp
