Make bookmarks.html accessible

for the time beeing (as possibliy other decision has been made)
make the bookmarks feature accessible, as it is available but w/o link in UI

relates to https://github.com/yacy/yacy_search_server/issues/452#issuecomment-1033054368
pull/461/head
reger24 3 years ago
parent 2d53147d7f
commit 84651f2925

@ -33,6 +33,7 @@
<ul class="SubMenu">
<li><a href="Surftips.html" class="MenuItemLink">Surftips</a></li>
<li><a href="Wiki.html?display=1" class="MenuItemLink">Local Peer Wiki</a></li>
<li><a href="Bookmarks.html" class="MenuItemLink #(authorized)#lock::unlock#(/authorized)#">Bookmarks</a></li>
</ul>
</div>
</div>

@ -63,6 +63,7 @@ import net.yacy.cora.protocol.HeaderFramework;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.protocol.ResponseHeader;
import net.yacy.cora.util.ConcurrentLog;
import net.yacy.data.BookmarksDB.Bookmark;
import net.yacy.data.DidYouMean;
import net.yacy.data.UserDB;
import net.yacy.document.LibraryProvider;
@ -112,7 +113,7 @@ public class yacysearch {
final boolean searchAllowed = sb.getConfigBool(SwitchboardConstants.PUBLIC_SEARCHPAGE, true) || adminAuthenticated;
boolean extendedSearchRights = adminAuthenticated;
boolean bookmarkRights = false;
if (adminAuthenticated) {
authenticatedUserName = sb.getConfig(SwitchboardConstants.ADMIN_ACCOUNT_USER_NAME, "admin");
} else {
@ -120,6 +121,7 @@ public class yacysearch {
if (user != null) {
extendedSearchRights = user.hasRight(UserDB.AccessRight.EXTENDED_SEARCH_RIGHT);
authenticatedUserName = user.getUserName();
bookmarkRights = user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT);
}
}
@ -701,6 +703,30 @@ public class yacysearch {
}
}
// if a bookmarks-button was hit, create new bookmark entry
if (post != null && post.containsKey("bookmarkref")) {
if (!sb.verifyAuthentication(header) && !bookmarkRights) {
prop.authenticationRequired();
return prop;
}
//final String bookmarkHash = post.get("bookmarkref", ""); // urlhash
final String urlstr = crypt.simpleDecode(post.get("bookmarkurl"));
if (urlstr != null) {
final Bookmark bmk = sb.bookmarksDB.createorgetBookmark(urlstr, "admin");
if (bmk != null) {
bmk.setProperty(Bookmark.BOOKMARK_QUERY, querystring);
bmk.addTag("/search"); // add to bookmark folder
bmk.addTag("searchresult"); // add tag
String urlhash = post.get("bookmarkref");
final URIMetadataNode urlentry = indexSegment.fulltext().getMetadata(UTF8.getBytes(urlhash));
if (urlentry != null && !urlentry.dc_title().isEmpty()) {
bmk.setProperty(Bookmark.BOOKMARK_TITLE, urlentry.dc_title());
}
sb.bookmarksDB.saveBookmark(bmk);
}
}
}
// if a blacklist-button was hit, add host to default blacklist
if (post != null && post.containsKey("blacklisturl")) {

@ -65,6 +65,7 @@ import net.yacy.kelondro.util.Formatter;
import net.yacy.peers.NewsPool;
import net.yacy.peers.Seed;
import net.yacy.peers.graphics.ProfilingGraph;
import net.yacy.repository.Blacklist;
import net.yacy.search.EventTracker;
import net.yacy.search.Switchboard;
import net.yacy.search.SwitchboardConstants;
@ -109,6 +110,7 @@ public class yacysearchitem {
final boolean authenticated = adminAuthenticated || user != null;
final boolean extendedSearchRights = adminAuthenticated || (user != null && user.hasRight(UserDB.AccessRight.EXTENDED_SEARCH_RIGHT));
final boolean bookmarkRights = adminAuthenticated || (user != null && user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT));
final int item = post.getInt("item", -1);
final RequestHeader.FileType fileType = header.fileType();
@ -173,10 +175,21 @@ public class yacysearchitem {
final String resource = theSearch.query.domType.toString();
final String origQ = theSearch.query.getQueryGoal().getQueryString(true);
prop.put("content", 1); // switch on specific content
prop.put("content_authorized", adminAuthenticated ? "1" : "0");
final String urlhash = ASCII.String(result.hash());
if (adminAuthenticated) { // only needed if authorized
addAuthorizedActions(sb, prop, theSearch, resultUrlstring, resource, origQ, urlhash);
addAuthorizedActions(sb, prop, theSearch, resultUrlstring, resource, origQ, urlhash, null);
} else if (authenticated && user != null) {
addAuthorizedActions(sb, prop, theSearch, resultUrlstring, resource, origQ, urlhash, user);
} else
prop.put("content_authorized", "0"); // disable for not authorized user
// for testing only
// result
// if local Admin - no admin_right
// if admin authent -> admin_right = true, bookmark_right = false
if (header.isUserInRole(UserDB.AccessRight.ADMIN_RIGHT.toString())) {
if (header.isUserInRole(UserDB.AccessRight.BOOKMARK_RIGHT.toString())) {
System.out.println("booki");
}
}
prop.putHTML("content_title", result.title());
prop.putXML("content_title-xml", result.title());
@ -678,14 +691,23 @@ public class yacysearchitem {
* @param resource resource scope ("local" or "global")
* @param origQ origin query terms
* @param urlhash URL hash of the result item
* @param user current user or null if current user is admin
*/
private static void addAuthorizedActions(final Switchboard sb, final serverObjects prop,
final SearchEvent theSearch, final String resultUrlstring, final String resource, final String origQ,
final String urlhash) {
final String urlhash, UserDB.Entry user) {
// check if url exists in bookmarks
boolean bookmarkexists = sb.bookmarksDB.getBookmark(urlhash) != null;
if (user == null || user.hasRight(UserDB.AccessRight.BOOKMARK_RIGHT)) {
prop.put("content_authorized_bookmark", !bookmarkexists);
} else
prop.put("content_authorized_bookmark", "0");
/* boolean blacklistislisted = false;
try {
DigestURL durl = new DigestURL(resultUrlstring);
blacklistislisted = sb.urlBlacklist.isListed(Blacklist.BlacklistType.SEARCH, durl);
} catch (Exception e) {}
*/
final StringBuilder linkBuilder = QueryParams.navurl(RequestHeader.FileType.HTML, theSearch.query.offset / theSearch.query.itemsPerPage(),
theSearch.query, null, false, true);
final int baseUrlLength = linkBuilder.length();
@ -697,7 +719,7 @@ public class yacysearchitem {
ConcurrentLog.warn("YACY_SEARCH_ITEM", "UTF-8 encoding is not supported!");
encodedURLString = crypt.simpleEncode(resultUrlstring);
}
final String bookmarkLink = linkBuilder.append("&bookmarkurl=").append(encodedURLString).toString();
final String bookmarkLink = linkBuilder.append("&bookmarkurl=").append(encodedURLString).append("&bookmarkref=" + urlhash).toString();
linkBuilder.setLength(baseUrlLength);
String deleteLink = linkBuilder.append("&deleteref=").append(urlhash).toString();
@ -714,10 +736,18 @@ public class yacysearchitem {
prop.put("content_authorized_recommend_deletelink", deleteLink);
prop.put("content_authorized_recommend_recommendlink", recommendLink);
if (user == null || user.hasRight(UserDB.AccessRight.ADMIN_RIGHT)) {
prop.put("content_authorized_recommend", (sb.peers.newsPool.getSpecific(NewsPool.OUTGOING_DB, NewsPool.CATEGORY_SURFTIPP_ADD, "url", resultUrlstring) == null) ? "1" : "0");
prop.put("content_authorized_blacklist", "1");
} else {
prop.put("content_authorized_recommend", "0");
prop.put("content_authorized_blacklist", "0");
}
// prop.put("content_authorized_urlhash", urlhash); // not used 2022-02-09
prop.put("content_authorized", "1"); // enable authorized icons/content
}
/**
* Process search of image type and feed prop object. All parameters must not be null.
* @param sb Switchboard instance

Loading…
Cancel
Save