blob: a56213a462e91887aa723f044d3f9ee07e8b8bbe [file] [log] [blame]
<?php
/*******************************************************************************
* Copyright (c) 2016 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christopher Guindon (Eclipse Foundation) - Refactoring for usability and USS
*******************************************************************************/
/**
* Simple form token calss
*
* @author chrisguindon
*/
class FormToken {
function __construct(App $App = NULL) {
session_start();
$this->getToken();
}
/**
* Generate a token
*/
private function _generateToken() {
if (function_exists('mcrypt_create_iv')) {
$_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
}
else {
$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
}
}
/**
* Get token
*
* Generate a token if it does not exist
*
* @return unknown
*/
public function getToken(){
if (empty($_SESSION['token'])) {
$this->_generateToken();
}
return $_SESSION['token'];
}
/**
* Verify token
*
* @param string $token
* @return boolean
*/
public function verifyToken($token = "") {
$return = FALSE;
if (!empty($token) && $this->_hash_equals($_SESSION['token'], $token)) {
$return = TRUE;
}
$this->_generateToken();
return $return;
}
/**
* hash_equals for previous version of php 5.6
*
* @param unknown $str1
* @param unknown $str2
* @return boolean
*/
private function _hash_equals($str1, $str2) {
if(strlen($str1) != strlen($str2)) {
return FALSE;
}
$res = $str1 ^ $str2;
$ret = 0;
for($i = strlen($res) - 1; $i >= 0; $i--) $ret |= ord($res[$i]);
return !$ret;
}
}