1
0
Fork 0
forked from deblan/gist
gist/app/bootstrap.php.d/70-security.php

110 lines
3.6 KiB
PHP
Raw Normal View History

<?php
use Gist\Service\UserProvider;
use Silex\Provider\SecurityServiceProvider;
2016-05-31 22:20:17 +02:00
use Silex\Provider\RememberMeServiceProvider;
use Gist\Service\SaltGenerator;
use Gist\Security\AuthenticationProvider;
use Gist\Security\AuthenticationListener;
2015-11-24 18:57:06 +01:00
use Gist\Security\LogoutSuccessHandler;
use Silex\Provider\SessionServiceProvider;
2017-04-24 01:11:39 +02:00
$securitySettings = $app['settings']['security'];
2016-09-19 15:12:53 +02:00
2017-04-24 01:11:39 +02:00
$app['token'] = $securitySettings['token'];
2016-12-23 10:28:09 +01:00
$app['salt_generator'] = $app->share(function ($app) {
return new SaltGenerator();
});
$app['user.provider'] = $app->share(function ($app) {
return new UserProvider(
2015-11-21 18:28:48 +01:00
$app['security.encoder.digest'],
$app['salt_generator']
);
});
2015-11-23 20:28:09 +01:00
$app['security.authentication_listener.factory.form'] = $app->protect(function ($name, $options) use ($app) {
$app['security.authentication_provider.'.$name.'.form'] = $app->share(function ($app) {
return new AuthenticationProvider($app['user.provider']);
2015-11-21 18:28:48 +01:00
});
2016-12-23 10:28:09 +01:00
2015-11-23 20:28:09 +01:00
$app['security.authentication_listener.'.$name.'.form'] = $app->share(function ($app) use ($name) {
return new AuthenticationListener(
2016-12-23 10:28:09 +01:00
$app['security.token_storage'],
2015-11-23 20:28:09 +01:00
$app['security.authentication_provider.'.$name.'.form']
2015-11-21 18:28:48 +01:00
);
});
2015-11-24 18:57:06 +01:00
2015-11-21 18:28:48 +01:00
return [
2015-11-23 20:28:09 +01:00
'security.authentication_provider.'.$name.'.form',
'security.authentication_listener.'.$name.'.form',
null,
2016-12-23 10:28:09 +01:00
'pre_auth',
2015-11-21 18:28:48 +01:00
];
});
2016-09-19 15:12:53 +02:00
$firewall = [
'security.firewalls' => [
'default' => [
'pattern' => '^/',
'anonymous' => true,
'form' => [
'login_path' => '_login',
'check_path' => '/login_check',
'always_use_default_target_path' => false,
'default_target_path' => '/',
],
'logout' => [
'path' => '/logout',
],
'users' => $app->share(function () use ($app) {
return $app['user.provider'];
}),
'remember_me' => [
'key' => $app['token'],
'path' => '/',
'always_remember_me' => false,
],
],
2016-09-19 15:12:53 +02:00
],
'security.access_rules' => [
['^/[a-z]{2}/my.*$', 'ROLE_USER'],
2016-12-23 10:28:09 +01:00
],
2016-09-19 15:12:53 +02:00
];
2017-04-24 01:11:39 +02:00
if ($securitySettings['login_required_to_edit_gist'] || $securitySettings['login_required_to_view_gist'] || $securitySettings['login_required_to_view_embeded_gist']) {
2016-09-19 15:12:53 +02:00
$exceptedUriPattern = ['login', 'register'];
2016-12-23 10:28:09 +01:00
2017-04-24 01:11:39 +02:00
if ($securitySettings['login_required_to_view_gist'] === true) {
2016-09-19 15:12:53 +02:00
$firewall['security.access_rules'][] = ['^/[a-z]{2}/view.*$', 'ROLE_USER'];
$firewall['security.access_rules'][] = ['^/[a-z]{2}/revs.*$', 'ROLE_USER'];
} else {
$exceptedUriPattern[] = 'view';
$exceptedUriPattern[] = 'revs';
}
2016-12-23 10:28:09 +01:00
2017-04-24 01:11:39 +02:00
if ($securitySettings['login_required_to_view_embeded_gist'] === true) {
2016-09-19 15:12:53 +02:00
$firewall['security.access_rules'][] = ['^/[a-z]{2}/embed.*$', 'ROLE_USER'];
} else {
$exceptedUriPattern[] = 'embed';
}
2015-11-24 18:57:06 +01:00
2017-04-24 01:11:39 +02:00
if ($securitySettings['login_required_to_edit_gist'] === true) {
2016-12-23 10:28:09 +01:00
$firewall['security.access_rules'][] = ['^/[a-z]{2}/(?!('.implode('|', $exceptedUriPattern).')).*$', 'ROLE_USER'];
2016-09-19 15:12:53 +02:00
}
}
2016-12-23 10:28:09 +01:00
2016-09-19 15:12:53 +02:00
$app->register(new SecurityServiceProvider(), $firewall);
2016-05-31 22:20:17 +02:00
$app->register(new SessionServiceProvider());
$app->register(new RememberMeServiceProvider());
2015-11-24 18:57:06 +01:00
$app['security.authentication.logout_handler._proto'] = $app->protect(function ($name, $options) use ($app) {
return $app->share(function () use ($name, $options, $app) {
return new LogoutSuccessHandler(
$app['security.http_utils'],
isset($options['target_url']) ? $options['target_url'] : '/'
);
});
});