X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Ffcp%2Fplugin%2FWebOfTrustPlugin.java;h=9846c832b04796619195edaad07ab829de511a85;hb=3770e1ba400538e1892d7bfe9809d6de454092d1;hp=7e5cc5ac41256dc97e6f812797f9d40db97c13f8;hpb=5a417401b78b76267ae4841b7b363624ec27464e;p=jFCPlib.git diff --git a/src/net/pterodactylus/fcp/plugin/WebOfTrustPlugin.java b/src/net/pterodactylus/fcp/plugin/WebOfTrustPlugin.java index 7e5cc5a..9846c83 100644 --- a/src/net/pterodactylus/fcp/plugin/WebOfTrustPlugin.java +++ b/src/net/pterodactylus/fcp/plugin/WebOfTrustPlugin.java @@ -50,6 +50,64 @@ public class WebOfTrustPlugin { } /** + * Creates a new identity. + * + * @param nickname + * The nickname of the new identity + * @param context + * The context for the new identity + * @param publishTrustList + * {@code true} if the new identity should publish its trust list + * @return The new identity + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public OwnIdentity createIdentity(String nickname, String context, boolean publishTrustList) throws IOException, FcpException { + return createIdentity(nickname, context, publishTrustList, null, null); + } + + /** + * Creates a new identity from the given request and insert URI. + * + * @param nickname + * The nickname of the new identity + * @param context + * The context for the new identity + * @param publishTrustList + * {@code true} if the new identity should publish its trust list + * @param requestUri + * The request URI of the identity + * @param insertUri + * The insert URI of the identity + * @return The new identity + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public OwnIdentity createIdentity(String nickname, String context, boolean publishTrustList, String requestUri, String insertUri) throws IOException, FcpException { + Map parameters = new HashMap(); + parameters.put("Message", "CreateIdentity"); + parameters.put("Nickname", nickname); + parameters.put("Context", context); + parameters.put("PublishTrustList", String.valueOf(publishTrustList)); + if ((requestUri != null) && (insertUri != null)) { + parameters.put("RequestURI", requestUri); + parameters.put("InsertURI", insertUri); + } + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", parameters); + if (!replies.get("Message").equals("IdentityCreated")) { + throw new FcpException("WebOfTrust Plugin did not reply with “IdentityCreated” message!"); + } + String identifier = replies.get("ID"); + String newRequestUri = replies.get("RequestURI"); + String newInsertUri = replies.get("InsertURI"); + return new OwnIdentity(identifier, nickname, newRequestUri, newInsertUri); + } + + /** * Returns all own identities of the web-of-trust plugins. Almost all other * commands require an {@link OwnIdentity} to return meaningful values. * @@ -75,6 +133,241 @@ public class WebOfTrustPlugin { return ownIdentities; } + /** + * Returns the trust given to the identity with the given identifier by the + * given own identity. + * + * @param ownIdentity + * The own identity that is used to calculate trust values + * @param identifier + * The identifier of the identity whose trust to get + * @return The request identity trust + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public CalculatedTrust getIdentityTrust(OwnIdentity ownIdentity, String identifier) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetIdentity", "TreeOwner", ownIdentity.getIdentifier(), "Identity", identifier)); + if (!replies.get("Message").equals("Identity")) { + throw new FcpException("WebOfTrust Plugin did not reply with “Identity” message!"); + } + Byte trust = null; + try { + trust = Byte.valueOf(replies.get("Trust")); + } catch (NumberFormatException nfe1) { + /* ignore. */ + } + Integer score = null; + try { + score = Integer.valueOf(replies.get("Score")); + } catch (NumberFormatException nfe1) { + /* ignore. */ + } + Integer rank = null; + try { + rank = Integer.valueOf(replies.get("Rank")); + } catch (NumberFormatException nfe1) { + /* ignore. */ + } + return new CalculatedTrust(trust, score, rank); + } + + /** + * Adds a new identity by its request URI. + * + * @param requestUri + * The request URI of the identity to add + * @return The added identity + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public Identity addIdentity(String requestUri) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "AddIdentity", "RequestURI", requestUri)); + if (!replies.get("Message").equals("IdentityAdded")) { + throw new FcpException("WebOfTrust Plugin did not reply with “IdentityAdded” message!"); + } + String identifier = replies.get("ID"); + String nickname = replies.get("Nickname"); + return new Identity(identifier, nickname, requestUri); + } + + /** + * Returns identities by the given score. + * + * @param ownIdentity + * The own identity + * @param context + * The context to get the identities for + * @param positive + * {@code null} to return neutrally trusted identities, {@code + * true} to return positively trusted identities, {@code false} + * for negatively trusted identities + * @return The trusted identites + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public Set getIdentitesByScore(OwnIdentity ownIdentity, String context, Boolean positive) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetIdentitesByScore", "TreeOwner", ownIdentity.getIdentifier(), "Context", context, "Selection", ((positive == null) ? "0" : (positive ? "+" : "-")))); + if (!replies.get("Message").equals("Identities")) { + throw new FcpException("WebOfTrust Plugin did not reply with “Identities” message!"); + } + Set identities = new HashSet(); + for (int identityIndex = 1; replies.containsKey("Identity" + identityIndex); identityIndex++) { + String identifier = replies.get("Identity" + identityIndex); + String nickname = replies.get("Nickname" + identityIndex); + String requestUri = replies.get("RequestURI" + identityIndex); + identities.add(new Identity(identifier, nickname, requestUri)); + } + return identities; + } + + /** + * Returns the identities that trust the given identity. + * + * @param identity + * The identity to get the trusters for + * @param context + * The context to get the trusters for + * @return The identities and their trust values + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public Map getTrusters(Identity identity, String context) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetTrusters", "Identity", identity.getIdentifier(), "Context", context)); + if (!replies.get("Message").equals("Identities")) { + throw new FcpException("WebOfTrust Plugin did not reply with “Identities” message!"); + } + Map identityTrusts = new HashMap(); + for (int identityIndex = 1; replies.containsKey("Identity" + identityIndex); identityIndex++) { + String identifier = replies.get("Identity" + identityIndex); + String nickname = replies.get("Nickname" + identityIndex); + String requestUri = replies.get("RequestURI" + identityIndex); + byte trust = Byte.parseByte(replies.get("Value" + identityIndex)); + String comment = replies.get("Comment" + identityIndex); + identityTrusts.put(new Identity(identifier, nickname, requestUri), new IdentityTrust(trust, comment)); + } + return identityTrusts; + } + + /** + * Returns the identities that given identity trusts. + * + * @param identity + * The identity to get the trustees for + * @param context + * The context to get the trustees for + * @return The identities and their trust values + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public Map getTrustees(Identity identity, String context) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "GetTrustees", "Identity", identity.getIdentifier(), "Context", context)); + if (!replies.get("Message").equals("Identities")) { + throw new FcpException("WebOfTrust Plugin did not reply with “Identities” message!"); + } + Map identityTrusts = new HashMap(); + for (int identityIndex = 1; replies.containsKey("Identity" + identityIndex); identityIndex++) { + String identifier = replies.get("Identity" + identityIndex); + String nickname = replies.get("Nickname" + identityIndex); + String requestUri = replies.get("RequestURI" + identityIndex); + byte trust = Byte.parseByte(replies.get("Value" + identityIndex)); + String comment = replies.get("Comment" + identityIndex); + identityTrusts.put(new Identity(identifier, nickname, requestUri), new IdentityTrust(trust, comment)); + } + return identityTrusts; + } + + /** + * Sets the trust given to the given identify by the given own identity. + * + * @param ownIdentity + * The identity that gives the trust + * @param identity + * The identity that receives the trust + * @param trust + * The trust value (ranging from {@code -100} to {@code 100} + * @param comment + * The comment for setting the trust + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public void setTrust(OwnIdentity ownIdentity, Identity identity, byte trust, String comment) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "SetTrust", "Truster", ownIdentity.getIdentifier(), "Trustee", identity.getIdentifier(), "Value", String.valueOf(trust), "Comment", comment)); + if (!replies.get("Message").equals("TrustSet")) { + throw new FcpException("WebOfTrust Plugin did not reply with “TrustSet” message!"); + } + } + + /** + * Adds the given context to the given identity. + * + * @param ownIdentity + * The identity to add the context to + * @param context + * The context to add + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public void addContext(OwnIdentity ownIdentity, String context) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "AddContext", "Identity", ownIdentity.getIdentifier(), "Context", context)); + if (!replies.get("Message").equals("ContextAdded")) { + throw new FcpException("WebOfTrust Plugin did not reply with “ContextAdded” message!"); + } + } + + /** + * Removes the given context from the given identity. + * + * @param ownIdentity + * The identity to remove the context from + * @param context + * The context to remove + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public void removeContext(OwnIdentity ownIdentity, String context) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "RemoveContext", "Identity", ownIdentity.getIdentifier(), "Context", context)); + if (!replies.get("Message").equals("ContextRemoved")) { + throw new FcpException("WebOfTrust Plugin did not reply with “ContextRemoved” message!"); + } + } + + /** + * Sets the given property for the given identity. + * + * @param ownIdentity + * The identity to set a property for + * @param property + * The name of the property to set + * @param value + * The value of the property to set + * @throws IOException + * if an I/O error occurs + * @throws FcpException + * if an FCP error occurs + */ + public void setProperty(OwnIdentity ownIdentity, String property, String value) throws IOException, FcpException { + Map replies = fcpClient.sendPluginMessage("plugins.WoT.WoT", createParameters("Message", "SetProperty", "Identity", ownIdentity.getIdentifier(), "Property", property, "Value", value)); + if (!replies.get("Message").equals("PropertyAdded")) { + throw new FcpException("WebOfTrust Plugin did not reply with “PropertyAdded” message!"); + } + } + // // PRIVATE METHODS // @@ -159,6 +452,116 @@ public class WebOfTrustPlugin { } /** + * Container for the trust given from one identity to another. + * + * @author David ‘Bombe’ Roden <bombe@freenetproject.org> + */ + public static class IdentityTrust { + + /** The trust given to the identity. */ + private final byte trust; + + /** The command for the trust value. */ + private final String comment; + + /** + * Creates a new identity trust container. + * + * @param trust + * The trust given to the identity + * @param comment + * The comment for the trust value + */ + public IdentityTrust(byte trust, String comment) { + this.trust = trust; + this.comment = comment; + } + + /** + * Returns the trust value given to the identity. + * + * @return The trust value + */ + public byte getTrust() { + return trust; + } + + /** + * Returns the comment for the trust value. + * + * @return The comment for the trust value + */ + public String getComment() { + return comment; + } + + } + + /** + * Container that stores the trust that is calculated by taking all trustees + * and their trust lists into account. + * + * @author David ‘Bombe’ Roden <bombe@freenetproject.org> + */ + public static class CalculatedTrust { + + /** The calculated trust value. */ + private final Byte trust; + + /** The calculated score value. */ + private final Integer score; + + /** The calculated rank. */ + private final Integer rank; + + /** + * Creates a new calculated trust container. + * + * @param trust + * The calculated trust value + * @param score + * The calculated score value + * @param rank + * The calculated rank of the + */ + public CalculatedTrust(Byte trust, Integer score, Integer rank) { + this.trust = trust; + this.score = score; + this.rank = rank; + } + + /** + * Returns the calculated trust value. + * + * @return The calculated trust value, or {@code null} if the trust + * value is not known + */ + public Byte getTrust() { + return trust; + } + + /** + * Returns the calculated score value. + * + * @return The calculated score value, or {@code null} if the score + * value is not known + */ + public Integer getScore() { + return score; + } + + /** + * Returns the calculated rank. + * + * @return The calculated rank, or {@code null} if the rank is not known + */ + public Integer getRank() { + return rank; + } + + } + + /** * Wrapper around a web-of-trust own identity. * * @author David ‘Bombe’ Roden <bombe@freenetproject.org>