Max F vor 5 Jahren
Ursprung
Commit
8fadcf0dec
4 geänderte Dateien mit 118 neuen und 13 gelöschten Zeilen
  1. 31 0
      src/App.php
  2. 20 0
      src/App/Container.php
  3. 13 11
      src/App/Middlewares/ForceHttps.php
  4. 54 2
      src/App/Request.php

+ 31 - 0
src/App.php

@@ -10,6 +10,7 @@ use \KarmaFW\Database\Sql\SqlDb;
 use \KarmaFW\App\Request;
 use \KarmaFW\App\Response;
 use \KarmaFW\App\Pipe;
+use \KarmaFW\App\Container;
 
 
 define('FW_SRC_DIR', __DIR__);
@@ -34,11 +35,13 @@ class App
 
 	protected static $instance = null;
 	protected $middlewares;
+	protected $container;
 
 
 	public function __construct($middlewares=[])
 	{
 		$this->middlewares = $middlewares;
+		$this->container = new Container;
 		self::$instance = $this;
 
 		try {
@@ -212,16 +215,35 @@ class App
 	}
 
 	
+	public function get($key, $default_value=null)
+	{
+		return isset($this->container[$key]) ? $this->container[$key] : $default_value;
+	}
+
+	public function set($key, $value)
+	{
+		$this->container[$key] = $value;
+	}
+
+    public function has($name)
+    {
+        return isset($this->container[$name]);
+    }
+
+
+    // DEPRECATED
 	public static function setData($key, $value=null)
 	{
 		self::$data[$key] = $value;
 	}
 
+	// DEPRECATED
 	public static function getData($key, $default_value=null)
 	{
 		return array_key_exists($key, self::$data) ? self::$data[$key] : $default_value;
 	}
 
+	// DEPRECATED
 	public static function hasData($key)
 	{
 		return array_key_exists($key, self::$data);
@@ -259,6 +281,15 @@ class App
 	}
 
 
+	public static function getApp()
+	{
+		if (isset(self::$instance)) {
+			return self::$instance;
+		}
+		throw new Exception("App is not instancied", 1);
+	}
+
+
 	public static function getDb($instance_name=null, $dsn=null)
 	{
 		/*

+ 20 - 0
src/App/Container.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace KarmaFW\App;
+
+
+class Container extends \ArrayObject
+{
+
+    /*
+    public function __set($name, $val) {
+        $this[$name] = $val;
+    }
+
+    public function __get($name) {
+        return $this[$name];
+    }
+    */
+    
+}
+

+ 13 - 11
src/App/Middlewares/ForceHttps.php

@@ -4,24 +4,26 @@ namespace KarmaFW\App\Middlewares;
 
 use \KarmaFW\App\Request;
 use \KarmaFW\App\Response;
+use \KarmaFW\App\ResponseRedirect;
 
 
 class ForceHttps
 {
-	
+	protected $redirect_status = 302;
+
+
+	public function __construct($redirect_status=302)
+	{
+		$this->redirect_status = $redirect_status;
+	}
+
+
 	public function __invoke(Request $request, Response $response, callable $next)
 	{
-		/*
-		print_r($request); throw new Exception("DEBUG ME", 1);
-		
-
-		$is_ssl = false; // TODO
-		if (! $is_ssl) {
-			$redirect_url = 'https://' . $request->SERVER['SERVER_NAME'] . $request->SERVER['REQUEST_URI'] . (empty($request->SERVER['QUERY_STRING']) ? '' : ('?' . $request->SERVER['QUERY_STRING']));
-			$status = 302;
-			return new ResponseRedirect($redirect_url, $status);
+		if (! $request->isSecure()) {
+			$redirect_url = 'https://' . $request->SERVER['SERVER_NAME'] . $request->SERVER['REQUEST_URI'];
+			return new ResponseRedirect($redirect_url, $this->redirect_status);
 		}
-		*/
 
 		return $next($request, $response);
 	}

+ 54 - 2
src/App/Request.php

@@ -7,6 +7,7 @@ class Request
 {
 	protected $url = null;
 	protected $method = null;
+	protected $client_ip = null;
 	public $GET = null;
 	public $POST = null;
 	public $COOKIE = null;
@@ -20,14 +21,29 @@ class Request
 	{
 		$this->url = $url;
 		$this->method = $method;
+
+		//print_r($_SERVER); exit;
 	}
 
 
 	public static function createFromArgv()
 	{
 		// TODO
-		//$request = new self($url, $method);
-		//return $request;
+		$request = new self(null, null);
+
+
+		$request->GET = isset($_GET) ? $_GET : [];
+		$request->POST = isset($_POST) ? $_POST : [];
+		$request->COOKIE = isset($_COOKIE) ? $_COOKIE : [];
+		$request->SESSION = isset($_SESSION) ? $_SESSION : [];
+		$request->ENV = isset($_ENV) ? $_ENV : [];
+		$request->FILES = isset($_FILES) ? $_FILES : [];
+		$request->SERVER = isset($_SERVER) ? $_SERVER : [];
+
+		$client_ip = null;
+		$request->setClientIp($client_ip);
+		
+		return $request;
 	}
 
 
@@ -55,6 +71,24 @@ class Request
 		$request->FILES = isset($_FILES) ? $_FILES : [];
 		$request->SERVER = isset($_SERVER) ? $_SERVER : [];
 
+
+		// Set Server name (if behind a proxy)
+		if (! empty($request->SERVER['HTTP_X_FORWARDED_HOST'])) {
+			// if "ProxyPreserveHost On" is not set in apache
+			$request->SERVER['HTTP_HOST']   = $request->SERVER['HTTP_X_FORWARDED_HOST'];
+			$request->SERVER['SERVER_NAME'] = $request->SERVER['HTTP_X_FORWARDED_HOST'];
+		}
+
+		// Set Client IP
+		$client_ip = null;
+		if (! empty($request->SERVER['REMOTE_ADDR'])) {
+			$client_ip = $request->SERVER['REMOTE_ADDR'];
+		}
+		if (! empty($request->SERVER['HTTP_X_FORWARDED_FOR'])) {
+			$client_ip = $request->SERVER['HTTP_X_FORWARDED_FOR'];
+		}
+		$request->setClientIp($client_ip);
+
 		return $request;
 	}
 
@@ -69,6 +103,24 @@ class Request
 		return $this->method;
 	}
 
+	public function getClientIp()
+	{
+		return $this->client_ip;
+	}
+
+	public function setClientIp($client_ip)
+	{
+		$this->client_ip = $client_ip;
+	}
+
+	public function isSecure()
+	{
+		return (! empty($this->SERVER['HTTPS']) && $this->SERVER['HTTPS'] == 'On')
+		    || (! empty($this->SERVER['REQUEST_SCHEME']) && $this->SERVER['REQUEST_SCHEME'] == 'https')
+		    || (! empty($this->SERVER['HTTP_X_FORWARDED_HTTPS']) && $this->SERVER['HTTP_X_FORWARDED_HTTPS'] == 'On')
+		    || (! empty($this->SERVER['HTTP_X_FORWARDED_SCHEME']) && $this->SERVER['HTTP_X_FORWARDED_SCHEME'] == 'https');
+	}
+
 	/*
 
 	public function setUrl($url)