|
<?php |
|
|
|
namespace Kanboard\Core\Http; |
|
|
|
use Pimple\Container; |
|
use Kanboard\Core\Base; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Request extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
private $server; |
|
private $get; |
|
private $post; |
|
private $files; |
|
private $cookies; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct(Container $container, array $server = array(), array $get = array(), array $post = array(), array $files = array(), array $cookies = array()) |
|
{ |
|
parent::__construct($container); |
|
$this->server = empty($server) ? $_SERVER : $server; |
|
$this->get = empty($get) ? $_GET : $get; |
|
$this->post = empty($post) ? $_POST : $post; |
|
$this->files = empty($files) ? $_FILES : $files; |
|
$this->cookies = empty($cookies) ? $_COOKIE : $cookies; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setParams(array $params) |
|
{ |
|
$this->get = array_merge($this->get, $params); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getStringParam($name, $default_value = '') |
|
{ |
|
return isset($this->get[$name]) ? $this->get[$name] : $default_value; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getIntegerParam($name, $default_value = 0) |
|
{ |
|
return isset($this->get[$name]) && ctype_digit((string) $this->get[$name]) ? (int) $this->get[$name] : $default_value; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getValue($name) |
|
{ |
|
$values = $this->getValues(); |
|
return isset($values[$name]) ? $values[$name] : null; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getValues() |
|
{ |
|
if (! empty($this->post) && ! empty($this->post['csrf_token']) && $this->token->validateCSRFToken($this->post['csrf_token'])) { |
|
unset($this->post['csrf_token']); |
|
return $this->filterValues($this->post); |
|
} |
|
|
|
return array(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getRawFormValues() |
|
{ |
|
return $this->post; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getRawValue($name) |
|
{ |
|
return isset($this->post[$name]) ? $this->post[$name] : null; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getBody() |
|
{ |
|
return file_get_contents('php://input'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getJson() |
|
{ |
|
return json_decode($this->getBody(), true) ?: array(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getFileContent($name) |
|
{ |
|
if (isset($this->files[$name]['tmp_name'])) { |
|
return file_get_contents($this->files[$name]['tmp_name']); |
|
} |
|
|
|
return ''; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getFilePath($name) |
|
{ |
|
return isset($this->files[$name]['tmp_name']) ? $this->files[$name]['tmp_name'] : ''; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getFileInfo($name) |
|
{ |
|
return isset($this->files[$name]) ? $this->files[$name] : array(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getMethod() |
|
{ |
|
return $this->getServerVariable('REQUEST_METHOD'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function isPost() |
|
{ |
|
return $this->getServerVariable('REQUEST_METHOD') === 'POST'; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function isAjax() |
|
{ |
|
return $this->getHeader('X-Requested-With') === 'XMLHttpRequest'; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function isHTTPS() |
|
{ |
|
if ($this->getServerVariable('HTTP_X_FORWARDED_PROTO') === 'https') { |
|
return true; |
|
} |
|
|
|
return $this->getServerVariable('HTTPS') !== '' && $this->server['HTTPS'] !== 'off'; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getCookie($name) |
|
{ |
|
return isset($this->cookies[$name]) ? $this->cookies[$name] : ''; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getHeader($name) |
|
{ |
|
$name = 'HTTP_'.str_replace('-', '_', strtoupper($name)); |
|
return $this->getServerVariable($name); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getRemoteUser() |
|
{ |
|
return $this->getServerVariable(REVERSE_PROXY_USER_HEADER); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getRemoteEmail() |
|
{ |
|
return $this->getServerVariable(REVERSE_PROXY_EMAIL_HEADER); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getRemoteName() |
|
{ |
|
return $this->getServerVariable(REVERSE_PROXY_FULLNAME_HEADER); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getQueryString() |
|
{ |
|
return $this->getServerVariable('QUERY_STRING'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getUri() |
|
{ |
|
return $this->getServerVariable('REQUEST_URI'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getUserAgent() |
|
{ |
|
return empty($this->server['HTTP_USER_AGENT']) ? t('Unknown') : $this->server['HTTP_USER_AGENT']; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getIpAddress() |
|
{ |
|
$keys = array( |
|
'HTTP_X_REAL_IP', |
|
'HTTP_CLIENT_IP', |
|
'HTTP_X_FORWARDED_FOR', |
|
'HTTP_X_FORWARDED', |
|
'HTTP_X_CLUSTER_CLIENT_IP', |
|
'HTTP_FORWARDED_FOR', |
|
'HTTP_FORWARDED', |
|
'REMOTE_ADDR' |
|
); |
|
|
|
foreach ($keys as $key) { |
|
if ($this->getServerVariable($key) !== '') { |
|
foreach (explode(',', $this->server[$key]) as $ipAddress) { |
|
return trim($ipAddress); |
|
} |
|
} |
|
} |
|
|
|
return t('Unknown'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getStartTime() |
|
{ |
|
return $this->getServerVariable('REQUEST_TIME_FLOAT') ?: 0; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getServerVariable($variable) |
|
{ |
|
return isset($this->server[$variable]) ? $this->server[$variable] : ''; |
|
} |
|
|
|
protected function filterValues(array $values) |
|
{ |
|
foreach ($values as $key => $value) { |
|
|
|
|
|
if (strpos($key, '-----------------------------') === 0) { |
|
unset($values[$key]); |
|
} |
|
} |
|
|
|
return $values; |
|
} |
|
} |
|
|