diff --git a/app/Routes.php b/app/Routes.php index de8b2e8..28fa286 100644 --- a/app/Routes.php +++ b/app/Routes.php @@ -14,8 +14,11 @@ $router->any('/automation', 'Automation'); $router->any('/setting', 'Setting'); $router->any('/ajax', 'Ajax'); -$router->post('/api/devices', 'DevicesApi@getAllDevices'); $router->post('/api/login', 'AuthApi@login'); +$router->post('/api/logout', 'AuthApi@logout'); + +$router->post('/api/devices', 'DevicesApi@default'); +$router->post('/api/rooms', 'RoomsApi@default'); $router->get('/api/HA/auth', 'GoogleHomeApi@autorize'); $router->any('/api/HA', 'GoogleHomeApi@response'); diff --git a/app/api/AuthApi.php b/app/api/AuthApi.php index 4d58d8e..a9d6101 100644 --- a/app/api/AuthApi.php +++ b/app/api/AuthApi.php @@ -1,7 +1,7 @@ getToken($this->input->username,$this->input->password); + $token = (new AuthManager)->getToken($this->input->username,$this->input->password); if (!$token) { throw new Exception("Auth failed", 401); } @@ -10,7 +10,7 @@ class AuthApi { public function logout(){ $authenticationBearrer = $_SERVER['HTTP_AUTHORIZATION']; - if (!(new ApiManager)->deleteToken($authenticationBearrer)) { + if (!(new AuthManager)->deleteToken($authenticationBearrer)) { throw new Exception("logout Failed", 401); } } diff --git a/app/api/DevicesApi.php b/app/api/DevicesApi.php index 856acb5..daa8ece 100644 --- a/app/api/DevicesApi.php +++ b/app/api/DevicesApi.php @@ -2,7 +2,7 @@ class DevicesApi extends ApiController{ - public function getAllDevices(){ + public function default(){ $this->requireAuth(); $response = []; diff --git a/app/api/RoomsApi.php b/app/api/RoomsApi.php new file mode 100644 index 0000000..36a0912 --- /dev/null +++ b/app/api/RoomsApi.php @@ -0,0 +1,13 @@ +requireAuth(); + $response = []; + + // TODO: process the request + + $this->response($response); + } +} diff --git a/app/models/AuthManager.php b/app/models/AuthManager.php deleted file mode 100644 index 24c76b4..0000000 --- a/app/models/AuthManager.php +++ /dev/null @@ -1,45 +0,0 @@ -loginNew($username, $password); - - if ($userLogedIn != false){ - // Create token header as a JSON string - $header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']); - // Create token payload as a JSON string - $payload = json_encode(['user_id' => $userLogedIn]); - // Encode Header to Base64Url String - $base64UrlHeader = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header)); - // Encode Payload to Base64Url String - $base64UrlPayload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($payload)); - // Create Signature Hash - $signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, 'abC123!', true); - // Encode Signature to Base64Url String - $base64UrlSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($signature)); - // Create JWT - $jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature; - - return $jwt; - } - } - return false; - } - - public function deleteToken($token){ - Db::command ('DELETE FROM tokens WHERE token=?', array ($token)); - return true; - } - - public function validateToken($token){ - $tokens = Db::loadAll('SELECT * FROM tokens WHERE token = ? AND expire >= CURRENT_TIMESTAMP AND blocked = 0;', array($token)); - if (count($tokens) == 1) { - return true; - } else if (count($tokens) == 0) { - return false; - }; - return false; - } -} diff --git a/app/models/managers/AuthManager.php b/app/models/managers/AuthManager.php new file mode 100644 index 0000000..88c96a6 --- /dev/null +++ b/app/models/managers/AuthManager.php @@ -0,0 +1,45 @@ +loginNew($username, $password); + + if ($userLogedIn != false){ + // Create token header as a JSON string + $header = json_encode(['typ' => 'JWT', 'alg' => 'HS256']); + // Create token payload as a JSON string + $payload = json_encode(['user_id' => $userLogedIn]); + // Encode Header to Base64Url String + $base64UrlHeader = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header)); + // Encode Payload to Base64Url String + $base64UrlPayload = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($payload)); + // Create Signature Hash + $signature = hash_hmac('sha256', $base64UrlHeader . "." . $base64UrlPayload, 'abC123!', true); + // Encode Signature to Base64Url String + $base64UrlSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($signature)); + // Create JWT + $jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature; + + return $jwt; + } + } + return false; + } + + public function deleteToken($token){ + Db::command ('DELETE FROM tokens WHERE token=?', array ($token)); + return true; + } + + public function validateToken($token){ + $tokens = Db::loadAll('SELECT * FROM tokens WHERE token = ? AND expire >= CURRENT_TIMESTAMP AND blocked = 0;', array($token)); + if (count($tokens) == 1) { + return true; + } else if (count($tokens) == 0) { + return false; + }; + return false; + } +} diff --git a/app/models/AutomationManager.php b/app/models/managers/AutomationManager.php similarity index 100% rename from app/models/AutomationManager.php rename to app/models/managers/AutomationManager.php diff --git a/app/models/ChartManager.php b/app/models/managers/ChartManager.php similarity index 100% rename from app/models/ChartManager.php rename to app/models/managers/ChartManager.php diff --git a/app/models/DashboardManager.php b/app/models/managers/DashboardManager.php similarity index 100% rename from app/models/DashboardManager.php rename to app/models/managers/DashboardManager.php diff --git a/app/models/DeviceManager.php b/app/models/managers/DeviceManager.php similarity index 100% rename from app/models/DeviceManager.php rename to app/models/managers/DeviceManager.php diff --git a/app/models/FallbackManager.php b/app/models/managers/FallbackManager.php similarity index 100% rename from app/models/FallbackManager.php rename to app/models/managers/FallbackManager.php diff --git a/app/models/LanguageManager.php b/app/models/managers/LanguageManager.php similarity index 100% rename from app/models/LanguageManager.php rename to app/models/managers/LanguageManager.php diff --git a/app/models/LogManager.php b/app/models/managers/LogManager.php similarity index 100% rename from app/models/LogManager.php rename to app/models/managers/LogManager.php diff --git a/app/models/NetworkManager.php b/app/models/managers/NetworkManager.php similarity index 100% rename from app/models/NetworkManager.php rename to app/models/managers/NetworkManager.php diff --git a/app/models/NotificationManager.php b/app/models/managers/NotificationManager.php similarity index 100% rename from app/models/NotificationManager.php rename to app/models/managers/NotificationManager.php diff --git a/app/models/RecordManager.php b/app/models/managers/RecordManager.php similarity index 100% rename from app/models/RecordManager.php rename to app/models/managers/RecordManager.php diff --git a/app/models/RoomManager.php b/app/models/managers/RoomManager.php similarity index 100% rename from app/models/RoomManager.php rename to app/models/managers/RoomManager.php diff --git a/app/models/SceneManager.php b/app/models/managers/SceneManager.php similarity index 100% rename from app/models/SceneManager.php rename to app/models/managers/SceneManager.php diff --git a/app/models/SubDeviceManager.php b/app/models/managers/SubDeviceManager.php similarity index 100% rename from app/models/SubDeviceManager.php rename to app/models/managers/SubDeviceManager.php diff --git a/app/models/UserManager.php b/app/models/managers/UserManager.php similarity index 100% rename from app/models/UserManager.php rename to app/models/managers/UserManager.php diff --git a/app/models/Utilities.php b/app/models/managers/Utilities.php similarity index 100% rename from app/models/Utilities.php rename to app/models/managers/Utilities.php diff --git a/app/models/types/WidgetTypes.php b/app/models/types/WidgetTypes.php new file mode 100644 index 0000000..7e0dd7d --- /dev/null +++ b/app/models/types/WidgetTypes.php @@ -0,0 +1,45 @@ + [ + 'name' => 'value', + 'active' => false + ], + self::ICON => [ + 'name' => 'icon', + 'active' => false + ], + self::BUTTON => [ + 'name' => 'button', + 'active' => true + ], + self::SWITH => [ + 'name' => 'switch', + 'active' => true + ], + self::RANGE => [ + 'name' => 'range', + 'active' => true + ], + self::CUSTOM => [ + 'name' => 'custom', + 'active' => true + ], + ]; + + public static function getName($type){ + return self::$types[$type]; + } + + public static function isActive($type){ + return isset(self::$types[$type]) && self::$types[$type]['active']; + } +} diff --git a/app/models/Form.php b/library/Form.php similarity index 100% rename from app/models/Form.php rename to library/Form.php