Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • dailybuild_linux-x64
  • dailybuild_win32
  • sqlite
  • rip_abstraction
  • dailybuild_macos-armv8
  • dd_file_lister_filanem_in_desc_color
  • mode7
  • dd_msg_reader_are_you_there_warning_improvement
  • c23-playing
  • syncterm-1.3
  • syncterm-1.2
  • test-build
  • hide_remote_connection_with_telgate
  • 638-can-t-control-c-during-a-file-search
  • add_body_to_pager_email
  • mingw32-build
  • cryptlib-3.4.7
  • ree/mastermind
  • new_user_dat
  • sbbs320d
  • syncterm-1.6
  • syncterm-1.5
  • syncterm-1.4
  • sbbs320b
  • syncterm-1.3
  • syncterm-1.2
  • syncterm-1.2rc6
  • syncterm-1.2rc5
  • push
  • syncterm-1.2rc4
  • syncterm-1.2rc2
  • syncterm-1.2rc1
  • sbbs319b
  • sbbs318b
  • goodbuild_linux-x64_Sep-01-2020
  • goodbuild_win32_Sep-01-2020
  • goodbuild_linux-x64_Aug-31-2020
  • goodbuild_win32_Aug-31-2020
  • goodbuild_win32_Aug-30-2020
40 results

pages.js

Blame
  • pages.js 6.06 KiB
    require('xjs.js', 'xjs_compile');
    
    function getWebCtrl(dir) {
    	if (!file_exists(dir + 'webctrl.ini')) return false;
    	var f = new File(dir + 'webctrl.ini');
    	if (!f.open('r')) {
    		log('Unable to open ' + dir + 'webctrl.ini');
    		exit();
    	}
    	var ini = f.iniGetAllObjects();
    	f.close();
    	return ini;
    }
    
    function webCtrlTest(ini, filename) {
    	var ret = true;
    	for (var i = 0; i < ini.length; i++) {
    		if (!wildmatch(false, filename, ini[i].name)) continue;
    		if (typeof ini[i].AccessRequirements === 'undefined' ||
    			user.compare_ars(ini[i].AccessRequirements)
    		) {
    			continue;
    		}
    		ret = false;
    		break;
    	}
    	return ret;
    }
    
    function getCtrlLine(file) {
    
        const ret = {
            options: {
                hidden: false,
                no_sidebar: false
            },
            title: file_getname(file)
        };
    
    	const _file = fullpath(file);
    
    	if (_file === undefined) return ret;
    
    	if (_file.indexOf(settings.web_pages) != 0 && _file.indexOf(settings.web_mods_pages) != 0) return ret;
    
        var ctrl = '';
    	const f = new File(file);
    	const ext = file_getext(file).toUpperCase();
    	switch (ext) {
    		case '.JS':
    		case '.SSJS':
    			if (!f.open('r')) return ret;
                while (!f.eof) {
                    var i = f.readln().match(/\/\/(.*?)$/);
                    if (i !== null && i.length > 1) {
                        ctrl = i[1];
                        break;
                    }
                }
    			f.close();
    			break;
    		case '.XJS':
    		case '.HTML':
    			if (!f.open('r')) return ret;
    			while (!f.eof) {
    				var i = f.readln().match(/\<\!\-\-(.*?)\-\-\>/);
    				if (i !== null && i.length > 1) {
    					ctrl = i[1];
    					break;
    				}
    			}
    			f.close();
    			break;
    		default:
    			ctrl = pageName(file_getname(file));
    			break;
    	}
    	ctrl = truncsp(skipsp(ctrl));
    
    	var opts = ctrl.match(/^(.*?)\:/);
    	if (opts === null || opts.length < 2) {
    		opts = [];
    	} else {
    		opts = opts[1].toUpperCase().split('|');
    	}
    
    	var title = ctrl.replace(/^.*\:/, '');
        if (opts.indexOf('HIDDEN') > -1) ret.options.hidden = true;
        if (opts.indexOf('NO_SIDEBAR') > -1) ret.options.no_sidebar = true;
        if (title != '') ret.title = title;
    
        return ret;
    
    }
    
    function getExternalLink(fn) {
    	const p = getPagePath(fn);
    	if (p === null) throw new Error('Invalid page ' + fn + ',,,' + settings.web_mods_pages);
    	const f = new File(p);
    	f.open('r');
    	const c = f.read().split(',');
    	f.close();
    	if (c.length < 2) throw new Error('Invalid page ' + fn + ',,,' + settings.web_mods_pages);
    	return c[0];
    }
    
    function _getPageList(dir) {
    
    	if (!file_isdir(dir)) return [];
    
    	const webctrl = getWebCtrl(dir);
    	const sep = system.platform.search(/^win/i) == 0 ? '\\' : '/';
    
        const pages = directory(dir + '*').reduce(function (a, c) {
    
    		if (file_isdir(c)) {
                const list = _getPageList(c);
                if (Object.keys(list).length) {
    				const t = c.replace(/\\*\/*$/, '').split(sep).slice(-1)[0];
                	a.push({
    					file: t,
    					name: pageName(t),
    					type: 'list',
    					title: t,
    					list: list
    				});
                }
                return a;
            }
    
    		const ext = file_getext(c).toUpperCase();
            if (c.search(/(\.xjs\.ssjs|webctrl\.ini)$/i) >= 0) return a;
            if (['.HTML', '.SSJS', '.XJS', '.TXT', '.LINK'].indexOf(ext) < 0) return a;
    
    		const fn = file_getname(c);
    		if (webctrl && !webCtrlTest(webctrl, fn)) return a;
    		if (ext == '.LINK') {
    			const f = new File(c);
    			if (!f.open('r')) return a;
    			const l = f.readln().split(',');
    			f.close();
    			if (l.length < 2) return a;
    			a.push({
    				file: fn,
    				name: pageName(c),
    				title: l[1],
    				page: fn,
    				type: 'link'
    			});
    		} else {
    			const ctrl = getCtrlLine(c);
    			if (!ctrl.options.hidden) {
    				a.push({
    					file: fn,
    					name: pageName(fn),
    					page: fn,
    					title: ctrl.title,
    					type: 'page',
    				});
    			}
    		}
            return a;
        }, []);
    
    	return pages;
    
    }
    
    function pageName(p) {
    	return p.replace(/^\d*-/, '').replace(/\..*$/, '');
    }
    
    function mergePageLists(stock, mods) {
    	return mods.reduce(function (a, c) {
    		const idx = a.findIndex(function (e) {
    			return e.name == c.name;
    		});
    		if (idx < 0) {
    			a.push(c);
    		} else if (a[idx].type != c.type) {
    			a[idx] = c;
    		} else if (a[idx].type == 'page' || a[idx].type == 'link') {
    			a[idx] = c;
    		} else if (a[idx].type == 'list') {
    			a[idx].list = mergePageLists(a[idx].list, c.list);
    		}
    		return a;
    	}, stock).sort(function (a, b) {
    		if (a.file < b.file) return -1;
    		if (a.file > b.file) return 1;
    		return 0;
    	});
    }
    
    function getPageList() {
    	var stock = _getPageList(settings.web_pages);
    	var mods = _getPageList(settings.web_mods_pages);
    	return mergePageLists(stock, mods);
    }
    
    function getPagePath(page) {
    	var ret = null;
    	if (file_exists(settings.web_mods_pages + page)) {
    		ret = fullpath(settings.web_mods_pages + page);
    		if (ret.indexOf(settings.web_mods_pages) != 0) ret = null;
    	} else if (file_exists(settings.web_pages + page)) {
    		ret = fullpath(settings.web_pages + page);
    		if (ret.indexOf(settings.web_pages) != 0) ret = null;
    	}
    	return ret;
    }
    
    function getPage(page) {
    
    	var ret = '';
    
    	var p = getPagePath(page);
    	if (p === null) return ret;
    
    	var ext = file_getext(p).toUpperCase();
    
    	if (user.alias != settings.guest) {
    		var ctrl = getCtrlLine(p);
    		if (typeof ctrl !== 'undefined' && !ctrl.options.hidden) {
    			setSessionValue(user.number, 'action', ctrl.title);
    		}
    	}
    
    	switch(ext) {
    		case '.SSJS':
    			if (ext === '.SSJS' && p.search(/\.xjs\.ssjs$/i) >= 0) break;
    			js.exec(p, new function () {});
    			break;
    		case '.XJS':
    			js.exec(xjs_compile(p), new function () {});
    			break;
    		case '.HTML':
    			var f = new File(p);
    			f.open('r');
    			if (f.is_open) {
    				ret = f.read();
    				f.close();
    			}
    			break;
    		case '.TXT':
    			var f = new File(p);
    			f.open('r');
    			if (f.is_open) {
    				ret = '<pre>' + f.read() + '</pre>';
    				f.close();
    			}
    			break;
    		default:
    			break;
    	}
    
    	return ret;
    
    }
    
    function writePage(page) {
    	const pp = getPagePath(page);
    	var ini = getWebCtrl(pp.replace(file_getname(page), ''));
    	if ((typeof ini === "boolean" && !ini) || webCtrlTest(ini, page)) {
    		write(getPage(page));
    	} else {
            write('<div class="alert alert-danger"><h3>You do not have access to this page</h3></div>'); // TODOX Translate
        }
    }