send regex queries from the web UI

auto-update
Zlatin Balevsky 2022-02-07 01:33:26 +00:00
parent bab689d15e
commit 1f58ff6aba
No known key found for this signature in database
GPG Key ID: A72832072D525E41
3 changed files with 43 additions and 15 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: I2P MuWire\n" "Project-Id-Version: I2P MuWire\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-14 16:54+0000\n" "POT-Creation-Date: 2022-02-07 01:30+0000\n"
"Language: en\n" "Language: en\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
@ -207,8 +207,8 @@ msgstr ""
#: build/tmp_jsp/com/muwire/webui/TrustUsers_jsp.java:200 #: build/tmp_jsp/com/muwire/webui/TrustUsers_jsp.java:200
#: build/tmp_jsp/com/muwire/webui/Uploads_jsp.java:219 #: build/tmp_jsp/com/muwire/webui/Uploads_jsp.java:219
#: build/tmp_jsp/com/muwire/webui/Uploads_jsp.java:221 #: build/tmp_jsp/com/muwire/webui/Uploads_jsp.java:221
#: src/main/java//com/muwire/webui/SearchServlet.java:265 #: src/main/java//com/muwire/webui/SearchServlet.java:267
#: src/main/java//com/muwire/webui/SearchServlet.java:266 #: src/main/java//com/muwire/webui/SearchServlet.java:268
msgid "B/sec" msgid "B/sec"
msgstr "" msgstr ""
@ -1239,18 +1239,22 @@ msgid "MuWire is initializing, please wait"
msgstr "" msgstr ""
#: src/main/java//com/muwire/webui/SearchServlet.java:43 #: src/main/java//com/muwire/webui/SearchServlet.java:43
#: src/main/java//com/muwire/webui/SearchServlet.java:75 #: src/main/java//com/muwire/webui/SearchServlet.java:77
#: src/main/java//com/muwire/webui/SearchServlet.java:94 #: src/main/java//com/muwire/webui/SearchServlet.java:96
#: src/main/java//com/muwire/webui/SearchServlet.java:130 #: src/main/java//com/muwire/webui/SearchServlet.java:132
#: src/main/java//com/muwire/webui/SearchServlet.java:172 #: src/main/java//com/muwire/webui/SearchServlet.java:174
#: src/main/java//com/muwire/webui/SearchServlet.java:211 #: src/main/java//com/muwire/webui/SearchServlet.java:213
#: src/main/java//com/muwire/webui/SearchServlet.java:260 #: src/main/java//com/muwire/webui/SearchServlet.java:262
msgid "" msgid ""
"MuWire failed to initialize. Please close the browser window and restart " "MuWire failed to initialize. Please close the browser window and restart "
"the plugin" "the plugin"
msgstr "" msgstr ""
#: src/main/java//com/muwire/webui/SearchServlet.java:54 #: src/main/java//com/muwire/webui/SearchServlet.java:52
msgid "Invalid regular expression"
msgstr ""
#: src/main/java//com/muwire/webui/SearchServlet.java:56
msgid "Please enter a search keyword or file hash" msgid "Please enter a search keyword or file hash"
msgstr "" msgstr ""

View File

@ -7,6 +7,7 @@ import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.regex.Pattern;
import com.muwire.core.Core; import com.muwire.core.Core;
import com.muwire.core.SplitPattern; import com.muwire.core.SplitPattern;
@ -21,6 +22,7 @@ import net.i2p.data.Signature;
class SearchManager { class SearchManager {
static final UUID INVALID_REGEX_UUID = UUID.randomUUID();
private final Core core; private final Core core;
@ -37,8 +39,6 @@ class SearchManager {
else { else {
UUID uuid = UUID.randomUUID(); UUID uuid = UUID.randomUUID();
SearchResults searchResults = new SearchResults(uuid, search);
results.put(uuid, searchResults);
boolean hashSearch = false; boolean hashSearch = false;
byte [] root = null; byte [] root = null;
@ -50,18 +50,40 @@ class SearchManager {
// not a hash search // not a hash search
} }
} }
boolean regexSearch = false;
if (search.length() > 1 && search.startsWith("/") && search.endsWith("/")) {
search = search.substring(1, search.length() - 1);
try {
Pattern.compile(search);
regexSearch = true;
} catch (Exception e) {
// not a valid regex
return INVALID_REGEX_UUID;
}
}
SearchResults searchResults = new SearchResults(uuid, search);
results.put(uuid, searchResults);
SearchEvent searchEvent = new SearchEvent(); SearchEvent searchEvent = new SearchEvent();
searchEvent.setOobInfohash(true); searchEvent.setOobInfohash(true);
searchEvent.setCompressedResults(true); searchEvent.setCompressedResults(true);
searchEvent.setPersona(core.getMe()); searchEvent.setPersona(core.getMe());
searchEvent.setUuid(uuid); searchEvent.setUuid(uuid);
searchEvent.setRegex(regexSearch);
byte[] payload; byte[] payload;
if (hashSearch) { if (hashSearch) {
searchEvent.setSearchHash(root); searchEvent.setSearchHash(root);
payload = root; payload = root;
} else { } else {
String[] nonEmpty = SplitPattern.termify(search); String[] nonEmpty;
payload = String.join(" ", nonEmpty).getBytes(StandardCharsets.UTF_8); if (regexSearch) {
nonEmpty = new String[] { search };
payload = search.getBytes(StandardCharsets.UTF_8);
} else {
nonEmpty = SplitPattern.termify(search);
payload = String.join(" ", nonEmpty).getBytes(StandardCharsets.UTF_8);
}
searchEvent.setSearchTerms(Arrays.asList(nonEmpty)); searchEvent.setSearchTerms(Arrays.asList(nonEmpty));
searchEvent.setSearchComments(core.getMuOptions().getSearchComments()); searchEvent.setSearchComments(core.getMuOptions().getSearchComments());
searchEvent.setCollections(core.getMuOptions().getSearchCollections()); searchEvent.setCollections(core.getMuOptions().getSearchCollections());

View File

@ -48,7 +48,9 @@ public class SearchServlet extends HttpServlet {
if (action.equals("start")) { if (action.equals("start")) {
String search = req.getParameter("search"); String search = req.getParameter("search");
UUID newUUID = searchManager.newSearch(search); UUID newUUID = searchManager.newSearch(search);
if (newUUID != null) if (newUUID == SearchManager.INVALID_REGEX_UUID)
resp.sendError(403, _t("Invalid regular expression"));
else if (newUUID != null)
resp.sendRedirect("/MuWire/Home?uuid=" + newUUID.toString()); resp.sendRedirect("/MuWire/Home?uuid=" + newUUID.toString());
else else
resp.sendError(403, _t("Please enter a search keyword or file hash")); resp.sendError(403, _t("Please enter a search keyword or file hash"));