1
0
mirror of https://github.com/binary-kitchen/doorlockd synced 2024-06-29 10:35:08 +02:00
doorlockd-mirror/webfrontend/index.php
2015-09-25 00:50:10 +02:00

165 lines
3.6 KiB
PHP

<?php
function tellLock($pCommand, $pUser, $pPass, $pToken, $pIp){
$json = '{
"user":' . json_encode( $pUser ) . ',
"password":' . json_encode( $pPass ) . ',
"command":' . json_encode( $pCommand ) . ',
"token":' . json_encode( $pToken ) . ',
"ip":' . json_encode( $pIp ) . '
}'."\n";
$address = "127.0.0.1";
$port = "5555";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: " . socket_strerror(socket_last_error()) . "\n";
}
$result = socket_connect($socket, $address, $port);
if ($result === false) {
echo "socket_connect() failed: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_write($socket, $json, strlen($json));
$result = socket_read($socket, 1024);
socket_close($socket);
return $result;
}
$showLoginForm = false;
$showSuccess = false;
$showFailure = false;
$isApi = false;
$pIp = $_SERVER[ 'REMOTE_ADDR' ];
if( $_SERVER[ 'REQUEST_METHOD' ] == "POST" ) {
if (array_key_exists("user", $_POST)
&& array_key_exists('pass', $_POST)
&& array_key_exists('token', $_POST)
&& array_key_exists('command', $_POST)
&& array_key_exists('api', $_POST))
{
$pUser = $_POST[ 'user' ];
$pPass = $_POST[ 'pass' ];
$pToken = $_POST[ 'token' ];
$pCommand = $_POST[ 'command' ];
$pApi = $_POST[ 'api' ];
if ($pApi == "true")
{
$isApi = true;
}
$jsonResponse = json_decode(tellLock($pCommand, $pUser, $pPass, $pToken, $pIp), true);
if ($jsonResponse == null || !isset($jsonResponse['message']) || !isset($jsonResponse['code'])) {
$showFailure = true;
$failureMsg = 'Error parsing JSON response';
} else {
$failureMsg = $jsonResponse['message'];
$code = $jsonResponse['code'];
$showSuccess = ($code == 0);
$showFailure = !$showSuccess;
}
} else {
$failureMsg = 'Invalid Request';
$showFailure = true;
}
} else {
// This is done by apache mod_rewrite
$pToken = $_GET[ 'token' ];
$lToken = preg_replace( '/[^0-9a-fA-F]/i', "", $pToken );
if(strlen($lToken) != 16) {
$showFailure = true;
$failureMsg = "Please provide Token";
} else {
$showLoginForm = true;
}
}
if ($isApi == false) {
?>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
</head>
<body>
<style>
* {
font: normal 30px Arial,sans-serif;
}
body {
background-color: #037;
color: white;
background-image: url('logo.svg' );
background-repeat: repeat;
background-size: 300%;
background-position: -200px -100px;
}
form {
position: relative;
display: block;
width: auto;
text-align: center;
}
input {
position: relative;
display: block;
width: auto;
width: 100%;
}
button {
width: 100%;
margin-top: 40px;
}
</style>
<?php if( $showLoginForm ): ?>
<form name="login" method="post" action="/">
<label for="user">User</label>
<input id="user" type="text" name="user">
<label for="pass">Pass</label>
<input id="pass" type="password" name="pass">
<input type="hidden" name="token" value="<?php echo $lToken;?>">
<input type="hidden" name="api" value="false">
<button name="command" value="unlock">Open</button>
<hr/>
<button name="command" value="lock">Lock</button>
</form>
<?php elseif( $showSuccess ): ?>
<h1>Welcome Cpt. Cook</h1>
<?php elseif( $showFailure ): ?>
<h1>Something went wrong: <?php echo $failureMsg; ?></h1>
<?php endif; ?>
</body>
</html>
<?php
} else {
echo $code;
}
?>