@ -33,7 +33,8 @@ moment.locale( window.navigator.languages );
let localized _invalid _date = moment ( 'today' , '!@#' ) ,
time _language = null ,
time _format = null ;
time _format = null ,
allowed _dirs = null ;
@ -44,7 +45,7 @@ let localized_invalid_date = moment('today', '!@#'),
*
* @ memberOf LightDM
* /
const ThemeUtils = {
class ThemeUtils {
/ * *
* Binds ` this ` to class , ` context ` , for all of the class ' s methods .
*
@ -74,7 +75,7 @@ const ThemeUtils = {
}
}
}
} ,
}
/ * *
@ -88,7 +89,51 @@ const ThemeUtils = {
*
* @ returns { String [ ] } List of abs paths for the files and directories found in ` path ` .
* /
dirlist ( path ) { } ,
dirlist ( path ) {
let allowed = true ;
if ( '' === path || ! path instanceof String ) {
console . log ( '[ERROR] theme_utils.dirlist(): path must be a non-empty string!' ) ;
allowed = false ;
} else if ( null !== path . match ( /^[^/].+/ ) ) {
console . log ( '[ERROR] theme_utils.dirlist(): path must not include be absolute!' ) ;
allowed = false ;
}
if ( null !== path . match ( /\/\.+(?=\/)/ ) ) {
// No special directory names allowed (eg ../../)
path = path . replace ( /\/\.+(?=\/)/g , '' ) ;
}
if ( null === allowed _dirs ) {
let user = lightdm . users . pop ( ) ;
allowed _dirs = {
themes _dir : greeter _config . get _str ( user . username , 'lightdm_data_dir' ) ,
backgrounds _dir : greeter _config . get _str ( 'greeter' , 'themes_dir' ) ,
lightdm _data _dir : greeter _config . get _str ( 'branding' , 'background_images' ) ,
tmpdir : '/tmp'
} ;
}
if ( ! Object . keys ( allowed _dirs ) . some ( dir => path . startsWith ( allowed _dirs [ dir ] ) ) ) {
console . log ( ` [ERROR] theme_utils.dirlist(): path is not allowed: ${ path } ` ) ;
allowed = false ;
}
if ( ! allowed ) {
return [ ] ;
}
try {
return _ _ThemeUtils . dirlist ( path ) ;
} catch ( err ) {
console . log ( ` [ERROR] theme_utils.dirlist(): ${ err } ` ) ;
return [ ] ;
}
}
/ * *
* Escape HTML entities in a string .
@ -97,7 +142,9 @@ const ThemeUtils = {
*
* @ returns { String }
* /
esc _html ( text ) { } ,
esc _html ( text ) {
return this . txt2html ( text ) ;
}
/ * *
@ -132,23 +179,29 @@ const ThemeUtils = {
}
return local _time ;
} ,
}
/ * *
* @ deprecated Use { @ link theme _utils . esc _html ( ) } instead .
* /
txt2html ( text ) { } ,
} ;
txt2html ( text ) {
try {
return _ _ThemeUtils . txt2html ( text ) ;
} catch ( err ) {
console . log ( ` [ERROR] theme_utils.dirlist(): ${ err } ` ) ;
return text ;
}
}
}
/ * *
* @ memberOf window
* @ type { LightDM . ThemeUtils }
* /
window . theme _utils = _ _ThemeUtils ;
window . theme _utils . bind _this = ThemeUtils . bind _this ;
window . theme _utils . get _current _localized _time = ThemeUtils . get _current _localized _time ;
window . theme _utils = new ThemeUtils ( ) ;
/ * *
* @ deprecated