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 ""
"Project-Id-Version: I2P MuWire\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"
"MIME-Version: 1.0\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/Uploads_jsp.java:219
#: 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:266
#: src/main/java//com/muwire/webui/SearchServlet.java:267
#: src/main/java//com/muwire/webui/SearchServlet.java:268
msgid "B/sec"
msgstr ""
@ -1239,18 +1239,22 @@ msgid "MuWire is initializing, please wait"
msgstr ""
#: 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:94
#: src/main/java//com/muwire/webui/SearchServlet.java:130
#: src/main/java//com/muwire/webui/SearchServlet.java:172
#: src/main/java//com/muwire/webui/SearchServlet.java:211
#: src/main/java//com/muwire/webui/SearchServlet.java:260
#: src/main/java//com/muwire/webui/SearchServlet.java:77
#: src/main/java//com/muwire/webui/SearchServlet.java:96
#: src/main/java//com/muwire/webui/SearchServlet.java:132
#: src/main/java//com/muwire/webui/SearchServlet.java:174
#: src/main/java//com/muwire/webui/SearchServlet.java:213
#: src/main/java//com/muwire/webui/SearchServlet.java:262
msgid ""
"MuWire failed to initialize. Please close the browser window and restart "
"the plugin"
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"
msgstr ""

View File

@ -7,6 +7,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern;
import com.muwire.core.Core;
import com.muwire.core.SplitPattern;
@ -21,6 +22,7 @@ import net.i2p.data.Signature;
class SearchManager {
static final UUID INVALID_REGEX_UUID = UUID.randomUUID();
private final Core core;
@ -37,8 +39,6 @@ class SearchManager {
else {
UUID uuid = UUID.randomUUID();
SearchResults searchResults = new SearchResults(uuid, search);
results.put(uuid, searchResults);
boolean hashSearch = false;
byte [] root = null;
@ -50,18 +50,40 @@ class SearchManager {
// 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.setOobInfohash(true);
searchEvent.setCompressedResults(true);
searchEvent.setPersona(core.getMe());
searchEvent.setUuid(uuid);
searchEvent.setRegex(regexSearch);
byte[] payload;
if (hashSearch) {
searchEvent.setSearchHash(root);
payload = root;
} else {
String[] nonEmpty = SplitPattern.termify(search);
payload = String.join(" ", nonEmpty).getBytes(StandardCharsets.UTF_8);
String[] nonEmpty;
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.setSearchComments(core.getMuOptions().getSearchComments());
searchEvent.setCollections(core.getMuOptions().getSearchCollections());

View File

@ -48,7 +48,9 @@ public class SearchServlet extends HttpServlet {
if (action.equals("start")) {
String search = req.getParameter("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());
else
resp.sendError(403, _t("Please enter a search keyword or file hash"));