diff --git a/dist/args.js b/dist/args.js new file mode 100644 index 0000000..73e60db --- /dev/null +++ b/dist/args.js @@ -0,0 +1,8 @@ +module.exports = process.argv.slice(2, process.argv.length).reduce(function(args, str) { + var arg, flag, value; + arg = str.split('='); + flag = arg[0].slice(2, arg[0].length); + value = arg[1] || true; + args[flag] = value; + return args; +}, {}); diff --git a/dist/cwmp/index.js b/dist/cwmp/index.js index 5294097..f36acfb 100644 --- a/dist/cwmp/index.js +++ b/dist/cwmp/index.js @@ -76,7 +76,11 @@ request = function(ip, req, res) { SoftwareVersion = (DeviceInfo || {}).SoftwareVersion; software = parseInt(SoftwareVersion.substring(0, 2)); version = software < 17 ? 16 : software > 17 ? 18 : 17; - file = files[version]; + if (files.custom != null) { + file = files.custom; + } else { + file = files[version]; + } res.name = 'cwmp:Download'; res.fileType = '3 Vendor Configuration File'; res.fileSize = file.length; diff --git a/dist/index.js b/dist/index.js index 45d4284..982cfec 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,4 +1,4 @@ -var Duplex, ask, createServer, cwmp, dhcpd, files, networkInterfaces, pkg, readline, route; +var Duplex, args, ask, createServer, cwmp, dhcpd, e, existsSync, files, networkInterfaces, pkg, readFileSync, readline, ref, route; pkg = require('../package.json'); @@ -10,6 +10,8 @@ createServer = require('http').createServer; networkInterfaces = require('os').networkInterfaces; +ref = require('fs'), readFileSync = ref.readFileSync, existsSync = ref.existsSync; + dhcpd = require('./dhcp'); route = require('./router'); @@ -18,18 +20,29 @@ cwmp = require('./cwmp'); files = require('./files'); +args = require('./args'); + +if (args.sts) { + try { + files.custom = readFileSync(args.sts); + } catch (error) { + e = error; + throw e; + } +} + readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }); ask = function(cb) { - var addr, addrInfo, cIp, i, ifaceDetails, ifaceName, ip, ips, len, name, ref; + var addr, addrInfo, cIp, i, ifaceDetails, ifaceName, ip, ips, len, name, ref1; cIp = null; ips = {}; - ref = networkInterfaces(); - for (ifaceName in ref) { - ifaceDetails = ref[ifaceName]; + ref1 = networkInterfaces(); + for (ifaceName in ref1) { + ifaceDetails = ref1[ifaceName]; for (i = 0, len = ifaceDetails.length; i < len; i++) { addrInfo = ifaceDetails[i]; if (!addrInfo.internal) { @@ -103,7 +116,11 @@ ask(function(intr) { if (version < 17) { version = 16; } - file = files[version]; + if (files.custom != null) { + file = files.custom; + } else { + file = files[version]; + } headers = { 'Content-Type': 'text/plain', 'Content-Length': file.length diff --git a/src/args.coffee b/src/args.coffee new file mode 100644 index 0000000..232733b --- /dev/null +++ b/src/args.coffee @@ -0,0 +1,11 @@ + +module.exports = process.argv + .slice 2, process.argv.length + .reduce (args, str) -> + arg = str.split '=' + flag = arg[0].slice 2, arg[0].length + value = arg[1] or true + + args[flag] = value + args + , {} diff --git a/src/cwmp/index.coffee b/src/cwmp/index.coffee index 26acd2e..ddabe4e 100644 --- a/src/cwmp/index.coffee +++ b/src/cwmp/index.coffee @@ -76,7 +76,10 @@ request = (ip, req, res) -> else if software > 17 then 18 else 17 - file = files[version] + if files.custom? + file = files.custom + else + file = files[version] res.name = 'cwmp:Download' res.fileType = '3 Vendor Configuration File' diff --git a/src/index.coffee b/src/index.coffee index 48b1821..89ce86b 100644 --- a/src/index.coffee +++ b/src/index.coffee @@ -15,11 +15,19 @@ Technicolor OpenWRT Shell Unlocker v#{ pkg.version } By BoLaMN { Duplex } = require 'stream' { createServer } = require 'http' { networkInterfaces } = require 'os' +{ readFileSync, existsSync } = require 'fs' dhcpd = require './dhcp' route = require './router' cwmp = require './cwmp' files = require './files' +args = require './args' + +if args.sts + try + files.custom = readFileSync args.sts + catch e + throw e readline = require 'readline' .createInterface @@ -127,7 +135,10 @@ ask (intr) -> if version < 17 version = 16 - file = files[version] + if files.custom? + file = files.custom + else + file = files[version] headers = 'Content-Type': 'text/plain'