Giulio 3 months ago
parent
commit
589f5b0f35
4 changed files with 135 additions and 0 deletions
  1. BIN
      hivemind
  2. 21 0
      php/bootstrap.php
  3. 114 0
      php/certalert.php
  4. 0 0
      php/certalertbot.php

BIN
hivemind


+ 21 - 0
php/bootstrap.php

@@ -0,0 +1,21 @@
+<?php
+$redis = new Redis();
+$redis->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);
+}	

+ 114 - 0
php/certalert.php

@@ -0,0 +1,114 @@
+<?php
+
+define('BOT_TOKEN', '');
+define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');
+
+$mysql_user	= '';
+$mysql_pass	= '';
+
+$db = new PDO('mysql:host=127.0.0.1;dbname=certalertbot;charset=utf8mb4', $mysql_user, $mysql_pass);
+
+$help = "
+<strong>CertAlert</strong> bot
+This bot sends an alert when a certificate matching a certain rule is logged in the Certificate Trasparency.
+
+
+<pre>/list
+</pre>
+To list the current rules.
+
+<pre>/delete &lt;id&gt;
+</pre>
+To delete a rule.
+
+<pre>/add &lt;in/start/end&gt; &lt;string&gt;
+</pre>
+To add a rule.
+<i>in</i> mtaches the given substring in any postition, <i>start</i> at the beginning and <i>end</i> 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 = "<strong>ID\tType\tValue</strong>\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<i>".$type."</i>\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);
+	
+?>

+ 0 - 0
php/certalertbot.php