software_upgrade.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. // Generated by IcedCoffeeScript 1.7.1-f
  2. (function() {
  3. var FileBundle, SoftwareUpgrade, constants, createHash, fs, iced, log, make_esc, npm, path, __iced_k, __iced_k_noop;
  4. iced = require('iced-runtime');
  5. __iced_k = __iced_k_noop = function() {};
  6. make_esc = require('iced-error').make_esc;
  7. npm = require('./npm').npm;
  8. path = require('path');
  9. fs = require('fs');
  10. log = require('./log');
  11. constants = require('./constants').constants;
  12. createHash = require('crypto').createHash;
  13. FileBundle = (function() {
  14. function FileBundle(uri, body) {
  15. this.uri = uri;
  16. this.body = body;
  17. }
  18. FileBundle.prototype.filename = function() {
  19. return path.basename(this.uri.path);
  20. };
  21. FileBundle.prototype.fullpath = function() {
  22. return this._fullpath;
  23. };
  24. FileBundle.prototype.version = function() {
  25. var parts;
  26. parts = this.filename().split(/-/);
  27. parts = parts[1].split(/\./).slice(0, -1);
  28. return parts.join(".");
  29. };
  30. FileBundle.prototype.hash = function() {
  31. return createHash('SHA512').update(this.body).digest('hex');
  32. };
  33. FileBundle.prototype.write = function(dir, encoding, cb) {
  34. var err, mode, p, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  35. __iced_k = __iced_k_noop;
  36. ___iced_passed_deferral = iced.findDeferral(arguments);
  37. p = this._fullpath = path.join(dir, this.filename());
  38. mode = process.platform === 'win32' ? 0x180 : 0x100;
  39. (function(_this) {
  40. return (function(__iced_k) {
  41. __iced_deferrals = new iced.Deferrals(__iced_k, {
  42. parent: ___iced_passed_deferral,
  43. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  44. funcname: "FileBundle.write"
  45. });
  46. fs.writeFile(p, _this.body, {
  47. mode: mode,
  48. encoding: encoding
  49. }, __iced_deferrals.defer({
  50. assign_fn: (function() {
  51. return function() {
  52. return err = arguments[0];
  53. };
  54. })(),
  55. lineno: 33
  56. }));
  57. __iced_deferrals._fulfill();
  58. });
  59. })(this)((function(_this) {
  60. return function() {
  61. return cb(err);
  62. };
  63. })(this));
  64. };
  65. return FileBundle;
  66. })();
  67. exports.SoftwareUpgrade = SoftwareUpgrade = (function() {
  68. function SoftwareUpgrade(config) {
  69. this.config = config;
  70. }
  71. SoftwareUpgrade.prototype.fetch = function(file, cb) {
  72. var body, err, req, ret, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  73. __iced_k = __iced_k_noop;
  74. ___iced_passed_deferral = iced.findDeferral(arguments);
  75. (function(_this) {
  76. return (function(__iced_k) {
  77. __iced_deferrals = new iced.Deferrals(__iced_k, {
  78. parent: ___iced_passed_deferral,
  79. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  80. funcname: "SoftwareUpgrade.fetch"
  81. });
  82. _this.config.request(file, __iced_deferrals.defer({
  83. assign_fn: (function() {
  84. return function() {
  85. err = arguments[0];
  86. req = arguments[1];
  87. return body = arguments[2];
  88. };
  89. })(),
  90. lineno: 47
  91. }));
  92. __iced_deferrals._fulfill();
  93. });
  94. })(this)((function(_this) {
  95. return function() {
  96. if (typeof err === "undefined" || err === null) {
  97. ret = new FileBundle(req.request.uri, body);
  98. }
  99. return cb(err, ret);
  100. };
  101. })(this));
  102. };
  103. SoftwareUpgrade.prototype.fetch_package = function(cb) {
  104. var err, file, ___iced_passed_deferral, __iced_deferrals, __iced_k, _ref;
  105. __iced_k = __iced_k_noop;
  106. ___iced_passed_deferral = iced.findDeferral(arguments);
  107. file = ["pkg", ((_ref = this.config.argv.get()) != null ? _ref[0] : void 0) || constants.links.stable].join('/');
  108. (function(_this) {
  109. return (function(__iced_k) {
  110. __iced_deferrals = new iced.Deferrals(__iced_k, {
  111. parent: ___iced_passed_deferral,
  112. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  113. funcname: "SoftwareUpgrade.fetch_package"
  114. });
  115. _this.fetch(file, __iced_deferrals.defer({
  116. assign_fn: (function(__slot_1) {
  117. return function() {
  118. err = arguments[0];
  119. return __slot_1["package"] = arguments[1];
  120. };
  121. })(_this),
  122. lineno: 55
  123. }));
  124. __iced_deferrals._fulfill();
  125. });
  126. })(this)((function(_this) {
  127. return function() {
  128. return cb(err);
  129. };
  130. })(this));
  131. };
  132. SoftwareUpgrade.prototype.fetch_signature = function(cb) {
  133. var err, file, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  134. __iced_k = __iced_k_noop;
  135. ___iced_passed_deferral = iced.findDeferral(arguments);
  136. file = "/sig/files/" + (this.config.key_version()) + "/" + (this["package"].filename()) + ".asc";
  137. (function(_this) {
  138. return (function(__iced_k) {
  139. __iced_deferrals = new iced.Deferrals(__iced_k, {
  140. parent: ___iced_passed_deferral,
  141. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  142. funcname: "SoftwareUpgrade.fetch_signature"
  143. });
  144. _this.fetch(file, __iced_deferrals.defer({
  145. assign_fn: (function(__slot_1) {
  146. return function() {
  147. err = arguments[0];
  148. return __slot_1.signature = arguments[1];
  149. };
  150. })(_this),
  151. lineno: 62
  152. }));
  153. __iced_deferrals._fulfill();
  154. });
  155. })(this)((function(_this) {
  156. return function() {
  157. return cb(err);
  158. };
  159. })(this));
  160. };
  161. SoftwareUpgrade.prototype.write_files = function(cb) {
  162. var esc, tmpdir, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  163. __iced_k = __iced_k_noop;
  164. ___iced_passed_deferral = iced.findDeferral(arguments);
  165. esc = make_esc(cb, "SoftwareUpgrade::write_files");
  166. log.debug("+ SoftwareUpgrade::write_files");
  167. tmpdir = this.config.get_tmpdir();
  168. (function(_this) {
  169. return (function(__iced_k) {
  170. __iced_deferrals = new iced.Deferrals(__iced_k, {
  171. parent: ___iced_passed_deferral,
  172. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  173. funcname: "SoftwareUpgrade.write_files"
  174. });
  175. _this["package"].write(tmpdir, 'binary', esc(__iced_deferrals.defer({
  176. lineno: 71
  177. })));
  178. __iced_deferrals._fulfill();
  179. });
  180. })(this)((function(_this) {
  181. return function() {
  182. (function(__iced_k) {
  183. __iced_deferrals = new iced.Deferrals(__iced_k, {
  184. parent: ___iced_passed_deferral,
  185. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  186. funcname: "SoftwareUpgrade.write_files"
  187. });
  188. _this.signature.write(tmpdir, 'utf8', esc(__iced_deferrals.defer({
  189. lineno: 72
  190. })));
  191. __iced_deferrals._fulfill();
  192. })(function() {
  193. log.debug("- SoftwareUpgrade::write_files");
  194. return cb(null);
  195. });
  196. };
  197. })(this));
  198. };
  199. SoftwareUpgrade.prototype.verify_signature = function(cb) {
  200. var args, err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  201. __iced_k = __iced_k_noop;
  202. ___iced_passed_deferral = iced.findDeferral(arguments);
  203. log.debug("+ SoftwareUpgrade::verify_signature");
  204. args = {
  205. which: 'code',
  206. sig: this.signature.fullpath(),
  207. file: this["package"].fullpath()
  208. };
  209. log.debug("| Verify signature w/ " + (JSON.stringify(args)));
  210. (function(_this) {
  211. return (function(__iced_k) {
  212. __iced_deferrals = new iced.Deferrals(__iced_k, {
  213. parent: ___iced_passed_deferral,
  214. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  215. funcname: "SoftwareUpgrade.verify_signature"
  216. });
  217. _this.config.oneshot_verify(args, __iced_deferrals.defer({
  218. assign_fn: (function() {
  219. return function() {
  220. return err = arguments[0];
  221. };
  222. })(),
  223. lineno: 85
  224. }));
  225. __iced_deferrals._fulfill();
  226. });
  227. })(this)((function(_this) {
  228. return function() {
  229. log.info("verified signature of " + (_this["package"].filename()) + " against " + (_this.signature.filename()));
  230. log.debug("- SoftwareUpgrade::verify_signature");
  231. return cb(err);
  232. };
  233. })(this));
  234. };
  235. SoftwareUpgrade.prototype.verify_hash = function(cb) {
  236. var err, h1, h2, v;
  237. h1 = this["package"].hash();
  238. h2 = this.config.index_lookup_hash((v = this["package"].version()));
  239. log.debug("| Verify hash on version " + v + ": " + h1 + " v " + h2);
  240. err = null;
  241. if (h1 !== h2) {
  242. err = new Error("Hash mismatch on " + (this["package"].filename()) + ": " + h1 + " != " + h2);
  243. }
  244. return cb(err);
  245. };
  246. SoftwareUpgrade.prototype.install_package = function(cb) {
  247. var args, err, p, x, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  248. __iced_k = __iced_k_noop;
  249. ___iced_passed_deferral = iced.findDeferral(arguments);
  250. log.debug("+ SoftwareUpgrade::install_package");
  251. p = this["package"].fullpath();
  252. log.debug("| Full name for install: " + p);
  253. log.info("Running npm install " + (this["package"].filename()) + ": this may take a minute, please be patient");
  254. if ((x = this.config.install_prefix()) != null) {
  255. log.warn("(Using non-standard install prefix: " + x + ")");
  256. }
  257. args = ["install", "-g", p];
  258. (function(_this) {
  259. return (function(__iced_k) {
  260. __iced_deferrals = new iced.Deferrals(__iced_k, {
  261. parent: ___iced_passed_deferral,
  262. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  263. funcname: "SoftwareUpgrade.install_package"
  264. });
  265. npm({
  266. args: args
  267. }, __iced_deferrals.defer({
  268. assign_fn: (function() {
  269. return function() {
  270. return err = arguments[0];
  271. };
  272. })(),
  273. lineno: 110
  274. }));
  275. __iced_deferrals._fulfill();
  276. });
  277. })(this)((function(_this) {
  278. return function() {
  279. log.debug("- SoftwareUpgrade::install_package");
  280. return cb(err);
  281. };
  282. })(this));
  283. };
  284. SoftwareUpgrade.prototype.run = function(cb) {
  285. var esc, ___iced_passed_deferral, __iced_deferrals, __iced_k;
  286. __iced_k = __iced_k_noop;
  287. ___iced_passed_deferral = iced.findDeferral(arguments);
  288. esc = make_esc(cb, "SoftwareUpgrade::run");
  289. log.debug("+ SoftwareUpgrade::run");
  290. (function(_this) {
  291. return (function(__iced_k) {
  292. __iced_deferrals = new iced.Deferrals(__iced_k, {
  293. parent: ___iced_passed_deferral,
  294. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  295. funcname: "SoftwareUpgrade.run"
  296. });
  297. _this.fetch_package(esc(__iced_deferrals.defer({
  298. lineno: 119
  299. })));
  300. __iced_deferrals._fulfill();
  301. });
  302. })(this)((function(_this) {
  303. return function() {
  304. (function(__iced_k) {
  305. __iced_deferrals = new iced.Deferrals(__iced_k, {
  306. parent: ___iced_passed_deferral,
  307. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  308. funcname: "SoftwareUpgrade.run"
  309. });
  310. _this.fetch_signature(esc(__iced_deferrals.defer({
  311. lineno: 120
  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/max/src/keybase/node-installer/src/software_upgrade.iced",
  319. funcname: "SoftwareUpgrade.run"
  320. });
  321. _this.write_files(esc(__iced_deferrals.defer({
  322. lineno: 121
  323. })));
  324. __iced_deferrals._fulfill();
  325. })(function() {
  326. (function(__iced_k) {
  327. __iced_deferrals = new iced.Deferrals(__iced_k, {
  328. parent: ___iced_passed_deferral,
  329. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  330. funcname: "SoftwareUpgrade.run"
  331. });
  332. _this.verify_hash(esc(__iced_deferrals.defer({
  333. lineno: 122
  334. })));
  335. __iced_deferrals._fulfill();
  336. })(function() {
  337. (function(__iced_k) {
  338. __iced_deferrals = new iced.Deferrals(__iced_k, {
  339. parent: ___iced_passed_deferral,
  340. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  341. funcname: "SoftwareUpgrade.run"
  342. });
  343. _this.verify_signature(esc(__iced_deferrals.defer({
  344. lineno: 123
  345. })));
  346. __iced_deferrals._fulfill();
  347. })(function() {
  348. (function(__iced_k) {
  349. __iced_deferrals = new iced.Deferrals(__iced_k, {
  350. parent: ___iced_passed_deferral,
  351. filename: "/home/max/src/keybase/node-installer/src/software_upgrade.iced",
  352. funcname: "SoftwareUpgrade.run"
  353. });
  354. _this.install_package(esc(__iced_deferrals.defer({
  355. lineno: 124
  356. })));
  357. __iced_deferrals._fulfill();
  358. })(function() {
  359. log.debug("- SoftwareUpgrade::run");
  360. return cb(null);
  361. });
  362. });
  363. });
  364. });
  365. });
  366. };
  367. })(this));
  368. };
  369. return SoftwareUpgrade;
  370. })();
  371. }).call(this);