From 7af562d9e2eadd7e641dad81b743ef8d46a1e103 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Mon, 30 Nov 2015 23:05:26 +0100
Subject: [PATCH] Fix #236 better know identity informations

---
 app/controllers/wot.js | 34 +++++++++++++++++++++++++++++++---
 app/lib/streams/bma.js |  2 +-
 doc/HTTP_API.md        | 28 ++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/app/controllers/wot.js b/app/controllers/wot.js
index 3149cd2f3..3990193ac 100644
--- a/app/controllers/wot.js
+++ b/app/controllers/wot.js
@@ -1,11 +1,9 @@
 "use strict";
 var co = require('co');
-var util     = require('util');
 var async    = require('async');
 var _        = require('underscore');
 var Q        = require('q');
-var stream   = require('stream');
-var unix2dos = require('../lib/unix2dos');
+var moment = require('moment');
 var dos2unix = require('../lib/dos2unix');
 var http2raw = require('../lib/streams/parsers/http2raw');
 var jsoner   = require('../lib/streams/jsoner');
@@ -122,6 +120,7 @@ function WOTBinding (server) {
             if (certifier) {
               cert.uid = certifier.uid;
               cert.isMember = certifier.member;
+              cert.sigDate = moment(certifier.time).unix();
               cert.wasMember = true; // As we checked if(certified)
               if (!cert.cert_time) {
                 // TODO: would be more efficient to save medianTime on certification reception
@@ -138,6 +137,7 @@ function WOTBinding (server) {
         var json = {
           pubkey: idty.pubkey,
           uid: idty.uid,
+          sigDate: moment(idty.time).unix(),
           isMember: idty.member,
           certifications: []
         };
@@ -148,6 +148,7 @@ function WOTBinding (server) {
             isMember: cert.isMember,
             wasMember: cert.wasMember,
             cert_time: cert.cert_time,
+            sigDate: cert.sigDate,
             written: cert.linked ? {
               number: cert.written_block,
               hash: cert.written_hash
@@ -231,6 +232,7 @@ function WOTBinding (server) {
             if (certified) {
               cert.uid = certified.uid;
               cert.isMember = certified.member;
+              cert.sigDate = moment(certified.time).unix();
               cert.wasMember = true; // As we checked if(certified)
               if (!cert.cert_time) {
                 // TODO: would be more efficient to save medianTime on certification reception
@@ -247,6 +249,7 @@ function WOTBinding (server) {
         var json = {
           pubkey: idty.pubkey,
           uid: idty.uid,
+          sigDate: moment(idty.time).unix(),
           isMember: idty.member,
           certifications: []
         };
@@ -257,6 +260,7 @@ function WOTBinding (server) {
             isMember: cert.isMember,
             wasMember: cert.wasMember,
             cert_time: cert.cert_time,
+            sigDate: cert.sigDate,
             written: cert.linked ? {
               number: cert.written_block,
               hash: cert.written_hash
@@ -275,6 +279,30 @@ function WOTBinding (server) {
     });
   };
 
+  this.identityOf = function (req, res) {
+    res.type('application/json');
+    return co(function *() {
+      try {
+        let search = yield ParametersService.getSearchP(req);
+        let idty = yield IdentityService.findMemberWithoutMemberships(search);
+        if (!idty) {
+          throw 'Identity not found';
+        }
+        if (!idty.member) {
+          throw 'Not a member';
+        }
+        var json = {
+          pubkey: idty.pubkey,
+          uid: idty.uid,
+          sigDate: moment(idty.time).unix()
+        };
+        res.send(200, JSON.stringify(json, null, "  "));
+      } catch(e) {
+        res.send(400, e);
+      }
+    });
+  };
+
   this.add = function (req, res) {
     res.type('application/json');
     var onError = http400(res);
diff --git a/app/lib/streams/bma.js b/app/lib/streams/bma.js
index fc3dad18d..16b24c455 100644
--- a/app/lib/streams/bma.js
+++ b/app/lib/streams/bma.js
@@ -1,6 +1,5 @@
 var http = require('http');
 var express = require('express');
-var async = require('async');
 var log4js = require('log4js');
 var co = require('co');
 var Q = require('q');
@@ -93,6 +92,7 @@ module.exports = function(server, interfaces, httpLogs) {
   answerForGet( '/wot/requirements/:pubkey',  wot.requirements);
   answerForGet( '/wot/certifiers-of/:search', wot.certifiersOf);
   answerForGet( '/wot/certified-by/:search',  wot.certifiedBy);
+  answerForGet( '/wot/identity-of/:search',   wot.identityOf);
 
   var transactions = require('../../controllers/transactions')(server);
   var dividend     = require('../../controllers/uds')(server);
diff --git a/doc/HTTP_API.md b/doc/HTTP_API.md
index 28a795ea2..1da478db1 100644
--- a/doc/HTTP_API.md
+++ b/doc/HTTP_API.md
@@ -465,6 +465,7 @@ Each certification also has:
   "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY",
   "uid": "user identifier",
   "isMember": true,
+  sigDate: 1421787461,
   "certifications": [
     {
       "pubkey": "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB",
@@ -473,6 +474,7 @@ Each certification also has:
         "block": 88,
         "medianTime": 1509991044
       },
+      sigDate: 1421787461,
       "written": {
         "number": 872768,
         "hash": "D30978C9D6C5A348A8188603F039423D90E50DC5"
@@ -511,6 +513,7 @@ Each certification also has:
   "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY",
   "uid": "user identifier",
   "isMember": true,
+  sigDate: 1421787461,
   "certifications": [
     {
       "pubkey": "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB",
@@ -519,6 +522,7 @@ Each certification also has:
         "block": 88,
         "medianTime": 1509991044
       },
+      sigDate: 1421787461,
       "written": {
         "number": 872768,
         "hash": "D30978C9D6C5A348A8188603F039423D90E50DC5"
@@ -531,6 +535,30 @@ Each certification also has:
 }
 ```
 
+#### `wot/identity-of/[search]`
+
+
+**Goal**
+
+GET identity data written for a member.
+
+**Parameters**
+
+Name  | Value | Method
+----  | ----- | ------
+`search` | Public key or uid of a *member* we want see the attached identity. | URL
+
+**Returns**
+
+Identity data written in the blockchain.
+```json
+{
+  "pubkey": "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY",
+  "uid": "user identifier",
+  "sigDate": 1390739944
+}
+```
+
 ### currency/*
 
 #### `currency/parameters`
-- 
GitLab