X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fweb%2FCreateSonePage.java;h=a74204c2bb5301de777e802cc0bb9b084e316203;hp=f67cd5636e19d53fe1a12aabbee7f63945322ed6;hb=7b55e0be6a3283e43a9bbab98f82aebdd948eb33;hpb=3d3d06d95ff53fdf16cce4331a0cdd7c77427fc4 diff --git a/src/main/java/net/pterodactylus/sone/web/CreateSonePage.java b/src/main/java/net/pterodactylus/sone/web/CreateSonePage.java index f67cd56..a74204c 100644 --- a/src/main/java/net/pterodactylus/sone/web/CreateSonePage.java +++ b/src/main/java/net/pterodactylus/sone/web/CreateSonePage.java @@ -1,5 +1,5 @@ /* - * FreenetSone - CreateSonePage.java - Copyright © 2010 David Roden + * Sone - CreateSonePage.java - Copyright © 2010–2016 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,15 +17,23 @@ package net.pterodactylus.sone.web; +import static java.util.logging.Logger.getLogger; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import net.pterodactylus.sone.core.SoneException; -import net.pterodactylus.sone.core.SoneException.Type; +import net.pterodactylus.sone.core.Core; import net.pterodactylus.sone.data.Sone; -import net.pterodactylus.sone.web.page.Page.Request.Method; -import net.pterodactylus.util.logging.Logging; +import net.pterodactylus.sone.freenet.wot.OwnIdentity; +import net.pterodactylus.sone.web.page.FreenetRequest; import net.pterodactylus.util.template.Template; +import net.pterodactylus.util.template.TemplateContext; +import net.pterodactylus.util.web.Method; import freenet.clients.http.ToadletContext; /** @@ -36,7 +44,7 @@ import freenet.clients.http.ToadletContext; public class CreateSonePage extends SoneTemplatePage { /** The logger. */ - private static final Logger logger = Logging.getLogger(CreateSonePage.class); + private static final Logger logger = getLogger(CreateSonePage.class.getName()); /** * Creates a new “create Sone” page. @@ -47,7 +55,37 @@ public class CreateSonePage extends SoneTemplatePage { * The Sone web interface */ public CreateSonePage(Template template, WebInterface webInterface) { - super("createSone.html", template, "Page.CreateSone.Title", webInterface); + super("createSone.html", template, "Page.CreateSone.Title", webInterface, false); + } + + // + // STATIC ACCESSORS + // + + /** + * Returns a sorted list of all own identities that do not have the “Sone” + * context. + * + * @param core + * The core + * @return The list of own identities without the “Sone” context + */ + public static List getOwnIdentitiesWithoutSone(Core core) { + List identitiesWithoutSone = new ArrayList(); + Set allOwnIdentity = core.getIdentityManager().getAllOwnIdentities(); + for (OwnIdentity ownIdentity : allOwnIdentity) { + if (!ownIdentity.hasContext("Sone")) { + identitiesWithoutSone.add(ownIdentity); + } + } + Collections.sort(identitiesWithoutSone, new Comparator() { + + @Override + public int compare(OwnIdentity leftIdentity, OwnIdentity rightIdentity) { + return (leftIdentity.getNickname() + "@" + leftIdentity.getId()).compareToIgnoreCase(rightIdentity.getNickname() + "@" + rightIdentity.getId()); + } + }); + return identitiesWithoutSone; } // @@ -58,36 +96,36 @@ public class CreateSonePage extends SoneTemplatePage { * {@inheritDoc} */ @Override - protected void processTemplate(Request request, Template template) throws RedirectException { - super.processTemplate(request, template); - String name = ""; - String requestUri = null; - String insertUri = null; + protected void handleRequest(FreenetRequest request, TemplateContext templateContext) throws RedirectException { + List localSones = new ArrayList(webInterface.getCore().getLocalSones()); + Collections.sort(localSones, Sone.NICE_NAME_COMPARATOR); + templateContext.set("sones", localSones); + List ownIdentitiesWithoutSone = getOwnIdentitiesWithoutSone(webInterface.getCore()); + templateContext.set("identitiesWithoutSone", ownIdentitiesWithoutSone); if (request.getMethod() == Method.POST) { - name = request.getHttpRequest().getPartAsStringFailsafe("name", 100); - if (request.getHttpRequest().getParam("create-from-uri").length() > 0) { - requestUri = request.getHttpRequest().getPartAsStringFailsafe("request-uri", 256); - insertUri = request.getHttpRequest().getPartAsStringFailsafe("insert-uri", 256); - } - try { - /* create Sone. */ - Sone sone = webInterface.core().createSone(name, "Sone", requestUri, insertUri); - - /* log in the new Sone. */ - setCurrentSone(request.getToadletContext(), sone); - throw new RedirectException("index.html"); - } catch (SoneException se1) { - logger.log(Level.FINE, "Could not create Sone “%s” at (“%s”, “%s”), %s!", new Object[] { name, requestUri, insertUri, se1.getType() }); - if (se1.getType() == Type.INVALID_SONE_NAME) { - template.set("errorName", true); - } else if (se1.getType() == Type.INVALID_URI) { - template.set("errorUri", true); + String id = request.getHttpRequest().getPartAsStringFailsafe("identity", 44); + OwnIdentity selectedIdentity = null; + for (OwnIdentity ownIdentity : ownIdentitiesWithoutSone) { + if (ownIdentity.getId().equals(id)) { + selectedIdentity = ownIdentity; + break; } } + if (selectedIdentity == null) { + templateContext.set("errorNoIdentity", true); + return; + } + /* create Sone. */ + Sone sone = webInterface.getCore().createSone(selectedIdentity); + if (sone == null) { + logger.log(Level.SEVERE, String.format("Could not create Sone for OwnIdentity: %s", selectedIdentity)); + /* TODO - go somewhere else */ + } + + /* log in the new Sone. */ + setCurrentSone(request.getToadletContext(), sone); + throw new RedirectException("index.html"); } - template.set("name", name); - template.set("requestUri", requestUri); - template.set("insertUri", insertUri); } /** @@ -95,7 +133,10 @@ public class CreateSonePage extends SoneTemplatePage { */ @Override public boolean isEnabled(ToadletContext toadletContext) { - return getCurrentSone(toadletContext) == null; + if (webInterface.getCore().getPreferences().isRequireFullAccess() && !toadletContext.isAllowedFullAccess()) { + return false; + } + return (getCurrentSone(toadletContext, false) == null) || (webInterface.getCore().getLocalSones().size() == 1); } }