diff --git a/hivemind b/hivemind new file mode 100755 index 0000000..78a10da Binary files /dev/null and b/hivemind differ diff --git a/php/bootstrap.php b/php/bootstrap.php index e69de29..40d6a64 100644 --- a/php/bootstrap.php +++ b/php/bootstrap.php @@ -0,0 +1,21 @@ +connect('127.0.0.1', 6379); + +$mysql_user = ''; +$mysql_pass = ''; + +$db = new PDO('mysql:host=127.0.0.1;dbname=certalertbot;charset=utf8mb4', $mysql_user, $mysql_pass); + +$stmt = $db->prepare("SELECT id, chatid, type, value FROM rules"); +$stmt->execute(); +$rules = $stmt->fetchAll(PDO::FETCH_ASSOC); + +foreach ($rules as $rule) { + $toadd = array(); + $id = $rule["id"]; + $toadd["id"] = $id; + $toadd["value"] = array("t" => $rule["type"], "v" => $rule["value"], "c" => $rule["chatid"]); + $toadd = json_encode($toadd, JSON_NUMERIC_CHECK); + $redis->rPush('toadd', $toadd); +} diff --git a/php/certalert.php b/php/certalert.php new file mode 100644 index 0000000..6330a9e --- /dev/null +++ b/php/certalert.php @@ -0,0 +1,114 @@ +CertAlert bot +This bot sends an alert when a certificate matching a certain rule is logged in the Certificate Trasparency. + + +
/list ++To list the current rules. + +
/delete <id> ++To delete a rule. + +
/add <in/start/end> <string> ++To add a rule. +in mtaches the given substring in any postition, start at the beginning and end at the end + +For special characters use the IDNA encoding. +"; + +function reply($chatid, $reply) { + return file_get_contents(API_URL."sendmessage?chat_id=".$chatid."&text=".urlencode($reply)."&parse_mode=HTML"); +} + +$content = file_get_contents("php://input"); +//error_log($content); +$update = json_decode($content, true); +$chatid = $update["message"]["chat"]["id"]; + +$fromid = $update["message"]["from"]["id"]; +$fromusername = $update["message"]["from"]["username"]; +$command = explode(" ", $update['message']['text'])[0]; + +switch($command) { + case '/start': + $reply = $help; + break; + case '/list': + $stmt = $db->prepare("SELECT id, type, value FROM rules where userid = ? ORDER BY timestamp ASC"); + $stmt->execute(array($fromid)); + $rules = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (!empty($rules)) { + $reply = "ID\tType\tValue\n"; + foreach ($rules as $rule) { + switch($rule['type']) { + case 0: + $type = "in"; + break; + case 1: + $type = "start"; + break; + case 2: + $type = "end"; + break; + } + $reply .= $rule['id']."\t".$type."\t".htmlentities($rule['value'])."\n"; + } + } else { + $reply = "There are no rules yet"; + } + break; + break; + case '/add': + $exp = explode(" ", $update['message']['text']); + $type = $exp[1]; + $value = $exp[2]; + switch($type) { + case 'in': + $type = 0; + break; + case 'start': + $type = 1; + break; + case 'end': + $type = 2; + break; + default: + $type = -1; + break; + } + if ($type > -1) { + $stmt = $db->prepare("INSERT INTO rules (userid, chatid, type, value, timestamp) VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP())"); + $stmt->execute(array($fromid, $chatid, $type, $value)); + $reply = "Rule added, check with /list"; + } else { + $reply = "Invalid rule type."; + } + + break; + case '/delete': + $exp = explode(" ", $update['message']['text']); + $id = $exp[1]; + $stmt = $db->prepare("DELETE FROM rules WHERE id = ? AND userid = ?"); + $stmt->execute(array($id, $fromid)); + $reply = "Rule ".$id." deleted"; + break; + default: + $reply = "Unknown command"; + break; +} +reply($chatid, $reply); + +?> diff --git a/php/certalertbot.php b/php/certalertbot.php deleted file mode 100644 index e69de29..0000000