Add more subscribers

This commit is contained in:
Frédéric Guillot 2014-12-27 21:11:11 -05:00
parent 0a14c8d5e5
commit 88d84073ae
13 changed files with 101 additions and 65 deletions

View File

@ -3,7 +3,7 @@
namespace Auth;
use Model\User;
use Core\Request;
use Event\AuthEvent;
/**
* 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();
if ($user && password_verify($password, $user['password'])) {
// Update user session
$this->user->updateSession($user);
// Update login history
$this->lastLogin->create(
self::AUTH_NAME,
$user['id'],
Request::getIpAddress(),
Request::getUserAgent()
);
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
return true;
}

View File

@ -2,7 +2,7 @@
namespace Auth;
use Core\Request;
use Event\AuthEvent;
use OAuth\Common\Storage\Session;
use OAuth\Common\Consumer\Credentials;
use OAuth\Common\Http\Uri\UriFactory;
@ -35,18 +35,8 @@ class GitHub extends Base
$user = $this->user->getByGitHubId($github_id);
if ($user) {
// Create the user session
$this->user->updateSession($user);
// Update login history
$this->lastLogin->create(
self::AUTH_NAME,
$user['id'],
Request::getIpAddress(),
Request::getUserAgent()
);
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
return true;
}

View File

@ -2,7 +2,7 @@
namespace Auth;
use Core\Request;
use Event\AuthEvent;
use OAuth\Common\Storage\Session;
use OAuth\Common\Consumer\Credentials;
use OAuth\Common\Http\Uri\UriFactory;
@ -36,18 +36,8 @@ class Google extends Base
$user = $this->user->getByGoogleId($google_id);
if ($user) {
// Create the user session
$this->user->updateSession($user);
// Update login history
$this->lastLogin->create(
self::AUTH_NAME,
$user['id'],
Request::getIpAddress(),
Request::getUserAgent()
);
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
return true;
}

View File

@ -2,7 +2,7 @@
namespace Auth;
use Core\Request;
use Event\AuthEvent;
/**
* LDAP model
@ -55,14 +55,7 @@ class Ldap extends Base
// We open the session
$this->user->updateSession($user);
// Update login history
$this->lastLogin->create(
self::AUTH_NAME,
$user['id'],
Request::getIpAddress(),
Request::getUserAgent()
);
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
return true;
}

View File

@ -3,6 +3,7 @@
namespace Auth;
use Core\Request;
use Event\AuthEvent;
use Core\Security;
/**
@ -103,12 +104,9 @@ class RememberMe extends Base
$this->user->updateSession($this->user->getById($record['user_id']));
$this->acl->isRememberMe(true);
// Update last login infos
$this->lastLogin->create(
self::AUTH_NAME,
$this->acl->getUserId(),
Request::getIpAddress(),
Request::getUserAgent()
$this->container['dispatcher']->dispatch(
'auth.success',
new AuthEvent(self::AUTH_NAME, $this->acl->getUserId())
);
return true;

View File

@ -2,7 +2,7 @@
namespace Auth;
use Core\Request;
use Event\AuthEvent;
/**
* ReverseProxy backend
@ -37,16 +37,8 @@ class ReverseProxy extends Base
$user = $this->user->getByUsername($login);
}
// Create the user session
$this->user->updateSession($user);
// Update login history
$this->lastLogin->create(
self::AUTH_NAME,
$user['id'],
Request::getIpAddress(),
Request::getUserAgent()
);
$this->container['dispatcher']->dispatch('auth.success', new AuthEvent(self::AUTH_NAME, $user['id']));
return true;
}

View File

@ -9,6 +9,7 @@ use Core\Response;
use Core\Template;
use Core\Session;
use Model\LastLogin;
use Symfony\Component\EventDispatcher\Event;
/**
* Base controller
@ -140,6 +141,7 @@ abstract class Base
{
// Start the session
$this->session->open(BASE_URL_DIRECTORY);
$this->container['dispatcher']->dispatch('session.bootstrap', new Event);
// HTTP secure headers
$this->response->csp(array('style-src' => "'self' 'unsafe-inline'"));

27
app/Event/AuthEvent.php Normal file
View 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;
}
}

View File

@ -4,18 +4,22 @@ namespace ServiceProvider;
use Pimple\Container;
use Pimple\ServiceProviderInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Subscriber\AuthSubscriber;
use Subscriber\BootstrapSubscriber;
use Subscriber\NotificationSubscriber;
use Subscriber\ProjectActivitySubscriber;
use Subscriber\ProjectDailySummarySubscriber;
use Subscriber\ProjectModificationDateSubscriber;
use Subscriber\WebhookSubscriber;
use Symfony\Component\EventDispatcher\EventDispatcher;
class EventDispatcherProvider implements ServiceProviderInterface
{
public function register(Container $container)
{
$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 ProjectDailySummarySubscriber($container));
$container['dispatcher']->addSubscriber(new ProjectModificationDateSubscriber($container));

View 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()
);
}
}

View 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();
}
}

View File

@ -15,6 +15,3 @@ $container->register(new ServiceProvider\DatabaseProvider);
$container->register(new ServiceProvider\ModelProvider);
$container->register(new ServiceProvider\EventDispatcherProvider);
$container->register(new ServiceProvider\MailerProvider);
$container['config']->setupTranslations();
$container['config']->setupTimezone();

View File

@ -2,6 +2,10 @@
require __DIR__.'/app/common.php';
use Symfony\Component\EventDispatcher\Event;
$container['dispatcher']->dispatch('api.bootstrap', new Event);
$server = new JsonRPC\Server;
$server->authentication(array('jsonrpc' => $container['config']->get('api_token')));