From bce1d01b6d43c4a81344eccb73bfd85f71abfcc3 Mon Sep 17 00:00:00 2001 From: Krombel Date: Thu, 8 Mar 2018 12:43:17 +0100 Subject: [PATCH] WIP: implement missing endpoints for mxisd --- database.php | 40 ++++++++++++++++++++++++++++ internal/directory_lookup.php | 33 +++++++++++++++++++++++ internal/identity_bulk.php | 49 +++++++++++++++++++++++++++++++++++ internal/identity_single.php | 43 ++++++++++++++++++++++++++++++ internal/login.php | 1 - 5 files changed, 165 insertions(+), 1 deletion(-) create mode 100644 internal/directory_lookup.php create mode 100644 internal/identity_bulk.php create mode 100644 internal/identity_single.php diff --git a/database.php b/database.php index 565bb84..166f791 100644 --- a/database.php +++ b/database.php @@ -276,6 +276,46 @@ class mxDatabase } return NULL; } + + function searchUserByName($search_term) { + $term = filter_var($search_term, FILTER_SANITIZE_STRING); + $result = array(); + $sql = "SELECT COUNT(*) FROM logins WHERE" + . " localpart LIKE '%" . $term . "%';"; + $res = $this->db->query($sql); + + if ($res->fetchColumn() > 0) { + $sql = "SELECT first_name, last_name, localpart FROM logins WHERE" + . " localpart LIKE '%" . $term . "%';"; + foreach ($this->db->query($sql) as $row) { + array_push($result, [ + "display_name" => $first_name . " " . $last_name, + "user_id" => $row["localpart"], + ]); + } + } + return $result; + } + + function searchUserByEmail($search_term) { + $term = filter_var($search_term, FILTER_SANITIZE_STRING); + $result = array(); + $sql = "SELECT COUNT(*) FROM logins WHERE" + . " email = '" . $term . "';"; + $res = $this->db->query($sql); + + if ($res->fetchColumn() > 0) { + $sql = "SELECT first_name, last_name, localpart FROM logins WHERE" + . " email = '" . $term . "';"; + foreach ($this->db->query($sql) as $row) { + array_push($result, [ + "display_name" => $first_name . " " . $last_name, + "user_id" => $row["localpart"], + ]); + } + } + return $result; + } } if (!isset($mx_db)) { diff --git a/internal/directory_lookup.php b/internal/directory_lookup.php new file mode 100644 index 0000000..7a44128 --- /dev/null +++ b/internal/directory_lookup.php @@ -0,0 +1,33 @@ + false, + "result" => [], +]; + +try { + $inputJSON = file_get_contents('php://input'); + $input = json_decode($inputJSON, TRUE); + if (!isset($input["by"])) { + throw new Exception('"id" is not defined'); + } + if (!isset($input["search_term"])) { + throw new Exception('"search_term" is not defined'); + } + switch ($input["by"]) { + case "name": + $response["result"] = $mx_db->searchUserByName($input["search_term"]); + break; + case "threepid": + $response["result"] = $mx_db->searchUserByEmail($input["search_term"]); + break; + default: + throw new Exception("unknown type for \"by\" param"); + } + +} catch (Exception $e) { + error_log("ídentity_bulk failed with error: " . $e->getMessage()); + $response["error"] = $e->getMessage(); +} +print (json_encode($response, JSON_PRETTY_PRINT) . "\n"); +?> \ No newline at end of file diff --git a/internal/identity_bulk.php b/internal/identity_bulk.php new file mode 100644 index 0000000..f4b5840 --- /dev/null +++ b/internal/identity_bulk.php @@ -0,0 +1,49 @@ + [] +]; +try { + $inputJSON = file_get_contents('php://input'); + $input = json_decode($inputJSON, TRUE); + if (!isset($input["lookup"])) { + throw new Exception('"lookup" is not defined'); + } + if (!is_array($input["lookup"])) { + throw new Exception('"lookup" is not an array'); + } + foreach ($input["lookup"] as $lookup) { + if (!isset($lookup["medium"])) { + throw new Exception('"lookup.medium" is not defined'); + } + if (!isset($lookup["address"])) { + throw new Exception('"lookup.address" is not defined'); + } + $res2 = array(); + switch ($lookup["medium"]) { + case "email": + $res2 = $mx_db->searchUserByEmail($input["lookup"]["address"]); + if (!empty($res2)) { + array_push($response["lookup"], [ + "medium" => $lookup["medium"], + "address" => $lookup["address"], + "id" => [ + "type" => "localpart", + "value" => $res2[0]["user_id"], + ] + ] + ); + } + case "msisdn": + error_log("sb requested a bulk lookup for msisdn"); + break; + default: + throw new Exception("unknown type for \"by\" param"); + } + } +} catch (Exception $e) { + error_log("ídentity_bulk failed with error: " . $e->getMessage()); + $response["error"] = $e->getMessage(); +} +print (json_encode($response, JSON_PRETTY_PRINT) . "\n"); +?> \ No newline at end of file diff --git a/internal/identity_single.php b/internal/identity_single.php new file mode 100644 index 0000000..0268660 --- /dev/null +++ b/internal/identity_single.php @@ -0,0 +1,43 @@ +searchUserByEmail($input["lookup"]["address"]); + if (!empty($res2)) { + $response = [ + "lookup" => [ + "medium" => $input["lookup"]["medium"], + "address" => $input["lookup"]["address"], + "id" => [ + "type" => "localpart", + "value" => $res2[0]["user_id"], + ] + ] + ]; + } + + + break; + default: + throw new Exception("unknown type for \"by\" param"); + } +} catch (Exception $e) { + error_log("ídentity_bulk failed with error: " . $e->getMessage()); + $response["error"] = $e->getMessage(); +} +print (json_encode($response, JSON_PRETTY_PRINT) . "\n"); +?> \ No newline at end of file diff --git a/internal/login.php b/internal/login.php index 3219255..e63bd08 100644 --- a/internal/login.php +++ b/internal/login.php @@ -5,7 +5,6 @@ $response = [ ] ]; -require_once("../config.php"); require_once("../database.php"); abstract class LoginRequester { const UNDEFINED = 0;