From a937d051635b6977569fe25408e7bf6f5c453814 Mon Sep 17 00:00:00 2001 From: Richard Underwood Date: Mon, 19 Sep 2016 15:40:10 +0100 Subject: [PATCH 01/20] Missing variable in users.php --- users.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/users.php b/users.php index 019619c..e6273b3 100644 --- a/users.php +++ b/users.php @@ -85,6 +85,8 @@ case "update": break; case "delete": + $emailaddress = isset($_POST['emailaddress']) ? $_POST['emailaddress'] : ''; + if ($emailaddress != '' and delete_user($emailaddress) !== FALSE) { jtable_respond(null, 'delete'); } else { From e172ba6502053969d19f1f060463775b036f4d6b Mon Sep 17 00:00:00 2001 From: Richard Underwood Date: Fri, 30 Sep 2016 14:23:09 +0100 Subject: [PATCH 02/20] Added group table to users tab. Allow group name editing for now. --- groups.php | 87 ++++++++++++++++++++++++++++++++++++++++ includes/groups.inc.php | 88 +++++++++++++++++++++++++++++++++++++++++ includes/misc.inc.php | 5 ++- index.php | 51 +++++++++++++++++++++--- 4 files changed, 224 insertions(+), 7 deletions(-) create mode 100644 groups.php create mode 100644 includes/groups.inc.php diff --git a/groups.php b/groups.php new file mode 100644 index 0000000..1037363 --- /dev/null +++ b/groups.php @@ -0,0 +1,87 @@ + $group['name'] . " - " . $group['desc'], + 'Value' => $group['name']); + } + jtable_respond($retgroups, 'options'); + break; + +case "create": + $name = isset($_POST['name']) ? $_POST['name'] : ''; + $desc = isset($_POST['desc']) ? $_POST['desc'] : ''; + + if (!valid_group($name)) { + jtable_respond(null, 'error', "Please only use ^[a-z0-9@_.-]+$ for group names"); + } + + if (group_exists($name)) { + jtable_respond(null, 'error', 'Group already exists'); + } + + if (add_group($name, $desc)) { + $result = array('name' => $name, 'desc' => $desc); + jtable_respond($result, 'single'); + } else { + jtable_respond(null, 'error', 'Could not create group'); + } + break; + +case "update": + $id = isset($_POST['id']) ? intval($_POST['id']) : ''; + $name = isset($_POST['name']) ? $_POST['name'] : ''; + $desc = isset($_POST['desc']) ? $_POST['desc'] : ''; + + if ($id != '' and update_group($id, $name, $desc)) { + $result = array('name' => $name, 'desc' => $desc); + jtable_respond($result, 'single'); + } else { + jtable_respond(null, 'error', 'Could not update group'); + } + break; + +case "delete": + $id = isset($_POST['id']) ? intval($_POST['id']) : ''; + + if ($id != '' and delete_group($id) !== FALSE) { + jtable_respond(null, 'delete'); + } else { + jtable_respond(null, 'error', 'Could not delete group'); + } + break; + +default: + jtable_respond(null, 'error', 'Invalid action'); + break; +} diff --git a/includes/groups.inc.php b/includes/groups.inc.php new file mode 100644 index 0000000..e9609d9 --- /dev/null +++ b/includes/groups.inc.php @@ -0,0 +1,88 @@ +query('SELECT id, name, desc FROM groups ORDER BY name'); + $ret = array(); + while ($row = $r->fetchArray(SQLITE3_ASSOC)) { + array_push($ret, $row); + } + + return $ret; +} + +function get_group_info($name) { + $db = get_db(); + $q = $db->prepare('SELECT * FROM groups WHERE name = ?'); + $q->bindValue(1, $name); + $result = $q->execute(); + $groupinfo = $result->fetchArray(SQLITE3_ASSOC); + $db->close(); + + return $groupinfo; +} + +function group_exists($name) { + return (bool) get_group_info($name); +} + +function add_group($name, $desc) { + $db = get_db(); + $q = $db->prepare('INSERT INTO groups (name, desc) VALUES (?, ?)'); + $q->bindValue(1, $name, SQLITE3_TEXT); + $q->bindValue(2, $desc, SQLITE3_TEXT); + $ret = $q->execute(); + $db->close(); + + writelog("Added group $name ($desc)."); + return $ret; +} + +function update_group($id, $name, $desc) { + $db = get_db(); + + $q = $db->prepare('SELECT * FROM groups WHERE id = ?'); + $q->bindValue(1, $id, SQLITE3_INTEGER); + $result = $q->execute(); + $groupinfo = $result->fetchArray(SQLITE3_ASSOC); + $q->close(); + $oldname = $groupinfo['name']; + + $q = $db->prepare('UPDATE groups SET name = ?, desc = ? WHERE id = ?'); + $q->bindValue(1, $name, SQLITE3_TEXT); + $q->bindValue(2, $desc, SQLITE3_TEXT); + $q->bindValue(3, $id, SQLITE3_INTEGER); + writelog("Updating group $oldname to: $name ($desc) "); + $ret = $q->execute(); + $db->close(); + + return $ret; +} + +function delete_group($id) { + $db = get_db(); + + $q = $db->prepare('SELECT * FROM groups WHERE id = ?'); + $q->bindValue(1, $id, SQLITE3_INTEGER); + $result = $q->execute(); + $groupinfo = $result->fetchArray(SQLITE3_ASSOC); + $q->close(); + + if($groupinfo) { + $q = $db->prepare('DELETE FROM groups WHERE id = ?'); + $q->bindValue(1, $id, SQLITE3_INTEGER); + $ret = $q->execute(); + $db->close(); + + writelog("Deleted group " . $groupinfo['name'] . "."); + return $ret; + } else { + return false; + } +} + +function valid_group($name) { + return ( bool ) preg_match( "/^[a-z0-9@_.-]+$/i" , $name ); +} + +?> diff --git a/includes/misc.inc.php b/includes/misc.inc.php index a818cb2..5fa6b0b 100644 --- a/includes/misc.inc.php +++ b/includes/misc.inc.php @@ -1,6 +1,6 @@ diff --git a/index.php b/index.php index 8c764f4..95dcdb2 100644 --- a/index.php +++ b/index.php @@ -160,7 +160,7 @@ if ($blocklogin === TRUE) {