Enable db login stable release

parent 7f10e8cc
......@@ -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',
];
......@@ -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']],
],
],
],
......
<?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'
],
],
];
# Ενεργοποίηση σύνδεσης μέσω βάσης δεδομένων
Το συγκεκριμένο 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).
<?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');
});
};
<?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'));
}
}
<?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);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment