keyselector.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. // Generated by IcedCoffeeScript 1.8.0-a
  2. (function() {
  3. var E, KeySelector, find_key_id_64, format, gpg, iced, load_key, log, log_10, make_esc, master_ring, pad, prompt_for_int, repeat, spc, tablify, unix_time, __iced_k, __iced_k_noop, _ref;
  4. iced = require('iced-runtime');
  5. __iced_k = __iced_k_noop = function() {};
  6. log = require('./log');
  7. gpg = require('./gpg').gpg;
  8. make_esc = require('iced-error').make_esc;
  9. prompt_for_int = require('./prompter').prompt_for_int;
  10. _ref = require('./keyring'), master_ring = _ref.master_ring, load_key = _ref.load_key;
  11. E = require('./err').E;
  12. format = require('pgp-utils').userid.format;
  13. tablify = require('tablify').tablify;
  14. unix_time = require('iced-utils').util.unix_time;
  15. find_key_id_64 = function(raw) {
  16. var m, x;
  17. x = /^(?:pub|sec)\s+[0-9]{4}(?:R|D)\/([0-9A-F]{16}) /;
  18. if ((m = raw.match(x))) {
  19. return m[1];
  20. } else {
  21. return null;
  22. }
  23. };
  24. log_10 = function(x) {
  25. var val;
  26. val = 0;
  27. while (x > 0) {
  28. val++;
  29. x = Math.floor(x / 10);
  30. }
  31. return val;
  32. };
  33. pad = function(i, places) {
  34. var n;
  35. n = places - (log_10(i));
  36. if (n < 0) {
  37. n = 0;
  38. }
  39. return spc(n) + i;
  40. };
  41. spc = function(i) {
  42. return repeat(' ', i);
  43. };
  44. repeat = function(c, i) {
  45. return ((function() {
  46. var _i, _results;
  47. _results = [];
  48. for (_i = 0; 0 <= i ? _i < i : _i > i; 0 <= i ? _i++ : _i--) {
  49. _results.push(c);
  50. }
  51. return _results;
  52. })()).join('');
  53. };
  54. exports.KeySelector = KeySelector = (function() {
  55. function KeySelector(_arg) {
  56. this.username = _arg.username, this.query = _arg.query, this.secret = _arg.secret;
  57. }
  58. KeySelector.prototype.select = function(cb) {
  59. var err, esc, key, keys, km, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  60. __iced_k = __iced_k_noop;
  61. ___iced_passed_deferral = iced.findDeferral(arguments);
  62. esc = make_esc(cb, "KeySelector::select");
  63. (function(_this) {
  64. return (function(__iced_k) {
  65. __iced_deferrals = new iced.Deferrals(__iced_k, {
  66. parent: ___iced_passed_deferral,
  67. filename: "/home/mpj/Projects/node-client/src/keyselector.iced",
  68. funcname: "KeySelector.select"
  69. });
  70. _this.query_keys(esc(__iced_deferrals.defer({
  71. assign_fn: (function() {
  72. return function() {
  73. return keys = arguments[0];
  74. };
  75. })(),
  76. lineno: 42
  77. })));
  78. __iced_deferrals._fulfill();
  79. });
  80. })(this)((function(_this) {
  81. return function() {
  82. (function(__iced_k) {
  83. if (keys.length > 1) {
  84. (function(__iced_k) {
  85. __iced_deferrals = new iced.Deferrals(__iced_k, {
  86. parent: ___iced_passed_deferral,
  87. filename: "/home/mpj/Projects/node-client/src/keyselector.iced",
  88. funcname: "KeySelector.select"
  89. });
  90. _this.select_key(keys, esc(__iced_deferrals.defer({
  91. assign_fn: (function() {
  92. return function() {
  93. return key = arguments[0];
  94. };
  95. })(),
  96. lineno: 44
  97. })));
  98. __iced_deferrals._fulfill();
  99. })(__iced_k);
  100. } else {
  101. return __iced_k(keys.length === 1 ? key = keys[0] : key = null);
  102. }
  103. })(function() {
  104. err = null;
  105. (function(__iced_k) {
  106. if (typeof key !== "undefined" && key !== null) {
  107. (function(__iced_k) {
  108. __iced_deferrals = new iced.Deferrals(__iced_k, {
  109. parent: ___iced_passed_deferral,
  110. filename: "/home/mpj/Projects/node-client/src/keyselector.iced",
  111. funcname: "KeySelector.select"
  112. });
  113. load_key({
  114. username: _this.username,
  115. fingerprint: key.fingerprint()
  116. }, esc(__iced_deferrals.defer({
  117. assign_fn: (function() {
  118. return function() {
  119. return km = arguments[0];
  120. };
  121. })(),
  122. lineno: 51
  123. })));
  124. __iced_deferrals._fulfill();
  125. })(__iced_k);
  126. } else {
  127. return __iced_k(err = new E.NoLocalKeyError("No local keys found! Try `keybase gen` to generate one."));
  128. }
  129. })(function() {
  130. return cb(err, km);
  131. });
  132. });
  133. };
  134. })(this));
  135. };
  136. KeySelector.prototype.query_keys = function(cb) {
  137. var err, index, key, keys, opts, warnings, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  138. __iced_k = __iced_k_noop;
  139. ___iced_passed_deferral = iced.findDeferral(arguments);
  140. opts = {
  141. secret: this.secret,
  142. query: this.query
  143. };
  144. (function(_this) {
  145. return (function(__iced_k) {
  146. __iced_deferrals = new iced.Deferrals(__iced_k, {
  147. parent: ___iced_passed_deferral,
  148. filename: "/home/mpj/Projects/node-client/src/keyselector.iced",
  149. funcname: "KeySelector.query_keys"
  150. });
  151. master_ring().index2(opts, __iced_deferrals.defer({
  152. assign_fn: (function() {
  153. return function() {
  154. err = arguments[0];
  155. index = arguments[1];
  156. return warnings = arguments[2];
  157. };
  158. })(),
  159. lineno: 60
  160. }));
  161. __iced_deferrals._fulfill();
  162. });
  163. })(this)((function(_this) {
  164. return function() {
  165. keys = typeof err !== "undefined" && err !== null ? null : (function() {
  166. var _i, _len, _ref1, _results;
  167. _ref1 = index.keys();
  168. _results = [];
  169. for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
  170. key = _ref1[_i];
  171. if (!key.is_revoked()) {
  172. _results.push(key);
  173. }
  174. }
  175. return _results;
  176. })();
  177. return cb(err, keys);
  178. };
  179. })(this));
  180. };
  181. KeySelector.prototype.longest_line = function(keys) {
  182. var key, l, line, longest, _i, _j, _len, _len1, _ref1;
  183. longest = 0;
  184. for (_i = 0, _len = keys.length; _i < _len; _i++) {
  185. key = keys[_i];
  186. _ref1 = key.lines;
  187. for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
  188. line = _ref1[_j];
  189. if ((l = line.length) > longest) {
  190. longest = l;
  191. }
  192. }
  193. }
  194. return longest;
  195. };
  196. KeySelector.prototype.format_ts = function(t, zero_val) {
  197. var d, s;
  198. if (zero_val == null) {
  199. zero_val = "n/a";
  200. }
  201. if ((t != null) && t) {
  202. d = new Date(t * 1000);
  203. return ((function() {
  204. var _i, _len, _ref1, _results;
  205. _ref1 = [d.getFullYear(), d.getMonth() + 1, d.getDate()];
  206. _results = [];
  207. for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
  208. s = _ref1[_i];
  209. _results.push("" + s);
  210. }
  211. return _results;
  212. })()).join('-');
  213. } else {
  214. return zero_val;
  215. }
  216. };
  217. KeySelector.prototype.key_to_array = function(key) {
  218. var args;
  219. args = [key._n_bits + (key._type === 1 ? 'R' : 'D'), key.key_id_64(), "exp: " + (this.format_ts(key._expires, 'never'))].concat(key.emails());
  220. return args;
  221. };
  222. KeySelector.prototype.select_key_menu = function(keys) {
  223. var i, key, list, _i, _len;
  224. list = [];
  225. for (i = _i = 0, _len = keys.length; _i < _len; i = ++_i) {
  226. key = keys[i];
  227. list.push(["(" + (i + 1) + ")"].concat(this.key_to_array(key)));
  228. }
  229. return log.console.log(tablify(list, {
  230. row_start: ' ',
  231. row_end: '',
  232. spacer: ' ',
  233. row_sep_char: ''
  234. }));
  235. };
  236. KeySelector.prototype.select_key = function(keys, cb) {
  237. var err, key, out, pcmp, prompt, sel, ___iced_passed_deferral, __iced_deferrals, __iced_k, _i, _len;
  238. __iced_k = __iced_k_noop;
  239. ___iced_passed_deferral = iced.findDeferral(arguments);
  240. if (this.query) {
  241. log.console.log("Multiple keys were found that matched '" + this.query + "':");
  242. } else {
  243. log.console.log("Multiple keys found, please pick one:");
  244. }
  245. for (_i = 0, _len = keys.length; _i < _len; _i++) {
  246. key = keys[_i];
  247. key.s = [key.emails().length, key._expires || 10e11];
  248. }
  249. pcmp = function(a, b) {
  250. var ret;
  251. ret = a[0] < b[0] ? 1 : a[0] > b[0] ? -1 : a[1] < b[1] ? 1 : a[1] > b[1] ? -1 : 0;
  252. return ret;
  253. };
  254. keys.sort(function(a, b) {
  255. return pcmp(a.s, b.s);
  256. });
  257. this.select_key_menu(keys);
  258. prompt = "Pick a key";
  259. (function(_this) {
  260. return (function(__iced_k) {
  261. __iced_deferrals = new iced.Deferrals(__iced_k, {
  262. parent: ___iced_passed_deferral,
  263. filename: "/home/mpj/Projects/node-client/src/keyselector.iced",
  264. funcname: "KeySelector.select_key"
  265. });
  266. prompt_for_int({
  267. prompt: prompt,
  268. low: 1,
  269. hi: keys.length
  270. }, __iced_deferrals.defer({
  271. assign_fn: (function() {
  272. return function() {
  273. err = arguments[0];
  274. return sel = arguments[1];
  275. };
  276. })(),
  277. lineno: 126
  278. }));
  279. __iced_deferrals._fulfill();
  280. });
  281. })(this)((function(_this) {
  282. return function() {
  283. out = typeof err !== "undefined" && err !== null ? null : keys[sel - 1];
  284. if (out != null) {
  285. log.info("Picked key: " + (out.key_id_64()));
  286. }
  287. return cb(err, out);
  288. };
  289. })(this));
  290. };
  291. return KeySelector;
  292. })();
  293. exports.key_select = function(_arg, cb) {
  294. var query, secret, username;
  295. username = _arg.username, query = _arg.query, secret = _arg.secret;
  296. return (new KeySelector({
  297. username: username,
  298. query: query,
  299. secret: secret
  300. })).select(cb);
  301. };
  302. }).call(this);