working on search

This commit is contained in:
2025-07-04 23:23:51 +02:00
parent b07533eaa9
commit b0817319bd
3 changed files with 51 additions and 18 deletions

View File

@@ -57,13 +57,7 @@ public class LegacyApi extends BaseHandler {
}
case LOGIN -> getLogin(ex);
case LOGOUT-> logout(ex);
case SEARCH -> {
try {
yield search(ex);
} catch (UmbrellaException e){
yield send(ex,e);
}
}
case SEARCH -> sendRedirect(ex,url(ex).replaceAll("/legacy/","/"));
default -> super.doGet(path,ex);
};
}
@@ -74,6 +68,7 @@ public class LegacyApi extends BaseHandler {
return switch (path.pop()) {
case JSON -> jsonUser(ex);
case NOTIFY -> legacyNotify(ex);
case SEARCH -> postSearch(ex);
case VALIDATE_TOKEN -> validateToken(ex);
default -> super.doPost(path,ex);
};
@@ -225,7 +220,7 @@ public class LegacyApi extends BaseHandler {
return session;
}
private boolean search(HttpExchange ex) throws IOException, UmbrellaException {
private boolean getSearch(HttpExchange ex) throws IOException, UmbrellaException {
var optToken = SessionToken.from(ex).map(Token::of);
if (optToken.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED,ex);
var token = optToken.get();
@@ -255,6 +250,35 @@ public class LegacyApi extends BaseHandler {
return sendContent(ex,searchResult.toString());
};
private boolean postSearch(HttpExchange ex) throws IOException, UmbrellaException {
var optToken = SessionToken.from(ex).map(Token::of);
if (optToken.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED,ex);
var token = optToken.get();
var json = json(ex);
if (!(json.has(KEY) && json.get(KEY) instanceof String key) || key.isBlank()) return sendContent(ex,HTTP_BAD_REQUEST,"No search key given");
var fulltext = key.contains("+") || (json.has("fulltext") && "on".equals(json.get("fulltext")));
StringBuilder searchResult = new StringBuilder();
if (fulltext){
for (var module : config.keys()){
var baseUrl = config.get(module + ".baseUrl");
if (baseUrl.isEmpty()) continue;
var res = request(baseUrl.get()+"/search",token.asMap().plus(KEY,key),MIME_FORM_URL,token.asBearer());
if (!(res instanceof String content) || content.isBlank()) continue;
searchResult.append("<fieldset><label>").append(module).append("</label>");
searchResult.append(content).append("</fieldset>\n");
}
} else {
var bookmark = config.get("bookmark.baseUrl");
if (bookmark.isEmpty()) throw new UmbrellaException(500,"Tag search not available: Bookmark module not configured!");
var res = request(bookmark.get()+"/search",token.asMap().plus(KEY,key),MIME_FORM_URL,null);
if (!(res instanceof String content)) throw new UmbrellaException(500,"Search did not return html content!");
searchResult.append(content);
}
addCors(ex);
return sendContent(ex,searchResult.toString());
};
private static String stripTrailingSlash(Object o){
String url = o.toString();
if (url.endsWith("/")) return url.substring(0,url.length()-1);