144 lines
6.1 KiB
PHP
144 lines
6.1 KiB
PHP
<?php
|
|
require_once("helper.php");
|
|
|
|
if (isset($_GET["addUser"])) {
|
|
if (checkAdduser($_GET["addUser"])) {
|
|
echo <<<ENDE
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>Smarthome control</title>
|
|
<link rel="icon" type="image/png" href="assets/img/favicon.png">
|
|
<!--end::Accessibility Meta Tags-->
|
|
|
|
<!--begin::Primary Meta Tags-->
|
|
<meta name="title" content="Smarthome control" />
|
|
<meta name="author" content="ColorlibHQ" />
|
|
<meta name="description" content="Smarthome control panel by m0." />
|
|
<meta name="keywords" content="smarthome dashboard, admin panel" />
|
|
<!--end::Primary Meta Tags-->
|
|
|
|
<!--begin::Fonts-->
|
|
<link rel="stylesheet" href="assets/fonts/font_poppins.css" media="print" onload="this.media='all'" />
|
|
<!--end::Fonts-->
|
|
|
|
<!--begin::Third Party Plugin(OverlayScrollbars)
|
|
<link rel="stylesheet" href="css/overlayscrollbars.min.css" />-->
|
|
<!--end::Third Party Plugin(OverlayScrollbars)-->
|
|
|
|
<!--begin::Third Party Plugin(Bootstrap Icons)-->
|
|
<link rel="stylesheet" href="css/bootstrap-icons.min.css" />
|
|
<!--end::Third Party Plugin(Bootstrap Icons)-->
|
|
|
|
<!--begin::Required Plugin(AdminLTE)-->
|
|
<link rel="stylesheet" href="./css/adminlte.css?v=2" />
|
|
<!--end::Required Plugin(AdminLTE)-->
|
|
|
|
|
|
</head>
|
|
<body onload="createRegistration()">
|
|
</body>
|
|
<script src="js/auth.js"></script>
|
|
<script>
|
|
async function createRegistration() {
|
|
try {
|
|
// check browser support
|
|
if (!window.fetch || !navigator.credentials || !navigator.credentials.create) {
|
|
throw new Error('Browser not supported.');
|
|
}
|
|
let keyName = encodeURIComponent(prompt('Bitte Hier den Namen des Schlüssels eingeben:'));
|
|
// get create args
|
|
let rep = await window.fetch('authServer.php?fn=getCreateArgs', {method:'GET', cache:'no-cache'});
|
|
//alert(await rep.text());
|
|
const createArgs = await rep.json();
|
|
// error handling
|
|
if (createArgs.success === false) {
|
|
throw new Error(createArgs.msg || 'unknown error occured');
|
|
}
|
|
|
|
// replace binary base64 data with ArrayBuffer. a other way to do this
|
|
// is the reviver function of JSON.parse()
|
|
recursiveBase64StrToArrayBuffer(createArgs);
|
|
|
|
// create credentials
|
|
const cred = await navigator.credentials.create(createArgs);
|
|
|
|
// create object
|
|
const authenticatorAttestationResponse = {
|
|
transports: cred.response.getTransports ? cred.response.getTransports() : null,
|
|
clientDataJSON: cred.response.clientDataJSON ? arrayBufferToBase64(cred.response.clientDataJSON) : null,
|
|
attestationObject: cred.response.attestationObject ? arrayBufferToBase64(cred.response.attestationObject) : null
|
|
};
|
|
|
|
// check auth on server side
|
|
rep = await window.fetch('authServer.php?fn=processCreate&name='+keyName, {
|
|
method : 'POST',
|
|
body : JSON.stringify(authenticatorAttestationResponse),
|
|
cache : 'no-cache'
|
|
});
|
|
authenticatorAttestationServerResponse = await rep.json();
|
|
// prompt server response
|
|
if (authenticatorAttestationServerResponse.success) {
|
|
window.alert(authenticatorAttestationServerResponse.msg || 'registration success');
|
|
if(!authenticatorAttestationServerResponse.msg){
|
|
window.location.href = "https://nas.el-wa.org/smart";
|
|
}
|
|
|
|
} else {
|
|
throw new Error(authenticatorAttestationServerResponse.msg);
|
|
}
|
|
|
|
} catch (err) {
|
|
window.alert(err.message || 'unknown error occured');
|
|
}
|
|
}
|
|
</script>
|
|
</html>
|
|
ENDE;
|
|
}
|
|
} else if (checkLogin()) {
|
|
|
|
include "restricted/header.php";
|
|
|
|
if(!isset($_GET["action"])){
|
|
$_GET["action"] = "solar";
|
|
}
|
|
$resource_content = "";
|
|
switch($_GET["action"]){
|
|
case "solar":
|
|
$resource_content .= str_replace("%%INSERTSVG%%", file_get_contents('assets/img/realtime.svg'), file_get_contents('restricted/solar.html'));
|
|
$resource_content .= file_get_contents('restricted/footer.html');
|
|
$resource_content .= "<script src='js/solar/solarMQTT.js'></script>";
|
|
break;
|
|
case "home":
|
|
include "restricted/home.php";
|
|
$resource_content .= file_get_contents('restricted/footer.html');
|
|
$resource_content .= "<script src='js/solar/autoActionFuncs.js'></script>";
|
|
$resource_content .= "<script src='js/solar/homeMQTT.js'></script>";
|
|
break;
|
|
case "heat":
|
|
$resource_content .= file_get_contents('restricted/heat.html');
|
|
$resource_content .= file_get_contents('restricted/footer.html');
|
|
$resource_content .= "<script src='js/solar/heatMQTT.js'></script>";
|
|
break;
|
|
case "history":
|
|
$resource_content .= file_get_contents('restricted/history.html');
|
|
$resource_content .= file_get_contents('restricted/footer.html');
|
|
$resource_content .= "<script src='js/solar/historyMQTT.js'></script>";
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
echo $resource_content;
|
|
} else {
|
|
echo <<<ENDE
|
|
<html>
|
|
<head><link rel="icon" type="image/png" href="assets/img/favicon.png"></head>
|
|
<body onload="checkRegistration()">
|
|
<script src="js/auth.js"></script>
|
|
</body>
|
|
</html>
|
|
ENDE;
|
|
}
|