diff --git a/config/app.config.php b/config/app.config.php index 7ead71dde667aabb35f2e83eceeb0db0bebd361d..7f82d2bbd90619be48ede6becdd2d8d6b6e730f9 100644 --- a/config/app.config.php +++ b/config/app.config.php @@ -28,7 +28,7 @@ return [ 'module/open_data/bootstrap.php', 'module/university_form/bootstrap.php', 'module/teacher_form/bootstrap.php', - + 'module/enable_db_login/bootstrap.php', ], 'cache_config' => 'data/cache/config/settings.php', ]; diff --git a/config/settings/acl.global.php b/config/settings/acl.global.php index feacfbe8d5c2e96d962638633cc0b6e80a1adc28..2381d47827b67d8a580db4427b10a2e2171bd497 100644 --- a/config/settings/acl.global.php +++ b/config/settings/acl.global.php @@ -47,7 +47,7 @@ return [ ['/teacher-form', ['guest'], ['get', 'post']], ['/teacher-form/submit-success',['guest'], ['get','post']], ['/teacher-form/mm',['guest'], ['get']], - + ['/admin', ['admin'], ['get']], ], ], ], diff --git a/config/settings/enable_db_login.global.php b/config/settings/enable_db_login.global.php new file mode 100644 index 0000000000000000000000000000000000000000..da9a9e06fc9493ba0dbc3352411e577c0e57c134 --- /dev/null +++ b/config/settings/enable_db_login.global.php @@ -0,0 +1,27 @@ +<?php + +/** + * gredu_labs + * + * @link https://github.com/eellak/gredu_labs for the canonical source repository + * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) + * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html + */ +return [ + 'enabledblogin' => [ + 'enable_routes' => [ + 'enabledblogin' + ], + 'enable_patterns' => [ + '/enabledblogin' + ], + 'disable_routes' => [ + 'disabledblogin', + 'user.logout' + ], + 'disable_patterns' => [ + '/disabledblogin', + '/user/logout' + ], + ], +]; diff --git a/module/enable_db_login/README.md b/module/enable_db_login/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d7ba4f611548dfc23e0317aca382c06b05905f43 --- /dev/null +++ b/module/enable_db_login/README.md @@ -0,0 +1,51 @@ +# ΞΞ½Ξ΅ΟΞ³ΞΏΟΞΏΞ―Ξ·ΟΞ· ΟΟνδΡΟΞ·Ο ΞΌΞΟΟ Ξ²Ξ¬ΟΞ·Ο Ξ΄Ξ΅Ξ΄ΞΏΞΌΞΞ½ΟΞ½ + +΀ο ΟΟ Ξ³ΞΊΞ΅ΞΊΟΞΉΞΌΞΞ½ΞΏ module ΡνΡΟΞ³ΞΏΟοιΡί ΟΞ· ΟΟΟΞΌΞ± ΟΟνδΡΟΞ·Ο ΞΌΞΟΟ Ξ²Ξ¬ΟΞ· δΡδομΞΞ½ΟΞ½ +Ξ¬ΟΟΞ΅ΟΞ± Ξ±ΟΟ ΟΞ· ΟΟΞΈΞΌΞΉΟΞ· Container['settings']['sso']['enable_database_login']. +Ξ§ΟΡιά΢ΡΟΞ±ΞΉ Ξ½Ξ± ΡνΡΟΞ³ΞΏΟοιηθΡί ΞΌΟΞ½ΞΏ ΟΟΞ·Ξ½ ΟΞ΅ΟΞ―ΟΟΟΟΞ· ΟΞΏΟ ΞΟΡι ΡνΡΟΞ³ΞΏΟοιηθΡί ΟΞΏ +module sch_sso ΞΊΞ±ΞΉ Ξ±ΟΞ±ΞΉΟΡίΟΞ±ΞΉ ΟΟνδΡΟΞ· ΟΞΏΟΞΉΞΊΞΏΟ ΟΟΞ�ΟΟΞ· Ξ³ΞΉΞ± ΟΟ Ξ³ΞΊΞ΅ΞΊΟΞΉΞΌΞΞ½Ξ΅Ο +λΡιΟΞΏΟ ΟΞ³Ξ―Ξ΅Ο. + +## Ξ‘Ο ΞΈΞΌΞ―ΟΞ΅ΞΉΟ + +΀ο Ξ±ΟΟΡίο `enable_db_login.{global,local}.php ΟΟΞ·ΟΞΉΞΌΞΏΟοιΡίΟΞ±ΞΉ Ξ³ΞΉΞ± ΟΞ·Ξ½ +ΟΞ±ΟΞ±ΞΌΞ΅ΟΟΞΏΟΞΏΞ―Ξ·ΟΞ·. ΞΞΉ ΟΟΞΏΞ΅ΟιλΡγμΞΞ½Ξ΅Ο ΟΟ ΞΈΞΌΞ―ΟΞ΅ΞΉΟ Ξ΅Ξ―Ξ½Ξ±ΞΉ ΞΏΞΉ ΟΞ±ΟΞ±ΞΊΞ¬ΟΟ. +``` + 'enabledblogin' => [ + 'enable_routes' => [ + 'enabledblogin' + ], + 'enable_patterns' => [ + '/enabledblogin' + ], + 'disable_routes' => [ + 'disabledblogin', + 'user.logout' + ], + 'disable_patterns' => [ + '/disabledblogin', + '/user/logout' + ], + ], +``` + +ΞΞΉ ΟΟ ΞΈΞΌΞ―ΟΞ΅ΞΉΟ ΞΟΞΏΟ Ξ½ ΟΟ Ξ΅ΞΎΞ�Ο: + +- enable_routes: ΞΏΞ½ΟΞΌΞ±ΟΞ± routes ΟΞΏΟ Ξ΅Ξ½Ξ΅ΟΞ³ΞΏΟΞΏΞΉΞΏΟΞ½ ΟΞ· ΟΟνδΡΟΞ· ΞΌΞΟΟ ΞΞ +- enable_patterns: url paths ΟΞΏΟ Ξ΅Ξ½Ξ΅ΟΞ³ΞΏΟΞΏΞΉΞΏΟΞ½ ΟΞ· ΟΟνδΡΟΞ· ΞΌΞΟΟ ΞΞ +- disable_routes: ΞΏΞ½ΟΞΌΞ±ΟΞ± routes ΟΞΏΟ Ξ±ΟΡνΡΟΞ³ΞΏΟΞΏΞΉΞΏΟΞ½ ΟΞ· ΟΟνδΡΟΞ· ΞΌΞΟΟ ΞΞ +- disable_patterns: url paths ΟΞΏΟ Ξ±ΟΡνΡΟΞ³ΞΏΟΞΏΞΉΞΏΟΞ½ ΟΞ· ΟΟνδΡΟΞ· ΞΌΞΟΟ ΞΞ + +_Ξ ΟΞΏΟΞ΅ΟΞ±ΞΉΟΟΞ·ΟΞ± ΞΟΡι Ξ· Ξ±ΟΡνΡΟΞ³ΞΏΟΞΏΞ―Ξ·ΟΞ·._ + +##Routes + +΀ο module δηλΟνΡι Ξ΄ΟΞΏ routes (ΟΟΞ± Ξ±Ξ½ΟΞ―ΟΟΞΏΞΉΟΞ± paths) ΟΟΟΞ΅ Ξ½Ξ± ΟΞ±ΟΞΟΞ΅ΟΞ±ΞΉ ΞΞ½Ξ± +ΟΞ±ΟάδΡιγμα ΟΟΞ�ΟΞ·Ο. + +- enabledblogin (/enabledblogin) ΟΞΏΟ Ξ΅Ξ½Ξ΅ΟΞ³ΞΏΟοιΡί ΟΞ· ΟΟνδΡΟΞ· ΞΌΞΟΟ ΞΞ +- disabledblogin (/disabledblogin) ΟΞΏΟ Ξ±ΟΡνΡΟΞ³ΞΏΟοιΡί ΟΞ· ΟΟνδΡΟΞ· ΞΌΞΟΟ ΞΞ + +*ΞΡν* Ρίναι Ξ±ΟΞ±ΟΞ±Ξ―ΟΞ·ΟΞΏ Ξ½Ξ± ΟΟΞΏΟΟΡθοΟΞ½ ΟΞ± routes ΟΟΞΏ `acl.{global,local}.php` +(acl.guards.routes). + diff --git a/module/enable_db_login/bootstrap.php b/module/enable_db_login/bootstrap.php new file mode 100644 index 0000000000000000000000000000000000000000..00c297696e6a73de98b0a94a3f755817bfd80563 --- /dev/null +++ b/module/enable_db_login/bootstrap.php @@ -0,0 +1,53 @@ +<?php + +use Slim\App; +use Slim\Container; +use Slim\Http\Request; +use Slim\Http\Response; + +/** + * gredu_labs. + * + * @link https://github.com/eellak/gredu_labs for the canonical source repository + * + * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) + * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html + */ +return function (App $app) { + $container = $app->getContainer(); + $events = $container['events']; + + $events('on', 'app.autoload', function ($autoloader) { + $autoloader->addPsr4('GrEduLabs\\EnableDBLogin\\', __DIR__ . '/src/'); + }); + + $events('on', 'app.services', function (Container $container) { + $container[GrEduLabs\EnableDBLogin\Middleware\EnableDBLogin::class] = function ($c) { + return new GrEduLabs\EnableDBLogin\Middleware\EnableDBLogin($c); + }; + + $container[GrEduLabs\EnableDBLogin\Action\Index::class] = function ($c) { + return new GrEduLabs\EnableDBLogin\Action\Index($c); + }; + }); + + $events('on', 'app.bootstrap', function (App $app, Container $c) { + $app->add(GrEduLabs\EnableDBLogin\Middleware\EnableDBLogin::class); + }); + + $events('on', 'app.bootstrap', function (App $app, Container $c) { + if (isset($_SESSION['enableDLogin'])) { + $c['router']->getNamedRoute('user.login')->add(function (Request $req, Response $res, callable $next) use ($c) { + $c['view']['enable_database_login'] = true; + return $next($req, $res); + }); + } + }, -98); // must be in order to set last + + $events('on', 'app.bootstrap', function (App $app, Container $c) { + $app->get('/enabledblogin', GrEduLabs\EnableDBLogin\Action\Index::class) + ->setName('enabledblogin'); + $app->get('/disabledblogin', GrEduLabs\EnableDBLogin\Action\Index::class) + ->setName('disabledblogin'); + }); +}; diff --git a/module/enable_db_login/src/Action/Index.php b/module/enable_db_login/src/Action/Index.php new file mode 100644 index 0000000000000000000000000000000000000000..8f3e73cca93f2e9b12bb9822af1bb419e8172192 --- /dev/null +++ b/module/enable_db_login/src/Action/Index.php @@ -0,0 +1,35 @@ +<?php + +/** + * gredu_labs. + * + * @link https://github.com/eellak/gredu_labs for the canonical source repository + * + * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) + * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html + */ + +namespace GrEduLabs\EnableDBLogin\Action; + +use Slim\Container; +use Slim\Http\Request; +use Slim\Http\Response; + +class Index { + + protected $_c; + + /** + * Constructor. + * + * @param Twig $view + */ + public function __construct(Container $c) { + $this->_c = $c; + } + + public function __invoke(Request $req, Response $res) { + return $res->withRedirect($this->_c['router']->pathFor('index')); + } + +} diff --git a/module/enable_db_login/src/Middleware/EnableDBLogin.php b/module/enable_db_login/src/Middleware/EnableDBLogin.php new file mode 100644 index 0000000000000000000000000000000000000000..2b49973f028091853d65d560cf78d89d3e1d4d46 --- /dev/null +++ b/module/enable_db_login/src/Middleware/EnableDBLogin.php @@ -0,0 +1,56 @@ +<?php + +/** + * EnableDBLogin enables the database login form for specific routes or urls. + * To use set the enable_db_login.{global,local}.php + * + * @link https://github.com/eellak/gredu_labs for the canonical source repository + * + * @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/) + * @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html + */ + +namespace GrEduLabs\EnableDBLogin\Middleware; + +use Slim\Container; +use Psr\Http\Message\ResponseInterface; +use Psr\Http\Message\ServerRequestInterface; + +class EnableDBLogin { + + private $_c; + + public function __construct(Container $c) { + $this->_c = $c; + } + + public function __invoke(ServerRequestInterface $req, ResponseInterface $res, callable $next) { + $route = $req->getAttribute('route'); + if ($route) { + $routeName = $route->getName(); + $routePattern = $route->getPattern(); + + $dblogin_settings = $this->_c->get('settings')->get('enabledblogin'); + if ($dblogin_settings) { + $enableRouteNames = isset($dblogin_settings['enable_routes']) ? $dblogin_settings['enable_routes'] : []; + $enableRoutePatterns = isset($dblogin_settings['enable_patterns']) ? $dblogin_settings['enable_patterns'] : []; + $disableRouteNames = isset($dblogin_settings['disable_routes']) ? $dblogin_settings['disable_routes'] : []; + $disableRoutePatterns = isset($dblogin_settings['disable_patterns']) ? $dblogin_settings['disable_patterns'] : []; + + if (in_array($routeName, $enableRouteNames) || + in_array($routePattern, $enableRoutePatterns)) { + $_SESSION['enableDLogin'] = true; + $this->_c['logger']->info("SET enableDLogin via route=[" . var_export($routeName, true) . '], path=[' . var_export($routePattern, true) . ']'); + } + + if (in_array($routeName, $disableRouteNames) || + in_array($routePattern, $disableRoutePatterns)) { + unset($_SESSION['enableDLogin']); + $this->_c['logger']->info("UNSET enableDLogin via route=[" . var_export($routeName, true) . '], path=[' . var_export($routePattern, true) . ']'); + } + } + } + return $next($req, $res); + } + +}