first pass on auth
This commit is contained in:
parent
cc4aa43c0e
commit
2e181738f3
164
request.php
164
request.php
@ -100,4 +100,168 @@ class Request
|
||||
{
|
||||
return $this->params[$name] ?? $this->queryParams[$name] ?? $this->postData[$name] ?? null;
|
||||
}
|
||||
|
||||
/**
|
||||
* input returns input value from any source (route, query, post, json)
|
||||
*/
|
||||
public function input(string $name, mixed $default = null): mixed
|
||||
{
|
||||
// Check route params first
|
||||
if (isset($this->params[$name])) {
|
||||
return $this->params[$name];
|
||||
}
|
||||
|
||||
// Check query params
|
||||
if (isset($this->queryParams[$name])) {
|
||||
return $this->queryParams[$name];
|
||||
}
|
||||
|
||||
// Check post data
|
||||
if (isset($this->postData[$name])) {
|
||||
return $this->postData[$name];
|
||||
}
|
||||
|
||||
// Check JSON body
|
||||
if ($this->contentType() === 'application/json') {
|
||||
$json = $this->json();
|
||||
if (is_array($json) && isset($json[$name])) {
|
||||
return $json[$name];
|
||||
}
|
||||
}
|
||||
|
||||
return $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* all returns all input data merged from all sources
|
||||
*/
|
||||
public function all(): array
|
||||
{
|
||||
$data = array_merge($this->queryParams, $this->postData, $this->params);
|
||||
|
||||
if ($this->contentType() === 'application/json') {
|
||||
$json = $this->json();
|
||||
if (is_array($json)) {
|
||||
$data = array_merge($data, $json);
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* only returns only specified keys from input
|
||||
*/
|
||||
public function only(array $keys): array
|
||||
{
|
||||
$all = $this->all();
|
||||
return array_intersect_key($all, array_flip($keys));
|
||||
}
|
||||
|
||||
/**
|
||||
* except returns all input except specified keys
|
||||
*/
|
||||
public function except(array $keys): array
|
||||
{
|
||||
$all = $this->all();
|
||||
return array_diff_key($all, array_flip($keys));
|
||||
}
|
||||
|
||||
/**
|
||||
* has checks if input key exists
|
||||
*/
|
||||
public function has(string $key): bool
|
||||
{
|
||||
return $this->input($key) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* expectsJson checks if request expects JSON response
|
||||
*/
|
||||
public function expectsJson(): bool
|
||||
{
|
||||
$accept = $this->header('accept') ?? '';
|
||||
return str_contains($accept, 'application/json') ||
|
||||
str_contains($accept, 'text/json') ||
|
||||
$this->header('x-requested-with') === 'XMLHttpRequest';
|
||||
}
|
||||
|
||||
/**
|
||||
* isAjax checks if request is AJAX
|
||||
*/
|
||||
public function isAjax(): bool
|
||||
{
|
||||
return $this->header('x-requested-with') === 'XMLHttpRequest';
|
||||
}
|
||||
|
||||
/**
|
||||
* ip returns the client IP address
|
||||
*/
|
||||
public function ip(): string
|
||||
{
|
||||
// Check for proxied IPs
|
||||
if ($ip = $this->header('x-forwarded-for')) {
|
||||
return explode(',', $ip)[0];
|
||||
}
|
||||
|
||||
if ($ip = $this->header('x-real-ip')) {
|
||||
return $ip;
|
||||
}
|
||||
|
||||
return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
|
||||
}
|
||||
|
||||
/**
|
||||
* userAgent returns the user agent string
|
||||
*/
|
||||
public function userAgent(): string
|
||||
{
|
||||
return $this->header('user-agent') ?? '';
|
||||
}
|
||||
|
||||
/**
|
||||
* referer returns the referer URL
|
||||
*/
|
||||
public function referer(): ?string
|
||||
{
|
||||
return $this->header('referer');
|
||||
}
|
||||
|
||||
/**
|
||||
* isSecure checks if request is over HTTPS
|
||||
*/
|
||||
public function isSecure(): bool
|
||||
{
|
||||
return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ||
|
||||
($_SERVER['SERVER_PORT'] ?? 80) == 443 ||
|
||||
($this->header('x-forwarded-proto') === 'https');
|
||||
}
|
||||
|
||||
/**
|
||||
* url returns the full URL of the request
|
||||
*/
|
||||
public function url(): string
|
||||
{
|
||||
$protocol = $this->isSecure() ? 'https' : 'http';
|
||||
$host = $_SERVER['HTTP_HOST'] ?? 'localhost';
|
||||
return $protocol . '://' . $host . $this->uri;
|
||||
}
|
||||
|
||||
/**
|
||||
* fullUrl returns the URL with query string
|
||||
*/
|
||||
public function fullUrl(): string
|
||||
{
|
||||
return $this->url();
|
||||
}
|
||||
|
||||
/**
|
||||
* is checks if the request path matches a pattern
|
||||
*/
|
||||
public function is(string $pattern): bool
|
||||
{
|
||||
$pattern = preg_quote($pattern, '#');
|
||||
$pattern = str_replace('\*', '.*', $pattern);
|
||||
return preg_match('#^' . $pattern . '$#', $this->path) === 1;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user