|
|
|
/*
|
|
|
|
* GreeterConfig.js
|
|
|
|
*
|
|
|
|
* Copyright © 2017 Antergos Developers <dev@antergos.com>
|
|
|
|
*
|
|
|
|
* This file is part of lightdm-webkit2-greeter.
|
|
|
|
*
|
|
|
|
* lightdm-webkit2-greeter is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* lightdm-webkit2-greeter is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* The following additional terms are in effect as per Section 7 of the license:
|
|
|
|
*
|
|
|
|
* The preservation of all legal notices and author attributions in
|
|
|
|
* the material or in the Appropriate Legal Notices displayed
|
|
|
|
* by works containing it is required.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with lightdm-webkit2-greeter; If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
let _branding = null,
|
|
|
|
_greeter = null;
|
|
|
|
|
|
|
|
|
|
|
|
function set_values( defaults, target_obj, method ) {
|
|
|
|
let keys = Object.keys(defaults);
|
|
|
|
|
|
|
|
keys.forEach( prop => {
|
|
|
|
try {
|
|
|
|
target_obj[prop] = window;
|
|
|
|
} catch(err) {
|
|
|
|
target_obj[prop] = defaults[prop];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Provides greeter themes with a way to access values from the greeter's config
|
|
|
|
* file located at `/etc/lightdm/lightdm-webkit2-greeter.conf`. The greeter will
|
|
|
|
* create an instance of this class when it starts. The instance can be accessed
|
|
|
|
* with the global variable: [`greeter_config`](#dl-window-greeter_config).
|
|
|
|
*
|
|
|
|
* @memberOf LightDM
|
|
|
|
*/
|
|
|
|
class GreeterConfig {
|
|
|
|
/**
|
|
|
|
* Holds keys/values from the `branding` section of the config file.
|
|
|
|
*
|
|
|
|
* @type {object} branding
|
|
|
|
* @prop {string} background_images Path to directory that contains background images
|
|
|
|
* for use in greeter themes.
|
|
|
|
* @prop {string} logo Path to distro logo image for use in greeter themes.
|
|
|
|
* @prop {string} user_image Default user image/avatar. This is used by greeter themes
|
|
|
|
* for users that have not configured a `.face` image.
|
|
|
|
* @readonly
|
|
|
|
*/
|
|
|
|
get branding() {
|
|
|
|
if ( null === _branding ) {
|
|
|
|
let theme_dir = '/usr/share/lightdm-webkit/themes/antergos',
|
|
|
|
props = {
|
|
|
|
'background_images': '/usr/share/backgrounds',
|
|
|
|
'logo': `${theme_dir}/img/antergos-logo-user.png`,
|
|
|
|
'user_image': `${theme_dir}/img/antergos.png`
|
|
|
|
};
|
|
|
|
|
|
|
|
_branding = {};
|
|
|
|
|
|
|
|
set_values( props, _branding, this.get_str );
|
|
|
|
}
|
|
|
|
|
|
|
|
return _branding;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Holds keys/values from the `greeter` section of the config file.
|
|
|
|
*
|
|
|
|
* @type {object} greeter
|
|
|
|
* @prop {boolean} debug_mode Greeter theme debug mode.
|
|
|
|
* @prop {boolean} detect_theme_errors Provide an option to load a fallback theme when theme
|
|
|
|
* errors are detected.
|
|
|
|
* @prop {number} screensaver_timeout Blank the screen after this many seconds of inactivity.
|
|
|
|
* @prop {boolean} secure_mode Don't allow themes to make remote http requests.
|
|
|
|
* @prop {string} time_format A moment.js format string to be used by the greeter to
|
|
|
|
* generate localized time for display.
|
|
|
|
* @prop {string} time_language Language to use when displaying the time or `auto`
|
|
|
|
* to use the system's language.
|
|
|
|
* @prop {string} webkit_theme The name of the theme to be used by the greeter.
|
|
|
|
* @readonly
|
|
|
|
*/
|
|
|
|
get greeter() {
|
|
|
|
if ( null === _greeter ) {
|
|
|
|
let bools = {'debug_mode': false, 'secure_mode': true, 'detect_theme_errors': true},
|
|
|
|
strings = {'time_format': 'LT', 'time_language': 'auto', 'webkit_theme': 'antergos'},
|
|
|
|
numbers = {'screensaver_timeout': 300};
|
|
|
|
|
|
|
|
_greeter = {};
|
|
|
|
|
|
|
|
set_values( bools, _greeter, this.get_bool );
|
|
|
|
set_values( strings, _greeter, this.get_str );
|
|
|
|
set_values( numbers, _greeter, this.get_num );
|
|
|
|
}
|
|
|
|
|
|
|
|
return _greeter;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ***Deprecated!*** Access config sections directly as properties of this object instead.
|
|
|
|
*
|
|
|
|
* @deprecated
|
|
|
|
*
|
|
|
|
* @arg {string} config_section
|
|
|
|
* @arg {string} key
|
|
|
|
*
|
|
|
|
* @returns {boolean} Config value for `key`.
|
|
|
|
*/
|
|
|
|
get_bool( config_section, key ) {
|
|
|
|
return __GreeterConfig.get_bool( config_section, key );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ***Deprecated!*** Access config sections directly as properties of this object instead.
|
|
|
|
*
|
|
|
|
* @deprecated
|
|
|
|
*
|
|
|
|
* @arg {string} config_section
|
|
|
|
* @arg {string} key
|
|
|
|
*
|
|
|
|
* @returns {number} Config value for `key`.
|
|
|
|
*/
|
|
|
|
get_num( config_section, key ) {
|
|
|
|
return __GreeterConfig.get_num( config_section, key );
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ***Deprecated!*** Access config sections directly as properties of this object instead.
|
|
|
|
*
|
|
|
|
* @deprecated
|
|
|
|
*
|
|
|
|
* @arg {string} config_section
|
|
|
|
* @arg {string} key
|
|
|
|
*
|
|
|
|
* @returns {string} Config value for `key`.
|
|
|
|
*/
|
|
|
|
get_str( config_section, key ) {
|
|
|
|
return __GreeterConfig.get_str( config_section, key );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const __greeter_config = new Promise( (resolve, reject) => {
|
|
|
|
let waiting = 0;
|
|
|
|
|
|
|
|
const check_window_prop = () => {
|
|
|
|
if ( waiting > 15000 ) {
|
|
|
|
return reject( 'Timeout Reached!');
|
|
|
|
}
|
|
|
|
|
|
|
|
setTimeout( () => {
|
|
|
|
waiting += 1;
|
|
|
|
|
|
|
|
if ( '__GreeterConfig' in window ) {
|
|
|
|
return resolve( (() => new GreeterConfig())() );
|
|
|
|
}
|
|
|
|
|
|
|
|
check_window_prop();
|
|
|
|
}, 0 );
|
|
|
|
};
|
|
|
|
|
|
|
|
check_window_prop();
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|