From 3981d9551def55b42499330c3e2d60e795d2b59b Mon Sep 17 00:00:00 2001 From: xinatorus Date: Tue, 12 May 2020 19:25:08 +0200 Subject: [PATCH 1/3] refactoring --- app/api/AuthApi.php | 4 +- app/models/AuthManager.php | 76 +++++++++++++++++++------------------- 2 files changed, 40 insertions(+), 40 deletions(-) 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/models/AuthManager.php b/app/models/AuthManager.php index 24c76b4..88c96a6 100644 --- a/app/models/AuthManager.php +++ b/app/models/AuthManager.php @@ -1,45 +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 getToken($username, $password){ + $userManager = new UserManager(); + if ($username != '' || $password != ''){ + $userLogedIn = $userManager->loginNew($username, $password); - public function deleteToken($token){ - Db::command ('DELETE FROM tokens WHERE token=?', array ($token)); - return true; - } + 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; - 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 $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; - } + } else if (count($tokens) == 0) { + return false; + }; + return false; + } } From c2203b452a8bf36fe6f3ec1d6111e58649fea6ef Mon Sep 17 00:00:00 2001 From: xinatorus Date: Tue, 12 May 2020 19:41:46 +0200 Subject: [PATCH 2/3] refactoring, added rooms api --- app/Routes.php | 5 ++++- app/api/DevicesApi.php | 2 +- app/api/RoomsApi.php | 13 +++++++++++++ app/models/{ => managers}/AuthManager.php | 0 app/models/{ => managers}/AutomationManager.php | 0 app/models/{ => managers}/ChartManager.php | 0 app/models/{ => managers}/DashboardManager.php | 0 app/models/{ => managers}/DeviceManager.php | 0 app/models/{ => managers}/FallbackManager.php | 0 app/models/{ => managers}/LanguageManager.php | 0 app/models/{ => managers}/LogManager.php | 0 app/models/{ => managers}/NetworkManager.php | 0 app/models/{ => managers}/NotificationManager.php | 0 app/models/{ => managers}/RecordManager.php | 0 app/models/{ => managers}/RoomManager.php | 0 app/models/{ => managers}/SceneManager.php | 0 app/models/{ => managers}/SubDeviceManager.php | 0 app/models/{ => managers}/UserManager.php | 0 app/models/{ => managers}/Utilities.php | 0 {app/models => library}/Form.php | 0 20 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 app/api/RoomsApi.php rename app/models/{ => managers}/AuthManager.php (100%) rename app/models/{ => managers}/AutomationManager.php (100%) rename app/models/{ => managers}/ChartManager.php (100%) rename app/models/{ => managers}/DashboardManager.php (100%) rename app/models/{ => managers}/DeviceManager.php (100%) rename app/models/{ => managers}/FallbackManager.php (100%) rename app/models/{ => managers}/LanguageManager.php (100%) rename app/models/{ => managers}/LogManager.php (100%) rename app/models/{ => managers}/NetworkManager.php (100%) rename app/models/{ => managers}/NotificationManager.php (100%) rename app/models/{ => managers}/RecordManager.php (100%) rename app/models/{ => managers}/RoomManager.php (100%) rename app/models/{ => managers}/SceneManager.php (100%) rename app/models/{ => managers}/SubDeviceManager.php (100%) rename app/models/{ => managers}/UserManager.php (100%) rename app/models/{ => managers}/Utilities.php (100%) rename {app/models => library}/Form.php (100%) 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/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/managers/AuthManager.php similarity index 100% rename from app/models/AuthManager.php rename to app/models/managers/AuthManager.php 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/Form.php b/library/Form.php similarity index 100% rename from app/models/Form.php rename to library/Form.php From 99610166839aed5b215bfb03f38f4239c00169b3 Mon Sep 17 00:00:00 2001 From: xinatorus Date: Tue, 12 May 2020 20:28:04 +0200 Subject: [PATCH 3/3] widget types --- app/models/types/WidgetTypes.php | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/models/types/WidgetTypes.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']; + } +}