working on search
This commit is contained in:
@@ -1,13 +1,12 @@
|
|||||||
<script>
|
<script>
|
||||||
import { logout, user } from '../user.svelte.js';
|
import { logout, user } from '../user.svelte.js';
|
||||||
|
import { onMount } from 'sevelte';
|
||||||
import { useTinyRouter } from 'svelte-tiny-router';
|
import { useTinyRouter } from 'svelte-tiny-router';
|
||||||
import { t } from '../translations.svelte.js';
|
import { t } from '../translations.svelte.js';
|
||||||
|
|
||||||
const router = useTinyRouter();
|
const router = useTinyRouter();
|
||||||
|
|
||||||
function gotoAbout(){
|
|
||||||
router.navigate('/about');
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
|
import { onMount } from 'svelte';
|
||||||
import {t} from '../../translations.svelte.js';
|
import {t} from '../../translations.svelte.js';
|
||||||
|
|
||||||
let key = "";
|
let key = "";
|
||||||
@@ -6,18 +7,27 @@
|
|||||||
let html = "";
|
let html = "";
|
||||||
|
|
||||||
async function doSearch(ev){
|
async function doSearch(ev){
|
||||||
ev.preventDefault();
|
if (ev) ev.preventDefault();
|
||||||
const params = new URLSearchParams()
|
const url = `${location.protocol}//${location.host.replace('5173','8080')}/legacy/search`;
|
||||||
params.set('key', key);
|
const resp = await fetch(url,{
|
||||||
if (fulltext) params.set('fulltext',true);
|
credentials:'include',
|
||||||
|
method : 'POST',
|
||||||
const url = `${location.protocol}//${location.host.replace('5173','8080')}/legacy/search?${params.toString()}`;
|
body: JSON.stringify({key:key,fulltext:fulltext?'on':'off'})
|
||||||
const resp = await fetch(url,{credentials:'include'});
|
});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
html = await resp.text();
|
html = await resp.text();
|
||||||
if (!html) html = t('search.nothing_found');
|
if (!html) html = t('search.nothing_found');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
console.log(location.search);
|
||||||
|
let params = new URLSearchParams(location.search);
|
||||||
|
key = params.get('key');
|
||||||
|
console.log({param:key});
|
||||||
|
if (key) doSearch();
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<fieldset class="search">
|
<fieldset class="search">
|
||||||
|
|||||||
@@ -57,13 +57,7 @@ public class LegacyApi extends BaseHandler {
|
|||||||
}
|
}
|
||||||
case LOGIN -> getLogin(ex);
|
case LOGIN -> getLogin(ex);
|
||||||
case LOGOUT-> logout(ex);
|
case LOGOUT-> logout(ex);
|
||||||
case SEARCH -> {
|
case SEARCH -> sendRedirect(ex,url(ex).replaceAll("/legacy/","/"));
|
||||||
try {
|
|
||||||
yield search(ex);
|
|
||||||
} catch (UmbrellaException e){
|
|
||||||
yield send(ex,e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default -> super.doGet(path,ex);
|
default -> super.doGet(path,ex);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -74,6 +68,7 @@ public class LegacyApi extends BaseHandler {
|
|||||||
return switch (path.pop()) {
|
return switch (path.pop()) {
|
||||||
case JSON -> jsonUser(ex);
|
case JSON -> jsonUser(ex);
|
||||||
case NOTIFY -> legacyNotify(ex);
|
case NOTIFY -> legacyNotify(ex);
|
||||||
|
case SEARCH -> postSearch(ex);
|
||||||
case VALIDATE_TOKEN -> validateToken(ex);
|
case VALIDATE_TOKEN -> validateToken(ex);
|
||||||
default -> super.doPost(path,ex);
|
default -> super.doPost(path,ex);
|
||||||
};
|
};
|
||||||
@@ -225,7 +220,7 @@ public class LegacyApi extends BaseHandler {
|
|||||||
return session;
|
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);
|
var optToken = SessionToken.from(ex).map(Token::of);
|
||||||
if (optToken.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED,ex);
|
if (optToken.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED,ex);
|
||||||
var token = optToken.get();
|
var token = optToken.get();
|
||||||
@@ -255,6 +250,35 @@ public class LegacyApi extends BaseHandler {
|
|||||||
return sendContent(ex,searchResult.toString());
|
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){
|
private static String stripTrailingSlash(Object o){
|
||||||
String url = o.toString();
|
String url = o.toString();
|
||||||
if (url.endsWith("/")) return url.substring(0,url.length()-1);
|
if (url.endsWith("/")) return url.substring(0,url.length()-1);
|
||||||
|
|||||||
Reference in New Issue
Block a user