From ee71f231102022d0a4c3301a7a52de1908467f51 Mon Sep 17 00:00:00 2001 From: Artem Konenko <yadummer@gmail.com> Date: Tue, 11 Oct 2016 22:19:46 +0300 Subject: [PATCH] #138 Add authorisation form for OpenID and draft of OpenID handling --- media/js/sign.js | 8 +++ ~dev_rating/application/bootstrap.php | 4 +- .../classes/Controller/Handler/Sign.php | 56 +++++++++++++++++++ ~dev_rating/application/views/sign/in.twig | 3 +- .../application/views/sign/inOpenID.twig | 12 ++++ 5 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 ~dev_rating/application/views/sign/inOpenID.twig diff --git a/media/js/sign.js b/media/js/sign.js index 305e99e94..348fa6882 100644 --- a/media/js/sign.js +++ b/media/js/sign.js @@ -3,6 +3,8 @@ $(function () { var $login = $('#login'); var $pass = $('#password'); var $signInButton = $('#signin_b'); + var $loginOpenID = $('#loginopenid'); + var $signInOpenIDButton = $('#signopenidin_b'); $signInButton.click(function () { var login = $login.val(); @@ -16,6 +18,12 @@ $(function () { }) }); + $signInOpenIDButton.click(function () { + var login = $loginOpenID.val(); + + window.location = "http://grade.local/~dev_rating/handler/sign/openidlogin?loginopenid=" + login; + }); + // todo: animation Auth.onAllow = () => $signInButton.removeAttr('disabled'); Auth.onDeprecate = () => $signInButton.attr('disabled', 'disabled'); diff --git a/~dev_rating/application/bootstrap.php b/~dev_rating/application/bootstrap.php index cf7c9f215..1325019a9 100644 --- a/~dev_rating/application/bootstrap.php +++ b/~dev_rating/application/bootstrap.php @@ -147,13 +147,13 @@ require APPPATH . 'routes/dean_office.php'; Route::set('main', '')->defaults(['controller' => 'index']); // --------------- Authorization ---------------- -Route::set('sign', 'sign(/<type>)', ['type' => '(up|in)']) +Route::set('sign', 'sign(/<type>)', ['type' => '(up|in|inOpenID)']) ->defaults([ 'controller' => 'Authentication', 'action' => 'sign', ]); -Route::set('sign:secret_entrance', 'ssign(/<type>)', ['type' => '(up|in)']) +Route::set('sign:secret_entrance', 'ssign(/<type>)', ['type' => '(up|in|inOpenID)']) ->defaults([ 'controller' => 'Authentication', 'action' => 'sign_anyway', diff --git a/~dev_rating/application/classes/Controller/Handler/Sign.php b/~dev_rating/application/classes/Controller/Handler/Sign.php index 76d8054ae..9a6e9dd39 100644 --- a/~dev_rating/application/classes/Controller/Handler/Sign.php +++ b/~dev_rating/application/classes/Controller/Handler/Sign.php @@ -64,4 +64,60 @@ class Controller_Handler_Sign extends Controller_Handler $this->response->body(json_encode($res)); } + + public function action_openidlogin() + { + $openid = new OpenID; + $openid->SetIdentity("https://openid.sfedu.ru/server.php/idpage?user=" . $_GET["loginopenid"]); + $openid->SetTrustRoot('http://' . $_SERVER["HTTP_HOST"]); + $openid->SetOptionalFields(['email', 'nickname', 'r61globalkey', 'staff', 'student']); + if ($openid->GetOpenIDServer()) { + $openid->SetApprovedURL('http://' . $_SERVER["HTTP_HOST"] . '/~dev_rating/handler/sign/openidfinish'); + $openid->Redirect(); + } else { + $error = $openid->GetError(); + echo "ERROR CODE: " . $error['code'] . "<br>"; + echo "ERROR DESCRIPTION: " . $error['description'] . "<br>"; + } + } + + public function action_openidfinish() + { + if ($_GET["openid_sreg_student"] !== '1') { + $this->fail('К сожалению, личный кабинет сотрудника пока что находится в разработке. Следите за новостями!'); + } + + if ($_GET['openid_mode'] == 'id_res') { + $openid = new OpenID; + $openid->SetIdentity($_GET['openid_identity']); + $openid_validation_result = $openid->ValidateWithServer(); + + if ($openid_validation_result == true) { + $this->openid_signIn(); + } else if ($openid->IsError() == true) { + $error = $openid->GetError(); + echo 'Ошибка!'; + echo "[" . $error['code'] . "]: " . $error['description']; + } else { + echo 'Ошибка!'; + echo "При авторизации что-то пошло не так. Попробуете снова?"; + } + } else if ($_GET['openid_mode'] == 'cancel') { + echo 'Какая досада!'; + echo "Вы досрочно прекратили процесс авторизации. Надеемся, что у Вас всё хорошо."; + } + } + + private function openid_signIn() + { + $flags = [ + 'isStudent' => $_GET["openid_sreg_student"], + 'isStaff' => $_GET["openid_sreg_staff"] + ]; + + echo 'Добро пожаловать!'; +// $this->redirect_url = Route::url('evaluation:student'); +// +// Account::signIn($_GET["openid_sig"], $_GET["openid_sreg_r61globalkey"], $flags); + } } diff --git a/~dev_rating/application/views/sign/in.twig b/~dev_rating/application/views/sign/in.twig index 9b438ce7e..f7114f9f8 100644 --- a/~dev_rating/application/views/sign/in.twig +++ b/~dev_rating/application/views/sign/in.twig @@ -7,7 +7,8 @@ {{ sign.input('password', 'password', '', 'Пароль') }} </div> {{ sign.input('signin_b', 'button', 'Войти') }} + <div class='footer'> - {{ HTML.anchor('sign/up', 'Активировать аккаунт')|raw }} | {{ HTML.anchor('remind', 'Забыли пароль?')|raw }} + {{ HTML.anchor('sign/inOpenID', 'Вход через OpenID')|raw }} | {{ HTML.anchor('sign/up', 'Активировать аккаунт')|raw }} | {{ HTML.anchor('remind', 'Забыли пароль?')|raw }} </div> {% endblock %} diff --git a/~dev_rating/application/views/sign/inOpenID.twig b/~dev_rating/application/views/sign/inOpenID.twig new file mode 100644 index 000000000..36a99bcd7 --- /dev/null +++ b/~dev_rating/application/views/sign/inOpenID.twig @@ -0,0 +1,12 @@ +{% extends "sign" %} + +{% block title %}Авторизация{% endblock %} +{% block forms %} + <div id='inputs'> + {{ sign.input('loginopenid', 'text', '', 'Логин OpenID', true) }} + </div> + {{ sign.input('signopenidin_b', 'button', 'Войти c OpenID') }} + <div class='footer'> + {{ HTML.anchor('sign/in', 'Вход через локальную учетную запись')|raw }} | {{ HTML.anchor('sign/up', 'Активировать аккаунт')|raw }} | {{ HTML.anchor('remind', 'Забыли пароль?')|raw }} + </div> +{% endblock %} -- GitLab