user.js 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813
  1. // Generated by IcedCoffeeScript 1.7.1-c
  2. (function() {
  3. var E, GE, IS, PackageJson, QuarantinedKeyRing, SigChain, TmpKeyRing, TrackWrapper, TrackerProofGen, UntrackerProofGen, User, akatch, athrow, chain_err, colors, constants, db, deepeq, env, filter, fpeq, iced, kbpgp, libkeybase, load_key, log, make_esc, master_ring, merkle_client, req, session, tor, unix_time, __iced_k, __iced_k_noop, _ref, _ref1, _ref2, _ref3, _ref4, _ref5;
  4. iced = require('iced-runtime').iced;
  5. __iced_k = __iced_k_noop = function() {};
  6. req = require('./req');
  7. db = require('./db');
  8. constants = require('./constants').constants;
  9. _ref = require('iced-error'), chain_err = _ref.chain_err, make_esc = _ref.make_esc;
  10. _ref1 = require('./err'), GE = _ref1.GE, E = _ref1.E;
  11. deepeq = require('deep-equal');
  12. SigChain = require('./sigchain').SigChain;
  13. log = require('./log');
  14. _ref2 = require('./sigs'), UntrackerProofGen = _ref2.UntrackerProofGen, TrackerProofGen = _ref2.TrackerProofGen;
  15. session = require('./session').session;
  16. env = require('./env').env;
  17. TrackWrapper = require('./trackwrapper').TrackWrapper;
  18. _ref3 = require('pgp-utils').util, fpeq = _ref3.fpeq, unix_time = _ref3.unix_time;
  19. _ref4 = require('./keyring'), QuarantinedKeyRing = _ref4.QuarantinedKeyRing, TmpKeyRing = _ref4.TmpKeyRing, load_key = _ref4.load_key, master_ring = _ref4.master_ring;
  20. _ref5 = require('iced-utils').util, athrow = _ref5.athrow, akatch = _ref5.akatch;
  21. IS = constants.import_state;
  22. PackageJson = require('./package').PackageJson;
  23. libkeybase = require('libkeybase');
  24. tor = require('./tor');
  25. colors = require('./colors');
  26. kbpgp = require('kbpgp');
  27. merkle_client = require('./merkle_client').merkle_client;
  28. filter = function(d, v) {
  29. var k, out, _i, _len;
  30. out = {};
  31. for (_i = 0, _len = v.length; _i < _len; _i++) {
  32. k = v[_i];
  33. if (d != null) {
  34. out[k] = d[k];
  35. }
  36. }
  37. return out;
  38. };
  39. exports.User = User = (function() {
  40. User.cache = {};
  41. User.server_cache = {};
  42. User.FIELDS = ["basics", "public_keys", "id", "merkle_data", "private_keys", "logged_in"];
  43. function User(args) {
  44. var k, _i, _len, _ref6;
  45. _ref6 = User.FIELDS;
  46. for (_i = 0, _len = _ref6.length; _i < _len; _i++) {
  47. k = _ref6[_i];
  48. this[k] = args[k];
  49. }
  50. this._dirty = false;
  51. this.sig_chain = null;
  52. this._is_self = false;
  53. this._have_secret_key = false;
  54. this.sibkeys = [];
  55. this.gpg_keys = [];
  56. }
  57. User.prototype.set_logged_in = function() {
  58. return this.logged_in = session.logged_in();
  59. };
  60. User.prototype.set_is_self = function(b) {
  61. return this._is_self = b;
  62. };
  63. User.prototype.is_self = function() {
  64. return this._is_self;
  65. };
  66. User.prototype.set_have_secret_key = function(b) {
  67. return this._have_secret_key = b;
  68. };
  69. User.prototype.have_secret_key = function() {
  70. return this._have_secret_key;
  71. };
  72. User.prototype.to_obj = function() {
  73. var k, out, _i, _len, _ref6;
  74. out = {};
  75. _ref6 = User.FIELDS;
  76. for (_i = 0, _len = _ref6.length; _i < _len; _i++) {
  77. k = _ref6[_i];
  78. out[k] = this[k];
  79. }
  80. return out;
  81. };
  82. User.prototype.private_key_bundle = function() {
  83. var _ref6, _ref7;
  84. return (_ref6 = this.private_keys) != null ? (_ref7 = _ref6.primary) != null ? _ref7.bundle : void 0 : void 0;
  85. };
  86. User.prototype.names = function() {
  87. var fp, ki64, ret;
  88. ret = [
  89. {
  90. type: constants.lookups.username,
  91. name: this.basics.username
  92. }
  93. ];
  94. if ((ki64 = this.key_id_64()) != null) {
  95. ret.push({
  96. type: constants.lookups.key_id_64_to_user,
  97. name: ki64
  98. });
  99. }
  100. if ((fp = this.fingerprint(false)) != null) {
  101. ret.push({
  102. type: constants.lookups.key_fingerprint_to_user,
  103. name: fp
  104. });
  105. }
  106. return ret;
  107. };
  108. User.prototype.store = function(force_store, cb) {
  109. var err, un, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  110. __iced_k = __iced_k_noop;
  111. ___iced_passed_deferral = iced.findDeferral(arguments);
  112. err = null;
  113. un = this.username();
  114. (function(_this) {
  115. return (function(__iced_k) {
  116. if (force_store || _this._dirty) {
  117. log.debug("+ " + un + ": storing user to local DB");
  118. (function(__iced_k) {
  119. __iced_deferrals = new iced.Deferrals(__iced_k, {
  120. parent: ___iced_passed_deferral,
  121. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  122. funcname: "User.store"
  123. });
  124. db.put({
  125. key: _this.id,
  126. value: _this.to_obj(),
  127. names: _this.names()
  128. }, __iced_deferrals.defer({
  129. assign_fn: (function() {
  130. return function() {
  131. return err = arguments[0];
  132. };
  133. })(),
  134. lineno: 94
  135. }));
  136. __iced_deferrals._fulfill();
  137. })(function() {
  138. return __iced_k(log.debug("- " + un + ": stored user to local DB"));
  139. });
  140. } else {
  141. return __iced_k();
  142. }
  143. });
  144. })(this)((function(_this) {
  145. return function() {
  146. (function(__iced_k) {
  147. if ((_this.sig_chain != null) && (err == null)) {
  148. log.debug("+ " + un + ": storing signature chain");
  149. (function(__iced_k) {
  150. __iced_deferrals = new iced.Deferrals(__iced_k, {
  151. parent: ___iced_passed_deferral,
  152. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  153. funcname: "User.store"
  154. });
  155. _this.sig_chain.store(__iced_deferrals.defer({
  156. assign_fn: (function() {
  157. return function() {
  158. return err = arguments[0];
  159. };
  160. })(),
  161. lineno: 98
  162. }));
  163. __iced_deferrals._fulfill();
  164. })(function() {
  165. return __iced_k(log.debug("- " + un + ": stored signature chain"));
  166. });
  167. } else {
  168. return __iced_k();
  169. }
  170. })(function() {
  171. return cb(err);
  172. });
  173. };
  174. })(this));
  175. };
  176. User.prototype.update_fields = function(remote) {
  177. var k, _i, _len, _ref6;
  178. _ref6 = User.FIELDS;
  179. for (_i = 0, _len = _ref6.length; _i < _len; _i++) {
  180. k = _ref6[_i];
  181. this.update_field(remote, k);
  182. }
  183. return true;
  184. };
  185. User.prototype.update_field = function(remote, which) {
  186. if (!(deepeq(this[which], remote[which]))) {
  187. this[which] = remote[which];
  188. return this._dirty = true;
  189. }
  190. };
  191. User.prototype.load_sig_chain_from_storage = function(cb) {
  192. var err, ph, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  193. __iced_k = __iced_k_noop;
  194. ___iced_passed_deferral = iced.findDeferral(arguments);
  195. err = null;
  196. log.debug("+ load sig chain from local storage");
  197. (function(_this) {
  198. return (function(__iced_k) {
  199. var _ref6;
  200. if ((ph = (_ref6 = _this.merkle_data) != null ? _ref6.payload_hash : void 0) != null) {
  201. log.debug("| loading sig chain w/ payload hash " + ph);
  202. (function(__iced_k) {
  203. __iced_deferrals = new iced.Deferrals(__iced_k, {
  204. parent: ___iced_passed_deferral,
  205. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  206. funcname: "User.load_sig_chain_from_storage"
  207. });
  208. SigChain.load(_this.id, _this.username(), ph, __iced_deferrals.defer({
  209. assign_fn: (function(__slot_1) {
  210. return function() {
  211. err = arguments[0];
  212. return __slot_1.sig_chain = arguments[1];
  213. };
  214. })(_this),
  215. lineno: 123
  216. }));
  217. __iced_deferrals._fulfill();
  218. })(__iced_k);
  219. } else {
  220. log.debug("| No payload hash tail pointer found");
  221. return __iced_k(_this.sig_chain = new SigChain(_this.id, _this.username()));
  222. }
  223. });
  224. })(this)((function(_this) {
  225. return function() {
  226. log.debug("- loaded sig chain from local storage");
  227. return cb(err);
  228. };
  229. })(this));
  230. };
  231. User.prototype.load_full_sig_chain = function(cb) {
  232. var err, sc, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  233. __iced_k = __iced_k_noop;
  234. ___iced_passed_deferral = iced.findDeferral(arguments);
  235. log.debug("+ load full sig chain");
  236. sc = new SigChain(this.id, this.username());
  237. (function(_this) {
  238. return (function(__iced_k) {
  239. __iced_deferrals = new iced.Deferrals(__iced_k, {
  240. parent: ___iced_passed_deferral,
  241. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  242. funcname: "User.load_full_sig_chain"
  243. });
  244. sc.update(null, __iced_deferrals.defer({
  245. assign_fn: (function() {
  246. return function() {
  247. return err = arguments[0];
  248. };
  249. })(),
  250. lineno: 135
  251. }));
  252. __iced_deferrals._fulfill();
  253. });
  254. })(this)((function(_this) {
  255. return function() {
  256. if (typeof err === "undefined" || err === null) {
  257. _this.sig_chain = sc;
  258. }
  259. log.debug("- loaded full sig chain");
  260. return cb(err);
  261. };
  262. })(this));
  263. };
  264. User.prototype.update_sig_chain = function(remote_seqno, cb) {
  265. var did_update, err, last, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  266. __iced_k = __iced_k_noop;
  267. ___iced_passed_deferral = iced.findDeferral(arguments);
  268. log.debug("+ update sig chain; remote_seqno=" + remote_seqno);
  269. (function(_this) {
  270. return (function(__iced_k) {
  271. __iced_deferrals = new iced.Deferrals(__iced_k, {
  272. parent: ___iced_passed_deferral,
  273. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  274. funcname: "User.update_sig_chain"
  275. });
  276. _this.sig_chain.update(remote_seqno, __iced_deferrals.defer({
  277. assign_fn: (function() {
  278. return function() {
  279. err = arguments[0];
  280. return did_update = arguments[1];
  281. };
  282. })(),
  283. lineno: 144
  284. }));
  285. __iced_deferrals._fulfill();
  286. });
  287. })(this)((function(_this) {
  288. return function() {
  289. if (did_update) {
  290. last = _this.sig_chain.last().export_to_user();
  291. log.debug("| update sig_chain last link to " + (JSON.stringify(last)));
  292. _this._dirty = true;
  293. }
  294. log.debug("- updated sig chain");
  295. return cb(err);
  296. };
  297. })(this));
  298. };
  299. User.prototype.update_with = function(remote, cb) {
  300. var a, b, err, ___iced_passed_deferral, __iced_deferrals, __iced_k, _ref6, _ref7;
  301. __iced_k = __iced_k_noop;
  302. ___iced_passed_deferral = iced.findDeferral(arguments);
  303. err = null;
  304. log.debug("+ updating local user w/ remote");
  305. a = (_ref6 = this.basics) != null ? _ref6.id_version : void 0;
  306. b = remote != null ? (_ref7 = remote.basics) != null ? _ref7.id_version : void 0 : void 0;
  307. if ((b == null) || a > b) {
  308. err = new E.VersionRollbackError("Server version-rollback suspected: Local " + a + " > " + b);
  309. } else {
  310. this.update_fields(remote);
  311. }
  312. (function(_this) {
  313. return (function(__iced_k) {
  314. if (err == null) {
  315. (function(__iced_k) {
  316. var _ref8;
  317. __iced_deferrals = new iced.Deferrals(__iced_k, {
  318. parent: ___iced_passed_deferral,
  319. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  320. funcname: "User.update_with"
  321. });
  322. _this.update_sig_chain((_ref8 = remote.merkle_data) != null ? _ref8.seqno : void 0, __iced_deferrals.defer({
  323. assign_fn: (function() {
  324. return function() {
  325. return err = arguments[0];
  326. };
  327. })(),
  328. lineno: 169
  329. }));
  330. __iced_deferrals._fulfill();
  331. })(__iced_k);
  332. } else {
  333. return __iced_k();
  334. }
  335. });
  336. })(this)((function(_this) {
  337. return function() {
  338. log.debug("- finished update");
  339. return cb(err);
  340. };
  341. })(this));
  342. };
  343. User.map_key_to_user_local = function(query, cb) {
  344. var b, err, k, ret, row, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  345. __iced_k = __iced_k_noop;
  346. ___iced_passed_deferral = iced.findDeferral(arguments);
  347. log.debug("+ map_key_to_user_local " + (JSON.stringify(query)));
  348. err = ret = null;
  349. (function(_this) {
  350. return (function(__iced_k) {
  351. __iced_deferrals = new iced.Deferrals(__iced_k, {
  352. parent: ___iced_passed_deferral,
  353. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  354. funcname: "User.map_key_to_user_local"
  355. });
  356. db.lookup(query, __iced_deferrals.defer({
  357. assign_fn: (function() {
  358. return function() {
  359. err = arguments[0];
  360. return row = arguments[1];
  361. };
  362. })(),
  363. lineno: 180
  364. }));
  365. __iced_deferrals._fulfill();
  366. });
  367. })(this)((function(_this) {
  368. return function() {
  369. k = JSON.stringify(query);
  370. if (err != null) {
  371. } else if (typeof row === "undefined" || row === null) {
  372. err = new E.NotFoundError("Key not found for query " + k);
  373. } else {
  374. b = row.basics;
  375. ret = {
  376. uid: b.uid,
  377. username: b.username
  378. };
  379. }
  380. log.debug("- map_key_to_user_local -> " + err);
  381. return cb(err, ret);
  382. };
  383. })(this));
  384. };
  385. User.map_key_to_user = function(query, cb) {
  386. var basics, err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  387. __iced_k = __iced_k_noop;
  388. ___iced_passed_deferral = iced.findDeferral(arguments);
  389. log.debug("+ map_key_to_user: " + (JSON.stringify(query)));
  390. (function(_this) {
  391. return (function(__iced_k) {
  392. __iced_deferrals = new iced.Deferrals(__iced_k, {
  393. parent: ___iced_passed_deferral,
  394. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  395. funcname: "User.map_key_to_user"
  396. });
  397. User.map_key_to_user_local(query, __iced_deferrals.defer({
  398. assign_fn: (function() {
  399. return function() {
  400. err = arguments[0];
  401. return basics = arguments[1];
  402. };
  403. })(),
  404. lineno: 195
  405. }));
  406. __iced_deferrals._fulfill();
  407. });
  408. })(this)((function(_this) {
  409. return function() {
  410. (function(__iced_k) {
  411. if (typeof err !== "undefined" && err !== null) {
  412. (function(__iced_k) {
  413. __iced_deferrals = new iced.Deferrals(__iced_k, {
  414. parent: ___iced_passed_deferral,
  415. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  416. funcname: "User.map_key_to_user"
  417. });
  418. User.map_key_to_user_remote(query, __iced_deferrals.defer({
  419. assign_fn: (function() {
  420. return function() {
  421. err = arguments[0];
  422. return basics = arguments[1];
  423. };
  424. })(),
  425. lineno: 196
  426. }));
  427. __iced_deferrals._fulfill();
  428. })(__iced_k);
  429. } else {
  430. return __iced_k();
  431. }
  432. })(function() {
  433. log.debug("- mapped -> " + err);
  434. return cb(err, basics);
  435. });
  436. };
  437. })(this));
  438. };
  439. User.map_key_to_user_remote = function(query, cb) {
  440. var L, body, d, err, key, qs, req_args, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  441. __iced_k = __iced_k_noop;
  442. ___iced_passed_deferral = iced.findDeferral(arguments);
  443. qs = JSON.stringify(query);
  444. log.debug("+ " + qs + ": map to username");
  445. err = null;
  446. L = constants.lookups;
  447. body = null;
  448. key = (function() {
  449. switch (query.type) {
  450. case L.key_fingerprint_to_user:
  451. return 'fingerprint';
  452. case L.key_id_64_to_user:
  453. return 'pgp_key_id';
  454. default:
  455. err = new E.BadQueryError("Bad query type: " + query.type);
  456. return null;
  457. }
  458. })();
  459. (function(_this) {
  460. return (function(__iced_k) {
  461. if (err == null) {
  462. d = {};
  463. d[key] = query.name;
  464. req_args = {
  465. endpoint: "key/basics",
  466. args: d
  467. };
  468. (function(__iced_k) {
  469. __iced_deferrals = new iced.Deferrals(__iced_k, {
  470. parent: ___iced_passed_deferral,
  471. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  472. funcname: "User.map_key_to_user_remote"
  473. });
  474. req.get(req_args, __iced_deferrals.defer({
  475. assign_fn: (function() {
  476. return function() {
  477. err = arguments[0];
  478. return body = arguments[1];
  479. };
  480. })(),
  481. lineno: 220
  482. }));
  483. __iced_deferrals._fulfill();
  484. })(__iced_k);
  485. } else {
  486. return __iced_k();
  487. }
  488. });
  489. })(this)((function(_this) {
  490. return function() {
  491. log.debug("- " + qs + ": map -> " + err);
  492. return cb(err, body);
  493. };
  494. })(this));
  495. };
  496. User.load = function(_arg, cb) {
  497. var cache, err, ki64, require_public_key, ret, secret, self, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  498. __iced_k = __iced_k_noop;
  499. ___iced_passed_deferral = iced.findDeferral(arguments);
  500. username = _arg.username, ki64 = _arg.ki64, require_public_key = _arg.require_public_key, cache = _arg.cache, self = _arg.self, secret = _arg.secret;
  501. err = null;
  502. (function(_this) {
  503. return (function(__iced_k) {
  504. if ((username != null) && ((ret = User.cache[username]) != null)) {
  505. return __iced_k(log.debug("| hit user cache for " + username));
  506. } else {
  507. (function(__iced_k) {
  508. __iced_deferrals = new iced.Deferrals(__iced_k, {
  509. parent: ___iced_passed_deferral,
  510. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  511. funcname: "User.load"
  512. });
  513. User._load2({
  514. username: username,
  515. ki64: ki64,
  516. require_public_key: require_public_key,
  517. cache: cache,
  518. self: self,
  519. secret: secret
  520. }, __iced_deferrals.defer({
  521. assign_fn: (function() {
  522. return function() {
  523. err = arguments[0];
  524. return ret = arguments[1];
  525. };
  526. })(),
  527. lineno: 231
  528. }));
  529. __iced_deferrals._fulfill();
  530. })(__iced_k);
  531. }
  532. });
  533. })(this)((function(_this) {
  534. return function() {
  535. return cb(err, ret);
  536. };
  537. })(this));
  538. };
  539. User._load2 = function(_arg, cb) {
  540. var cache, changed, err, esc, fetched_from_server, force_store, k, ki64, local, parsed_keys, remote, require_public_key, secret, self, user, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  541. __iced_k = __iced_k_noop;
  542. ___iced_passed_deferral = iced.findDeferral(arguments);
  543. username = _arg.username, ki64 = _arg.ki64, require_public_key = _arg.require_public_key, cache = _arg.cache, self = _arg.self, secret = _arg.secret;
  544. esc = make_esc(cb, "User::load");
  545. k = username != null ? username : "Key: " + ki64;
  546. log.debug("+ " + username + ": load user");
  547. (function(_this) {
  548. return (function(__iced_k) {
  549. __iced_deferrals = new iced.Deferrals(__iced_k, {
  550. parent: ___iced_passed_deferral,
  551. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  552. funcname: "User._load2"
  553. });
  554. User.load_from_storage({
  555. username: username,
  556. ki64: ki64
  557. }, esc(__iced_deferrals.defer({
  558. assign_fn: (function() {
  559. return function() {
  560. return local = arguments[0];
  561. };
  562. })(),
  563. lineno: 241
  564. })));
  565. __iced_deferrals._fulfill();
  566. });
  567. })(this)((function(_this) {
  568. return function() {
  569. var _ref6;
  570. if (username == null) {
  571. username = typeof local !== "undefined" && local !== null ? (_ref6 = local.basics) != null ? _ref6.username : void 0 : void 0;
  572. }
  573. (function(__iced_k) {
  574. if (self && secret && !tor.strict()) {
  575. log.debug("| Checking session since we're loading User as self (and need secret key)");
  576. (function(__iced_k) {
  577. __iced_deferrals = new iced.Deferrals(__iced_k, {
  578. parent: ___iced_passed_deferral,
  579. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  580. funcname: "User._load2"
  581. });
  582. session.load_and_check(esc(__iced_deferrals.defer({
  583. lineno: 248
  584. })));
  585. __iced_deferrals._fulfill();
  586. })(__iced_k);
  587. } else {
  588. return __iced_k();
  589. }
  590. })(function() {
  591. (function(__iced_k) {
  592. if (self && tor.strict()) {
  593. return __iced_k(log.warn("Tor strict mode: " + (colors.bold('not')) + " syncing your profile with the server"));
  594. } else {
  595. fetched_from_server = true;
  596. (function(__iced_k) {
  597. __iced_deferrals = new iced.Deferrals(__iced_k, {
  598. parent: ___iced_passed_deferral,
  599. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  600. funcname: "User._load2"
  601. });
  602. User.load_from_server({
  603. self: self,
  604. secret: secret,
  605. username: username,
  606. local_user: local
  607. }, esc(__iced_deferrals.defer({
  608. assign_fn: (function() {
  609. return function() {
  610. return remote = arguments[0];
  611. };
  612. })(),
  613. lineno: 254
  614. })));
  615. __iced_deferrals._fulfill();
  616. })(__iced_k);
  617. }
  618. })(function() {
  619. changed = true;
  620. force_store = false;
  621. (function(__iced_k) {
  622. if (typeof local !== "undefined" && local !== null) {
  623. user = local;
  624. (function(__iced_k) {
  625. if (typeof remote !== "undefined" && remote !== null) {
  626. (function(__iced_k) {
  627. __iced_deferrals = new iced.Deferrals(__iced_k, {
  628. parent: ___iced_passed_deferral,
  629. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  630. funcname: "User._load2"
  631. });
  632. user.update_with(remote, esc(__iced_deferrals.defer({
  633. lineno: 261
  634. })));
  635. __iced_deferrals._fulfill();
  636. })(__iced_k);
  637. } else {
  638. return __iced_k();
  639. }
  640. })(__iced_k);
  641. } else {
  642. (function(__iced_k) {
  643. if (typeof remote !== "undefined" && remote !== null) {
  644. user = remote;
  645. (function(__iced_k) {
  646. __iced_deferrals = new iced.Deferrals(__iced_k, {
  647. parent: ___iced_passed_deferral,
  648. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  649. funcname: "User._load2"
  650. });
  651. user.load_full_sig_chain(esc(__iced_deferrals.defer({
  652. lineno: 264
  653. })));
  654. __iced_deferrals._fulfill();
  655. })(function() {
  656. return __iced_k(force_store = true);
  657. });
  658. } else {
  659. return __iced_k(tor.strict() ? err = new E.TorStrictError("Can't load your info from the server in strict Tor mode") : err = new E.NotFoundError("User " + username + " wasn't found"));
  660. }
  661. })(__iced_k);
  662. }
  663. })(function() {
  664. (function(__iced_k) {
  665. if (typeof err !== "undefined" && err !== null) {
  666. (function(__iced_k) {
  667. __iced_deferrals = new iced.Deferrals(__iced_k, {
  668. parent: ___iced_passed_deferral,
  669. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  670. funcname: "User._load2"
  671. });
  672. athrow(err, esc(__iced_deferrals.defer({
  673. lineno: 271
  674. })));
  675. __iced_deferrals._fulfill();
  676. })(__iced_k);
  677. } else {
  678. return __iced_k();
  679. }
  680. })(function() {
  681. (function(__iced_k) {
  682. var _ref7;
  683. if (require_public_key && (((_ref7 = user.merkle_data) != null ? _ref7.eldest_kid : void 0) == null)) {
  684. (function(__iced_k) {
  685. __iced_deferrals = new iced.Deferrals(__iced_k, {
  686. parent: ___iced_passed_deferral,
  687. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  688. funcname: "User._load2"
  689. });
  690. athrow(new Error("user doesn't have a public key"), esc(__iced_deferrals.defer({
  691. lineno: 274
  692. })));
  693. __iced_deferrals._fulfill();
  694. })(__iced_k);
  695. } else {
  696. return __iced_k();
  697. }
  698. })(function() {
  699. (function(__iced_k) {
  700. var _ref7;
  701. if (((_ref7 = user.public_keys) != null ? _ref7.all_bundles : void 0) == null) {
  702. (function(__iced_k) {
  703. __iced_deferrals = new iced.Deferrals(__iced_k, {
  704. parent: ___iced_passed_deferral,
  705. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  706. funcname: "User._load2"
  707. });
  708. athrow(new Error("User key bundles missing."), esc(__iced_deferrals.defer({
  709. lineno: 277
  710. })));
  711. __iced_deferrals._fulfill();
  712. })(__iced_k);
  713. } else {
  714. return __iced_k();
  715. }
  716. })(function() {
  717. (function(__iced_k) {
  718. __iced_deferrals = new iced.Deferrals(__iced_k, {
  719. parent: ___iced_passed_deferral,
  720. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  721. funcname: "User._load2"
  722. });
  723. libkeybase.ParsedKeys.parse({
  724. key_bundles: user.public_keys.all_bundles
  725. }, esc(__iced_deferrals.defer({
  726. assign_fn: (function() {
  727. return function() {
  728. return parsed_keys = arguments[0];
  729. };
  730. })(),
  731. lineno: 278
  732. })));
  733. __iced_deferrals._fulfill();
  734. })(function() {
  735. log.debug("+ " + username + ": verifying signatures");
  736. (function(__iced_k) {
  737. __iced_deferrals = new iced.Deferrals(__iced_k, {
  738. parent: ___iced_passed_deferral,
  739. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  740. funcname: "User._load2"
  741. });
  742. user._verify({
  743. parsed_keys: parsed_keys,
  744. self: self
  745. }, esc(__iced_deferrals.defer({
  746. lineno: 284
  747. })));
  748. __iced_deferrals._fulfill();
  749. })(function() {
  750. log.debug("- " + username + ": verified signatures");
  751. (function(__iced_k) {
  752. if (fetched_from_server) {
  753. (function(__iced_k) {
  754. __iced_deferrals = new iced.Deferrals(__iced_k, {
  755. parent: ___iced_passed_deferral,
  756. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  757. funcname: "User._load2"
  758. });
  759. user.store(force_store, esc(__iced_deferrals.defer({
  760. lineno: 289
  761. })));
  762. __iced_deferrals._fulfill();
  763. })(__iced_k);
  764. } else {
  765. return __iced_k();
  766. }
  767. })(function() {
  768. log.debug("- " + username + ": loaded user");
  769. if (cache && (typeof err === "undefined" || err === null) && (typeof user !== "undefined" && user !== null)) {
  770. User.cache[username] = user;
  771. }
  772. return cb(err, user);
  773. });
  774. });
  775. });
  776. });
  777. });
  778. });
  779. });
  780. });
  781. });
  782. };
  783. })(this));
  784. };
  785. User.load_from_server = function(_arg, cb) {
  786. var args, body, esc, leaf, local_id_version, local_seqno, local_user, merkle_data, payload_hash, pub, ret, root, secret, self, seqno, server_id_version, server_seqno, sig_id, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  787. __iced_k = __iced_k_noop;
  788. ___iced_passed_deferral = iced.findDeferral(arguments);
  789. self = _arg.self, secret = _arg.secret, username = _arg.username, local_user = _arg.local_user;
  790. esc = make_esc(cb, "User::load_from_server");
  791. log.debug("+ " + username + ": load user from server");
  792. if ((ret = User.server_cache[username]) != null) {
  793. log.debug("| hit server cache");
  794. cb(null, ret);
  795. return;
  796. }
  797. (function(_this) {
  798. return (function(__iced_k) {
  799. __iced_deferrals = new iced.Deferrals(__iced_k, {
  800. parent: ___iced_passed_deferral,
  801. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  802. funcname: "User.load_from_server"
  803. });
  804. merkle_client().find_and_verify({
  805. username: username
  806. }, esc(__iced_deferrals.defer({
  807. assign_fn: (function() {
  808. return function() {
  809. leaf = arguments[0];
  810. root = arguments[1];
  811. return server_id_version = arguments[2];
  812. };
  813. })(),
  814. lineno: 311
  815. })));
  816. __iced_deferrals._fulfill();
  817. });
  818. })(this)((function(_this) {
  819. return function() {
  820. var _ref6, _ref7;
  821. local_id_version = local_user != null ? (_ref6 = local_user.basics) != null ? _ref6.id_version : void 0 : void 0;
  822. local_seqno = local_user != null ? (_ref7 = local_user.merkle_data) != null ? _ref7.seqno : void 0 : void 0;
  823. if (typeof leaf !== "undefined" && leaf !== null) {
  824. pub = leaf.get_public();
  825. server_seqno = pub != null ? pub.seqno : void 0;
  826. if (server_id_version === local_id_version && server_seqno === local_seqno && local_user._format_up_to_date({})) {
  827. log.debug("| id_version (" + local_id_version + ") and seqno (" + local_seqno + ") haven't changed.");
  828. cb(null, null);
  829. return;
  830. } else if (server_id_version < local_id_version) {
  831. cb(new Error("Server id version (" + server_id_version + ") rolled back from local (" + local_id_version + ")"));
  832. return;
  833. } else if (server_seqno < local_seqno) {
  834. cb(new Error("Server seqno (" + server_seqno + ") rolled back from local (" + local_seqno + ")"));
  835. return;
  836. }
  837. if (pub != null) {
  838. seqno = pub.seqno;
  839. sig_id = pub.sig_id + libkeybase.SIG_ID_SUFFIX;
  840. payload_hash = pub.payload_hash;
  841. }
  842. merkle_data = {
  843. seqno: seqno,
  844. sig_id: sig_id,
  845. payload_hash: payload_hash,
  846. eldest_kid: leaf.get_eldest_kid()
  847. };
  848. } else {
  849. merkle_data = null;
  850. }
  851. args = {
  852. endpoint: "user/lookup",
  853. args: {
  854. username: username
  855. },
  856. need_cookie: self && secret
  857. };
  858. (function(__iced_k) {
  859. __iced_deferrals = new iced.Deferrals(__iced_k, {
  860. parent: ___iced_passed_deferral,
  861. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  862. funcname: "User.load_from_server"
  863. });
  864. req.get(args, esc(__iced_deferrals.defer({
  865. assign_fn: (function() {
  866. return function() {
  867. return body = arguments[0];
  868. };
  869. })(),
  870. lineno: 354
  871. })));
  872. __iced_deferrals._fulfill();
  873. })(function() {
  874. ret = new User(body.them);
  875. ret.set_logged_in();
  876. ret.merkle_data = merkle_data;
  877. User.server_cache[username] = ret;
  878. log.debug("- " + username + ": loaded user from server");
  879. return cb(null, ret);
  880. });
  881. };
  882. })(this));
  883. };
  884. User.prototype._format_up_to_date = function(_arg) {
  885. var _ref6;
  886. _arg;
  887. if (((_ref6 = this.public_keys) != null ? _ref6.all_bundles : void 0) == null) {
  888. return false;
  889. }
  890. return true;
  891. };
  892. User.load_from_storage = function(_arg, cb) {
  893. var err, ki64, name, ret, row, type, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  894. __iced_k = __iced_k_noop;
  895. ___iced_passed_deferral = iced.findDeferral(arguments);
  896. username = _arg.username, ki64 = _arg.ki64;
  897. name = username || ki64;
  898. log.debug("+ " + name + ": load user from local storage");
  899. type = username != null ? constants.lookups.username : constants.lookups.key_id_64_to_user;
  900. (function(_this) {
  901. return (function(__iced_k) {
  902. __iced_deferrals = new iced.Deferrals(__iced_k, {
  903. parent: ___iced_passed_deferral,
  904. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  905. funcname: "User.load_from_storage"
  906. });
  907. db.lookup({
  908. type: type,
  909. name: name
  910. }, __iced_deferrals.defer({
  911. assign_fn: (function() {
  912. return function() {
  913. err = arguments[0];
  914. return row = arguments[1];
  915. };
  916. })(),
  917. lineno: 380
  918. }));
  919. __iced_deferrals._fulfill();
  920. });
  921. })(this)((function(_this) {
  922. return function() {
  923. (function(__iced_k) {
  924. if ((typeof err === "undefined" || err === null) && (typeof row !== "undefined" && row !== null)) {
  925. ret = new User(row);
  926. (function(__iced_k) {
  927. __iced_deferrals = new iced.Deferrals(__iced_k, {
  928. parent: ___iced_passed_deferral,
  929. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  930. funcname: "User.load_from_storage"
  931. });
  932. ret.load_sig_chain_from_storage(__iced_deferrals.defer({
  933. assign_fn: (function() {
  934. return function() {
  935. return err = arguments[0];
  936. };
  937. })(),
  938. lineno: 383
  939. }));
  940. __iced_deferrals._fulfill();
  941. })(function() {
  942. return __iced_k(typeof err !== "undefined" && err !== null ? ret = null : void 0);
  943. });
  944. } else {
  945. return __iced_k();
  946. }
  947. })(function() {
  948. log.debug("- " + name + ": loaded user from local storage -> " + err + " / " + ret);
  949. return cb(err, ret);
  950. });
  951. };
  952. })(this));
  953. };
  954. User.prototype.fingerprint = function(upper_case) {
  955. var _ref6, _ref7;
  956. if (upper_case == null) {
  957. upper_case = false;
  958. }
  959. if (this._fingerprint == null) {
  960. this._fingerprint = {
  961. lc: (_ref6 = this.default_key()) != null ? _ref6.fingerprint().toString('hex') : void 0
  962. };
  963. this._fingerprint.uc = (_ref7 = this._fingerprint.lc) != null ? _ref7.toUpperCase() : void 0;
  964. }
  965. return this._fingerprint[upper_case ? 'uc' : 'lc'];
  966. };
  967. User.prototype.key_id_64 = function() {
  968. var fp;
  969. if ((fp = this.fingerprint(false)) != null) {
  970. return fp.slice(-16);
  971. } else {
  972. return null;
  973. }
  974. };
  975. User.resolve_user_name = function(_arg, cb) {
  976. var ass_out, body, err, esc, uri, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  977. __iced_k = __iced_k_noop;
  978. ___iced_passed_deferral = iced.findDeferral(arguments);
  979. username = _arg.username;
  980. log.debug("+ resolving username " + username);
  981. esc = make_esc(cb, "resolve_user_name");
  982. err = null;
  983. (function(_this) {
  984. return (function(__iced_k) {
  985. __iced_deferrals = new iced.Deferrals(__iced_k, {
  986. parent: ___iced_passed_deferral,
  987. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  988. funcname: "User.resolve_user_name"
  989. });
  990. akatch((function() {
  991. return libkeybase.assertion.URI.parse({
  992. s: username,
  993. strict: false
  994. });
  995. }), esc(__iced_deferrals.defer({
  996. assign_fn: (function() {
  997. return function() {
  998. return uri = arguments[0];
  999. };
  1000. })(),
  1001. lineno: 415
  1002. })));
  1003. __iced_deferrals._fulfill();
  1004. });
  1005. })(this)((function(_this) {
  1006. return function() {
  1007. (function(__iced_k) {
  1008. if (!uri.is_keybase()) {
  1009. (function(__iced_k) {
  1010. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1011. parent: ___iced_passed_deferral,
  1012. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1013. funcname: "User.resolve_user_name"
  1014. });
  1015. req.get({
  1016. endpoint: "user/lookup",
  1017. args: uri.to_lookup_query()
  1018. }, esc(__iced_deferrals.defer({
  1019. assign_fn: (function() {
  1020. return function() {
  1021. return body = arguments[0];
  1022. };
  1023. })(),
  1024. lineno: 417
  1025. })));
  1026. __iced_deferrals._fulfill();
  1027. })(function() {
  1028. return __iced_k(body.them.length === 0 ? err = new E.NotFoundError("No user found for '" + username + "'") : body.them.length > 1 ? err = new E.AmbiguityError("Multiple results returned for '" + username + "'; expected only 1") : (username = body.them[0].basics.username, ass_out = uri));
  1029. });
  1030. } else {
  1031. return __iced_k();
  1032. }
  1033. })(function() {
  1034. log.debug("- resolved to " + username);
  1035. return cb(err, username, ass_out);
  1036. });
  1037. };
  1038. })(this));
  1039. };
  1040. User.load_me = function(opts, cb) {
  1041. var esc, me, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1042. __iced_k = __iced_k_noop;
  1043. ___iced_passed_deferral = iced.findDeferral(arguments);
  1044. esc = make_esc(cb, "User::load_me");
  1045. log.debug("+ User::load_me");
  1046. (function(_this) {
  1047. return (function(__iced_k) {
  1048. if ((username = env().get_username()) == null) {
  1049. (function(__iced_k) {
  1050. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1051. parent: ___iced_passed_deferral,
  1052. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1053. funcname: "User.load_me"
  1054. });
  1055. athrow(new E.NoUsernameError("no username for current user; try `keybase login`"), esc(__iced_deferrals.defer({
  1056. lineno: 448
  1057. })));
  1058. __iced_deferrals._fulfill();
  1059. })(__iced_k);
  1060. } else {
  1061. return __iced_k();
  1062. }
  1063. });
  1064. })(this)((function(_this) {
  1065. return function() {
  1066. (function(__iced_k) {
  1067. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1068. parent: ___iced_passed_deferral,
  1069. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1070. funcname: "User.load_me"
  1071. });
  1072. User.load({
  1073. username: username,
  1074. self: true,
  1075. secret: opts.secret
  1076. }, esc(__iced_deferrals.defer({
  1077. assign_fn: (function() {
  1078. return function() {
  1079. return me = arguments[0];
  1080. };
  1081. })(),
  1082. lineno: 449
  1083. })));
  1084. __iced_deferrals._fulfill();
  1085. })(function() {
  1086. (function(__iced_k) {
  1087. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1088. parent: ___iced_passed_deferral,
  1089. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1090. funcname: "User.load_me"
  1091. });
  1092. me._load_me_2(opts, esc(__iced_deferrals.defer({
  1093. lineno: 450
  1094. })));
  1095. __iced_deferrals._fulfill();
  1096. })(function() {
  1097. log.debug("- User::load_me");
  1098. return cb(null, me);
  1099. });
  1100. });
  1101. };
  1102. })(this));
  1103. };
  1104. User.prototype._load_me_2 = function(_arg, cb) {
  1105. var do_install, err, esc, install_key, load_secret, maybe_secret, secret, un, verify_opts, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1106. __iced_k = __iced_k_noop;
  1107. ___iced_passed_deferral = iced.findDeferral(arguments);
  1108. secret = _arg.secret, maybe_secret = _arg.maybe_secret, install_key = _arg.install_key, verify_opts = _arg.verify_opts;
  1109. esc = make_esc(cb, "User::_load_me_2");
  1110. un = this.username();
  1111. this.set_is_self(true);
  1112. if (this.sibkeys.length === 0) {
  1113. cb(null);
  1114. return;
  1115. }
  1116. load_secret = secret || maybe_secret;
  1117. (function(_this) {
  1118. return (function(__iced_k) {
  1119. if (load_secret) {
  1120. (function(__iced_k) {
  1121. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1122. parent: ___iced_passed_deferral,
  1123. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1124. funcname: "User._load_me_2"
  1125. });
  1126. master_ring().make_secret_gpg_key_from_user({
  1127. user: _this
  1128. }, __iced_deferrals.defer({
  1129. assign_fn: (function(__slot_1) {
  1130. return function() {
  1131. err = arguments[0];
  1132. return __slot_1.key = arguments[1];
  1133. };
  1134. })(_this),
  1135. lineno: 468
  1136. }));
  1137. __iced_deferrals._fulfill();
  1138. })(__iced_k);
  1139. } else {
  1140. _this.key = _this.default_key();
  1141. log.debug("+ " + un + ": checking public key");
  1142. (function(__iced_k) {
  1143. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1144. parent: ___iced_passed_deferral,
  1145. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1146. funcname: "User._load_me_2"
  1147. });
  1148. _this.key.find(__iced_deferrals.defer({
  1149. assign_fn: (function() {
  1150. return function() {
  1151. return err = arguments[0];
  1152. };
  1153. })(),
  1154. lineno: 473
  1155. }));
  1156. __iced_deferrals._fulfill();
  1157. })(function() {
  1158. return __iced_k(log.debug("- " + un + ": checked public key"));
  1159. });
  1160. }
  1161. });
  1162. })(this)((function(_this) {
  1163. return function() {
  1164. (function(__iced_k) {
  1165. if ((typeof err === "undefined" || err === null) && load_secret) {
  1166. return __iced_k(_this.set_have_secret_key(true));
  1167. } else {
  1168. (function(__iced_k) {
  1169. if ((typeof err !== "undefined" && err !== null) && (err instanceof E.NoLocalKeyError) && maybe_secret) {
  1170. _this.key = _this.default_key();
  1171. log.debug("+ " + un + ": checking public key");
  1172. (function(__iced_k) {
  1173. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1174. parent: ___iced_passed_deferral,
  1175. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1176. funcname: "User._load_me_2"
  1177. });
  1178. _this.key.find(__iced_deferrals.defer({
  1179. assign_fn: (function() {
  1180. return function() {
  1181. return err = arguments[0];
  1182. };
  1183. })(),
  1184. lineno: 482
  1185. }));
  1186. __iced_deferrals._fulfill();
  1187. })(function() {
  1188. return __iced_k(log.debug("- " + un + ": checked public key"));
  1189. });
  1190. } else {
  1191. return __iced_k();
  1192. }
  1193. })(__iced_k);
  1194. }
  1195. })(function() {
  1196. (function(__iced_k) {
  1197. if ((typeof err !== "undefined" && err !== null) && (err instanceof E.NoLocalKeyError) && install_key) {
  1198. return __iced_k(do_install = true);
  1199. } else {
  1200. (function(__iced_k) {
  1201. if (typeof err !== "undefined" && err !== null) {
  1202. (function(__iced_k) {
  1203. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1204. parent: ___iced_passed_deferral,
  1205. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1206. funcname: "User._load_me_2"
  1207. });
  1208. athrow(err, esc(__iced_deferrals.defer({
  1209. lineno: 488
  1210. })));
  1211. __iced_deferrals._fulfill();
  1212. })(__iced_k);
  1213. } else {
  1214. return __iced_k(do_install = false);
  1215. }
  1216. })(__iced_k);
  1217. }
  1218. })(function() {
  1219. (function(__iced_k) {
  1220. if (do_install) {
  1221. (function(__iced_k) {
  1222. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1223. parent: ___iced_passed_deferral,
  1224. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1225. funcname: "User._load_me_2"
  1226. });
  1227. _this.key.commit({}, esc(__iced_deferrals.defer({
  1228. lineno: 493
  1229. })));
  1230. __iced_deferrals._fulfill();
  1231. })(__iced_k);
  1232. } else {
  1233. return __iced_k();
  1234. }
  1235. })(function() {
  1236. return cb(null);
  1237. });
  1238. });
  1239. });
  1240. };
  1241. })(this));
  1242. };
  1243. User.prototype.check_key = function(_arg, cb) {
  1244. var err, key, ret, secret, store, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1245. __iced_k = __iced_k_noop;
  1246. ___iced_passed_deferral = iced.findDeferral(arguments);
  1247. secret = _arg.secret, store = _arg.store;
  1248. ret = {};
  1249. log.debug("+ " + (this.username()) + ": check public key");
  1250. (function(_this) {
  1251. return (function(__iced_k) {
  1252. if (_this.fingerprint() != null) {
  1253. ret.remote = !secret || (_this.private_key_bundle() != null);
  1254. (function(__iced_k) {
  1255. if (secret) {
  1256. (function(__iced_k) {
  1257. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1258. parent: ___iced_passed_deferral,
  1259. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1260. funcname: "User.check_key"
  1261. });
  1262. master_ring().make_secret_gpg_key_from_user({
  1263. user: _this
  1264. }, __iced_deferrals.defer({
  1265. assign_fn: (function() {
  1266. return function() {
  1267. err = arguments[0];
  1268. return key = arguments[1];
  1269. };
  1270. })(),
  1271. lineno: 506
  1272. }));
  1273. __iced_deferrals._fulfill();
  1274. })(__iced_k);
  1275. } else {
  1276. key = _this.default_key();
  1277. (function(__iced_k) {
  1278. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1279. parent: ___iced_passed_deferral,
  1280. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1281. funcname: "User.check_key"
  1282. });
  1283. key.find(__iced_deferrals.defer({
  1284. assign_fn: (function() {
  1285. return function() {
  1286. return err = arguments[0];
  1287. };
  1288. })(),
  1289. lineno: 509
  1290. }));
  1291. __iced_deferrals._fulfill();
  1292. })(__iced_k);
  1293. }
  1294. })(function() {
  1295. return __iced_k(typeof err === "undefined" || err === null ? (ret.local = true, store ? _this.key = key : void 0) : err instanceof E.NoLocalKeyError ? (err = null, ret.local = false) : void 0);
  1296. });
  1297. } else {
  1298. return __iced_k();
  1299. }
  1300. });
  1301. })(this)((function(_this) {
  1302. return function() {
  1303. log.debug("- " + (_this.username()) + ": check_public_key: ret=" + (JSON.stringify(ret)) + "; err=" + err);
  1304. return cb(err, ret);
  1305. };
  1306. })(this));
  1307. };
  1308. User.prototype.load_public_key = function(_arg, cb) {
  1309. var err, query, signer, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1310. __iced_k = __iced_k_noop;
  1311. ___iced_passed_deferral = iced.findDeferral(arguments);
  1312. signer = _arg.signer;
  1313. log.debug("+ load public key for " + (this.username()));
  1314. err = null;
  1315. (function(_this) {
  1316. return (function(__iced_k) {
  1317. if (_this.key == null) {
  1318. query = {
  1319. username: _this.username(),
  1320. fingerprint: _this.fingerprint()
  1321. };
  1322. (function(__iced_k) {
  1323. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1324. parent: ___iced_passed_deferral,
  1325. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1326. funcname: "User.load_public_key"
  1327. });
  1328. load_key(query, __iced_deferrals.defer({
  1329. assign_fn: (function(__slot_1) {
  1330. return function() {
  1331. err = arguments[0];
  1332. return __slot_1.key = arguments[1];
  1333. };
  1334. })(_this),
  1335. lineno: 527
  1336. }));
  1337. __iced_deferrals._fulfill();
  1338. })(__iced_k);
  1339. } else {
  1340. return __iced_k();
  1341. }
  1342. });
  1343. })(this)((function(_this) {
  1344. return function() {
  1345. log.debug("- load public key; found=" + (!!_this.key) + "; err=" + err);
  1346. return cb(err, _this.key);
  1347. };
  1348. })(this));
  1349. };
  1350. User.prototype.username = function() {
  1351. return this.basics.username;
  1352. };
  1353. User.prototype.import_public_keys = function(_arg, cb) {
  1354. var esc, key, keyring, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1355. __iced_k = __iced_k_noop;
  1356. ___iced_passed_deferral = iced.findDeferral(arguments);
  1357. keyring = _arg.keyring;
  1358. esc = make_esc(cb, "User::import_public_keys");
  1359. log.debug("+ Import public keys from " + (keyring.to_string()));
  1360. (function(_this) {
  1361. return (function(__iced_k) {
  1362. var _i, _len, _ref6, _results, _while;
  1363. _ref6 = _this.gpg_keys;
  1364. _len = _ref6.length;
  1365. _i = 0;
  1366. _results = [];
  1367. _while = function(__iced_k) {
  1368. var _break, _continue, _next;
  1369. _break = function() {
  1370. return __iced_k(_results);
  1371. };
  1372. _continue = function() {
  1373. return iced.trampoline(function() {
  1374. ++_i;
  1375. return _while(__iced_k);
  1376. });
  1377. };
  1378. _next = function(__iced_next_arg) {
  1379. _results.push(__iced_next_arg);
  1380. return _continue();
  1381. };
  1382. if (!(_i < _len)) {
  1383. return _break();
  1384. } else {
  1385. key = _ref6[_i];
  1386. (function(__iced_k) {
  1387. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1388. parent: ___iced_passed_deferral,
  1389. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1390. funcname: "User.import_public_keys"
  1391. });
  1392. key.save(esc(__iced_deferrals.defer({
  1393. lineno: 541
  1394. })));
  1395. __iced_deferrals._fulfill();
  1396. })(_next);
  1397. }
  1398. };
  1399. _while(__iced_k);
  1400. });
  1401. })(this)((function(_this) {
  1402. return function() {
  1403. log.debug("- Import public keys from " + (keyring.to_string()));
  1404. return cb(null);
  1405. };
  1406. })(this));
  1407. };
  1408. User.prototype.display_cryptocurrency_addresses = function(opts, cb) {
  1409. var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1410. __iced_k = __iced_k_noop;
  1411. ___iced_passed_deferral = iced.findDeferral(arguments);
  1412. (function(_this) {
  1413. return (function(__iced_k) {
  1414. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1415. parent: ___iced_passed_deferral,
  1416. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1417. funcname: "User.display_cryptocurrency_addresses"
  1418. });
  1419. _this.sig_chain.display_cryptocurrency_addresses(opts, __iced_deferrals.defer({
  1420. assign_fn: (function() {
  1421. return function() {
  1422. return err = arguments[0];
  1423. };
  1424. })(),
  1425. lineno: 548
  1426. }));
  1427. __iced_deferrals._fulfill();
  1428. });
  1429. })(this)((function(_this) {
  1430. return function() {
  1431. return cb(err);
  1432. };
  1433. })(this));
  1434. };
  1435. User.prototype.check_remote_proofs = function(opts, cb) {
  1436. var err, n_proofs, warnings, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1437. __iced_k = __iced_k_noop;
  1438. ___iced_passed_deferral = iced.findDeferral(arguments);
  1439. opts.gpg_keys = this.gpg_keys;
  1440. opts.username = this.username();
  1441. (function(_this) {
  1442. return (function(__iced_k) {
  1443. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1444. parent: ___iced_passed_deferral,
  1445. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1446. funcname: "User.check_remote_proofs"
  1447. });
  1448. _this.sig_chain.check_remote_proofs(opts, __iced_deferrals.defer({
  1449. assign_fn: (function() {
  1450. return function() {
  1451. err = arguments[0];
  1452. warnings = arguments[1];
  1453. return n_proofs = arguments[2];
  1454. };
  1455. })(),
  1456. lineno: 556
  1457. }));
  1458. __iced_deferrals._fulfill();
  1459. });
  1460. })(this)((function(_this) {
  1461. return function() {
  1462. return cb(err, warnings, n_proofs);
  1463. };
  1464. })(this));
  1465. };
  1466. User.prototype._verify = function(_arg, cb) {
  1467. var err, esc, opts, parsed_keys, self, ___iced_passed_deferral, __iced_deferrals, __iced_k, _ref6;
  1468. __iced_k = __iced_k_noop;
  1469. ___iced_passed_deferral = iced.findDeferral(arguments);
  1470. opts = _arg.opts, parsed_keys = _arg.parsed_keys, self = _arg.self;
  1471. esc = make_esc(cb, "User::verify");
  1472. this.sibkeys = [];
  1473. this.gpg_keys = [];
  1474. if (((_ref6 = this.merkle_data) != null ? _ref6.eldest_kid : void 0) == null) {
  1475. cb(null);
  1476. return;
  1477. }
  1478. (function(_this) {
  1479. return (function(__iced_k) {
  1480. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1481. parent: ___iced_passed_deferral,
  1482. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1483. funcname: "User._verify"
  1484. });
  1485. _this.sig_chain.verify_sig({
  1486. opts: opts,
  1487. key: _this.key,
  1488. parsed_keys: parsed_keys,
  1489. merkle_data: _this.merkle_data
  1490. }, __iced_deferrals.defer({
  1491. assign_fn: (function(__slot_1) {
  1492. return function() {
  1493. err = arguments[0];
  1494. return __slot_1.sibkeys = arguments[1];
  1495. };
  1496. })(_this),
  1497. lineno: 579
  1498. }));
  1499. __iced_deferrals._fulfill();
  1500. });
  1501. })(this)((function(_this) {
  1502. return function() {
  1503. if (typeof err !== "undefined" && err !== null) {
  1504. if (self && (err instanceof libkeybase.E.KeyOwnershipError)) {
  1505. log.warn("You have not proven ownership of your key. Run `keybase push --update`.");
  1506. _this.sibkeys = [parsed_keys.get_merged_pgp_key_manager(_this.merkle_data.eldest_kid)];
  1507. } else {
  1508. cb(err);
  1509. return;
  1510. }
  1511. }
  1512. _this.gpg_keys = master_ring().make_all_public_gpg_keys_from_user({
  1513. user: _this
  1514. });
  1515. return cb(null);
  1516. };
  1517. })(this));
  1518. };
  1519. User.prototype.default_key = function() {
  1520. return this.gpg_keys[0];
  1521. };
  1522. User.prototype.list_remote_proofs = function(opts) {
  1523. var _ref6;
  1524. return (_ref6 = this.sig_chain) != null ? _ref6.list_remote_proofs(opts) : void 0;
  1525. };
  1526. User.prototype.list_trackees = function() {
  1527. var _ref6;
  1528. return (_ref6 = this.sig_chain) != null ? _ref6.list_trackees() : void 0;
  1529. };
  1530. User.prototype.list_cryptocurrency_addresses = function() {
  1531. var _ref6;
  1532. return (_ref6 = this.sig_chain) != null ? _ref6.list_cryptocurrency_addresses() : void 0;
  1533. };
  1534. User.prototype.merkle_root = function() {
  1535. var _ref6;
  1536. return (_ref6 = this.sig_chain) != null ? _ref6.merkle_root_to_track_obj() : void 0;
  1537. };
  1538. User.prototype.gen_remote_proof_gen = function(_arg, cb) {
  1539. var arg, err, klass, remote_name_normalized, ret, sig_id, supersede, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1540. __iced_k = __iced_k_noop;
  1541. ___iced_passed_deferral = iced.findDeferral(arguments);
  1542. klass = _arg.klass, remote_name_normalized = _arg.remote_name_normalized, sig_id = _arg.sig_id, supersede = _arg.supersede;
  1543. arg = {
  1544. remote_name_normalized: remote_name_normalized,
  1545. sig_id: sig_id,
  1546. supersede: supersede
  1547. };
  1548. (function(_this) {
  1549. return (function(__iced_k) {
  1550. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1551. parent: ___iced_passed_deferral,
  1552. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1553. funcname: "User.gen_remote_proof_gen"
  1554. });
  1555. _this.gen_sig_base({
  1556. klass: klass,
  1557. arg: arg
  1558. }, __iced_deferrals.defer({
  1559. assign_fn: (function() {
  1560. return function() {
  1561. err = arguments[0];
  1562. return ret = arguments[1];
  1563. };
  1564. })(),
  1565. lineno: 613
  1566. }));
  1567. __iced_deferrals._fulfill();
  1568. });
  1569. })(this)((function(_this) {
  1570. return function() {
  1571. return cb(err, ret);
  1572. };
  1573. })(this));
  1574. };
  1575. User.prototype.gen_sig_base = function(_arg, cb) {
  1576. var arg, err, klass, ret, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1577. __iced_k = __iced_k_noop;
  1578. ___iced_passed_deferral = iced.findDeferral(arguments);
  1579. klass = _arg.klass, arg = _arg.arg;
  1580. ret = null;
  1581. (function(_this) {
  1582. return (function(__iced_k) {
  1583. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1584. parent: ___iced_passed_deferral,
  1585. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1586. funcname: "User.gen_sig_base"
  1587. });
  1588. _this.load_public_key({}, __iced_deferrals.defer({
  1589. assign_fn: (function() {
  1590. return function() {
  1591. return err = arguments[0];
  1592. };
  1593. })(),
  1594. lineno: 620
  1595. }));
  1596. __iced_deferrals._fulfill();
  1597. });
  1598. })(this)((function(_this) {
  1599. return function() {
  1600. if (typeof err === "undefined" || err === null) {
  1601. arg.eldest_kid = _this.merkle_data.eldest_kid;
  1602. arg.km = _this.key;
  1603. arg.merkle_root = _this.merkle_root();
  1604. arg.client = (new PackageJson()).track_obj();
  1605. ret = new klass(arg);
  1606. }
  1607. return cb(err, ret);
  1608. };
  1609. })(this));
  1610. };
  1611. User.prototype.gen_track_proof_gen = function(_arg, cb) {
  1612. var arg, err, klass, last_link, ret, track_obj, uid, untrack_obj, ___iced_passed_deferral, __iced_deferrals, __iced_k, _ref6;
  1613. __iced_k = __iced_k_noop;
  1614. ___iced_passed_deferral = iced.findDeferral(arguments);
  1615. uid = _arg.uid, track_obj = _arg.track_obj, untrack_obj = _arg.untrack_obj;
  1616. last_link = (_ref6 = this.sig_chain) != null ? _ref6.true_last() : void 0;
  1617. klass = untrack_obj != null ? UntrackerProofGen : TrackerProofGen;
  1618. arg = {
  1619. seqno: (last_link != null ? last_link.seqno() + 1 : 1),
  1620. prev: (last_link != null ? last_link.id : null),
  1621. uid: uid
  1622. };
  1623. if (track_obj != null) {
  1624. arg.track = track_obj;
  1625. }
  1626. if (untrack_obj != null) {
  1627. arg.untrack = untrack_obj;
  1628. }
  1629. (function(_this) {
  1630. return (function(__iced_k) {
  1631. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1632. parent: ___iced_passed_deferral,
  1633. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1634. funcname: "User.gen_track_proof_gen"
  1635. });
  1636. _this.gen_sig_base({
  1637. klass: klass,
  1638. arg: arg
  1639. }, __iced_deferrals.defer({
  1640. assign_fn: (function() {
  1641. return function() {
  1642. err = arguments[0];
  1643. return ret = arguments[1];
  1644. };
  1645. })(),
  1646. lineno: 640
  1647. }));
  1648. __iced_deferrals._fulfill();
  1649. });
  1650. })(this)((function(_this) {
  1651. return function() {
  1652. return cb(err, ret);
  1653. };
  1654. })(this));
  1655. };
  1656. User.prototype.gen_track_obj = function() {
  1657. var out, pkp, _ref6, _ref7, _ref8, _ref9;
  1658. pkp = this.public_keys.primary;
  1659. out = {
  1660. basics: filter(this.basics, ["id_version", "last_id_change", "username"]),
  1661. id: this.id,
  1662. key: {
  1663. kid: (_ref6 = this.merkle_data) != null ? _ref6.eldest_kid : void 0
  1664. },
  1665. seq_tail: (_ref7 = this.sig_chain) != null ? (_ref8 = _ref7.true_last()) != null ? _ref8.to_track_obj() : void 0 : void 0,
  1666. remote_proofs: (_ref9 = this.sig_chain) != null ? _ref9.remote_proofs_to_track_obj() : void 0,
  1667. ctime: unix_time()
  1668. };
  1669. return out;
  1670. };
  1671. User.prototype.remove_key = function(cb) {
  1672. var esc, key, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  1673. __iced_k = __iced_k_noop;
  1674. ___iced_passed_deferral = iced.findDeferral(arguments);
  1675. esc = make_esc(cb, "User::remove_key");
  1676. (function(_this) {
  1677. return (function(__iced_k) {
  1678. var _i, _len, _ref6, _results, _while;
  1679. _ref6 = _this.gpg_keys;
  1680. _len = _ref6.length;
  1681. _i = 0;
  1682. _results = [];
  1683. _while = function(__iced_k) {
  1684. var _break, _continue, _next;
  1685. _break = function() {
  1686. return __iced_k(_results);
  1687. };
  1688. _continue = function() {
  1689. return iced.trampoline(function() {
  1690. ++_i;
  1691. return _while(__iced_k);
  1692. });
  1693. };
  1694. _next = function(__iced_next_arg) {
  1695. _results.push(__iced_next_arg);
  1696. return _continue();
  1697. };
  1698. if (!(_i < _len)) {
  1699. return _break();
  1700. } else {
  1701. key = _ref6[_i];
  1702. (function(__iced_k) {
  1703. __iced_deferrals = new iced.Deferrals(__iced_k, {
  1704. parent: ___iced_passed_deferral,
  1705. filename: "/Users/max/src/keybase/node-client/src/user.iced",
  1706. funcname: "User.remove_key"
  1707. });
  1708. key.remove(esc(__iced_deferrals.defer({
  1709. lineno: 663
  1710. })));
  1711. __iced_deferrals._fulfill();
  1712. })(_next);
  1713. }
  1714. };
  1715. _while(__iced_k);
  1716. });
  1717. })(this)((function(_this) {
  1718. return function() {
  1719. return cb(null);
  1720. };
  1721. })(this));
  1722. };
  1723. User.prototype.gen_untrack_obj = function() {
  1724. var out, pkp;
  1725. pkp = this.public_keys.primary;
  1726. out = {
  1727. basics: filter(this.basics, ["id_version", "last_id_change", "username"]),
  1728. id: this.id,
  1729. key: filter(pkp, ["kid", "key_fingerprint"])
  1730. };
  1731. return out;
  1732. };
  1733. return User;
  1734. })();
  1735. }).call(this);