Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
85.71% covered (success)
85.71%
6 / 7
CRAP
90.91% covered (success)
90.91%
20 / 22
LightManager
0.00% covered (danger)
0.00%
0 / 1
85.71% covered (success)
85.71%
6 / 7
12.11
90.91% covered (success)
90.91%
20 / 22
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.26
60.00% covered (warning)
60.00%
3 / 5
 createToken
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 getToken
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 checkToken
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
3 / 3
 hasToken
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 removeToken
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 setSessionKey
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
<?php
namespace Puyo\Security\Csrf;
/**
 * 簡易的なCSRFマネージャ(非推奨)
 *
 * これよりも symfony/security 等を使ったほうがよい。
 * 元のアプリが $_SESSION を直接扱っていたり、
 * その他の理由で symfony/security が使えない場合のための簡易的なもの。
 *
 * スーパグローバルの $_SESSION を直接扱うことに注意。
 * セッションが開始されている必要がある。
 *
 * @deprecated
 */
class LightManager
{
    /**
     * @var \Puyo\Security\Csrf\Strategy\IStrategy|\Puyo\Security\Csrf\Strategy\SessionId
     */
    private $tokenStrategy;
    private $sessionKey = '_csrf';
    public function __construct(Strategy\IStrategy $strategy=null) {
        if($strategy === null) {
            $strategy = new Strategy\SessionId();
        }
        $this->tokenStrategy = $strategy;
    }
    /**
     * トークンを作る。
     *
     * @return string
     */
    public function createToken() {
        $token = $this->tokenStrategy->createToken();
        $_SESSION[$this->sessionKey] = $token;
        return $token;
    }
    public function getToken() {
        if(!$this->hasToken()) {
            $this->createToken();
        }
        return $_SESSION[$this->sessionKey];
    }
    public function checkToken($token) {
        if($this->hasToken() && $token === $_SESSION['_csrf']) {
            return true;
        }
        return false;
    }
    public function hasToken() {
        if(isset($_SESSION[$this->sessionKey])) {
            return true;
        }
        return false;
    }
    public function removeToken() {
        unset($_SESSION[$this->sessionKey]);
    }
    /**
     * トークンの保存先である $_SESSION のkeyを指定する
     *
     * 複数のトークンを扱う場合に有用。
     * 初期値は '_csrf'
     * @param string $sessionKey
     */
    public function setSessionKey($sessionKey) {
        $this->sessionKey = $sessionKey;
    }
}