UNPKG

3.25 kBJavaScriptView Raw
1"use strict";
2/*!
3 * Simple Node Mobile Portal
4 * Copyright(c) 2012-2017 Faisal(admin@simpleportaljs.com)
5 *
6 * MIT Licensed
7 */
8var fs=require("fs"),util=require("./../util"),url=require("url"),Routerclass=require("./router");var FilterLoader=module.exports=function(b,d){var a=this;if(d){var c={systemfilterdir:d.getServerCorePath("filter")};b=util.extendJSON(c,b)}Routerclass.call(this,b,d);b=b||{};a.routerid=b.routerid||"filterloader";a.filterdir=b.filterdir||"filter";a.systemfilterdir=b.systemfilterdir||__dirname+"/../../server/filter";a.preferencekey="filter";a.filters=[];a.on("load.router",function(e){if(e&&e.filterdir&&e.configuration){a.loadFilters(e,function(){})}});return this};require("util").inherits(FilterLoader,Routerclass);FilterLoader.DEFAULT_PROPS={disabled:false,priority:100};FilterLoader.prototype.initRouter=function(b,d){var a=this;if(a.routers&&Object.keys(a.routers).length!=0){for(var c in a.routers){var b=a.routers[c];if(b.getConfiguration()&&b.getConfiguration("webappuri")){a.getServerInstance().getServer().use(b.getConfiguration("webappuri"),b.filter())}else{a.getServerInstance().getServer().use(b.filter())}}}if(d){d()}};FilterLoader.prototype.loadRouter=function(c,b){var a=this;a.loadFilters({filterdir:a.systemfilterdir},function(){a.loadFilters(c,function(){a.emit("router.loaded");if(b){b()}})})};FilterLoader.prototype.loadFilters=function(b,f){var a=this;var e=b&&b.filterdir?b.filterdir:a.filterdir;a.getLogger().debug(a.routerid+":loadFilters","loading from << "+e);var d;if(b&&b.configuration){d=b.configuration}if(!fs.existsSync(e)){a.getLogger().warn(a.routerid+":loadFilters","no directory found - "+e);if(f){f()}}else{var c=fs.lstatSync(e);if(c.isDirectory()){loadFilters(a,e,false,f,d)}else{if(f){f()}}}};function loadFilterByProps(a,b,d){a.getLogger().debug(a.routerid+":loadFilterByProps",b.name+" << "+b.path);if(!a.routers[b.name]){try{a.routers.__defineGetter__(b.name,function(){return require(b.path)});if(d&&d.webappuri){a.routers[b.name].setConfiguration("webappuri",d.webappuri)}if(d&&d.id){a.routers[b.name].setConfiguration("plugin",d.id)}if(a.getServerInstance()&&typeof a.routers[b.name]=="object"&&typeof a.routers[b.name].init=="function"){a.routers[b.name].init(a.getServerInstance())}else{a.getLogger().error(a.routerid+":loadFilterByProps",b.name+" is not a valid filter or server instance is not assigned")}}catch(c){delete a.routers[b.name];a._routererrors[b.name]={plugin:d?d.id:null,error:c};a.getLogger().error(a.routerid+":loadFilterByProps",c)}}}function loadFilters(h,c,b,j,a){var d=getFilters(h,c,b)||[];var f=d.length;var k=0;if(d&&d.length>0){for(var e in d){var g=d[e];loadFilterByProps(h,g,a);if(f-1==k++){if(j){j(null,d)}}}}else{if(j){j()}}}var getFilters=function(a,c,b){var d=[];b=b||false;if(!fs.existsSync(c)){a.getLogger().warn(a.routerid+":getFilters","no directory found << "+c)}else{fs.readdirSync(c).filter(function(e){return/filter\.js$/.test(e)}).forEach(function(e){if(/filter\.js$/.test(e)){var f=e.substr(0,e.lastIndexOf("."));var h=f;var k=fs.realpathSync(c+"/"+f+".js");d.push({path:k,name:h})}else{stats=fs.lstatSync(c+"/"+e);if(stats.isDirectory()){var j=getFilters(a,c+"/"+e,true);if(j&&j.length>0){for(var g in j){d.push(j[g])}}}}})}return d};
\No newline at end of file