From a88e930a23b550dae75116d7759924d760941776 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Wed, 16 Jan 2013 07:10:11 +0100 Subject: [PATCH] Store locality of a Sone in the Sone itself. --- pom.xml | 5 + .../java/net/pterodactylus/sone/core/Core.java | 188 ++++++++------------- .../pterodactylus/sone/core/SoneDownloader.java | 2 +- .../java/net/pterodactylus/sone/data/Sone.java | 19 ++- .../pterodactylus/sone/fcp/DeletePostCommand.java | 2 +- .../pterodactylus/sone/fcp/DeleteReplyCommand.java | 2 +- .../sone/template/ProfileAccessor.java | 2 +- .../pterodactylus/sone/template/SoneAccessor.java | 2 - .../pterodactylus/sone/text/SoneTextParser.java | 2 +- .../pterodactylus/sone/web/DeleteAlbumPage.java | 2 +- .../pterodactylus/sone/web/DeleteImagePage.java | 2 +- .../net/pterodactylus/sone/web/DeletePostPage.java | 2 +- .../pterodactylus/sone/web/DeleteReplyPage.java | 2 +- .../net/pterodactylus/sone/web/EditAlbumPage.java | 2 +- .../net/pterodactylus/sone/web/EditImagePage.java | 2 +- .../net/pterodactylus/sone/web/WebInterface.java | 6 +- .../sone/web/ajax/DeletePostAjaxPage.java | 2 +- .../sone/web/ajax/DeleteReplyAjaxPage.java | 2 +- .../sone/web/ajax/EditAlbumAjaxPage.java | 2 +- .../sone/web/ajax/EditImageAjaxPage.java | 2 +- .../sone/text/SoneTextParserTest.java | 2 +- 21 files changed, 112 insertions(+), 140 deletions(-) diff --git a/pom.xml b/pom.xml index 384f7b2..ccb8c1b 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,11 @@ utils.json 0.1 + + com.google.guava + guava + 14.0-rc1 + diff --git a/src/main/java/net/pterodactylus/sone/core/Core.java b/src/main/java/net/pterodactylus/sone/core/Core.java index b25d8e3..fcde685 100644 --- a/src/main/java/net/pterodactylus/sone/core/Core.java +++ b/src/main/java/net/pterodactylus/sone/core/Core.java @@ -19,6 +19,7 @@ package net.pterodactylus.sone.core; import java.net.MalformedURLException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -66,6 +67,9 @@ import net.pterodactylus.util.validation.IntegerRangeValidator; import net.pterodactylus.util.validation.OrValidator; import net.pterodactylus.util.validation.Validation; import net.pterodactylus.util.version.Version; + +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import freenet.keys.FreenetURI; /** @@ -128,20 +132,16 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis private final Set lockedSones = new HashSet(); /** Sone inserters. */ - /* synchronize access on this on localSones. */ + /* synchronize access on this on sones. */ private final Map soneInserters = new HashMap(); /** Sone rescuers. */ - /* synchronize access on this on localSones. */ + /* synchronize access on this on sones. */ private final Map soneRescuers = new HashMap(); - /** All local Sones. */ - /* synchronize access on this on itself. */ - private final Map localSones = new HashMap(); - - /** All remote Sones. */ + /** All Sones. */ /* synchronize access on this on itself. */ - private final Map remoteSones = new HashMap(); + private final Map sones = new HashMap(); /** All known Sones. */ private final Set knownSones = new HashSet(); @@ -297,8 +297,8 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * @return The Sone rescuer for the given Sone */ public SoneRescuer getSoneRescuer(Sone sone) { - Validation.begin().isNotNull("Sone", sone).check().is("Local Sone", isLocalSone(sone)).check(); - synchronized (localSones) { + Validation.begin().isNotNull("Sone", sone).check().is("Local Sone", sone.isLocal()).check(); + synchronized (sones) { SoneRescuer soneRescuer = soneRescuers.get(sone); if (soneRescuer == null) { soneRescuer = new SoneRescuer(this, soneDownloader, sone); @@ -328,10 +328,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * @return All Sones */ public Set getSones() { - Set allSones = new HashSet(); - allSones.addAll(getLocalSones()); - allSones.addAll(getRemoteSones()); - return allSones; + return new HashSet(sones.values()); } /** @@ -362,10 +359,13 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis */ @Override public Sone getSone(String id, boolean create) { - if (isLocalSone(id)) { - return getLocalSone(id); + synchronized (sones) { + if (!sones.containsKey(id)) { + Sone sone = new Sone(id, false); + sones.put(id, sone); + } + return sones.get(id); } - return getRemoteSone(id, create); } /** @@ -377,33 +377,8 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * otherwise */ public boolean hasSone(String id) { - return isLocalSone(id) || isRemoteSone(id); - } - - /** - * Returns whether the given Sone is a local Sone. - * - * @param sone - * The Sone to check for its locality - * @return {@code true} if the given Sone is local, {@code false} otherwise - */ - public boolean isLocalSone(Sone sone) { - synchronized (localSones) { - return localSones.containsKey(sone.getId()); - } - } - - /** - * Returns whether the given ID is the ID of a local Sone. - * - * @param id - * The Sone ID to check for its locality - * @return {@code true} if the given ID is a local Sone, {@code false} - * otherwise - */ - public boolean isLocalSone(String id) { - synchronized (localSones) { - return localSones.containsKey(id); + synchronized (sones) { + return sones.containsKey(id); } } @@ -412,21 +387,16 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * * @return All local Sones */ - public Set getLocalSones() { - synchronized (localSones) { - return new HashSet(localSones.values()); - } - } + public Collection getLocalSones() { + synchronized (sones) { + return Collections2.filter(sones.values(), new Predicate() { - /** - * Returns the local Sone with the given ID. - * - * @param id - * The ID of the Sone to get - * @return The Sone with the given ID - */ - public Sone getLocalSone(String id) { - return getLocalSone(id, true); + @Override + public boolean apply(Sone sone) { + return sone.isLocal(); + } + }); + } } /** @@ -440,11 +410,15 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * @return The Sone with the given ID, or {@code null} */ public Sone getLocalSone(String id, boolean create) { - synchronized (localSones) { - Sone sone = localSones.get(id); + synchronized (sones) { + Sone sone = sones.get(id); if ((sone == null) && create) { - sone = new Sone(id); - localSones.put(id, sone); + sone = new Sone(id, true); + sones.put(id, sone); + } + if (!sone.isLocal()) { + sone = new Sone(id, true); + sones.put(id, sone); } return sone; } @@ -455,9 +429,15 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * * @return All remote Sones */ - public Set getRemoteSones() { - synchronized (remoteSones) { - return new HashSet(remoteSones.values()); + public Collection getRemoteSones() { + synchronized (sones) { + return Collections2.filter(sones.values(), new Predicate() { + + @Override + public boolean apply(Sone sone) { + return !sone.isLocal(); + } + }); } } @@ -472,45 +452,17 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * @return The Sone with the given ID */ public Sone getRemoteSone(String id, boolean create) { - synchronized (remoteSones) { - Sone sone = remoteSones.get(id); + synchronized (sones) { + Sone sone = sones.get(id); if ((sone == null) && create && (id != null) && (id.length() == 43)) { - sone = new Sone(id); - remoteSones.put(id, sone); + sone = new Sone(id, false); + sones.put(id, sone); } return sone; } } /** - * Returns whether the given Sone is a remote Sone. - * - * @param sone - * The Sone to check - * @return {@code true} if the given Sone is a remote Sone, {@code false} - * otherwise - */ - public boolean isRemoteSone(Sone sone) { - synchronized (remoteSones) { - return remoteSones.containsKey(sone.getId()); - } - } - - /** - * Returns whether the Sone with the given ID is a remote Sone. - * - * @param id - * The ID of the Sone to check - * @return {@code true} if the Sone with the given ID is a remote Sone, - * {@code false} otherwise - */ - public boolean isRemoteSone(String id) { - synchronized (remoteSones) { - return remoteSones.containsKey(id); - } - } - - /** * Returns whether the given Sone has been modified. * * @param sone @@ -859,10 +811,10 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis logger.log(Level.WARNING, "Given OwnIdentity is null!"); return null; } - synchronized (localSones) { + synchronized (sones) { final Sone sone; try { - sone = getLocalSone(ownIdentity.getId()).setIdentity(ownIdentity).setInsertUri(new FreenetURI(ownIdentity.getInsertUri())).setRequestUri(new FreenetURI(ownIdentity.getRequestUri())); + sone = getLocalSone(ownIdentity.getId(), true).setIdentity(ownIdentity).setInsertUri(new FreenetURI(ownIdentity.getInsertUri())).setRequestUri(new FreenetURI(ownIdentity.getRequestUri())); } catch (MalformedURLException mue1) { logger.log(Level.SEVERE, String.format("Could not convert the Identity’s URIs to Freenet URIs: %s, %s", ownIdentity.getInsertUri(), ownIdentity.getRequestUri()), mue1); return null; @@ -871,7 +823,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis sone.setClient(new Client("Sone", SonePlugin.VERSION.toString())); sone.setKnown(true); /* TODO - load posts ’n stuff */ - localSones.put(ownIdentity.getId(), sone); + sones.put(ownIdentity.getId(), sone); final SoneInserter soneInserter = new SoneInserter(this, freenetInterface, sone); soneInserter.addSoneInsertListener(this); soneInserters.put(sone, soneInserter); @@ -919,7 +871,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis logger.log(Level.WARNING, "Given Identity is null!"); return null; } - synchronized (remoteSones) { + synchronized (sones) { final Sone sone = getRemoteSone(identity.getId(), true).setIdentity(identity); boolean newSone = sone.getRequestUri() == null; sone.setRequestUri(getSoneUri(identity.getRequestUri())); @@ -1235,8 +1187,8 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis /** * Deletes the given Sone. This will remove the Sone from the - * {@link #getLocalSone(String) local Sones}, stops its {@link SoneInserter} - * and remove the context from its identity. + * {@link #getLocalSones() local Sones}, stop its {@link SoneInserter} and + * remove the context from its identity. * * @param sone * The Sone to delete @@ -1246,12 +1198,12 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis logger.log(Level.WARNING, String.format("Tried to delete Sone of non-own identity: %s", sone)); return; } - synchronized (localSones) { - if (!localSones.containsKey(sone.getId())) { + synchronized (sones) { + if (!getLocalSones().contains(sone)) { logger.log(Level.WARNING, String.format("Tried to delete non-local Sone: %s", sone)); return; } - localSones.remove(sone.getId()); + sones.remove(sone.getId()); SoneInserter soneInserter = soneInserters.remove(sone); soneInserter.removeSoneInsertListener(this); soneInserter.stop(); @@ -1291,7 +1243,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * The Sone to load and update */ public void loadSone(Sone sone) { - if (!isLocalSone(sone)) { + if (!sone.isLocal()) { logger.log(Level.FINE, String.format("Tried to load non-local Sone: %s", sone)); return; } @@ -1569,7 +1521,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis */ public Post createPost(Sone sone, Sone recipient, long time, String text) { Validation.begin().isNotNull("Text", text).check().isGreater("Text Length", text.length(), 0).check(); - if (!isLocalSone(sone)) { + if (!sone.isLocal()) { logger.log(Level.FINE, String.format("Tried to create post for non-local Sone: %s", sone)); return null; } @@ -1603,7 +1555,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * The post to delete */ public void deletePost(Post post) { - if (!isLocalSone(post.getSone())) { + if (!post.getSone().isLocal()) { logger.log(Level.WARNING, String.format("Tried to delete post of non-local Sone: %s", post.getSone())); return; } @@ -1710,7 +1662,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis */ public PostReply createReply(Sone sone, Post post, long time, String text) { Validation.begin().isNotNull("Text", text).check().isGreater("Text Length", text.trim().length(), 0).check(); - if (!isLocalSone(sone)) { + if (!sone.isLocal()) { logger.log(Level.FINE, String.format("Tried to create reply for non-local Sone: %s", sone)); return null; } @@ -1744,7 +1696,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis */ public void deleteReply(PostReply reply) { Sone sone = reply.getSone(); - if (!isLocalSone(sone)) { + if (!sone.isLocal()) { logger.log(Level.FINE, String.format("Tried to delete non-local reply: %s", reply)); return; } @@ -1819,7 +1771,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * The album to remove */ public void deleteAlbum(Album album) { - Validation.begin().isNotNull("Album", album).check().is("Local Sone", isLocalSone(album.getSone())).check(); + Validation.begin().isNotNull("Album", album).check().is("Local Sone", album.getSone().isLocal()).check(); if (!album.isEmpty()) { return; } @@ -1846,7 +1798,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * @return The newly created image */ public Image createImage(Sone sone, Album album, TemporaryImage temporaryImage) { - Validation.begin().isNotNull("Sone", sone).isNotNull("Album", album).isNotNull("Temporary Image", temporaryImage).check().is("Local Sone", isLocalSone(sone)).check().isEqual("Owner and Album Owner", sone, album.getSone()).check(); + Validation.begin().isNotNull("Sone", sone).isNotNull("Album", album).isNotNull("Temporary Image", temporaryImage).check().is("Local Sone", sone.isLocal()).check().isEqual("Owner and Album Owner", sone, album.getSone()).check(); Image image = new Image(temporaryImage.getId()).setSone(sone).setCreationTime(System.currentTimeMillis()); album.addImage(image); synchronized (images) { @@ -1865,7 +1817,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * The image to delete */ public void deleteImage(Image image) { - Validation.begin().isNotNull("Image", image).check().is("Local Sone", isLocalSone(image.getSone())).check(); + Validation.begin().isNotNull("Image", image).check().is("Local Sone", image.getSone().isLocal()).check(); deleteTemporaryImage(image.getId()); image.getAlbum().removeImage(image); synchronized (images) { @@ -1968,7 +1920,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis */ @Override public void serviceStop() { - synchronized (localSones) { + synchronized (sones) { for (Entry soneInserter : soneInserters.entrySet()) { soneInserter.getValue().removeSoneInsertListener(this); soneInserter.getValue().stop(); @@ -1994,7 +1946,7 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis * The Sone to save */ private synchronized void saveSone(Sone sone) { - if (!isLocalSone(sone)) { + if (!sone.isLocal()) { logger.log(Level.FINE, String.format("Tried to save non-local Sone: %s", sone)); return; } @@ -2457,8 +2409,8 @@ public class Core extends AbstractService implements IdentityListener, UpdateLis } } } - synchronized (remoteSones) { - remoteSones.remove(identity.getId()); + synchronized (sones) { + sones.remove(identity.getId()); } coreListenerManager.fireSoneRemoved(sone); } diff --git a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java index 39dbcd5..4142dda 100644 --- a/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java +++ b/src/main/java/net/pterodactylus/sone/core/SoneDownloader.java @@ -236,7 +236,7 @@ public class SoneDownloader extends AbstractService { return null; } - Sone sone = new Sone(originalSone.getId()).setIdentity(originalSone.getIdentity()); + Sone sone = new Sone(originalSone.getId(), false).setIdentity(originalSone.getIdentity()); SimpleXML soneXml; try { diff --git a/src/main/java/net/pterodactylus/sone/data/Sone.java b/src/main/java/net/pterodactylus/sone/data/Sone.java index 99d65ec..3923f66 100644 --- a/src/main/java/net/pterodactylus/sone/data/Sone.java +++ b/src/main/java/net/pterodactylus/sone/data/Sone.java @@ -175,6 +175,9 @@ public class Sone implements Fingerprintable, Comparable { /** The ID of this Sone. */ private final String id; + /** Whether the Sone is local. */ + private final boolean local; + /** The identity of this Sone. */ private Identity identity; @@ -229,9 +232,13 @@ public class Sone implements Fingerprintable, Comparable { * * @param id * The ID of the Sone + * @param local + * {@code true} if the Sone is a local Sone, {@code false} + * otherwise */ - public Sone(String id) { + public Sone(String id, boolean local) { this.id = id; + this.local = local; } // @@ -284,6 +291,16 @@ public class Sone implements Fingerprintable, Comparable { } /** + * Returns whether this Sone is a local Sone. + * + * @return {@code true} if this Sone is a local Sone, {@code false} + * otherwise + */ + public boolean isLocal() { + return local; + } + + /** * Returns the request URI of this Sone. * * @return The request URI of this Sone diff --git a/src/main/java/net/pterodactylus/sone/fcp/DeletePostCommand.java b/src/main/java/net/pterodactylus/sone/fcp/DeletePostCommand.java index 54f01c8..8d929f3 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/DeletePostCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/DeletePostCommand.java @@ -48,7 +48,7 @@ public class DeletePostCommand extends AbstractSoneCommand { @Override public Response execute(SimpleFieldSet parameters, Bucket data, AccessType accessType) throws FcpException { Post post = getPost(parameters, "Post"); - if (!getCore().isLocalSone(post.getSone())) { + if (!post.getSone().isLocal()) { return new ErrorResponse(401, "Not allowed."); } return new Response("PostDeleted", new SimpleFieldSetBuilder().get()); diff --git a/src/main/java/net/pterodactylus/sone/fcp/DeleteReplyCommand.java b/src/main/java/net/pterodactylus/sone/fcp/DeleteReplyCommand.java index daed26d..33374d9 100644 --- a/src/main/java/net/pterodactylus/sone/fcp/DeleteReplyCommand.java +++ b/src/main/java/net/pterodactylus/sone/fcp/DeleteReplyCommand.java @@ -48,7 +48,7 @@ public class DeleteReplyCommand extends AbstractSoneCommand { @Override public Response execute(SimpleFieldSet parameters, Bucket data, AccessType accessType) throws FcpException { PostReply reply = getReply(parameters, "Reply"); - if (!getCore().isLocalSone(reply.getSone())) { + if (!reply.getSone().isLocal()) { return new ErrorResponse(401, "Not allowed."); } return new Response("ReplyDeleted", new SimpleFieldSetBuilder().get()); diff --git a/src/main/java/net/pterodactylus/sone/template/ProfileAccessor.java b/src/main/java/net/pterodactylus/sone/template/ProfileAccessor.java index f004967..19177c3 100644 --- a/src/main/java/net/pterodactylus/sone/template/ProfileAccessor.java +++ b/src/main/java/net/pterodactylus/sone/template/ProfileAccessor.java @@ -70,7 +70,7 @@ public class ProfileAccessor extends ReflectionAccessor { return null; } Sone remoteSone = profile.getSone(); - if (core.isLocalSone(remoteSone)) { + if (remoteSone.isLocal()) { /* always show your own avatars. */ return avatarId; } diff --git a/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java b/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java index eca8654..9d4bdc8 100644 --- a/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java +++ b/src/main/java/net/pterodactylus/sone/template/SoneAccessor.java @@ -76,8 +76,6 @@ public class SoneAccessor extends ReflectionAccessor { Sone sone = (Sone) object; if (member.equals("niceName")) { return getNiceName(sone); - } else if (member.equals("local")) { - return core.isLocalSone(sone); } else if (member.equals("friend")) { Sone currentSone = (Sone) templateContext.get("currentSone"); return (currentSone != null) && currentSone.hasFriend(sone.getId()); diff --git a/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java b/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java index b3593ec..1700f8b 100644 --- a/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java +++ b/src/main/java/net/pterodactylus/sone/text/SoneTextParser.java @@ -245,7 +245,7 @@ public class SoneTextParser implements Parser { * don’t use create=true above, we don’t want * the empty shell. */ - sone = new Sone(soneId); + sone = new Sone(soneId, false); } parts.add(new SonePart(sone)); line = line.substring(50); diff --git a/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java b/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java index 2f2b766..e175870 100644 --- a/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java +++ b/src/main/java/net/pterodactylus/sone/web/DeleteAlbumPage.java @@ -54,7 +54,7 @@ public class DeleteAlbumPage extends SoneTemplatePage { if (album == null) { throw new RedirectException("invalid.html"); } - if (!webInterface.getCore().isLocalSone(album.getSone())) { + if (!album.getSone().isLocal()) { throw new RedirectException("noPermission.html"); } if (request.getHttpRequest().isPartSet("abortDelete")) { diff --git a/src/main/java/net/pterodactylus/sone/web/DeleteImagePage.java b/src/main/java/net/pterodactylus/sone/web/DeleteImagePage.java index 3bbaf3d..69b1d27 100644 --- a/src/main/java/net/pterodactylus/sone/web/DeleteImagePage.java +++ b/src/main/java/net/pterodactylus/sone/web/DeleteImagePage.java @@ -57,7 +57,7 @@ public class DeleteImagePage extends SoneTemplatePage { if (image == null) { throw new RedirectException("invalid.html"); } - if (!webInterface.getCore().isLocalSone(image.getSone())) { + if (!image.getSone().isLocal()) { throw new RedirectException("noPermission.html"); } if (request.getMethod() == Method.POST) { diff --git a/src/main/java/net/pterodactylus/sone/web/DeletePostPage.java b/src/main/java/net/pterodactylus/sone/web/DeletePostPage.java index 6689061..314689e 100644 --- a/src/main/java/net/pterodactylus/sone/web/DeletePostPage.java +++ b/src/main/java/net/pterodactylus/sone/web/DeletePostPage.java @@ -63,7 +63,7 @@ public class DeletePostPage extends SoneTemplatePage { String postId = request.getHttpRequest().getPartAsStringFailsafe("post", 36); String returnPage = request.getHttpRequest().getPartAsStringFailsafe("returnPage", 256); Post post = webInterface.getCore().getPost(postId); - if (!webInterface.getCore().isLocalSone(post.getSone())) { + if (!post.getSone().isLocal()) { throw new RedirectException("noPermission.html"); } if (request.getHttpRequest().isPartSet("confirmDelete")) { diff --git a/src/main/java/net/pterodactylus/sone/web/DeleteReplyPage.java b/src/main/java/net/pterodactylus/sone/web/DeleteReplyPage.java index 0f010b7..4d6aff2 100644 --- a/src/main/java/net/pterodactylus/sone/web/DeleteReplyPage.java +++ b/src/main/java/net/pterodactylus/sone/web/DeleteReplyPage.java @@ -56,7 +56,7 @@ public class DeleteReplyPage extends SoneTemplatePage { PostReply reply = webInterface.getCore().getPostReply(replyId, false); String returnPage = request.getHttpRequest().getPartAsStringFailsafe("returnPage", 256); if (request.getMethod() == Method.POST) { - if (!webInterface.getCore().isLocalSone(reply.getSone())) { + if (!reply.getSone().isLocal()) { throw new RedirectException("noPermission.html"); } if (request.getHttpRequest().isPartSet("confirmDelete")) { diff --git a/src/main/java/net/pterodactylus/sone/web/EditAlbumPage.java b/src/main/java/net/pterodactylus/sone/web/EditAlbumPage.java index d028f8d..fd28e41 100644 --- a/src/main/java/net/pterodactylus/sone/web/EditAlbumPage.java +++ b/src/main/java/net/pterodactylus/sone/web/EditAlbumPage.java @@ -57,7 +57,7 @@ public class EditAlbumPage extends SoneTemplatePage { if (album == null) { throw new RedirectException("invalid.html"); } - if (!webInterface.getCore().isLocalSone(album.getSone())) { + if (!album.getSone().isLocal()) { throw new RedirectException("noPermission.html"); } if ("true".equals(request.getHttpRequest().getPartAsStringFailsafe("moveLeft", 4))) { diff --git a/src/main/java/net/pterodactylus/sone/web/EditImagePage.java b/src/main/java/net/pterodactylus/sone/web/EditImagePage.java index b0297a8..0207f8c 100644 --- a/src/main/java/net/pterodactylus/sone/web/EditImagePage.java +++ b/src/main/java/net/pterodactylus/sone/web/EditImagePage.java @@ -60,7 +60,7 @@ public class EditImagePage extends SoneTemplatePage { if (image == null) { throw new RedirectException("invalid.html"); } - if (!webInterface.getCore().isLocalSone(image.getSone())) { + if (!image.getSone().isLocal()) { throw new RedirectException("noPermission.html"); } if ("true".equals(request.getHttpRequest().getPartAsStringFailsafe("moveLeft", 4))) { diff --git a/src/main/java/net/pterodactylus/sone/web/WebInterface.java b/src/main/java/net/pterodactylus/sone/web/WebInterface.java index 00f8cf9..045cc11 100644 --- a/src/main/java/net/pterodactylus/sone/web/WebInterface.java +++ b/src/main/java/net/pterodactylus/sone/web/WebInterface.java @@ -372,7 +372,7 @@ public class WebInterface implements CoreListener { * currently logged in */ public Sone getCurrentSone(ToadletContext toadletContext, boolean create) { - Set localSones = getCore().getLocalSones(); + Collection localSones = getCore().getLocalSones(); if (localSones.size() == 1) { return localSones.iterator().next(); } @@ -789,7 +789,7 @@ public class WebInterface implements CoreListener { */ @Override public void newPostFound(Post post) { - boolean isLocal = getCore().isLocalSone(post.getSone()); + boolean isLocal = post.getSone().isLocal(); if (isLocal) { localPostNotification.add(post); } else { @@ -811,7 +811,7 @@ public class WebInterface implements CoreListener { */ @Override public void newReplyFound(PostReply reply) { - boolean isLocal = getCore().isLocalSone(reply.getSone()); + boolean isLocal = reply.getSone().isLocal(); if (isLocal) { localReplyNotification.add(reply); } else { diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/DeletePostAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/DeletePostAjaxPage.java index ea2310c..b822e52 100644 --- a/src/main/java/net/pterodactylus/sone/web/ajax/DeletePostAjaxPage.java +++ b/src/main/java/net/pterodactylus/sone/web/ajax/DeletePostAjaxPage.java @@ -53,7 +53,7 @@ public class DeletePostAjaxPage extends JsonPage { if ((post == null) || (post.getSone() == null)) { return createErrorJsonObject("invalid-post-id"); } - if (!webInterface.getCore().isLocalSone(post.getSone())) { + if (!post.getSone().isLocal()) { return createErrorJsonObject("not-authorized"); } webInterface.getCore().deletePost(post); diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/DeleteReplyAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/DeleteReplyAjaxPage.java index 857c777..2505c39 100644 --- a/src/main/java/net/pterodactylus/sone/web/ajax/DeleteReplyAjaxPage.java +++ b/src/main/java/net/pterodactylus/sone/web/ajax/DeleteReplyAjaxPage.java @@ -53,7 +53,7 @@ public class DeleteReplyAjaxPage extends JsonPage { if (reply == null) { return createErrorJsonObject("invalid-reply-id"); } - if (!webInterface.getCore().isLocalSone(reply.getSone())) { + if (!reply.getSone().isLocal()) { return createErrorJsonObject("not-authorized"); } webInterface.getCore().deleteReply(reply); diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/EditAlbumAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/EditAlbumAjaxPage.java index 92e1e48..0e72ea5 100644 --- a/src/main/java/net/pterodactylus/sone/web/ajax/EditAlbumAjaxPage.java +++ b/src/main/java/net/pterodactylus/sone/web/ajax/EditAlbumAjaxPage.java @@ -54,7 +54,7 @@ public class EditAlbumAjaxPage extends JsonPage { if (album == null) { return createErrorJsonObject("invalid-album-id"); } - if (!webInterface.getCore().isLocalSone(album.getSone())) { + if (!album.getSone().isLocal()) { return createErrorJsonObject("not-authorized"); } if ("true".equals(request.getHttpRequest().getParam("moveLeft"))) { diff --git a/src/main/java/net/pterodactylus/sone/web/ajax/EditImageAjaxPage.java b/src/main/java/net/pterodactylus/sone/web/ajax/EditImageAjaxPage.java index 42f4285..4a1689b 100644 --- a/src/main/java/net/pterodactylus/sone/web/ajax/EditImageAjaxPage.java +++ b/src/main/java/net/pterodactylus/sone/web/ajax/EditImageAjaxPage.java @@ -63,7 +63,7 @@ public class EditImageAjaxPage extends JsonPage { if (image == null) { return createErrorJsonObject("invalid-image-id"); } - if (!webInterface.getCore().isLocalSone(image.getSone())) { + if (!image.getSone().isLocal()) { return createErrorJsonObject("not-authorized"); } if ("true".equals(request.getHttpRequest().getParam("moveLeft"))) { diff --git a/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java b/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java index e1857a0..9a060f6 100644 --- a/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java +++ b/src/test/java/net/pterodactylus/sone/text/SoneTextParserTest.java @@ -182,7 +182,7 @@ public class SoneTextParserTest extends TestCase { */ @Override public Sone getSone(final String soneId, boolean create) { - return new Sone(soneId) { + return new Sone(soneId, false) { /** * {@inheritDoc} -- 2.7.4