Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
17 / 17
AclUser\Mvc\Controller\Plugin\RedirectMessagePlugin
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
9
100.00% covered (success)
100.00%
17 / 17
 addRedirectMessages
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 handleLoginRedirect
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
8 / 8
 changePasswordRedirect
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
<?php
/**
 * Class RedirectMessagePlugin
 *
 * @package     AclUser\Mvc\Controller\Plugin
 * @author      Nigel Hurnell
 * @version     v.1.0.0
 * @license     BSD
 * @copyright   Copyright (c) 2017, Nigel Hurnell
 */
namespace AclUser\Mvc\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\Authentication\Result;
use Zend\Uri\Uri;
/**
 * Controller plugin that redirects authentication requests and adds messages 
 * for to flash messenger
 * 
 * @package     AclUser\Mvc\Controller\Plugin
 * @author      Nigel Hurnell
 * @version     v.1.0.0
 * @license     BSD
 * @copyright   Copyright (c) 2017, Nigel Hurnell
 */
class RedirectMessagePlugin extends AbstractPlugin
{
    /**
     * Add login messages to flash messenger according to what is contained in $result object
     * 
     * @param Zend\Authentication\Result $result
     */
    public function addRedirectMessages(Result $result)
    {
        $messenger = $this->controller->plugin('FlashMessenger');
        $messages = $result->getMessages();
        foreach ($messages as $namespace => $message) {
            $messenger->setNamespace($namespace)->addMessage($message);
        }
    }
    /**
     * Logic to handle possible login scenarios 
     * 
     * @param string $redirectUrl redirect route passed as query param in URL 
     */
    public function handleLoginRedirect($redirectUrl)
    {
        if (!empty($redirectUrl)) {
            // The below check is to prevent possible redirect attack 
            // (if someone tries to redirect user to another domain).
            $uri = new Uri($redirectUrl);
            if (!$uri->isValid() || $uri->getHost() != null) {
                $redirectUrl = '';
            }
        }
        // If redirect URL is provided, redirect the user to that URL;
        // otherwise redirect to Home page.
        if (empty($redirectUrl)) {
            $this->controller->redirect()->toRoute('default', ['controller' => 'index', 'action' => 'index']);
        } else {
            $this->controller->redirect()->toUrl($redirectUrl);
        }
    }
    /**
     * Redirect user to home page if forgotten password post was valid
     * after adding flash messenger feedback.
     * 
     * @param Result $result
     */
    public function changePasswordRedirect(Result $result)
    {
        if ($result->isValid()) {
            $this->addRedirectMessages($result);
            $this->controller->redirect()->toRoute('default', ['controller' => 'index', 'action' => 'index']);
        }
    }
}