Merge branch 'remastering' of https://git.steelants.cz/SImple-Home/PHP_SMART_HOME_V3 into remastering

This commit is contained in:
JonatanRek 2020-05-13 10:03:24 +02:00
commit 26dab209bd
23 changed files with 110 additions and 49 deletions

View File

@ -14,8 +14,11 @@ $router->any('/automation', 'Automation');
$router->any('/setting', 'Setting'); $router->any('/setting', 'Setting');
$router->any('/ajax', 'Ajax'); $router->any('/ajax', 'Ajax');
$router->post('/api/devices', 'DevicesApi@getAllDevices');
$router->post('/api/login', 'AuthApi@login'); $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->get('/api/HA/auth', 'GoogleHomeApi@autorize');
$router->any('/api/HA', 'GoogleHomeApi@response'); $router->any('/api/HA', 'GoogleHomeApi@response');

View File

@ -1,7 +1,7 @@
<?php <?php
class AuthApi { class AuthApi {
public function login(){ public function login(){
$token = (new ApiManager)->getToken($this->input->username,$this->input->password); $token = (new AuthManager)->getToken($this->input->username,$this->input->password);
if (!$token) { if (!$token) {
throw new Exception("Auth failed", 401); throw new Exception("Auth failed", 401);
} }
@ -10,7 +10,7 @@ class AuthApi {
public function logout(){ public function logout(){
$authenticationBearrer = $_SERVER['HTTP_AUTHORIZATION']; $authenticationBearrer = $_SERVER['HTTP_AUTHORIZATION'];
if (!(new ApiManager)->deleteToken($authenticationBearrer)) { if (!(new AuthManager)->deleteToken($authenticationBearrer)) {
throw new Exception("logout Failed", 401); throw new Exception("logout Failed", 401);
} }
} }

View File

@ -2,7 +2,7 @@
class DevicesApi extends ApiController{ class DevicesApi extends ApiController{
public function getAllDevices(){ public function default(){
$this->requireAuth(); $this->requireAuth();
$response = []; $response = [];

13
app/api/RoomsApi.php Normal file
View File

@ -0,0 +1,13 @@
<?php
class RoomsApi extends ApiController{
public function default(){
$this->requireAuth();
$response = [];
// TODO: process the request
$this->response($response);
}
}

View File

@ -1,45 +0,0 @@
<?php
class AuthManager {
public function getToken($username, $password){
$userManager = new UserManager();
if ($username != '' || $password != ''){
$userLogedIn = $userManager->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;
}
}

View File

@ -0,0 +1,45 @@
<?php
class AuthManager {
public function getToken($username, $password){
$userManager = new UserManager();
if ($username != '' || $password != ''){
$userLogedIn = $userManager->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;
}
}

View File

@ -0,0 +1,45 @@
<?php
class WidgetTypes {
const VALUE = 0;
const ICON = 1;
const BUTTON = 2;
const SWITH = 3;
const RANGE = 4;
const CUSTOM = 5;
private $types = [
self::VALUE => [
'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'];
}
}