Commit c29e4193 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Fuson de la branche notifications

parents 4e1db484 989e4f2c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -3,9 +3,11 @@ config/autoload/local.php
config/autoload/unicaen-app.local.php
config/autoload/unicaen-auth.local.php


# Connecteurs
/config/connectors/*.yml
!/config/connector/*.yml.dist
socket/config.json

# Documentation
/doc/*.pdf
+9 −0
Original line number Diff line number Diff line
<?php
$socket = false;
if( file_exists($pathSocketConfig = __DIR__.'/../../socket/config.json') ){
    $socketConf = json_decode(file_get_contents($pathSocketConfig), true);
    $socket = $socketConf['socket'];
}

return array(
    'view_manager' => array(
        'display_not_found_reason' => getenv('APPLICATION_ENV') == 'development',
@@ -7,6 +13,9 @@ return array(

    // Oscar
    'oscar' => [
        // Oscar Live
        'socket' => $socket,

        ////////////////////////////////////////////////////////////////////////
        //
        // PATHS
+2 −0
Original line number Diff line number Diff line
@@ -19,3 +19,5 @@ html body {
```

## Développement Front

*A venir*
+35 −7
Original line number Diff line number Diff line
@@ -94,7 +94,6 @@ php composer.phar update

## Configuration d'oscar


### Base de donnée

Oscar est conçu pour fonctionner avec une base de données *Postgresql*.
@@ -149,7 +148,7 @@ Exemple de configuration :

```php
<?php
/config/autoload/local.php
//config/autoload/local.php
return array(
    // ...
    // Accès BDD
@@ -169,7 +168,6 @@ return array(
    ),
);
```

### Configurer le serveur web (Apache)

Activer les modules Apache si besoin :
@@ -245,8 +243,6 @@ S'assurer que les dossiers :

Sont bien accessibles en écriture.



### Unicaen App (ldap & mail)

La configuration de **UnicaenApp** et **UnicaenAuth** (surcouches utilisées dans
@@ -255,14 +251,12 @@ Oscar) on leurs fichiers de configuration respectifs dans le dossier `/config/au
 - Pour UnicaenApp, `config/autoload/unicaen-app.local.php`
 - Pour UnicaenAuth, `config/autoload/unicaen-auth.local.php`


Des fichiers d'exemple sont disponibles avec l'extension `.dist`.

**UnicaenApp** :
 - Configuration de l'authentification avec LDAP
 - Paramètre pour le *Mailer*


```bash
cp config/autoload/unicaen-app.local.php.dist config/autoload/unicaen-app.local.php
vi !$
@@ -325,3 +319,37 @@ php public/index.php oscar auth:promote admin Administrateur
```

Utiliser ensuite la navigateur pour vous rendre sur oscar et utiliser l'identifiant **admin** avec la mot de passe **password** pour vous connecter en tant qu'administrateur.

  
**UnicaenAuth** va permettre de configurer l'accès à Oscar en utilisant le *Cas*. 
Pour les copies de développement/préprod, l'option `usurpation_allowed_usernames` 
permet de s'identifier à la place d'un utilisateur.

## Oscar Live (Oscar 2.2+)

**Fonctionnalité expérimentale** 

Dans le cadre de l'utilisation des *Notification*, Oscar propose un système basé sur **NodeJS** pour actualiser les notifications en temps réél.

Par défaut, cette fonctionnalité est désactivée.

Pour l'activer, il faut commence par configurer le serveur **NodeJS** en copiant la configuration par défaut : 

```bash
cp socket/config.json.dist socket/config.json
vim !$
```

Remplissez les informations de connection à la base de donnée.

Vous pouvez lancer le serveur node avec la commande : 

```bash
cd socket/
nodejs server.js
```

Info : Le serveur doit être lancé dans un screen.

Si le fichier *socket/config.json* est présent, **OscarLive** devrait être automatiquement disponible (voir clef socket dans le fichier *config/autoload/local.php*).
+46 −10
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\Http\RouteMatch;
use Zend\ServiceManager\ServiceManager;
use ZfcUser\Authentication\Adapter\AdapterChainEvent;

class Module implements ConsoleBannerProviderInterface, ConsoleUsageProviderInterface
{
@@ -87,6 +88,14 @@ class Module implements ConsoleBannerProviderInterface, ConsoleUsageProviderInte
                array($this, 'onUserLogin'),
                100);

        $e->getApplication()->getEventManager()->getSharedManager()->attach(
            //'ZfcUser\Authentication\Adapter\AdapterChain',
            "*",
            'authenticate.success',
            array($this, 'onUserLogin'),
           100
        );

        // todo Remplacer l'étoile si possible
        $e->getApplication()->getEventManager()->getSharedManager()->attach(
            '*',
@@ -115,27 +124,45 @@ class Module implements ConsoleBannerProviderInterface, ConsoleUsageProviderInte
        $this->getServiceManager()->get('Logger')->error($msg);
    }

    public function onUserLogin( UserAuthenticatedEvent $e ){
        $user = $e->getDbUser();
    public function onUserLogin( $e ){

        $dbUser = null;
        if( $e instanceof AdapterChainEvent ){
            $dbUser = $this->getEntityManager()->getRepository(Authentification::class)->find($e->getIdentity());
        }
        elseif ($e instanceof UserAuthenticatedEvent ) {
            $dbUser = $e->getDbUser();
        } else {
            die('OK ?');
            // meh !
        }


        try {
            $user->setDateLogin(new \DateTime());
            $user->setSecret(md5($user->getId().'#'.time()));
            $this->getEntityManager()->flush($user);
        } catch( \Exception $e ){}
            $dbUser->setDateLogin(new \DateTime());
            $dbUser->setSecret(md5($dbUser->getId() . '#' . time()));
            $this->getEntityManager()->flush($dbUser);
        } catch (\Exception $e) {

        }

        /** @var PersonService $personService */
        $personService = $this->_serviceManager->get('PersonService');
        try {
            $person = $personService->getPersonByLdapLogin($user->getUsername());
            $person = $personService->getPersonByLdapLogin($dbUser->getUsername());
            $str = $person->log();
        } catch (NoResultException $e) {
            $str = $user->getUsername(). ' - DBUSER';
            $str = $dbUser->getUsername() . ' - DBUSER';
        }
        $this->getServiceActivity()->addInfo(sprintf('%s vient de se connecter à l\'application.', $str), $user);
        $this->getServiceActivity()->addInfo(sprintf('%s vient de se connecter à l\'application.',
            $str), $dbUser);

    }

    protected function trapEvent($event)
    {


        /** @var Request $request */
        $request = $event->getRequest();
        $sm = $event->getApplication()->getServiceManager();
@@ -160,7 +187,16 @@ class Module implements ConsoleBannerProviderInterface, ConsoleUsageProviderInte
                $action = $match->getParam('action');
                $uri = method_exists($request, 'getRequestUri') ? $request->getRequestUri() : 'console';
                $ip = array_key_exists('REMOTE_ADDR', $_SERVER) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
                $user = $userContext->getLdapUser() ? $userContext->getLdapUser()->getDisplayName() : 'Anonymous';

                if( $userContext->getLdapUser() ){
                    $user = $userContext->getLdapUser()->getDisplayName();
                }
                elseif ( $userContext->getDbUser() ){
                    $user = $userContext->getDbUser()->getDisplayName();
                } else {
                    $user = 'Anonymous';
                }

                $userid = $userContext->getDbUser() ? $userContext->getDbUser()->getid() : -1;
                $contextId = $match->getParam('id', '?');
                $message = sprintf('%s@%s:(%s) %s:%s %s', $ip, $userid, $user, $controller, $action, $uri);
Loading