]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blame_incremental - api/search.php
Search: Make vaguely wildcard-y
[irc/unrealircd/unrealircd-webpanel.git] / api / search.php
... / ...
CommitLineData
1<?php
2
3require_once('common_api.php');
4
5if (!$rpc)
6 die();
7
8if (!$_GET || !isset($_GET['search']))
9{
10 echo json_encode(["error" => "No search query"]);
11 die;
12}
13$search_term = $_GET['search'];
14$users = $rpc->user()->getAll();
15$chans = $rpc->channel()->getAll(2);
16$logs = $rpc->log()->getAll();
17$servers = $rpc->server()->getAll();
18$server_bans = $rpc->serverban()->getAll();
19$excepts = $rpc->serverbanexception()->getAll();
20$spamfilter = $rpc->spamfilter()->getAll();
21$name_bans = $rpc->nameban()->getAll();
22
23$search_results = [
24 "users" => [],
25 "channels" => [],
26 "channel_bans" => [],
27 "channel_invites" => [],
28 "channel_excepts" => [],
29 "logs" => [],
30 "server_bans" => [],
31 "excepts" => [],
32 "spamfilter" => [],
33 "name_bans" => []
34];
35
36function strcasestr($haystack, $needle) : bool
37{
38 $needle = strtolower($needle);
39 $haystack = strtolower($haystack);
40 $needle = preg_quote($needle, '/');
41 $needle = str_replace('\*', '.*', $needle);
42 $pattern = '/.*' . $needle . '.*' . '/';
43
44 return preg_match($pattern, $haystack) === 1;
45}
46foreach ($users as $u)
47{
48 if (strcasestr($u->name,$search_term))
49 {
50 $o = (object)[];
51 $o->name = $u->name;
52 $o->data = $u->name;
53 $o->label = "nick";
54 $search_results['users'][] = $o;
55 }
56 if (strcasestr($u->details,$search_term))
57 {
58 $o = (object)[];
59 $o->name = $u->name;
60 $o->data = $u->details;
61 $o->label = "userhost";
62 $search_results['users'][] = $o;
63 }
64 if (strcasestr($u->user->realname,$search_term))
65 {
66 $o = (object)[];
67 $o->name = $u->name;
68 $o->data = $u->user->realname;
69 $o->label = "GECOS";
70 $search_results['users'][] = $o;
71 }
72 if (@strcasestr($u->user->account,$search_term))
73 {
74 $o = (object)[];
75 $o->name = $u->name;
76 $o->data = $u->account;
77 $o->label = "account";
78 $search_results['users'][] = $o;
79 }
80 if (isset($u->geoip))
81 {
82 error_log("It's set");
83 if (@strcasestr($u->geoip->asn,$search_term))
84 {
85 $o = (object)[];
86 $o->name = $u->name;
87 $o->data = $u->geoip->asn;
88 $o->label = "ASN";
89 $search_results['users'][] = $o;
90 }
91 if (@strcasestr($u->geoip->asname,$search_term))
92 {
93 $o = (object)[];
94 $o->name = $u->name;
95 $o->data = $u->geoip->asname;
96 $o->label = "ASN Name";
97 $search_results['users'][] = $o;
98 }
99 if (@strcasestr($u->geoip->country_code,$search_term))
100 {
101 $o = (object)[];
102 $o->name = $u->name;
103 $o->data = $u->geoip->country_code;
104 $o->label = "Country Code";
105 $search_results['users'][] = $o;
106 }
107 }
108 else{
109 error_log(json_encode($u));
110 }
111}
112foreach ($chans as $c)
113{
114 if (strcasestr($c->name,$search_term))
115 {
116 $c->label = "channel name";
117 $search_results['channels'][] = $c;
118 }
119 if (isset($c->topic) && strcasestr($c->topic,$search_term))
120 {
121 $c->label = "channel topic";
122 $search_results['channels'][] = $c;
123 }
124 if (isset($c->bans))
125 {
126 foreach ($c->bans as $i)
127 {
128 if (!strcasestr($i->name, $search_term))
129 continue;
130
131 $new = (object)[];
132 $new->name = $c->name;
133 $new->topic = $i->name;
134 $new->label = "ban (+b)";
135 $search_results['channels'][] = $new;
136 error_log("$new->label for $i->name");
137 }
138 }
139 if (isset($c->ban_exemptions))
140 {
141 foreach ($c->ban_exemptions as $i)
142 {
143 if (!strcasestr($i->name, $search_term))
144 continue;
145
146 $new = (object)[];
147 $new->name = $c->name;
148 $new->topic = $i->name;
149 $new->label = "exempt (+e)";
150 $search_results['channels'][] = $new;
151 error_log("$new->label for $i->name");
152 }
153 }
154 if (isset($c->invite_exceptions))
155 {
156 foreach ($c->invite_exceptions as $i)
157 {
158 if (!strcasestr($i->name, $search_term))
159 continue;
160
161 $new = (object)[];
162 $new->name = $c->name;
163 $new->topic = $i->name;
164 $new->label = "invite (+I)";
165 $search_results['channels'][] = $new;
166 }
167 }
168}
169foreach ($logs as $l)
170 if (strcasestr($l->msg,$search_term))
171 $search_results['logs'][] = $l;
172
173foreach ($servers as $s)
174 if (strcasestr($s->name, $search_term))
175 $search_results['servers'][] = $s;
176
177foreach ($server_bans as $ban)
178{
179
180 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
181 {
182 $o = (object)[];
183 $o->label = $ban->type_string;
184 $o->name = $ban->name;
185 $o->data = $ban->reason;
186 $search_results['server_bans'][] = $o;
187 }
188 elseif (strstr($ban->name,$search_term))
189 {
190 $o = (object)[];
191 $o->label = $ban->type_string;
192 $o->name = "<code>$ban->name</code>";
193 $o->data = $ban->reason;
194 $search_results['server_bans'][] = $o;
195 }
196
197 elseif (strcasestr($ban->reason,$search_term))
198 {
199 $o = (object)[];
200 $o->label = $ban->type_string." reason";
201 $o->name = "<code>$ban->name</code>";
202 $o->data = $ban->reason;
203 $search_results['server_bans'][] = $o;
204 }
205}
206
207foreach ($excepts as $ban)
208{
209 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
210 {
211 $o = (object)[];
212 $o->label = $ban->type_string;
213 $o->name = $ban->name;
214 $o->data = $ban->reason;
215 $search_results['excepts'][] = $o;
216 }
217 elseif (strstr($ban->name,$search_term))
218 {
219 $o = (object)[];
220 $o->label = $ban->type_string;
221 $o->name = "<code>$ban->name</code>";
222 $o->data = $ban->reason;
223 $search_results['excepts'][] = $o;
224 }
225 elseif (strcasestr($ban->reason,$search_term))
226 {
227 $o = (object)[];
228 $o->label = $ban->type_string." reason";
229 $o->name = $ban->name;
230 $o->data = $ban->reason;
231 $search_results['excepts'][] = $o;
232 }
233}
234
235
236foreach ($name_bans as $ban)
237{
238 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
239 {
240 $o = (object)[];
241 $o->label = $ban->type_string;
242 $o->name = $ban->name;
243 $o->data = $ban->reason;
244 $search_results['name_bans'][] = $o;
245 }
246 elseif (strstr($ban->name,$search_term))
247 {
248 $o = (object)[];
249 $o->label = $ban->type_string;
250 $o->name = "<code>$ban->name</code>";
251 $o->data = $ban->reason;
252 $search_results['name_bans'][] = $o;
253 }
254 elseif (strcasestr($ban->reason,$search_term))
255 {
256 $o = (object)[];
257 $o->label = $ban->type_string." reason";
258 $o->name = $ban->name;
259 $o->data = $ban->reason;
260 $search_results['name_bans'][] = $o;
261 }
262}
263
264foreach ($spamfilter as $ban)
265{
266 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
267 {
268 $o = (object)[];
269 $o->label = $ban->type_string;
270 $o->name = $ban->name;
271 $o->data = $ban->reason;
272 $search_results['spamfilter'][] = $o;
273 }
274 elseif (strstr($ban->name,$search_term))
275 {
276 $o = (object)[];
277 $o->label = $ban->type_string;
278 $o->name = "<code>$ban->name</code>";
279 $o->data = $ban->reason;
280 $search_results['spamfilter'][] = $o;
281 }
282 elseif (strcasestr($ban->reason,$search_term))
283 {
284 $o = (object)[];
285 $o->label = $ban->type_string." reason";
286 $o->name = $ban->name;
287 $o->data = $ban->reason;
288 $search_results['spamfilter'][] = $o;
289 }
290}
291
292
293
294echo json_encode($search_results);