Skip to content
Snippets Groups Projects
Commit 207781bf authored by Benoit Lavenier's avatar Benoit Lavenier
Browse files

Add implementation of /wot/certified-by and /wot/certifiers-of

parent 47775a5b
Branches
Tags
No related merge requests found
Showing
with 866 additions and 558 deletions
/target/
package io.ucoin.client.core.model;
import java.io.Serializable;
/**
* Basic information on a identity.
*
* @author Benoit Lavenier <benoit.lavenier@e-is.pro>
* @since 1.0
*
*/
public class BasicIdentity implements Serializable {
private static final long serialVersionUID = 8080689271400316984L;
private String pubkey;
private String signature;
private String uid;
public String getPubkey() {
return pubkey;
}
public void setPubkey(String pubkey) {
this.pubkey = pubkey;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder()
.append("uid=").append(uid)
.append(",pubkey=").append(pubkey)
.append(",signature").append(signature);
return sb.toString();
}
}
package io.ucoin.client.core.model;
public class Identity {
public class Identity extends BasicIdentity {
private String pubkey;
private static final long serialVersionUID = -7451079677730158794L;
private String signature;
private int timestamp;
private String uid;
public String getPubkey() {
return pubkey;
}
public void setPubkey(String pubkey) {
this.pubkey = pubkey;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
private int timestamp = -1;
/**
* The timestamp value of the signature date
* @return
*/
public int getTimestamp() {
return timestamp;
}
......@@ -34,11 +18,4 @@ public class Identity {
this.timestamp = timestamp;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
......@@ -2,6 +2,8 @@ package io.ucoin.client.core.model;
public class Member extends Identity{
private static final long serialVersionUID = 8448049949323699700L;
private String number;
private String hash;
......
package io.ucoin.client.core.model;
/**
* A certification, return by <code>/wot/certified-by/[uid]</code> or <code>/wot/certifiers-of/[uid]</code>
* @author Benoit Lavenier <benoit.lavenier@e-is.pro>
* @since 1.0
*
*/
public class WotCertification extends BasicIdentity{
private static final long serialVersionUID = 2204517069552693026L;
public WotCertificationTime cert_time;
/**
* Indicate whether the certification is written in the blockchain or not.
*/
public boolean written;
public WotCertificationTime getCert_time() {
return cert_time;
}
public void setCert_time(WotCertificationTime cert_time) {
this.cert_time = cert_time;
}
/**
* Indicate whether the certification is written in the blockchain or not.
*/
public boolean isWritten() {
return written;
}
public void setWritten(boolean written) {
this.written = written;
}
}
package io.ucoin.client.core.model;
import java.io.Serializable;
public class WotCertificationTime implements Serializable{
private static final long serialVersionUID = -358639516878884523L;
private int block = -1;
private int medianTime = -1;
public int getBlock() {
return block;
}
public void setBlock(int block) {
this.block = block;
}
public int getMedianTime() {
return medianTime;
}
public void setMedianTime(int medianTime) {
this.medianTime = medianTime;
}
}
package io.ucoin.client.core.model;
import java.util.List;
/**
* A list of certifications done to user, or by user
* @author Benoit Lavenier <benoit.lavenier@e-is.pro>
* @since 1.0
*
*/
public class WotIdentityCertifications extends BasicIdentity {
private static final long serialVersionUID = 8568496827055074607L;
private List<WotCertification> certifications;
public List<WotCertification> getCertifications() {
return certifications;
}
public void setCertifications(List<WotCertification> certifications) {
this.certifications = certifications;
}
}
......@@ -9,6 +9,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.net.ConnectException;
import java.net.URI;
import java.net.URISyntaxException;
......@@ -127,10 +128,24 @@ public abstract class AbstractService implements Closeable {
protected Object parseResponse(CloseableHttpResponse response, Class<?> ResultClass) throws IOException {
Object result;
// If trace enable, log the response before parsing
if (log.isTraceEnabled()) {
try (InputStream content = response.getEntity().getContent()) {
String jsonString = getContentAsString(content);
log.trace("Parsing response:\n" + jsonString);
result = gson.fromJson(jsonString, ResultClass);
}
}
// trace not enable
else {
try (InputStream content = response.getEntity().getContent()) {
Reader reader = new InputStreamReader(content, Charsets.UTF_8);
result = gson.fromJson(reader, ResultClass);
}
}
if (result == null) {
throw new UCoinTechnicalException("ucoin.client.core.emptyResponse");
......@@ -142,4 +157,15 @@ public abstract class AbstractService implements Closeable {
return result;
}
protected String getContentAsString(InputStream content) throws IOException {
Reader reader = new InputStreamReader(content, Charsets.UTF_8);
StringBuilder result = new StringBuilder();
char[] buf = new char[64];
int len = 0;
while((len = reader.read(buf)) != -1) {
result.append(buf, 0, len);
}
return result.toString();
}
}
......@@ -19,6 +19,9 @@ public interface ProtocolUrls {
public static final String WOT_LOOKUP = WOT_BASE + "/lookup/%s";
public static final String WOT_CERTIFIED_BY = WOT_BASE + "/certified-by/%s";
public static final String WOT_CERTIFIERS_OF = WOT_BASE + "/certifiers-of/%s";
}
package io.ucoin.client.core.service;
import io.ucoin.client.core.model.WotIdentityCertifications;
import io.ucoin.client.core.model.WotLookupResult;
import io.ucoin.client.core.model.WotLookupResults;
import io.ucoin.client.core.model.WotLookupUId;
......@@ -37,11 +38,12 @@ public class WotService extends AbstractService {
log.debug(String.format("Try to find user info by uid: %s", uid));
}
// get parameter
// call lookup
String path = String.format(ProtocolUrls.WOT_LOOKUP, uid);
HttpGet lookupHttpGet = new HttpGet(getAppendedPath(path));
WotLookupResults lookupResults = executeRequest(lookupHttpGet, WotLookupResults.class);
// Retrieve the exact uid
WotLookupUId uniqueResult = getUid(lookupResults, uid);
if (uniqueResult == null) {
throw new UCoinTechnicalException("User not found, with uid=" + uid);
......@@ -50,6 +52,36 @@ public class WotService extends AbstractService {
return uniqueResult;
}
public WotIdentityCertifications getCertifiedBy(String uid) throws Exception {
if (log.isDebugEnabled()) {
log.debug(String.format("Try to get certifications done by uid: %s", uid));
}
// call certified-by
String path = String.format(ProtocolUrls.WOT_CERTIFIED_BY, uid);
HttpGet httpGet = new HttpGet(getAppendedPath(path));
WotIdentityCertifications result = executeRequest(httpGet, WotIdentityCertifications.class);
return result;
}
public WotIdentityCertifications getCertifiersOf(String uid) throws Exception {
if (log.isDebugEnabled()) {
log.debug(String.format("Try to get certifications done to uid: %s", uid));
}
// call certifiers-of
String path = String.format(ProtocolUrls.WOT_CERTIFIERS_OF, uid);
HttpGet httpGet = new HttpGet(getAppendedPath(path));
WotIdentityCertifications result = executeRequest(httpGet, WotIdentityCertifications.class);
return result;
}
/* -- Internal methods -- */
protected WotLookupUId getUid(WotLookupResults lookupResults, String filterUid) {
......
ucoinj.config=
ucoinj.config.option.basedir.description=
ucoinj.config.option.cache.directory.description=
ucoinj.config.option.data.directory.description=
ucoinj.config.option.i18n.directory.description=
ucoinj.config.option.i18n.locale.description=
ucoinj.config.option.inceptionYear.description=
ucoinj.config.option.node.currency.description=
ucoinj.config.option.node.host.description=
ucoinj.config.option.node.port.description=
ucoinj.config.option.node.protocol.description=
ucoinj.config.option.node.timeout.description=
ucoinj.config.option.organizationName.description=
ucoinj.config.option.passwd.description=
ucoinj.config.option.salt.description=
ucoinj.config.option.site.url.description=
ucoinj.config.option.tmp.directory.description=
ucoinj.config.option.version.description=
ucoinj.config.parse.error=
quadrige2.config.parse.error=Erreur lors de la lecture de la ligne de commande
ucoinj.config=
ucoinj.config.option.basedir.description=
ucoinj.config.option.cache.directory.description=
ucoinj.config.option.data.directory.description=
ucoinj.config.option.i18n.directory.description=
ucoinj.config.option.i18n.locale.description=
ucoinj.config.option.inceptionYear.description=
ucoinj.config.option.node.currency.description=
ucoinj.config.option.node.host.description=
ucoinj.config.option.node.port.description=
ucoinj.config.option.node.protocol.description=
ucoinj.config.option.node.timeout.description=
ucoinj.config.option.organizationName.description=
ucoinj.config.option.passwd.description=
ucoinj.config.option.salt.description=
ucoinj.config.option.site.url.description=
ucoinj.config.option.tmp.directory.description=
ucoinj.config.option.version.description=
ucoinj.config.parse.error=
......@@ -3,7 +3,7 @@ package io.ucoin.client.core.service;
import io.ucoin.client.core.TestResource;
import io.ucoin.client.core.model.BlockchainBlock;
import io.ucoin.client.core.model.BlockchainParameter;
import io.ucoin.client.core.model.Identity;
import io.ucoin.client.core.model.BasicIdentity;
import io.ucoin.client.core.model.Member;
import org.apache.commons.logging.Log;
......@@ -44,7 +44,7 @@ public class BlockchainServiceTest {
Assert.assertNotNull(result);
Assert.assertNotNull(result.getCurrency());
for (Identity id: result.getIdentities()) {
for (BasicIdentity id: result.getIdentities()) {
Assert.assertNotNull(id.getUid());
}
......
package io.ucoin.client.core.service;
import io.ucoin.client.core.TestResource;
import io.ucoin.client.core.model.BasicIdentity;
import io.ucoin.client.core.model.Identity;
import io.ucoin.client.core.model.WotCertification;
import io.ucoin.client.core.model.WotCertificationTime;
import io.ucoin.client.core.model.WotIdentityCertifications;
import io.ucoin.client.core.model.WotLookupResults;
import io.ucoin.client.core.model.WotLookupUId;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Assert;
......@@ -37,4 +43,77 @@ public class WotServiceTest {
// close
service.close();
}
@Test
public void getCertifiedBy() throws Exception {
WotService service = new WotService();
WotIdentityCertifications result = service.getCertifiedBy(resource.getFixtures().getUid());
assertBasicIdentity(result, false);
Assert.assertTrue(String.format("Test user (uid=%s) should have some certifications return by %s",
resource.getFixtures().getUid(),
ProtocolUrls.WOT_CERTIFIED_BY),
CollectionUtils.isNotEmpty(result.getCertifications()));
for (WotCertification cert: result.getCertifications()) {
Assert.assertNotNull(cert.getUid());
WotCertificationTime certTime = cert.getCert_time();
Assert.assertNotNull(certTime);
Assert.assertTrue(certTime.getBlock() >= 0);
Assert.assertNotNull(certTime.getMedianTime() >= 0);
}
// close
service.close();
}
@Test
public void getCertifiersOf() throws Exception {
WotService service = new WotService();
WotIdentityCertifications result = service.getCertifiersOf(resource.getFixtures().getUid());
assertBasicIdentity(result, false);
Assert.assertTrue(String.format("Test user (uid=%s) should have some certifications return by %s",
resource.getFixtures().getUid(),
ProtocolUrls.WOT_CERTIFIERS_OF),
CollectionUtils.isNotEmpty(result.getCertifications()));
for (WotCertification cert: result.getCertifications()) {
Assert.assertNotNull(cert.getUid());
WotCertificationTime certTime = cert.getCert_time();
Assert.assertNotNull(certTime);
Assert.assertTrue(certTime.getBlock() >= 0);
Assert.assertNotNull(certTime.getMedianTime() >= 0);
}
// close
service.close();
}
/* -- internal methods */
protected void assertBasicIdentity(BasicIdentity identity, boolean withSignature) {
Assert.assertNotNull(identity);
Assert.assertNotNull(identity.getUid());
Assert.assertNotNull(identity.getPubkey());
if (withSignature) {
Assert.assertNotNull(identity.getSignature());
}
else {
Assert.assertNull(identity.getSignature());
}
}
protected void assertIdentity(Identity identity) {
assertBasicIdentity(identity, true);
Assert.assertTrue(identity.getTimestamp() > 0);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment