|
|
|
|
@ -57,13 +57,7 @@ public class LegacyApi extends BaseHandler {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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); |
|
|
|
|
|