Add more subscribers
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
namespace Auth;
|
namespace Auth;
|
||||||
|
|
||||||
use Model\User;
|
use Model\User;
|
||||||
use Core\Request;
|
use Event\AuthEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Database authentication
|
* Database authentication
|
||||||
@@ -33,18 +33,8 @@ class Database extends Base
|
|||||||
$user = $this->db->table(User::TABLE)->eq('username', $username)->eq('is_ldap_user', 0)->findOne();
|
$user = $this->db->table(User::TABLE)->eq('username', $username)->eq('is_ldap_user', 0)->findOne();
|
||||||
|
|
||||||
if ($user && password_verify($password, $user['password'])) {
|
if ($user && password_verify($password, $user['password'])) {
|
||||||
|
|
||||||
// Update user session
|
|
||||||
$this->user->updateSession($user);
|
$this->user->updateSession($user);
|
||||||
|
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
|
||||||
// Update login history
|
|
||||||
$this->lastLogin->create(
|
|
||||||
self::AUTH_NAME,
|
|
||||||
$user['id'],
|
|
||||||
Request::getIpAddress(),
|
|
||||||
Request::getUserAgent()
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Auth;
|
namespace Auth;
|
||||||
|
|
||||||
use Core\Request;
|
use Event\AuthEvent;
|
||||||
use OAuth\Common\Storage\Session;
|
use OAuth\Common\Storage\Session;
|
||||||
use OAuth\Common\Consumer\Credentials;
|
use OAuth\Common\Consumer\Credentials;
|
||||||
use OAuth\Common\Http\Uri\UriFactory;
|
use OAuth\Common\Http\Uri\UriFactory;
|
||||||
@@ -35,18 +35,8 @@ class GitHub extends Base
|
|||||||
$user = $this->user->getByGitHubId($github_id);
|
$user = $this->user->getByGitHubId($github_id);
|
||||||
|
|
||||||
if ($user) {
|
if ($user) {
|
||||||
|
|
||||||
// Create the user session
|
|
||||||
$this->user->updateSession($user);
|
$this->user->updateSession($user);
|
||||||
|
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
|
||||||
// Update login history
|
|
||||||
$this->lastLogin->create(
|
|
||||||
self::AUTH_NAME,
|
|
||||||
$user['id'],
|
|
||||||
Request::getIpAddress(),
|
|
||||||
Request::getUserAgent()
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Auth;
|
namespace Auth;
|
||||||
|
|
||||||
use Core\Request;
|
use Event\AuthEvent;
|
||||||
use OAuth\Common\Storage\Session;
|
use OAuth\Common\Storage\Session;
|
||||||
use OAuth\Common\Consumer\Credentials;
|
use OAuth\Common\Consumer\Credentials;
|
||||||
use OAuth\Common\Http\Uri\UriFactory;
|
use OAuth\Common\Http\Uri\UriFactory;
|
||||||
@@ -36,18 +36,8 @@ class Google extends Base
|
|||||||
$user = $this->user->getByGoogleId($google_id);
|
$user = $this->user->getByGoogleId($google_id);
|
||||||
|
|
||||||
if ($user) {
|
if ($user) {
|
||||||
|
|
||||||
// Create the user session
|
|
||||||
$this->user->updateSession($user);
|
$this->user->updateSession($user);
|
||||||
|
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
|
||||||
// Update login history
|
|
||||||
$this->lastLogin->create(
|
|
||||||
self::AUTH_NAME,
|
|
||||||
$user['id'],
|
|
||||||
Request::getIpAddress(),
|
|
||||||
Request::getUserAgent()
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Auth;
|
namespace Auth;
|
||||||
|
|
||||||
use Core\Request;
|
use Event\AuthEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LDAP model
|
* LDAP model
|
||||||
@@ -55,14 +55,7 @@ class Ldap extends Base
|
|||||||
|
|
||||||
// We open the session
|
// We open the session
|
||||||
$this->user->updateSession($user);
|
$this->user->updateSession($user);
|
||||||
|
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
|
||||||
// Update login history
|
|
||||||
$this->lastLogin->create(
|
|
||||||
self::AUTH_NAME,
|
|
||||||
$user['id'],
|
|
||||||
Request::getIpAddress(),
|
|
||||||
Request::getUserAgent()
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace Auth;
|
namespace Auth;
|
||||||
|
|
||||||
use Core\Request;
|
use Core\Request;
|
||||||
|
use Event\AuthEvent;
|
||||||
use Core\Security;
|
use Core\Security;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -103,12 +104,9 @@ class RememberMe extends Base
|
|||||||
$this->user->updateSession($this->user->getById($record['user_id']));
|
$this->user->updateSession($this->user->getById($record['user_id']));
|
||||||
$this->acl->isRememberMe(true);
|
$this->acl->isRememberMe(true);
|
||||||
|
|
||||||
// Update last login infos
|
$this->container['dispatcher']->dispatch(
|
||||||
$this->lastLogin->create(
|
'auth.success',
|
||||||
self::AUTH_NAME,
|
new AuthEvent(self::AUTH_NAME, $this->acl->getUserId())
|
||||||
$this->acl->getUserId(),
|
|
||||||
Request::getIpAddress(),
|
|
||||||
Request::getUserAgent()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Auth;
|
namespace Auth;
|
||||||
|
|
||||||
use Core\Request;
|
use Event\AuthEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ReverseProxy backend
|
* ReverseProxy backend
|
||||||
@@ -37,16 +37,8 @@ class ReverseProxy extends Base
|
|||||||
$user = $this->user->getByUsername($login);
|
$user = $this->user->getByUsername($login);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the user session
|
|
||||||
$this->user->updateSession($user);
|
$this->user->updateSession($user);
|
||||||
|
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
|
||||||
// Update login history
|
|
||||||
$this->lastLogin->create(
|
|
||||||
self::AUTH_NAME,
|
|
||||||
$user['id'],
|
|
||||||
Request::getIpAddress(),
|
|
||||||
Request::getUserAgent()
|
|
||||||
);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use Core\Response;
|
|||||||
use Core\Template;
|
use Core\Template;
|
||||||
use Core\Session;
|
use Core\Session;
|
||||||
use Model\LastLogin;
|
use Model\LastLogin;
|
||||||
|
use Symfony\Component\EventDispatcher\Event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base controller
|
* Base controller
|
||||||
@@ -140,6 +141,7 @@ abstract class Base
|
|||||||
{
|
{
|
||||||
// Start the session
|
// Start the session
|
||||||
$this->session->open(BASE_URL_DIRECTORY);
|
$this->session->open(BASE_URL_DIRECTORY);
|
||||||
|
$this->container['dispatcher']->dispatch('session.bootstrap', new Event);
|
||||||
|
|
||||||
// HTTP secure headers
|
// HTTP secure headers
|
||||||
$this->response->csp(array('style-src' => "'self' 'unsafe-inline'"));
|
$this->response->csp(array('style-src' => "'self' 'unsafe-inline'"));
|
||||||
|
|||||||
27
app/Event/AuthEvent.php
Normal file
27
app/Event/AuthEvent.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Event;
|
||||||
|
|
||||||
|
use Symfony\Component\EventDispatcher\Event as BaseEvent;
|
||||||
|
|
||||||
|
class AuthEvent extends BaseEvent
|
||||||
|
{
|
||||||
|
private $auth_name;
|
||||||
|
private $user_id;
|
||||||
|
|
||||||
|
public function __construct($auth_name, $user_id)
|
||||||
|
{
|
||||||
|
$this->auth_name = $auth_name;
|
||||||
|
$this->user_id = $user_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUserId()
|
||||||
|
{
|
||||||
|
return $this->user_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAuthType()
|
||||||
|
{
|
||||||
|
return $this->auth_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,18 +4,22 @@ namespace ServiceProvider;
|
|||||||
|
|
||||||
use Pimple\Container;
|
use Pimple\Container;
|
||||||
use Pimple\ServiceProviderInterface;
|
use Pimple\ServiceProviderInterface;
|
||||||
|
use Symfony\Component\EventDispatcher\EventDispatcher;
|
||||||
|
use Subscriber\AuthSubscriber;
|
||||||
|
use Subscriber\BootstrapSubscriber;
|
||||||
use Subscriber\NotificationSubscriber;
|
use Subscriber\NotificationSubscriber;
|
||||||
use Subscriber\ProjectActivitySubscriber;
|
use Subscriber\ProjectActivitySubscriber;
|
||||||
use Subscriber\ProjectDailySummarySubscriber;
|
use Subscriber\ProjectDailySummarySubscriber;
|
||||||
use Subscriber\ProjectModificationDateSubscriber;
|
use Subscriber\ProjectModificationDateSubscriber;
|
||||||
use Subscriber\WebhookSubscriber;
|
use Subscriber\WebhookSubscriber;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcher;
|
|
||||||
|
|
||||||
class EventDispatcherProvider implements ServiceProviderInterface
|
class EventDispatcherProvider implements ServiceProviderInterface
|
||||||
{
|
{
|
||||||
public function register(Container $container)
|
public function register(Container $container)
|
||||||
{
|
{
|
||||||
$container['dispatcher'] = new EventDispatcher;
|
$container['dispatcher'] = new EventDispatcher;
|
||||||
|
$container['dispatcher']->addSubscriber(new BootstrapSubscriber($container));
|
||||||
|
$container['dispatcher']->addSubscriber(new AuthSubscriber($container));
|
||||||
$container['dispatcher']->addSubscriber(new ProjectActivitySubscriber($container));
|
$container['dispatcher']->addSubscriber(new ProjectActivitySubscriber($container));
|
||||||
$container['dispatcher']->addSubscriber(new ProjectDailySummarySubscriber($container));
|
$container['dispatcher']->addSubscriber(new ProjectDailySummarySubscriber($container));
|
||||||
$container['dispatcher']->addSubscriber(new ProjectModificationDateSubscriber($container));
|
$container['dispatcher']->addSubscriber(new ProjectModificationDateSubscriber($container));
|
||||||
|
|||||||
27
app/Subscriber/AuthSubscriber.php
Normal file
27
app/Subscriber/AuthSubscriber.php
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Subscriber;
|
||||||
|
|
||||||
|
use Core\Request;
|
||||||
|
use Event\AuthEvent;
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
|
class AuthSubscriber extends Base implements EventSubscriberInterface
|
||||||
|
{
|
||||||
|
public static function getSubscribedEvents()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'auth.success' => array('onSuccess', 0),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onSuccess(AuthEvent $event)
|
||||||
|
{
|
||||||
|
$this->lastLogin->create(
|
||||||
|
$event->getAuthType(),
|
||||||
|
$event->getUserId(),
|
||||||
|
Request::getIpAddress(),
|
||||||
|
Request::getUserAgent()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
22
app/Subscriber/BootstrapSubscriber.php
Normal file
22
app/Subscriber/BootstrapSubscriber.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Subscriber;
|
||||||
|
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
|
||||||
|
class BootstrapSubscriber extends Base implements EventSubscriberInterface
|
||||||
|
{
|
||||||
|
public static function getSubscribedEvents()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
'session.bootstrap' => array('setup', 0),
|
||||||
|
'api.bootstrap' => array('setup', 0),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setup()
|
||||||
|
{
|
||||||
|
$this->container['config']->setupTranslations();
|
||||||
|
$this->container['config']->setupTimezone();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,6 +15,3 @@ $container->register(new ServiceProvider\DatabaseProvider);
|
|||||||
$container->register(new ServiceProvider\ModelProvider);
|
$container->register(new ServiceProvider\ModelProvider);
|
||||||
$container->register(new ServiceProvider\EventDispatcherProvider);
|
$container->register(new ServiceProvider\EventDispatcherProvider);
|
||||||
$container->register(new ServiceProvider\MailerProvider);
|
$container->register(new ServiceProvider\MailerProvider);
|
||||||
|
|
||||||
$container['config']->setupTranslations();
|
|
||||||
$container['config']->setupTimezone();
|
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
require __DIR__.'/app/common.php';
|
require __DIR__.'/app/common.php';
|
||||||
|
|
||||||
|
use Symfony\Component\EventDispatcher\Event;
|
||||||
|
|
||||||
|
$container['dispatcher']->dispatch('api.bootstrap', new Event);
|
||||||
|
|
||||||
$server = new JsonRPC\Server;
|
$server = new JsonRPC\Server;
|
||||||
$server->authentication(array('jsonrpc' => $container['config']->get('api_token')));
|
$server->authentication(array('jsonrpc' => $container['config']->get('api_token')));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user