)]}'
{"src/identity/index.js":[{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":16,"context_line":"      \u0027Content-Type\u0027: \u0027application/json\u0027"},{"line_number":17,"context_line":"    }, options.headers);"},{"line_number":18,"context_line":"    return fetch(this.url + url, options)"},{"line_number":19,"context_line":"      .then((response) \u003d\u003e response.json());"},{"line_number":20,"context_line":"  }"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  authenticate (username, password, options) {"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_4ecfc828","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":43},"updated":"2016-07-01 08:18:37.000000000","message":"No error handling. What if not 200 OK? response.ok should be checked","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":8735,"name":"Vitaly Kramskikh","email":"vkramskikh@mirantis.com","username":"vkramskikh"},"change_message_id":"7371a4a267afed6049d2a8153bb7871190bafdce","unresolved":false,"context_lines":[{"line_number":20,"context_line":"  }"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  authenticate (username, password, options) {"},{"line_number":23,"context_line":"    if (this.tokenUpdatePromise) {"},{"line_number":24,"context_line":"      return this.tokenUpdatePromise;"},{"line_number":25,"context_line":"    }"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    options \u003d options || {};"},{"line_number":28,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_d0bb150d","line":25,"range":{"start_line":23,"start_character":0,"end_line":25,"end_character":5},"updated":"2016-06-22 09:03:29.000000000","message":"This was done to prevent multiple simultaneous auth requests. I think for generic library this code isn\u0027t needed - this functionality should be implemented on the library user\u0027s side.","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    if ("},{"line_number":30,"context_line":"      !options.force \u0026\u0026"},{"line_number":31,"context_line":"      this.tokenUpdateTime \u0026\u0026"},{"line_number":32,"context_line":"      (this.cacheTokenFor \u003e (new Date() - this.tokenUpdateTime))"},{"line_number":33,"context_line":"    ) {"},{"line_number":34,"context_line":"      return Promise.resolve();"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_0ebe6064","line":32,"updated":"2016-07-01 08:18:37.000000000","message":"Date.now() is preferable when dealing with timestamps and time spans","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":8735,"name":"Vitaly Kramskikh","email":"vkramskikh@mirantis.com","username":"vkramskikh"},"change_message_id":"7371a4a267afed6049d2a8153bb7871190bafdce","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    options \u003d options || {};"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if ("},{"line_number":30,"context_line":"      !options.force \u0026\u0026"},{"line_number":31,"context_line":"      this.tokenUpdateTime \u0026\u0026"},{"line_number":32,"context_line":"      (this.cacheTokenFor \u003e (new Date() - this.tokenUpdateTime))"},{"line_number":33,"context_line":"    ) {"},{"line_number":34,"context_line":"      return Promise.resolve();"},{"line_number":35,"context_line":"    }"},{"line_number":36,"context_line":"    var data \u003d {auth: {}};"},{"line_number":37,"context_line":"    if (username \u0026\u0026 password) {"},{"line_number":38,"context_line":"      data.auth.passwordCredentials \u003d {"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_100abdd2","line":35,"range":{"start_line":29,"start_character":0,"end_line":35,"end_character":5},"updated":"2016-06-22 09:03:29.000000000","message":"Same applies for caching, though we can implement caching as a part of js-openstack-lib, which could be used by all the clients.","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":38,"context_line":"      data.auth.passwordCredentials \u003d {"},{"line_number":39,"context_line":"        username: username,"},{"line_number":40,"context_line":"        password: password"},{"line_number":41,"context_line":"      };"},{"line_number":42,"context_line":"    } else if (this.token) {"},{"line_number":43,"context_line":"      data.auth.token \u003d {id: this.token};"},{"line_number":44,"context_line":"    } else {"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_0e4ca09c","line":41,"updated":"2016-07-01 08:18:37.000000000","message":"in ES6 {username, password} is shortcut for {username:username, password: password}","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    this.tokenUpdatePromise"},{"line_number":61,"context_line":"      .catch(() \u003d\u003e delete this.tokenUpdateTime)"},{"line_number":62,"context_line":"      .then(() \u003d\u003e delete this.tokenUpdatePromise);"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    return this.tokenUpdatePromise;"},{"line_number":65,"context_line":"  }"},{"line_number":66,"context_line":""}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_69371ee3","line":63,"updated":"2016-07-01 08:18:37.000000000","message":"Please use brackets {} when lambda is not supposed to return value","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":72,"context_line":"      }"},{"line_number":73,"context_line":"    };"},{"line_number":74,"context_line":"    return this.request(\u0027/v2.0/OS-KSCRUD/users/\u0027 + this.userId, {"},{"line_number":75,"context_line":"      method: \u0027PATCH\u0027,"},{"line_number":76,"context_line":"      headers: {"},{"line_number":77,"context_line":"        \u0027X-Auth-Token\u0027: this.token"},{"line_number":78,"context_line":"      },"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_69655edf","line":75,"updated":"2016-07-01 08:18:37.000000000","message":"hardcoded stuff, can you use const\u0027s in the top of file?","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    }).then((result) \u003d\u003e {"},{"line_number":81,"context_line":"      this.token \u003d result.access.token.id;"},{"line_number":82,"context_line":"      this.tokenUpdateTime \u003d new Date();"},{"line_number":83,"context_line":"    });"},{"line_number":84,"context_line":"  }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  deauthenticate () {"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_89988ac1","line":83,"updated":"2016-07-01 08:18:37.000000000","message":"Date.now() is immediate timestamp, while new Date() is object that should be implicitly converted later","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    this.tokenRemoveRequest"},{"line_number":109,"context_line":"      .catch(() \u003d\u003e true)"},{"line_number":110,"context_line":"      .then(() \u003d\u003e delete this.tokenRemoveRequest);"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    return this.tokenRemoveRequest;"},{"line_number":113,"context_line":"  }"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_e9302ea0","line":110,"updated":"2016-07-01 08:18:37.000000000","message":"what is the reason for () \u003d\u003e true?\nNo need for meaningless boilerplate code","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"var keystoneClient \u003d new KeystoneClient("},{"line_number":117,"context_line":"  \u0027http://127.0.0.1:8000/keystone\u0027,"},{"line_number":118,"context_line":"  {tenant: \u0027admin\u0027}"},{"line_number":119,"context_line":");"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"keystoneClient.authenticate(\u0027admin\u0027, \u0027admin\u0027, {force: true}).then(function () {"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_09d5ba1a","line":118,"updated":"2016-07-01 08:18:37.000000000","message":"hardcode, should be provided by user","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"},{"author":{"_account_id":13516,"name":"Anton Zemlyanov","email":"azemlyanov@mirantis.com","username":"azemlyanov"},"change_message_id":"bb852564704a2fb80b17e9bc844c02acd5dba060","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"keystoneClient.authenticate(\u0027admin\u0027, \u0027admin\u0027, {force: true}).then(function () {"},{"line_number":122,"context_line":"  console.log(\u0027Success!\u0027);"},{"line_number":123,"context_line":"}, function (error) {"},{"line_number":124,"context_line":"  console.error(error);"},{"line_number":125,"context_line":"});"}],"source_content_type":"text/javascript","patch_set":1,"id":"3aaa91ec_e9be6ed2","line":123,"updated":"2016-07-01 08:18:37.000000000","message":"lib should not use console. it should return values to user","commit_id":"c9034619763ae95a2b4f6a68ddfb142592f3a385"}]}
