From d85393fde551140ea9f5646dced75a264dc5ad9c Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Thu, 20 Sep 2012 11:45:00 +0200 Subject: [PATCH] Add identitiy implementation from Sone. --- .../util/freenet/fcp2/wot/DefaultIdentity.java | 234 +++++++++++++++++++++ .../util/freenet/fcp2/wot/DefaultOwnIdentity.java | 73 +++++++ .../todesbaum/util/freenet/fcp2/wot/Identity.java | 169 +++++++++++++++ .../util/freenet/fcp2/wot/OwnIdentity.java | 35 +++ .../de/todesbaum/util/freenet/fcp2/wot/Trust.java | 90 ++++++++ 5 files changed, 601 insertions(+) create mode 100644 src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultIdentity.java create mode 100644 src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultOwnIdentity.java create mode 100644 src/main/java/de/todesbaum/util/freenet/fcp2/wot/Identity.java create mode 100644 src/main/java/de/todesbaum/util/freenet/fcp2/wot/OwnIdentity.java create mode 100644 src/main/java/de/todesbaum/util/freenet/fcp2/wot/Trust.java diff --git a/src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultIdentity.java b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultIdentity.java new file mode 100644 index 0000000..a9b4cb3 --- /dev/null +++ b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultIdentity.java @@ -0,0 +1,234 @@ +/* + * Sone - DefaultIdentity.java - Copyright © 2010–2012 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.todesbaum.util.freenet.fcp2.wot; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + * A Web of Trust identity. + * + * @author David ‘Bombe’ Roden + */ +public class DefaultIdentity implements Identity { + + /** The ID of the identity. */ + private final String id; + + /** The nickname of the identity. */ + private final String nickname; + + /** The request URI of the identity. */ + private final String requestUri; + + /** The contexts of the identity. */ + private final Set contexts = Collections.synchronizedSet(new HashSet()); + + /** The properties of the identity. */ + private final Map properties = Collections.synchronizedMap(new HashMap()); + + /** Cached trust. */ + private final Map trustCache = Collections.synchronizedMap(new HashMap()); + + /** + * Creates a new identity. + * + * @param id + * The ID of the identity + * @param nickname + * The nickname of the identity + * @param requestUri + * The request URI of the identity + */ + public DefaultIdentity(String id, String nickname, String requestUri) { + this.id = id; + this.nickname = nickname; + this.requestUri = requestUri; + } + + // + // ACCESSORS + // + + /** + * {@inheritDoc} + */ + @Override + public String getId() { + return id; + } + + /** + * {@inheritDoc} + */ + @Override + public String getNickname() { + return nickname; + } + + /** + * {@inheritDoc} + */ + @Override + public String getRequestUri() { + return requestUri; + } + + /** + * {@inheritDoc} + */ + @Override + public Set getContexts() { + return Collections.unmodifiableSet(contexts); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean hasContext(String context) { + return contexts.contains(context); + } + + /** + * {@inheritDoc} + */ + @Override + public void setContexts(Collection contexts) { + this.contexts.clear(); + this.contexts.addAll(contexts); + } + + /** + * {@inheritDoc} + */ + @Override + public void addContext(String context) { + contexts.add(context); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeContext(String context) { + contexts.remove(context); + } + + /** + * {@inheritDoc} + */ + @Override + public Map getProperties() { + return Collections.unmodifiableMap(properties); + } + + /** + * {@inheritDoc} + */ + @Override + public void setProperties(Map properties) { + this.properties.clear(); + this.properties.putAll(properties); + } + + /** + * {@inheritDoc} + */ + @Override + public String getProperty(String name) { + return properties.get(name); + } + + /** + * {@inheritDoc} + */ + @Override + public void setProperty(String name, String value) { + properties.put(name, value); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeProperty(String name) { + properties.remove(name); + } + + /** + * {@inheritDoc} + */ + @Override + public Trust getTrust(OwnIdentity ownIdentity) { + return trustCache.get(ownIdentity); + } + + /** + * {@inheritDoc} + */ + @Override + public void setTrust(OwnIdentity ownIdentity, Trust trust) { + trustCache.put(ownIdentity, trust); + } + + /** + * {@inheritDoc} + */ + @Override + public void removeTrust(OwnIdentity ownIdentity) { + trustCache.remove(ownIdentity); + } + + // + // OBJECT METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + return id.hashCode(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object object) { + if (!(object instanceof DefaultIdentity)) { + return false; + } + DefaultIdentity identity = (DefaultIdentity) object; + return identity.id.equals(id); + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return getClass().getSimpleName() + "[id=" + id + ",nickname=" + nickname + ",contexts=" + contexts + ",properties=" + properties + "]"; + } + +} diff --git a/src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultOwnIdentity.java b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultOwnIdentity.java new file mode 100644 index 0000000..058116e --- /dev/null +++ b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/DefaultOwnIdentity.java @@ -0,0 +1,73 @@ +/* + * Sone - DefaultOwnIdentity.java - Copyright © 2010–2012 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.todesbaum.util.freenet.fcp2.wot; + +/** + * An own identity is an identity that the owner of the node has full control + * over. + * + * @author David ‘Bombe’ Roden + */ +public class DefaultOwnIdentity extends DefaultIdentity implements OwnIdentity { + + /** The insert URI of the identity. */ + private final String insertUri; + + /** + * Creates a new own identity. + * + * @param id + * The ID of the identity + * @param nickname + * The nickname of the identity + * @param requestUri + * The request URI of the identity + * @param insertUri + * The insert URI of the identity + */ + public DefaultOwnIdentity(String id, String nickname, String requestUri, String insertUri) { + super(id, nickname, requestUri); + this.insertUri = insertUri; + } + + /** + * Copy constructor for an own identity. + * + * @param ownIdentity + * The own identity to copy + */ + public DefaultOwnIdentity(OwnIdentity ownIdentity) { + super(ownIdentity.getId(), ownIdentity.getNickname(), ownIdentity.getRequestUri()); + this.insertUri = ownIdentity.getInsertUri(); + setContexts(ownIdentity.getContexts()); + setProperties(ownIdentity.getProperties()); + } + + // + // ACCESSORS + // + + /** + * {@inheritDoc} + */ + @Override + public String getInsertUri() { + return insertUri; + } + +} diff --git a/src/main/java/de/todesbaum/util/freenet/fcp2/wot/Identity.java b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/Identity.java new file mode 100644 index 0000000..19a3cdb --- /dev/null +++ b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/Identity.java @@ -0,0 +1,169 @@ +/* + * Sone - Identity.java - Copyright © 2010–2012 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.todesbaum.util.freenet.fcp2.wot; + +import java.util.Collection; +import java.util.Map; +import java.util.Set; + +/** + * Interface for web of trust identities, defining all functions that can be + * performed on an identity. An identity is only a container for identity data + * and will not perform any updating in the WebOfTrust plugin itself. + * + * @author David ‘Bombe’ Roden + */ +public interface Identity { + + /** + * Returns the ID of the identity. + * + * @return The ID of the identity + */ + public String getId(); + + /** + * Returns the nickname of the identity. + * + * @return The nickname of the identity + */ + public String getNickname(); + + /** + * Returns the request URI of the identity. + * + * @return The request URI of the identity + */ + public String getRequestUri(); + + /** + * Returns all contexts of this identity. + * + * @return All contexts of this identity + */ + public Set getContexts(); + + /** + * Returns whether this identity has the given context. + * + * @param context + * The context to check for + * @return {@code true} if this identity has the given context, + * {@code false} otherwise + */ + public boolean hasContext(String context); + + /** + * Adds the given context to this identity. + * + * @param context + * The context to add + */ + public void addContext(String context); + + /** + * Sets all contexts of this identity. + * + * @param contexts + * All contexts of the identity + */ + public void setContexts(Collection contexts); + + /** + * Removes the given context from this identity. + * + * @param context + * The context to remove + */ + public void removeContext(String context); + + /** + * Returns all properties of this identity. + * + * @return All properties of this identity + */ + public Map getProperties(); + + /** + * Returns the value of the property with the given name. + * + * @param name + * The name of the property + * @return The value of the property + */ + public String getProperty(String name); + + /** + * Sets the property with the given name to the given value. + * + * @param name + * The name of the property + * @param value + * The value of the property + */ + public void setProperty(String name, String value); + + /** + * Sets all properties of this identity. + * + * @param properties + * The new properties of this identity + */ + public void setProperties(Map properties); + + /** + * Removes the property with the given name. + * + * @param name + * The name of the property to remove + */ + public void removeProperty(String name); + + /** + * Retrieves the trust that this identity receives from the given own + * identity. If this identity is not in the own identity’s trust tree, a + * {@link Trust} is returned that has all its elements set to {@code null}. + * If the trust can not be retrieved, {@code null} is returned. + * + * @param ownIdentity + * The own identity to get the trust for + * @return The trust assigned to this identity, or {@code null} if the trust + * could not be retrieved + */ + public Trust getTrust(OwnIdentity ownIdentity); + + /** + * Sets the trust given by an own identity to this identity. + * + * @param ownIdentity + * The own identity that gave trust to this identity + * @param trust + * The trust given by the given own identity + */ + public void setTrust(OwnIdentity ownIdentity, Trust trust); + + /** + * Removes trust assignment from the given own identity for this identity. + * + * @param ownIdentity + * The own identity that removed the trust assignment for this + * identity + */ + public void removeTrust(OwnIdentity ownIdentity); + +} diff --git a/src/main/java/de/todesbaum/util/freenet/fcp2/wot/OwnIdentity.java b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/OwnIdentity.java new file mode 100644 index 0000000..74256af --- /dev/null +++ b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/OwnIdentity.java @@ -0,0 +1,35 @@ +/* + * Sone - OwnIdentity.java - Copyright © 2010–2012 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.todesbaum.util.freenet.fcp2.wot; + + +/** + * Defines a local identity, an own identity. + * + * @author David ‘Bombe’ Roden + */ +public interface OwnIdentity extends Identity { + + /** + * Returns the insert URI of the identity. + * + * @return The insert URI of the identity + */ + public String getInsertUri(); + +} diff --git a/src/main/java/de/todesbaum/util/freenet/fcp2/wot/Trust.java b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/Trust.java new file mode 100644 index 0000000..4297ac3 --- /dev/null +++ b/src/main/java/de/todesbaum/util/freenet/fcp2/wot/Trust.java @@ -0,0 +1,90 @@ +/* + * Sone - Trust.java - Copyright © 2010–2012 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package de.todesbaum.util.freenet.fcp2.wot; + +/** + * Container class for trust in the web of trust. + * + * @author David ‘Bombe’ Roden + */ +public class Trust { + + /** Explicitely assigned trust. */ + private final Integer explicit; + + /** Implicitely calculated trust. */ + private final Integer implicit; + + /** The distance from the owner of the trust tree. */ + private final Integer distance; + + /** + * Creates a new trust container. + * + * @param explicit + * The explicit trust + * @param implicit + * The implicit trust + * @param distance + * The distance + */ + public Trust(Integer explicit, Integer implicit, Integer distance) { + this.explicit = explicit; + this.implicit = implicit; + this.distance = distance; + } + + /** + * Returns the trust explicitely assigned to an identity. + * + * @return The explicitely assigned trust, or {@code null} if the identity + * is not in the own identity’s trust tree + */ + public Integer getExplicit() { + return explicit; + } + + /** + * Returns the implicitely assigned trust, or the calculated trust. + * + * @return The calculated trust, or {@code null} if the identity is not in + * the own identity’s trust tree + */ + public Integer getImplicit() { + return implicit; + } + + /** + * Returns the distance of the trusted identity from the trusting identity. + * + * @return The distance from the own identity, or {@code null} if the + * identity is not in the own identity’s trust tree + */ + public Integer getDistance() { + return distance; + } + + /** + * {@inheritDoc} + */ + @Override + public String toString() { + return getClass().getName() + "[explicit=" + explicit + ",implicit=" + implicit + ",distance=" + distance + "]"; + } + +} -- 2.7.4