init commit
This commit is contained in:
41
data/data.php
Normal file
41
data/data.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
include_once('settings.php');
|
||||
require 'idObfuscation.php';
|
||||
|
||||
$ip = ($_SERVER['REMOTE_ADDR'] ?? "");
|
||||
$ispinfo = ($_POST["ispinfo"] ?? "");
|
||||
$extra = ($_POST["extra"] ?? "");
|
||||
$ua = ($_SERVER['HTTP_USER_AGENT'] ?? "");
|
||||
$lang=""; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = ($_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? "");
|
||||
$dl = ($_POST["dl"] ?? "");
|
||||
$ul = ($_POST["ul"] ?? "");
|
||||
$ping = ($_POST["ping"] ?? "");
|
||||
$jitter = ($_POST["jitter"] ?? "");
|
||||
$log = ($_POST["log"] ?? "");
|
||||
|
||||
if($db_type=="sqlite"){
|
||||
$conn = new PDO("sqlite:$Sqlite_db_file") or die("1");
|
||||
$conn->exec("
|
||||
CREATE TABLE IF NOT EXISTS `speedtest_users` (
|
||||
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
`ispinfo` text,
|
||||
`extra` text,
|
||||
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`ip` text NOT NULL,
|
||||
`ua` text NOT NULL,
|
||||
`lang` text NOT NULL,
|
||||
`dl` text,
|
||||
`ul` text,
|
||||
`ping` text,
|
||||
`jitter` text,
|
||||
`log` longtext
|
||||
);
|
||||
");
|
||||
$stmt = $conn->prepare("INSERT INTO speedtest_users (ip,ispinfo,extra,ua,lang,dl,ul,ping,jitter,log) VALUES (?,?,?,?,?,?,?,?,?,?)") or die("2");
|
||||
$stmt->execute(array($ip,$ispinfo,$extra,$ua,$lang,$dl,$ul,$ping,$jitter,$log)) or die("3");
|
||||
$id=$conn->lastInsertId();
|
||||
echo "id ".($enable_id_obfuscation?obfuscateId($id):$id);
|
||||
$conn = null;
|
||||
}
|
||||
else die("-1");
|
||||
?>
|
||||
43
data/idObfuscation.php
Normal file
43
data/idObfuscation.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
function getObfuscationSalt(){
|
||||
$saltFile=dirname(__FILE__)."/idObfuscation_salt.php";
|
||||
if(file_exists($saltFile)){
|
||||
require $saltFile;
|
||||
}else{
|
||||
$bytes=openssl_random_pseudo_bytes(4);
|
||||
$sf=fopen($saltFile,"w");
|
||||
fwrite($sf,chr(60)."?php\n");
|
||||
fwrite($sf,'$OBFUSCATION_SALT=0x'.bin2hex($bytes).";\n");
|
||||
fwrite($sf,"?".chr(62));
|
||||
fclose($sf);
|
||||
require $saltFile;
|
||||
}
|
||||
return isset($OBFUSCATION_SALT)?$OBFUSCATION_SALT:0;
|
||||
}
|
||||
/*
|
||||
This is a simple reversible hash function I made for encoding and decoding test IDs.
|
||||
It is not cryptographically secure, don't use it to hash passwords or something!
|
||||
*/
|
||||
function obfdeobf($id,$dec){
|
||||
$salt=getObfuscationSalt()&0xFFFFFFFF;
|
||||
$id=$id&0xFFFFFFFF;
|
||||
if($dec){
|
||||
$id=$id^$salt;
|
||||
$id=(($id&0xAAAAAAAA)>>1)|($id&0x55555555)<<1;
|
||||
$id=(($id&0x0000FFFF)<<16)|(($id&0xFFFF0000)>>16);
|
||||
return $id;
|
||||
}else{
|
||||
$id=(($id&0x0000FFFF)<<16)|(($id&0xFFFF0000)>>16);
|
||||
$id=(($id&0xAAAAAAAA)>>1)|($id&0x55555555)<<1;
|
||||
return $id^$salt;
|
||||
}
|
||||
}
|
||||
function obfuscateId($id){
|
||||
return str_pad(base_convert(obfdeobf($id+1,false),10,36),7,0,STR_PAD_LEFT);
|
||||
}
|
||||
function deobfuscateId($id){
|
||||
return obfdeobf(base_convert($id,36,10),true)-1;
|
||||
}
|
||||
|
||||
//IMPORTANT: DO NOT ADD ANYTHING BELOW THE PHP CLOSING TAG, NOT EVEN EMPTY LINES!
|
||||
?>
|
||||
157
data/index.php
Normal file
157
data/index.php
Normal file
@@ -0,0 +1,157 @@
|
||||
<?php
|
||||
session_start();
|
||||
error_reporting(0);
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>HTML5 Speedtest - Stats</title>
|
||||
<style type="text/css">
|
||||
html,body{
|
||||
margin:0;
|
||||
padding:0;
|
||||
border:none;
|
||||
width:100%; min-height:100%;
|
||||
}
|
||||
html{
|
||||
background-color: hsl(198,72%,35%);
|
||||
font-family: "Segoe UI","Roboto",sans-serif;
|
||||
}
|
||||
body{
|
||||
background-color:#FFFFFF;
|
||||
box-sizing:border-box;
|
||||
width:100%;
|
||||
max-width:70em;
|
||||
margin:4em auto;
|
||||
box-shadow:0 1em 6em #00000080;
|
||||
padding:1em 1em 4em 1em;
|
||||
border-radius:0.4em;
|
||||
}
|
||||
h1,h2,h3,h4,h5,h6{
|
||||
font-weight:300;
|
||||
margin-bottom: 0.1em;
|
||||
}
|
||||
h1{
|
||||
text-align:center;
|
||||
}
|
||||
table{
|
||||
margin:2em 0;
|
||||
width:100%;
|
||||
}
|
||||
table, tr, th, td {
|
||||
border: 1px solid #AAAAAA;
|
||||
}
|
||||
th {
|
||||
width: 6em;
|
||||
}
|
||||
td {
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>HTML5 Speedtest - Stats</h1>
|
||||
<?php
|
||||
include_once("settings.php");
|
||||
require "idObfuscation.php";
|
||||
if($stats_password == "default"){
|
||||
?>
|
||||
change password in settings.php
|
||||
<?php
|
||||
}else if($_SESSION["logged"]===true){
|
||||
if($_GET["op"]=="logout"){
|
||||
$_SESSION["logged"]=false;
|
||||
?><script type="text/javascript">window.location=location.protocol+"//"+location.host+location.pathname;</script><?php
|
||||
}else{
|
||||
$conn=null;
|
||||
if($db_type=="mysql"){
|
||||
$conn = new mysqli($MySql_hostname, $MySql_username, $MySql_password, $MySql_databasename);
|
||||
}else if($db_type=="sqlite"){
|
||||
$conn = new PDO("sqlite:$Sqlite_db_file");
|
||||
} else if($db_type=="postgresql"){
|
||||
$conn_host = "host=$PostgreSql_hostname";
|
||||
$conn_db = "dbname=$PostgreSql_databasename";
|
||||
$conn_user = "user=$PostgreSql_username";
|
||||
$conn_password = "password=$PostgreSql_password";
|
||||
$conn = new PDO("pgsql:$conn_host;$conn_db;$conn_user;$conn_password");
|
||||
}else die();
|
||||
?>
|
||||
<form action="index.php" method="GET"><input type="hidden" name="op" value="logout" /><input type="submit" value="Logout" /></form>
|
||||
<form action="index.php" method="GET">
|
||||
<h3>Search test results</h6>
|
||||
<input type="hidden" name="op" value="id" />
|
||||
<input type="text" name="id" id="id" placeholder="Test ID" value=""/>
|
||||
<input type="submit" value="Find" />
|
||||
<input type="submit" onclick="document.getElementById('id').value=''" value="Show last 100 tests" />
|
||||
</form>
|
||||
<?php
|
||||
$q=null;
|
||||
if($_GET["op"]=="id"&&!empty($_GET["id"])){
|
||||
$id=$_GET["id"];
|
||||
if($enable_id_obfuscation) $id=deobfuscateId($id);
|
||||
if($db_type=="sqlite"){
|
||||
$q=$conn->prepare("select id,timestamp,ip,ispinfo,ua,lang,dl,ul,ping,jitter,log,extra from speedtest_users where id=?");
|
||||
$q->execute(array($id));
|
||||
}
|
||||
else die();
|
||||
}else{
|
||||
if($db_type=="sqlite"){
|
||||
$q=$conn->prepare("select id,timestamp,ip,ispinfo,ua,lang,dl,ul,ping,jitter,log,extra from speedtest_users order by timestamp desc limit 0,100");
|
||||
$q->execute();
|
||||
}
|
||||
else die();
|
||||
}
|
||||
while(true){
|
||||
$id=null; $timestamp=null; $ip=null; $ispinfo=null; $ua=null; $lang=null; $dl=null; $ul=null; $ping=null; $jitter=null; $log=null; $extra=null;
|
||||
if($db_type=="sqlite"){
|
||||
if(!($row=$q->fetch())) break;
|
||||
$id=$row["id"];
|
||||
$timestamp=$row["timestamp"];
|
||||
$ip=$row["ip"];
|
||||
$ispinfo=$row["ispinfo"];
|
||||
$ua=$row["ua"];
|
||||
$lang=$row["lang"];
|
||||
$dl=$row["dl"];
|
||||
$ul=$row["ul"];
|
||||
$ping=$row["ping"];
|
||||
$jitter=$row["jitter"];
|
||||
$log=$row["log"];
|
||||
}else die();
|
||||
?>
|
||||
<table>
|
||||
<tr><th>Test ID</th><td><?=htmlspecialchars(($enable_id_obfuscation?obfuscateId($id):$id), ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>Date and time</th><td><?=htmlspecialchars($timestamp, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>IP and ISP Info</th><td><?=$ip ?><br/><?=htmlspecialchars($ispinfo, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>User agent and locale</th><td><?=$ua ?><br/><?=htmlspecialchars($lang, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>Download speed</th><td><?=htmlspecialchars($dl, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>Upload speed</th><td><?=htmlspecialchars($ul, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>Ping</th><td><?=htmlspecialchars($ping, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>Jitter</th><td><?=htmlspecialchars($jitter, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
<tr><th>Log</th><td><?=htmlspecialchars($log, ENT_HTML5, 'UTF-8') ?></td></tr>
|
||||
</table>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
}
|
||||
}else{
|
||||
if($_GET["op"]=="login"&&$_POST["password"]===$stats_password){
|
||||
$_SESSION["logged"]=true;
|
||||
?><script type="text/javascript">window.location=location.protocol+"//"+location.host+location.pathname;</script><?php
|
||||
}else{
|
||||
?>
|
||||
<form action="index.php?op=login" method="POST">
|
||||
<h3>Login</h3>
|
||||
<input type="password" name="password" placeholder="Password" value=""/>
|
||||
<input type="submit" value="Login" />
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
11
data/telemetry_settings.php
Normal file
11
data/telemetry_settings.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
$db_type = "sqlite";
|
||||
|
||||
$stats_password = "default";
|
||||
|
||||
$enable_id_obfuscation = false;
|
||||
|
||||
$Sqlite_db_file = "../../data.sql";
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user