joyent-portal/bundle/src/index.js

107 lines
2.1 KiB
JavaScript

'use strict';
const Brule = require('brule');
const Hapi = require('hapi');
const Rollover = require('rollover');
const Brok = require('brok');
const { homedir } = require('os');
const { join } = require('path');
const Sso = require('hapi-triton-auth');
const Nav = require('joyent-navigation');
const Api = require('cloudapi-gql');
const {
PORT = 3069,
COOKIE_PASSWORD,
COOKIE_DOMAIN,
SDC_KEY_PATH,
SDC_ACCOUNT,
SDC_KEY_ID,
SDC_URL,
BASE_URL = `http://0.0.0.0:${PORT}`,
ROLLBAR_SERVER_TOKEN,
NODE_ENV = 'development',
CONSOLE = 'my-joy-beta'
} = process.env;
const Ui = require(CONSOLE);
const server = Hapi.server({
compression: {
minBytes: 1
},
debug: {
request: ['error']
},
port: PORT,
host: '127.0.0.1'
});
async function main() {
await server.register([
{
plugin: Brok
},
{
plugin: Rollover,
options: {
rollbar: {
accessToken: ROLLBAR_SERVER_TOKEN,
reportLevel: 'error'
}
}
},
{
plugin: Brule,
options: {
auth: false
}
},
{
plugin: Sso,
options: {
ssoUrl: 'https://sso.joyent.com',
baseUrl: BASE_URL,
apiBaseUrl: SDC_URL,
keyId: '/' + SDC_ACCOUNT + '/keys/' + SDC_KEY_ID,
keyPath: SDC_KEY_PATH || join(homedir(), '.ssh/id_rsa'),
permissions: { cloudapi: ['/my/*'] },
isDev: NODE_ENV === 'development',
cookie: {
isHttpOnly: true,
isSecure: false,
password: COOKIE_PASSWORD,
ttl: 1000 * 60 * 60, // 1 hour
domain: COOKIE_DOMAIN
}
}
},
{
plugin: Nav
},
{
plugin: Ui
},
{
plugin: Api,
options: {
keyId: '/' + SDC_ACCOUNT + '/keys/' + SDC_KEY_ID,
keyPath: SDC_KEY_PATH || join(homedir(), '.ssh/id_rsa'),
apiBaseUrl: SDC_URL
}
}
]);
server.auth.default('sso');
process.on('unhandledRejection', err => {
server.log(['error'], err);
});
await server.start();
console.log(`server started at http://localhost:${server.info.port}`);
}
main();