keypull.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. // Generated by IcedCoffeeScript 1.7.1-c
  2. (function() {
  3. var E, KeyManager, KeyPull, PullTypes, TmpKeyRing, User, athrow, chain_err, colors, env, format_fingerprint, iced, log, make_esc, master_ring, prompt_yn, req, session, __iced_k, __iced_k_noop, _ref, _ref1, _ref2;
  4. iced = require('iced-runtime').iced;
  5. __iced_k = __iced_k_noop = function() {};
  6. session = require('./session').session;
  7. _ref = require('iced-error'), chain_err = _ref.chain_err, make_esc = _ref.make_esc;
  8. env = require('./env').env;
  9. log = require('./log');
  10. User = require('./user').User;
  11. req = require('./req');
  12. KeyManager = require('./keymanager').KeyManager;
  13. E = require('./err').E;
  14. _ref1 = require('./keyring'), TmpKeyRing = _ref1.TmpKeyRing, master_ring = _ref1.master_ring;
  15. prompt_yn = require('./prompter').prompt_yn;
  16. colors = require('./colors');
  17. _ref2 = require('pgp-utils').util, format_fingerprint = _ref2.format_fingerprint, athrow = _ref2.athrow;
  18. PullTypes = {
  19. ERROR: -1,
  20. NONE: 0,
  21. SECRET: 1,
  22. PUBLIC: 2
  23. };
  24. exports.KeyPull = KeyPull = (function() {
  25. function KeyPull(_arg) {
  26. this.force = _arg.force, this.stdin_blocked = _arg.stdin_blocked, this.need_secret = _arg.need_secret;
  27. }
  28. KeyPull.prototype.secret_pull = function(cb) {
  29. var args, err, esc, km, p3skb, passphrase, prompter, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  30. __iced_k = __iced_k_noop;
  31. ___iced_passed_deferral = iced.findDeferral(arguments);
  32. log.debug("+ KeyPull::secret_pull");
  33. esc = make_esc(cb, "KeyPull::secret_pull");
  34. (function(_this) {
  35. return (function(__iced_k) {
  36. if ((p3skb = _this.me.private_key_bundle()) == null) {
  37. return __iced_k(err = new E.NoLocalKeyError("couldn't find a private key bundle for you"));
  38. } else {
  39. err = null;
  40. passphrase = null;
  41. args = {
  42. extra: " (to pull your private key from the server)",
  43. stderr: true
  44. };
  45. prompter = function(cb) {
  46. var err, passphrase, ___iced_passed_deferral1, __iced_deferrals, __iced_k;
  47. __iced_k = __iced_k_noop;
  48. ___iced_passed_deferral1 = iced.findDeferral(arguments);
  49. (function(__iced_k) {
  50. __iced_deferrals = new iced.Deferrals(__iced_k, {
  51. parent: ___iced_passed_deferral1,
  52. filename: "/home/jacko/node-client/src/keypull.iced"
  53. });
  54. session.get_passphrase(args, __iced_deferrals.defer({
  55. assign_fn: (function() {
  56. return function() {
  57. err = arguments[0];
  58. return passphrase = arguments[1];
  59. };
  60. })(),
  61. lineno: 44
  62. }));
  63. __iced_deferrals._fulfill();
  64. })(function() {
  65. return cb(err, passphrase);
  66. });
  67. };
  68. (function(__iced_k) {
  69. __iced_deferrals = new iced.Deferrals(__iced_k, {
  70. parent: ___iced_passed_deferral,
  71. filename: "/home/jacko/node-client/src/keypull.iced",
  72. funcname: "KeyPull.secret_pull"
  73. });
  74. KeyManager.import_from_p3skb({
  75. raw: p3skb,
  76. prompter: prompter
  77. }, esc(__iced_deferrals.defer({
  78. assign_fn: (function() {
  79. return function() {
  80. return km = arguments[0];
  81. };
  82. })(),
  83. lineno: 46
  84. })));
  85. __iced_deferrals._fulfill();
  86. })(function() {
  87. (function(__iced_k) {
  88. __iced_deferrals = new iced.Deferrals(__iced_k, {
  89. parent: ___iced_passed_deferral,
  90. filename: "/home/jacko/node-client/src/keypull.iced",
  91. funcname: "KeyPull.secret_pull"
  92. });
  93. km.save_to_ring({
  94. passphrase: passphrase
  95. }, esc(__iced_deferrals.defer({
  96. lineno: 47
  97. })));
  98. __iced_deferrals._fulfill();
  99. })(function() {
  100. return __iced_k(log.info("Pulled secret key (" + (format_fingerprint(_this.me.fingerprint(true))) + ")"));
  101. });
  102. });
  103. }
  104. });
  105. })(this)((function(_this) {
  106. return function() {
  107. log.debug("- KeyPull::secret_pull");
  108. return cb(err);
  109. };
  110. })(this));
  111. };
  112. KeyPull.prototype.load_user = function(cb) {
  113. var err, esc, pub, pull_needed, sec, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  114. __iced_k = __iced_k_noop;
  115. ___iced_passed_deferral = iced.findDeferral(arguments);
  116. log.debug("+ KeyPull::load_user");
  117. esc = make_esc(cb, "KeyPull::load_user");
  118. (function(_this) {
  119. return (function(__iced_k) {
  120. __iced_deferrals = new iced.Deferrals(__iced_k, {
  121. parent: ___iced_passed_deferral,
  122. filename: "/home/jacko/node-client/src/keypull.iced",
  123. funcname: "KeyPull.load_user"
  124. });
  125. User.load({
  126. username: env().get_username(),
  127. require_public_key: false,
  128. cache: true,
  129. self: true,
  130. secret: true
  131. }, esc(__iced_deferrals.defer({
  132. assign_fn: (function(__slot_1) {
  133. return function() {
  134. return __slot_1.me = arguments[0];
  135. };
  136. })(_this),
  137. lineno: 59
  138. })));
  139. __iced_deferrals._fulfill();
  140. });
  141. })(this)((function(_this) {
  142. return function() {
  143. (function(__iced_k) {
  144. __iced_deferrals = new iced.Deferrals(__iced_k, {
  145. parent: ___iced_passed_deferral,
  146. filename: "/home/jacko/node-client/src/keypull.iced",
  147. funcname: "KeyPull.load_user"
  148. });
  149. _this.me.check_key({
  150. secret: true
  151. }, esc(__iced_deferrals.defer({
  152. assign_fn: (function() {
  153. return function() {
  154. return sec = arguments[0];
  155. };
  156. })(),
  157. lineno: 60
  158. })));
  159. __iced_deferrals._fulfill();
  160. })(function() {
  161. (function(__iced_k) {
  162. __iced_deferrals = new iced.Deferrals(__iced_k, {
  163. parent: ___iced_passed_deferral,
  164. filename: "/home/jacko/node-client/src/keypull.iced",
  165. funcname: "KeyPull.load_user"
  166. });
  167. _this.me.check_key({
  168. secret: false
  169. }, esc(__iced_deferrals.defer({
  170. assign_fn: (function() {
  171. return function() {
  172. return pub = arguments[0];
  173. };
  174. })(),
  175. lineno: 61
  176. })));
  177. __iced_deferrals._fulfill();
  178. })(function() {
  179. log.debug("Check key secret: " + (JSON.stringify(sec)));
  180. log.debug("Check key public: " + (JSON.stringify(pub)));
  181. err = null;
  182. pull_needed = !pub.remote ? (err = new E.NoRemoteKeyError("you don't have a public key; try `keybase push` if you have a key; or `keybase gen` if you don't"), PullTypes.ERROR) : sec.remote && !sec.local && _this.need_secret ? PullTypes.SECRET : _this.need_secret && !sec.local ? (err = new E.NoRemoteKeyError("can't perform secret-key action without a secret key"), PullTypes.ERROR) : pub.local && (!sec.remote || sec.local) && !_this.force ? PullTypes.NONE : sec.remote && (!sec.local || _this.force) ? PullTypes.SECRET : PullTypes.PUBLIC;
  183. log.debug("- KeyPull::load_user -> " + err + " " + pull_needed);
  184. return cb(err, pull_needed);
  185. });
  186. });
  187. };
  188. })(this));
  189. };
  190. KeyPull.prototype.prompt_ok = function(warnings, proofs, cb) {
  191. var err, prompt, ret, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  192. __iced_k = __iced_k_noop;
  193. ___iced_passed_deferral = iced.findDeferral(arguments);
  194. prompt = warnings > 0 ? (log.console.error(colors.red(colors.bold("Some of your hosted proofs failed!"))), "Do you still accept these credentials to be your own?") : proofs === 0 ? "We found your account, but you have no hosted proofs. Check your fingerprint carefully. Is this you?" : "Is this you?";
  195. (function(_this) {
  196. return (function(__iced_k) {
  197. __iced_deferrals = new iced.Deferrals(__iced_k, {
  198. parent: ___iced_passed_deferral,
  199. filename: "/home/jacko/node-client/src/keypull.iced",
  200. funcname: "KeyPull.prompt_ok"
  201. });
  202. prompt_yn({
  203. prompt: prompt,
  204. defval: false
  205. }, __iced_deferrals.defer({
  206. assign_fn: (function() {
  207. return function() {
  208. err = arguments[0];
  209. return ret = arguments[1];
  210. };
  211. })(),
  212. lineno: 91
  213. }));
  214. __iced_deferrals._fulfill();
  215. });
  216. })(this)((function(_this) {
  217. return function() {
  218. if (!ret && !(typeof err !== "undefined" && err !== null)) {
  219. err = new E.CancelError("key import operation canceled");
  220. }
  221. return cb(err);
  222. };
  223. })(this));
  224. };
  225. KeyPull.prototype.public_pull = function(cb) {
  226. var esc, key, n_proofs, tmp_keyring, warnings, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  227. __iced_k = __iced_k_noop;
  228. ___iced_passed_deferral = iced.findDeferral(arguments);
  229. tmp_keyring = null;
  230. log.debug("+ KeyPull::public_pull");
  231. cb = chain_err(cb, function(tcb) {
  232. var e2, ___iced_passed_deferral1, __iced_deferrals, __iced_k;
  233. __iced_k = __iced_k_noop;
  234. ___iced_passed_deferral1 = iced.findDeferral(arguments);
  235. (function(_this) {
  236. return (function(__iced_k) {
  237. if (tmp_keyring != null) {
  238. (function(__iced_k) {
  239. __iced_deferrals = new iced.Deferrals(__iced_k, {
  240. parent: ___iced_passed_deferral1,
  241. filename: "/home/jacko/node-client/src/keypull.iced"
  242. });
  243. tmp_keyring.nuke(__iced_deferrals.defer({
  244. assign_fn: (function() {
  245. return function() {
  246. return e2 = arguments[0];
  247. };
  248. })(),
  249. lineno: 105
  250. }));
  251. __iced_deferrals._fulfill();
  252. })(function() {
  253. return __iced_k(typeof e2 !== "undefined" && e2 !== null ? log.warn("Problem in cleanup: " + e2.message) : void 0);
  254. });
  255. } else {
  256. return __iced_k();
  257. }
  258. });
  259. })(this)((function(_this) {
  260. return function() {
  261. return tcb(null);
  262. };
  263. })(this));
  264. });
  265. esc = make_esc(cb, "KeyPull::public_pull");
  266. (function(_this) {
  267. return (function(__iced_k) {
  268. __iced_deferrals = new iced.Deferrals(__iced_k, {
  269. parent: ___iced_passed_deferral,
  270. filename: "/home/jacko/node-client/src/keypull.iced",
  271. funcname: "KeyPull.public_pull"
  272. });
  273. TmpKeyRing.make(esc(__iced_deferrals.defer({
  274. assign_fn: (function() {
  275. return function() {
  276. return tmp_keyring = arguments[0];
  277. };
  278. })(),
  279. lineno: 110
  280. })));
  281. __iced_deferrals._fulfill();
  282. });
  283. })(this)((function(_this) {
  284. return function() {
  285. (function(__iced_k) {
  286. __iced_deferrals = new iced.Deferrals(__iced_k, {
  287. parent: ___iced_passed_deferral,
  288. filename: "/home/jacko/node-client/src/keypull.iced",
  289. funcname: "KeyPull.public_pull"
  290. });
  291. _this.me.import_public_keys({
  292. keyring: tmp_keyring
  293. }, esc(__iced_deferrals.defer({
  294. lineno: 111
  295. })));
  296. __iced_deferrals._fulfill();
  297. })(function() {
  298. (function(__iced_k) {
  299. __iced_deferrals = new iced.Deferrals(__iced_k, {
  300. parent: ___iced_passed_deferral,
  301. filename: "/home/jacko/node-client/src/keypull.iced",
  302. funcname: "KeyPull.public_pull"
  303. });
  304. _this.me.check_remote_proofs({}, esc(__iced_deferrals.defer({
  305. assign_fn: (function() {
  306. return function() {
  307. warnings = arguments[0];
  308. return n_proofs = arguments[1];
  309. };
  310. })(),
  311. lineno: 112
  312. })));
  313. __iced_deferrals._fulfill();
  314. })(function() {
  315. (function(__iced_k) {
  316. __iced_deferrals = new iced.Deferrals(__iced_k, {
  317. parent: ___iced_passed_deferral,
  318. filename: "/home/jacko/node-client/src/keypull.iced",
  319. funcname: "KeyPull.public_pull"
  320. });
  321. _this.prompt_ok(warnings.warnings().length, n_proofs, esc(__iced_deferrals.defer({
  322. lineno: 113
  323. })));
  324. __iced_deferrals._fulfill();
  325. })(function() {
  326. (function(__iced_k) {
  327. var _i, _len, _ref3, _results, _while;
  328. _ref3 = _this.me.gpg_keys;
  329. _len = _ref3.length;
  330. _i = 0;
  331. _results = [];
  332. _while = function(__iced_k) {
  333. var _break, _continue, _next;
  334. _break = function() {
  335. return __iced_k(_results);
  336. };
  337. _continue = function() {
  338. return iced.trampoline(function() {
  339. ++_i;
  340. return _while(__iced_k);
  341. });
  342. };
  343. _next = function(__iced_next_arg) {
  344. _results.push(__iced_next_arg);
  345. return _continue();
  346. };
  347. if (!(_i < _len)) {
  348. return _break();
  349. } else {
  350. key = _ref3[_i];
  351. (function(__iced_k) {
  352. __iced_deferrals = new iced.Deferrals(__iced_k, {
  353. parent: ___iced_passed_deferral,
  354. filename: "/home/jacko/node-client/src/keypull.iced",
  355. funcname: "KeyPull.public_pull"
  356. });
  357. key.commit({}, esc(__iced_deferrals.defer({
  358. lineno: 115
  359. })));
  360. __iced_deferrals._fulfill();
  361. })(function() {
  362. return _next(log.info("Pulled public key (" + (format_fingerprint(key.fingerprint().toString('hex').toUpperCase())) + ")"));
  363. });
  364. }
  365. };
  366. _while(__iced_k);
  367. })(function() {
  368. log.debug("- KeyPull::public_pull");
  369. return cb(null);
  370. });
  371. });
  372. });
  373. });
  374. };
  375. })(this));
  376. };
  377. KeyPull.prototype.run = function(cb) {
  378. var err, esc, pull_type, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  379. __iced_k = __iced_k_noop;
  380. ___iced_passed_deferral = iced.findDeferral(arguments);
  381. esc = make_esc(cb, "Command::run");
  382. log.debug("+ KeyPull::run");
  383. (function(_this) {
  384. return (function(__iced_k) {
  385. __iced_deferrals = new iced.Deferrals(__iced_k, {
  386. parent: ___iced_passed_deferral,
  387. filename: "/home/jacko/node-client/src/keypull.iced",
  388. funcname: "KeyPull.run"
  389. });
  390. _this.load_user(esc(__iced_deferrals.defer({
  391. assign_fn: (function() {
  392. return function() {
  393. return pull_type = arguments[0];
  394. };
  395. })(),
  396. lineno: 125
  397. })));
  398. __iced_deferrals._fulfill();
  399. });
  400. })(this)((function(_this) {
  401. return function() {
  402. (function(__iced_k) {
  403. if ((pull_type !== PullTypes.NONE) && _this.stdin_blocked) {
  404. err = new E.NoLocalKeyError("Can't fetch your private key since you're performing a stream action; try an explicit `keybase pull`");
  405. (function(__iced_k) {
  406. __iced_deferrals = new iced.Deferrals(__iced_k, {
  407. parent: ___iced_passed_deferral,
  408. filename: "/home/jacko/node-client/src/keypull.iced",
  409. funcname: "KeyPull.run"
  410. });
  411. athrow(err, esc(__iced_deferrals.defer({
  412. lineno: 128
  413. })));
  414. __iced_deferrals._fulfill();
  415. })(__iced_k);
  416. } else {
  417. return __iced_k();
  418. }
  419. })(function() {
  420. (function(__iced_k) {
  421. switch (pull_type) {
  422. case PullTypes.SECRET:
  423. (function(__iced_k) {
  424. __iced_deferrals = new iced.Deferrals(__iced_k, {
  425. parent: ___iced_passed_deferral,
  426. filename: "/home/jacko/node-client/src/keypull.iced",
  427. funcname: "KeyPull.run"
  428. });
  429. _this.secret_pull(esc(__iced_deferrals.defer({
  430. lineno: 131
  431. })));
  432. __iced_deferrals._fulfill();
  433. })(__iced_k);
  434. break;
  435. case PullTypes.PUBLIC:
  436. (function(__iced_k) {
  437. __iced_deferrals = new iced.Deferrals(__iced_k, {
  438. parent: ___iced_passed_deferral,
  439. filename: "/home/jacko/node-client/src/keypull.iced",
  440. funcname: "KeyPull.run"
  441. });
  442. _this.public_pull(esc(__iced_deferrals.defer({
  443. lineno: 133
  444. })));
  445. __iced_deferrals._fulfill();
  446. })(__iced_k);
  447. break;
  448. default:
  449. return __iced_k();
  450. }
  451. })(function() {
  452. log.debug("- KeyPull::run");
  453. return cb(null);
  454. });
  455. });
  456. };
  457. })(this));
  458. };
  459. return KeyPull;
  460. })();
  461. exports.keypull = function(opts, cb) {
  462. var err, kp, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  463. __iced_k = __iced_k_noop;
  464. ___iced_passed_deferral = iced.findDeferral(arguments);
  465. kp = new KeyPull(opts);
  466. (function(_this) {
  467. return (function(__iced_k) {
  468. __iced_deferrals = new iced.Deferrals(__iced_k, {
  469. parent: ___iced_passed_deferral,
  470. filename: "/home/jacko/node-client/src/keypull.iced",
  471. funcname: "keypull"
  472. });
  473. kp.run(__iced_deferrals.defer({
  474. assign_fn: (function() {
  475. return function() {
  476. return err = arguments[0];
  477. };
  478. })(),
  479. lineno: 141
  480. }));
  481. __iced_deferrals._fulfill();
  482. });
  483. })(this)((function(_this) {
  484. return function() {
  485. return cb(err);
  486. };
  487. })(this));
  488. };
  489. }).call(this);