session.js 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864
  1. // Generated by IcedCoffeeScript 1.7.1-c
  2. (function() {
  3. var Config, E, SC, Session, WordArray, constants, createHmac, env, iced, k, log, make_esc, make_scrypt_progress_hook, prompt_email_or_username, prompt_passphrase, req, triplesec, __iced_k, __iced_k_noop, _fn, _ref, _session,
  4. __slice = [].slice;
  5. iced = require('iced-runtime').iced;
  6. __iced_k = __iced_k_noop = function() {};
  7. env = require('./env').env;
  8. req = require('./req');
  9. E = require('./err').E;
  10. make_esc = require('iced-error').make_esc;
  11. Config = require('./config').Config;
  12. _ref = require('./prompter'), prompt_passphrase = _ref.prompt_passphrase, prompt_email_or_username = _ref.prompt_email_or_username;
  13. constants = require('./constants').constants;
  14. SC = constants.security;
  15. triplesec = require('triplesec');
  16. WordArray = triplesec.WordArray;
  17. createHmac = require('crypto').createHmac;
  18. make_scrypt_progress_hook = require('./util').make_scrypt_progress_hook;
  19. log = require('./log');
  20. exports.Session = Session = (function() {
  21. Session.prototype.get_passphrase = function(_arg, cb) {
  22. var err, extra, pp, stderr, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  23. __iced_k = __iced_k_noop;
  24. ___iced_passed_deferral = iced.findDeferral(arguments);
  25. extra = _arg.extra, stderr = _arg.stderr;
  26. (function(_this) {
  27. return (function(__iced_k) {
  28. if (_this._passphrase == null) {
  29. err = null;
  30. pp = env().get_passphrase();
  31. (function(__iced_k) {
  32. if (pp == null) {
  33. (function(__iced_k) {
  34. __iced_deferrals = new iced.Deferrals(__iced_k, {
  35. parent: ___iced_passed_deferral,
  36. filename: "/home/max/src/keybase/node-client/src/session.iced",
  37. funcname: "Session.get_passphrase"
  38. });
  39. prompt_passphrase({
  40. extra: extra,
  41. short: true,
  42. stderr: stderr
  43. }, __iced_deferrals.defer({
  44. assign_fn: (function() {
  45. return function() {
  46. err = arguments[0];
  47. return pp = arguments[1];
  48. };
  49. })(),
  50. lineno: 26
  51. }));
  52. __iced_deferrals._fulfill();
  53. })(__iced_k);
  54. } else {
  55. return __iced_k();
  56. }
  57. })(function() {
  58. return __iced_k(_this._passphrase = pp);
  59. });
  60. } else {
  61. return __iced_k();
  62. }
  63. });
  64. })(this)((function(_this) {
  65. return function() {
  66. return cb(err, _this._passphrase);
  67. };
  68. })(this));
  69. };
  70. Session.prototype.clear_passphrase = function() {
  71. return this._passphrase = null;
  72. };
  73. Session.prototype.get_email_or_username_i = function(cb) {
  74. var c, email, err, username, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  75. __iced_k = __iced_k_noop;
  76. ___iced_passed_deferral = iced.findDeferral(arguments);
  77. err = null;
  78. username = env().get_username();
  79. email = env().get_email();
  80. (function(_this) {
  81. return (function(__iced_k) {
  82. if (!((username != null) || (email != null))) {
  83. (function(__iced_k) {
  84. __iced_deferrals = new iced.Deferrals(__iced_k, {
  85. parent: ___iced_passed_deferral,
  86. filename: "/home/max/src/keybase/node-client/src/session.iced",
  87. funcname: "Session.get_email_or_username_i"
  88. });
  89. prompt_email_or_username(__iced_deferrals.defer({
  90. assign_fn: (function() {
  91. return function() {
  92. err = arguments[0];
  93. email = arguments[1].email;
  94. return username = arguments[1].username;
  95. };
  96. })(),
  97. lineno: 42
  98. }));
  99. __iced_deferrals._fulfill();
  100. })(function() {
  101. return __iced_k(err == null ? (c = env().config, email != null ? c.set("user.email", email) : void 0, username != null ? c.set("user.name", username) : void 0) : void 0);
  102. });
  103. } else {
  104. return __iced_k();
  105. }
  106. });
  107. })(this)((function(_this) {
  108. return function() {
  109. return cb(err, username || email);
  110. };
  111. })(this));
  112. };
  113. function Session() {
  114. this._file = null;
  115. this._loaded = false;
  116. this._id = null;
  117. this._logged_in = false;
  118. this._salt = null;
  119. this._passphrase = null;
  120. this._load_and_checked = false;
  121. }
  122. Session.prototype.load_and_login = function(cb) {
  123. var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  124. __iced_k = __iced_k_noop;
  125. ___iced_passed_deferral = iced.findDeferral(arguments);
  126. err = null;
  127. (function(_this) {
  128. return (function(__iced_k) {
  129. if (!((_this._file != null) && _this._loaded)) {
  130. (function(__iced_k) {
  131. __iced_deferrals = new iced.Deferrals(__iced_k, {
  132. parent: ___iced_passed_deferral,
  133. filename: "/home/max/src/keybase/node-client/src/session.iced",
  134. funcname: "Session.load_and_login"
  135. });
  136. _this.load(__iced_deferrals.defer({
  137. assign_fn: (function() {
  138. return function() {
  139. return err = arguments[0];
  140. };
  141. })(),
  142. lineno: 64
  143. }));
  144. __iced_deferrals._fulfill();
  145. })(__iced_k);
  146. } else {
  147. return __iced_k();
  148. }
  149. });
  150. })(this)((function(_this) {
  151. return function() {
  152. (function(__iced_k) {
  153. if (err == null) {
  154. (function(__iced_k) {
  155. __iced_deferrals = new iced.Deferrals(__iced_k, {
  156. parent: ___iced_passed_deferral,
  157. filename: "/home/max/src/keybase/node-client/src/session.iced",
  158. funcname: "Session.load_and_login"
  159. });
  160. _this.login(__iced_deferrals.defer({
  161. assign_fn: (function() {
  162. return function() {
  163. return err = arguments[0];
  164. };
  165. })(),
  166. lineno: 65
  167. }));
  168. __iced_deferrals._fulfill();
  169. })(__iced_k);
  170. } else {
  171. return __iced_k();
  172. }
  173. })(function() {
  174. return cb(err);
  175. });
  176. };
  177. })(this));
  178. };
  179. Session.prototype.load_and_check = function(cb) {
  180. var esc, li_post, li_pre, ret, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  181. __iced_k = __iced_k_noop;
  182. ___iced_passed_deferral = iced.findDeferral(arguments);
  183. esc = make_esc(cb, "Session::load_and_check");
  184. log.debug("+ session::load_and_check");
  185. ret = null;
  186. (function(_this) {
  187. return (function(__iced_k) {
  188. if (_this._load_and_checked) {
  189. log.debug("| already loaded and checked");
  190. return __iced_k(ret = _this.logged_in());
  191. } else {
  192. (function(__iced_k) {
  193. if (!((_this._file != null) && _this._loaded)) {
  194. (function(__iced_k) {
  195. __iced_deferrals = new iced.Deferrals(__iced_k, {
  196. parent: ___iced_passed_deferral,
  197. filename: "/home/max/src/keybase/node-client/src/session.iced",
  198. funcname: "Session.load_and_check"
  199. });
  200. _this.load(esc(__iced_deferrals.defer({
  201. lineno: 78
  202. })));
  203. __iced_deferrals._fulfill();
  204. })(__iced_k);
  205. } else {
  206. return __iced_k();
  207. }
  208. })(function() {
  209. li_pre = _this.logged_in();
  210. (function(__iced_k) {
  211. __iced_deferrals = new iced.Deferrals(__iced_k, {
  212. parent: ___iced_passed_deferral,
  213. filename: "/home/max/src/keybase/node-client/src/session.iced",
  214. funcname: "Session.load_and_check"
  215. });
  216. _this.check(esc(__iced_deferrals.defer({
  217. assign_fn: (function() {
  218. return function() {
  219. return li_post = arguments[0];
  220. };
  221. })(),
  222. lineno: 80
  223. })));
  224. __iced_deferrals._fulfill();
  225. })(function() {
  226. _this._load_and_checked = true;
  227. (function(__iced_k) {
  228. if (li_pre && !li_post) {
  229. _this._file.clear();
  230. req.clear_session();
  231. req.clear_csrf();
  232. (function(__iced_k) {
  233. __iced_deferrals = new iced.Deferrals(__iced_k, {
  234. parent: ___iced_passed_deferral,
  235. filename: "/home/max/src/keybase/node-client/src/session.iced",
  236. funcname: "Session.load_and_check"
  237. });
  238. _this._file.write(esc(__iced_deferrals.defer({
  239. lineno: 86
  240. })));
  241. __iced_deferrals._fulfill();
  242. })(__iced_k);
  243. } else {
  244. return __iced_k();
  245. }
  246. })(function() {
  247. return __iced_k(ret = li_post);
  248. });
  249. });
  250. });
  251. }
  252. });
  253. })(this)((function(_this) {
  254. return function() {
  255. log.debug("- session::load_and_check -> " + ret);
  256. return cb(null, ret);
  257. };
  258. })(this));
  259. };
  260. Session.prototype.load = function(cb) {
  261. var c, err, o, s, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  262. __iced_k = __iced_k_noop;
  263. ___iced_passed_deferral = iced.findDeferral(arguments);
  264. log.debug("+ session::load");
  265. if (!this._file) {
  266. this._file = new Config(env().get_session_filename(), {
  267. quiet: true,
  268. secret: true
  269. });
  270. }
  271. (function(_this) {
  272. return (function(__iced_k) {
  273. __iced_deferrals = new iced.Deferrals(__iced_k, {
  274. parent: ___iced_passed_deferral,
  275. filename: "/home/max/src/keybase/node-client/src/session.iced",
  276. funcname: "Session.load"
  277. });
  278. _this._file.open(__iced_deferrals.defer({
  279. assign_fn: (function() {
  280. return function() {
  281. return err = arguments[0];
  282. };
  283. })(),
  284. lineno: 97
  285. }));
  286. __iced_deferrals._fulfill();
  287. });
  288. })(this)((function(_this) {
  289. return function() {
  290. if ((typeof err === "undefined" || err === null) && _this._file.found) {
  291. _this._loaded = true;
  292. if ((o = _this._file.obj()) != null) {
  293. if ((s = o.session) != null) {
  294. req.set_session(s);
  295. _this._id = s;
  296. }
  297. if ((c = o.csrf) != null) {
  298. req.set_csrf(c);
  299. _this._csrf = c;
  300. }
  301. }
  302. }
  303. log.debug("- session::load");
  304. return cb(err);
  305. };
  306. })(this));
  307. };
  308. Session.prototype.set_id = function(s) {
  309. this._id = s;
  310. req.set_session(s);
  311. return this._file.set("session", s);
  312. };
  313. Session.prototype.set_csrf = function(c) {
  314. this._csrf = c;
  315. req.set_csrf(c);
  316. return this._file.set("csrf", c);
  317. };
  318. Session.prototype.write = function(cb) {
  319. var esc, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  320. __iced_k = __iced_k_noop;
  321. ___iced_passed_deferral = iced.findDeferral(arguments);
  322. esc = make_esc(cb, "write");
  323. (function(_this) {
  324. return (function(__iced_k) {
  325. if (!_this._loaded) {
  326. (function(__iced_k) {
  327. __iced_deferrals = new iced.Deferrals(__iced_k, {
  328. parent: ___iced_passed_deferral,
  329. filename: "/home/max/src/keybase/node-client/src/session.iced",
  330. funcname: "Session.write"
  331. });
  332. _this.load(esc(__iced_deferrals.defer({
  333. lineno: 128
  334. })));
  335. __iced_deferrals._fulfill();
  336. })(__iced_k);
  337. } else {
  338. return __iced_k();
  339. }
  340. });
  341. })(this)((function(_this) {
  342. return function() {
  343. (function(__iced_k) {
  344. __iced_deferrals = new iced.Deferrals(__iced_k, {
  345. parent: ___iced_passed_deferral,
  346. filename: "/home/max/src/keybase/node-client/src/session.iced",
  347. funcname: "Session.write"
  348. });
  349. _this._file.write(esc(__iced_deferrals.defer({
  350. lineno: 129
  351. })));
  352. __iced_deferrals._fulfill();
  353. })(function() {
  354. (function(__iced_k) {
  355. __iced_deferrals = new iced.Deferrals(__iced_k, {
  356. parent: ___iced_passed_deferral,
  357. filename: "/home/max/src/keybase/node-client/src/session.iced",
  358. funcname: "Session.write"
  359. });
  360. env().config.write(esc(__iced_deferrals.defer({
  361. lineno: 130
  362. })));
  363. __iced_deferrals._fulfill();
  364. })(function() {
  365. return cb(null);
  366. });
  367. });
  368. };
  369. })(this));
  370. };
  371. Session.prototype.gen_pwh = function(_arg, cb) {
  372. var err, extra_keymaterial, km, passphrase, progress_hook, salt, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  373. __iced_k = __iced_k_noop;
  374. ___iced_passed_deferral = iced.findDeferral(arguments);
  375. passphrase = _arg.passphrase, salt = _arg.salt;
  376. salt || (salt = this._salt);
  377. this.enc = new triplesec.Encryptor({
  378. key: new Buffer(passphrase, 'utf8'),
  379. version: SC.triplesec.version
  380. });
  381. progress_hook = make_scrypt_progress_hook();
  382. extra_keymaterial = SC.pwh.derived_key_bytes + SC.openpgp.derived_key_bytes;
  383. (function(_this) {
  384. return (function(__iced_k) {
  385. __iced_deferrals = new iced.Deferrals(__iced_k, {
  386. parent: ___iced_passed_deferral,
  387. filename: "/home/max/src/keybase/node-client/src/session.iced",
  388. funcname: "Session.gen_pwh"
  389. });
  390. _this.enc.resalt({
  391. salt: salt,
  392. extra_keymaterial: extra_keymaterial,
  393. progress_hook: progress_hook
  394. }, __iced_deferrals.defer({
  395. assign_fn: (function() {
  396. return function() {
  397. err = arguments[0];
  398. return km = arguments[1];
  399. };
  400. })(),
  401. lineno: 144
  402. }));
  403. __iced_deferrals._fulfill();
  404. });
  405. })(this)((function(_this) {
  406. return function() {
  407. if (typeof err === "undefined" || err === null) {
  408. _this._salt = _this.enc.salt.to_buffer();
  409. _this._pwh = km.extra.slice(0, SC.pwh.derived_key_bytes);
  410. _this._pwh_version = triplesec.CURRENT_VERSION;
  411. }
  412. return cb(err, _this._pwh, _this._salt, _this._pwh_version);
  413. };
  414. })(this));
  415. };
  416. Session.prototype.gen_hmac_pwh = function(_arg, cb) {
  417. var err, hmac_pwh, login_session, passphrase, pwh, salt, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  418. __iced_k = __iced_k_noop;
  419. ___iced_passed_deferral = iced.findDeferral(arguments);
  420. passphrase = _arg.passphrase, salt = _arg.salt, login_session = _arg.login_session;
  421. (function(_this) {
  422. return (function(__iced_k) {
  423. __iced_deferrals = new iced.Deferrals(__iced_k, {
  424. parent: ___iced_passed_deferral,
  425. filename: "/home/max/src/keybase/node-client/src/session.iced",
  426. funcname: "Session.gen_hmac_pwh"
  427. });
  428. _this.gen_pwh({
  429. passphrase: passphrase,
  430. salt: salt
  431. }, __iced_deferrals.defer({
  432. assign_fn: (function() {
  433. return function() {
  434. err = arguments[0];
  435. return pwh = arguments[1];
  436. };
  437. })(),
  438. lineno: 154
  439. }));
  440. __iced_deferrals._fulfill();
  441. });
  442. })(this)((function(_this) {
  443. return function() {
  444. if (typeof err === "undefined" || err === null) {
  445. hmac_pwh = createHmac('SHA512', pwh).update(login_session).digest();
  446. } else {
  447. hmac_pwh = null;
  448. }
  449. return cb(err, hmac_pwh);
  450. };
  451. })(this));
  452. };
  453. Session.prototype.get_id = function() {
  454. var _ref1, _ref2;
  455. return this._id || ((_ref1 = this._file) != null ? (_ref2 = _ref1.obj()) != null ? _ref2.session : void 0 : void 0);
  456. };
  457. Session.prototype.get_uid = function() {
  458. return this.uid;
  459. };
  460. Session.prototype.check = function(cb) {
  461. var body, err, t, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  462. __iced_k = __iced_k_noop;
  463. ___iced_passed_deferral = iced.findDeferral(arguments);
  464. log.debug("+ session::check");
  465. (function(_this) {
  466. return (function(__iced_k) {
  467. if (req.get_session()) {
  468. log.debug("| calling to sesscheck");
  469. (function(__iced_k) {
  470. __iced_deferrals = new iced.Deferrals(__iced_k, {
  471. parent: ___iced_passed_deferral,
  472. filename: "/home/max/src/keybase/node-client/src/session.iced",
  473. funcname: "Session.check"
  474. });
  475. req.get({
  476. endpoint: "sesscheck",
  477. need_cookie: true
  478. }, __iced_deferrals.defer({
  479. assign_fn: (function() {
  480. return function() {
  481. err = arguments[0];
  482. return body = arguments[1];
  483. };
  484. })(),
  485. lineno: 172
  486. }));
  487. __iced_deferrals._fulfill();
  488. })(function() {
  489. var _ref1;
  490. return __iced_k(typeof err === "undefined" || err === null ? (_this._logged_in = true, _this.uid = body.logged_in_uid, env().config.set("user.id", body.logged_in_uid), _this.username = body.username, _this.username != null ? env().config.set("user.name", _this.username) : void 0, (t = body.csrf_token) != null ? _this.set_csrf(t) : void 0) : err && (err instanceof E.KeybaseError) && ((typeof body !== "undefined" && body !== null ? (_ref1 = body.status) != null ? _ref1.name : void 0 : void 0) === "BAD_SESSION") ? err = null : void 0);
  491. });
  492. } else {
  493. return __iced_k();
  494. }
  495. });
  496. })(this)((function(_this) {
  497. return function() {
  498. log.debug("- session::check");
  499. return cb(err, _this._logged_in);
  500. };
  501. })(this));
  502. };
  503. Session.prototype.logout = function(cb) {
  504. var esc, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  505. __iced_k = __iced_k_noop;
  506. ___iced_passed_deferral = iced.findDeferral(arguments);
  507. esc = make_esc(cb, "logout");
  508. (function(_this) {
  509. return (function(__iced_k) {
  510. __iced_deferrals = new iced.Deferrals(__iced_k, {
  511. parent: ___iced_passed_deferral,
  512. filename: "/home/max/src/keybase/node-client/src/session.iced",
  513. funcname: "Session.logout"
  514. });
  515. _this.check(esc(__iced_deferrals.defer({
  516. lineno: 189
  517. })));
  518. __iced_deferrals._fulfill();
  519. });
  520. })(this)((function(_this) {
  521. return function() {
  522. (function(__iced_k) {
  523. if (_this.logged_in()) {
  524. (function(__iced_k) {
  525. __iced_deferrals = new iced.Deferrals(__iced_k, {
  526. parent: ___iced_passed_deferral,
  527. filename: "/home/max/src/keybase/node-client/src/session.iced",
  528. funcname: "Session.logout"
  529. });
  530. _this.post_logout(esc(__iced_deferrals.defer({
  531. lineno: 191
  532. })));
  533. __iced_deferrals._fulfill();
  534. })(__iced_k);
  535. } else {
  536. return __iced_k();
  537. }
  538. })(function() {
  539. (function(__iced_k) {
  540. if (_this._loaded) {
  541. (function(__iced_k) {
  542. __iced_deferrals = new iced.Deferrals(__iced_k, {
  543. parent: ___iced_passed_deferral,
  544. filename: "/home/max/src/keybase/node-client/src/session.iced",
  545. funcname: "Session.logout"
  546. });
  547. _this._file.unlink(esc(__iced_deferrals.defer({
  548. lineno: 192
  549. })));
  550. __iced_deferrals._fulfill();
  551. })(__iced_k);
  552. } else {
  553. return __iced_k();
  554. }
  555. })(function() {
  556. return cb(null);
  557. });
  558. });
  559. };
  560. })(this));
  561. };
  562. Session.prototype.get_salt = function(args, cb) {
  563. var body, err, login_session, salt, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  564. __iced_k = __iced_k_noop;
  565. ___iced_passed_deferral = iced.findDeferral(arguments);
  566. salt = login_session = null;
  567. (function(_this) {
  568. return (function(__iced_k) {
  569. __iced_deferrals = new iced.Deferrals(__iced_k, {
  570. parent: ___iced_passed_deferral,
  571. filename: "/home/max/src/keybase/node-client/src/session.iced",
  572. funcname: "Session.get_salt"
  573. });
  574. req.get({
  575. endpoint: "getsalt",
  576. args: args
  577. }, __iced_deferrals.defer({
  578. assign_fn: (function() {
  579. return function() {
  580. err = arguments[0];
  581. return body = arguments[1];
  582. };
  583. })(),
  584. lineno: 199
  585. }));
  586. __iced_deferrals._fulfill();
  587. });
  588. })(this)((function(_this) {
  589. return function() {
  590. if (typeof err === "undefined" || err === null) {
  591. salt = new Buffer(body.salt, 'hex');
  592. env().config.set("user.salt", body.salt);
  593. login_session = new Buffer(body.login_session, 'base64');
  594. }
  595. return cb(err, salt, login_session);
  596. };
  597. })(this));
  598. };
  599. Session.prototype.post_logout = function(cb) {
  600. var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  601. __iced_k = __iced_k_noop;
  602. ___iced_passed_deferral = iced.findDeferral(arguments);
  603. (function(_this) {
  604. return (function(__iced_k) {
  605. __iced_deferrals = new iced.Deferrals(__iced_k, {
  606. parent: ___iced_passed_deferral,
  607. filename: "/home/max/src/keybase/node-client/src/session.iced",
  608. funcname: "Session.post_logout"
  609. });
  610. req.post({
  611. endpoint: "logout"
  612. }, __iced_deferrals.defer({
  613. assign_fn: (function() {
  614. return function() {
  615. return err = arguments[0];
  616. };
  617. })(),
  618. lineno: 209
  619. }));
  620. __iced_deferrals._fulfill();
  621. });
  622. })(this)((function(_this) {
  623. return function() {
  624. return cb(err);
  625. };
  626. })(this));
  627. };
  628. Session.prototype.post_login = function(args, cb) {
  629. var body, err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  630. __iced_k = __iced_k_noop;
  631. ___iced_passed_deferral = iced.findDeferral(arguments);
  632. (function(_this) {
  633. return (function(__iced_k) {
  634. __iced_deferrals = new iced.Deferrals(__iced_k, {
  635. parent: ___iced_passed_deferral,
  636. filename: "/home/max/src/keybase/node-client/src/session.iced",
  637. funcname: "Session.post_login"
  638. });
  639. req.post({
  640. endpoint: "login",
  641. args: args
  642. }, __iced_deferrals.defer({
  643. assign_fn: (function() {
  644. return function() {
  645. err = arguments[0];
  646. return body = arguments[1];
  647. };
  648. })(),
  649. lineno: 215
  650. }));
  651. __iced_deferrals._fulfill();
  652. });
  653. })(this)((function(_this) {
  654. return function() {
  655. if (typeof err !== "undefined" && err !== null) {
  656. _this.clear_passphrase();
  657. } else {
  658. _this.set_id(body.session);
  659. _this.set_csrf(body.csrf_token);
  660. _this.uid = body.uid;
  661. _this.username = body.me.basics.username;
  662. env().config.set("user.id", body.uid);
  663. if (_this.username) {
  664. env().config.set("user.name", _this.username);
  665. }
  666. _this._logged_in = true;
  667. }
  668. return cb(err);
  669. };
  670. })(this));
  671. };
  672. Session.prototype.login = function(cb) {
  673. var args, did_login, email_or_username, esc, hmac_pwh, login_session, passphrase, salt, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  674. __iced_k = __iced_k_noop;
  675. ___iced_passed_deferral = iced.findDeferral(arguments);
  676. esc = make_esc(cb, "login");
  677. did_login = false;
  678. (function(_this) {
  679. return (function(__iced_k) {
  680. __iced_deferrals = new iced.Deferrals(__iced_k, {
  681. parent: ___iced_passed_deferral,
  682. filename: "/home/max/src/keybase/node-client/src/session.iced",
  683. funcname: "Session.login"
  684. });
  685. _this.check(esc(__iced_deferrals.defer({
  686. lineno: 233
  687. })));
  688. __iced_deferrals._fulfill();
  689. });
  690. })(this)((function(_this) {
  691. return function() {
  692. (function(__iced_k) {
  693. if (!_this.logged_in()) {
  694. (function(__iced_k) {
  695. __iced_deferrals = new iced.Deferrals(__iced_k, {
  696. parent: ___iced_passed_deferral,
  697. filename: "/home/max/src/keybase/node-client/src/session.iced",
  698. funcname: "Session.login"
  699. });
  700. _this.get_email_or_username_i(esc(__iced_deferrals.defer({
  701. assign_fn: (function() {
  702. return function() {
  703. return email_or_username = arguments[0];
  704. };
  705. })(),
  706. lineno: 235
  707. })));
  708. __iced_deferrals._fulfill();
  709. })(function() {
  710. (function(__iced_k) {
  711. __iced_deferrals = new iced.Deferrals(__iced_k, {
  712. parent: ___iced_passed_deferral,
  713. filename: "/home/max/src/keybase/node-client/src/session.iced",
  714. funcname: "Session.login"
  715. });
  716. _this.get_passphrase({}, esc(__iced_deferrals.defer({
  717. assign_fn: (function() {
  718. return function() {
  719. return passphrase = arguments[0];
  720. };
  721. })(),
  722. lineno: 236
  723. })));
  724. __iced_deferrals._fulfill();
  725. })(function() {
  726. (function(__iced_k) {
  727. __iced_deferrals = new iced.Deferrals(__iced_k, {
  728. parent: ___iced_passed_deferral,
  729. filename: "/home/max/src/keybase/node-client/src/session.iced",
  730. funcname: "Session.login"
  731. });
  732. _this.get_salt({
  733. email_or_username: email_or_username
  734. }, esc(__iced_deferrals.defer({
  735. assign_fn: (function() {
  736. return function() {
  737. salt = arguments[0];
  738. return login_session = arguments[1];
  739. };
  740. })(),
  741. lineno: 237
  742. })));
  743. __iced_deferrals._fulfill();
  744. })(function() {
  745. (function(__iced_k) {
  746. __iced_deferrals = new iced.Deferrals(__iced_k, {
  747. parent: ___iced_passed_deferral,
  748. filename: "/home/max/src/keybase/node-client/src/session.iced",
  749. funcname: "Session.login"
  750. });
  751. _this.gen_hmac_pwh({
  752. passphrase: passphrase,
  753. salt: salt,
  754. login_session: login_session
  755. }, esc(__iced_deferrals.defer({
  756. assign_fn: (function() {
  757. return function() {
  758. return hmac_pwh = arguments[0];
  759. };
  760. })(),
  761. lineno: 238
  762. })));
  763. __iced_deferrals._fulfill();
  764. })(function() {
  765. args = {
  766. email_or_username: email_or_username,
  767. hmac_pwh: hmac_pwh.toString('hex'),
  768. login_session: login_session.toString('base64')
  769. };
  770. (function(__iced_k) {
  771. __iced_deferrals = new iced.Deferrals(__iced_k, {
  772. parent: ___iced_passed_deferral,
  773. filename: "/home/max/src/keybase/node-client/src/session.iced",
  774. funcname: "Session.login"
  775. });
  776. _this.post_login(args, esc(__iced_deferrals.defer({
  777. lineno: 244
  778. })));
  779. __iced_deferrals._fulfill();
  780. })(function() {
  781. return __iced_k(did_login = true);
  782. });
  783. });
  784. });
  785. });
  786. });
  787. } else {
  788. return __iced_k();
  789. }
  790. })(function() {
  791. (function(__iced_k) {
  792. __iced_deferrals = new iced.Deferrals(__iced_k, {
  793. parent: ___iced_passed_deferral,
  794. filename: "/home/max/src/keybase/node-client/src/session.iced",
  795. funcname: "Session.login"
  796. });
  797. _this.write(esc(__iced_deferrals.defer({
  798. lineno: 246
  799. })));
  800. __iced_deferrals._fulfill();
  801. })(function() {
  802. return cb(null, did_login);
  803. });
  804. });
  805. };
  806. })(this));
  807. };
  808. Session.prototype.logged_in = function() {
  809. return this._logged_in;
  810. };
  811. return Session;
  812. })();
  813. exports.session = _session = new Session;
  814. _fn = function(fname) {
  815. return exports[fname] = function() {
  816. var args;
  817. args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
  818. return _session[fname].apply(_session, args);
  819. };
  820. };
  821. for (k in Session.prototype) {
  822. _fn(k);
  823. }
  824. }).call(this);