|
| 1 | +#!/usr/bin/php |
| 2 | +<?php |
| 3 | + |
| 4 | +define('DEBUG', true); |
| 5 | +usage(count($argv) < 3 || count($argv) > 4); |
| 6 | + |
| 7 | +$operation = $argv[1]; |
| 8 | +$host = $argv[2]; |
| 9 | + |
| 10 | +$configFile = file_get_contents('/etc/prosody/storage.cfg.lua'); |
| 11 | +preg_match_all('/(host|database|port|username|password) *= *"?([^"\n]*)"?;/', $configFile, $matches); |
| 12 | +$config = array(); |
| 13 | +foreach($matches[1] AS $ix => $key) { |
| 14 | + $config[$key] = $matches[2][$ix]; |
| 15 | +} |
| 16 | + |
| 17 | +try { |
| 18 | + // Connect to database |
| 19 | + $db = new mysqli($config['host'], $config['username'], $config['password'], $config['database']); |
| 20 | + |
| 21 | + switch($operation){ |
| 22 | + case 'user': |
| 23 | + usage(count($argv) != 4); |
| 24 | + $user = $argv[3]; |
| 25 | + do_query($db->prepare("DELETE FROM prosody WHERE user = ? AND host = ?"), $host, $user); |
| 26 | + do_query($db->prepare("DELETE FROM prosodyarchive WHERE user = ? AND host = ?"), $host, $user); |
| 27 | + break; |
| 28 | + case 'domain': |
| 29 | + do_query($db->prepare("DELETE FROM prosody WHERE host = ?"), $host); |
| 30 | + do_query($db->prepare("DELETE FROM prosodyarchive WHERE host = ?"), $host); |
| 31 | + do_query($db->prepare("DELETE FROM prosody WHERE host LIKE ?"), "%.$host"); |
| 32 | + do_query($db->prepare("DELETE FROM prosodyarchive WHERE host LIKE ?"), "%.$host"); |
| 33 | + break; |
| 34 | + } |
| 35 | + $db->close(); |
| 36 | +} catch (Exception $ex) { |
| 37 | + var_dump($ex); |
| 38 | +} |
| 39 | + |
| 40 | + |
| 41 | +function do_query($query, $host, $user = false){ |
| 42 | + if($user !== false) |
| 43 | + $query->bind_param('ss', $user, $host); |
| 44 | + else |
| 45 | + $query->bind_param('s', $host); |
| 46 | + $query->execute(); |
| 47 | + $entries = $query->affected_rows; |
| 48 | + $query->close(); |
| 49 | + if(DEBUG) echo "$entries deleted!\n"; |
| 50 | + return $entries; |
| 51 | +} |
| 52 | + |
| 53 | +function result_false($cond = true) { |
| 54 | + if(!$cond) return; |
| 55 | + exit(1); |
| 56 | +} |
| 57 | + |
| 58 | +function usage($cond = false){ |
| 59 | + if(!$cond) return; |
| 60 | + echo "USAGE: \n prosody-purge domain my.domain.com \n prosody-purge user my.domain.com username \n"; |
| 61 | + result_false(); |
| 62 | +} |
0 commit comments