'use strict' let cli = require('heroku-cli-util') let co = require('co') let fs = require('fs') function open (url) { cli.log(`Opening ${cli.color.cyan(url)}...`) return cli.open(url) } const ssoPath = '/tmp/heroku-sso.html' function writeSudoTemplate (ctx, sso, path) { return new Promise(function (resolve, reject) { let html = ` Heroku Add-ons SSO

Opening ${ctx.args.addon}${ctx.app ? ` on ${ctx.app}` : ''}...

` fs.writeFile(path, html, function (err) { if (err) reject(err) else resolve() }) }) } let sudo = co.wrap(function * (ctx, api) { let sso = yield api.request({ method: 'GET', path: `/apps/${ctx.app}/addons/${ctx.args.addon}/sso`, headers: { Accept: 'application/vnd.heroku+json; version=3.add-ons-sso' } }) if (sso.method === 'get') { yield open(sso.action) } else { yield writeSudoTemplate(ctx, sso, ssoPath) yield open(`file://${ssoPath}`) } }) function * run (ctx, api) { const resolve = require('../../lib/resolve') if (process.env.HEROKU_SUDO) return sudo(ctx, api) let attachment = yield resolve.attachment(api, ctx.app, ctx.args.addon) .catch(function (err) { if (err.statusCode !== 404) throw err }) let webUrl if (attachment) { webUrl = attachment.web_url } else { let addon = yield resolve.addon(api, ctx.app, ctx.args.addon) webUrl = addon.web_url } if (ctx.flags['show-url']) { cli.log(webUrl) } else { yield open(webUrl) } } module.exports = { topic: 'addons', command: 'open', wantsApp: true, needsAuth: true, args: [{ name: 'addon' }], flags: [{ name: 'show-url', description: 'show URL, do not open browser' }], run: cli.command({ preauth: true }, co.wrap(run)), description: "open an add-on's dashboard in your browser" }