| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| var _ = require('lodash'); |
| var debug = require('debug')('component:settings'); |
| var mercury = require('mercury'); |
| var h = mercury.h; |
| var xtend = require('xtend'); |
| |
| var setting = require('./setting'); |
| |
| // Temporary method of dealing with CSS |
| var fs = require('fs'); |
| var insert = require('insert-css'); |
| var css = fs.readFileSync(__dirname + '/index.css'); |
| |
| module.exports = create; |
| module.exports.render = render; |
| |
| var defaults = { |
| identityd: 'identity/dev.v.io/u/google', |
| identitydBlessingUrl: 'https://dev.v.io/auth/blessing-root', |
| namespaceRoot: '/(dev.v.io/role/vprod/service/mounttabled)@ns.dev.v.io:8101', |
| proxy: 'proxy', |
| logLevel: '0', |
| logModule: '' |
| }; |
| |
| function render(settings) { |
| debug('rendering', settings); |
| insert(css); |
| |
| return h('div', [ |
| h('h3', 'Vanadium NaCl Plugin Options'), |
| 'These settings are used to configure the Vanadium NaCl plugin.', |
| 'You should use the defaults unless you know what you are doing.', |
| h('br'), |
| h('br'), |
| 'NOTE: You must reload the plugin (see button below) ' + |
| 'for any changes to take effect.', |
| h('br'), |
| h('br'), |
| h('form.settings', _.map(settings, setting.render)), |
| h('br'), |
| h('br'), |
| h('a', { |
| href: '#', |
| 'ev-click': mercury.clickEvent(reloadExtension) |
| }, 'Reload plugin'), |
| h('br'), |
| h('br'), |
| 'Manage your identities here: chrome://identity-internals/' |
| ]); |
| } |
| |
| function create() { |
| debug('initializing'); |
| |
| var settingsObj = defaults; |
| |
| var state = mercury.varhash({}); |
| |
| if (process.env.EXTENSION_SETTINGS) { |
| // Load the settings from the environment variable. |
| var envSettings; |
| try { |
| envSettings = JSON.parse(process.env.EXTENSION_SETTINGS); |
| } catch(e) { |
| throw new Error('Could not parse settings from environment: ', e); |
| } |
| settingsObj = xtend(settingsObj, envSettings); |
| } |
| |
| hydrateState(state, settingsObj); |
| |
| return { |
| state: state |
| }; |
| } |
| |
| // Hydrate the state varhash with settings from obj. |
| function hydrateState(state, obj) { |
| _.forEach(obj, function(value, key) { |
| state.put(key, setting(key, value, defaults[key]).state); |
| }); |
| } |
| |
| // Reload the extension. |
| function reloadExtension() { |
| chrome.runtime.getBackgroundPage(function(bpWindow) { |
| // bpWindow is the 'window' object of the background page. |
| bpWindow.bp.restartNaclPlugin(); |
| }); |
| } |