admin) { access::forbidden(); } $reauthenticate = Session::instance()->get("reauthenticate", array()); if (empty($reauthenticate["in_dialog"])) { self::_show_form(self::_form()); } else { print json_encode(array("form" => (string) self::_form())); } } public function auth() { if (!identity::active_user()->admin) { access::forbidden(); } access::verify_csrf(); $reauthenticate = Session::instance()->get("reauthenticate", array()); $form = self::_form(); $valid = $form->validate(); $user = identity::active_user(); if ($valid) { module::event("user_auth", $user); Session::instance()->delete("reauthenticate"); if (empty($reauthenticate["in_dialog"])) { message::success(t("Successfully re-authenticated!")); } url::redirect($reauthenticate["continue_url"]); } else { $name = $user->name; log::warning("user", t("Failed re-authentication for %name", array("name" => $name))); module::event("user_auth_failed", $name); if (empty($reauthenticate["in_dialog"])) { self::_show_form($form); } else { print json_encode(array("form" => (string) $form)); } } } private static function _show_form($form) { $view = new Theme_View("page.html", "other", "reauthenticate"); $view->page_title = t("Re-authenticate"); $view->content = new View("reauthenticate.html"); $view->content->form = $form; $view->content->user_name = identity::active_user()->name; print $view; } private static function _form() { $form = new Forge("reauthenticate/auth", "", "post", array("id" => "g-reauthenticate-form")); $form->set_attr('class', "g-narrow"); $form->hidden("continue_url")->value(Session::instance()->get("continue_url", "admin")); $group = $form->group("reauthenticate")->label(t("Re-authenticate")); $group->password("password")->label(t("Password"))->id("g-password")->class(null) ->callback("auth::validate_too_many_failed_auth_attempts") ->callback("Reauthenticate_Controller::valid_password") ->error_messages("invalid_password", t("Incorrect password")) ->error_messages( "too_many_failed_auth_attempts", t("Too many incorrect passwords. Try again later")); $group->submit("")->value(t("Submit")); return $form; } static function valid_password($password_input) { if (!identity::is_correct_password(identity::active_user(), $password_input->value)) { $password_input->add_error("invalid_password", 1); } } }