diff --git a/app.js b/app.js index 05b7432fda8d3ba7229af67043d5ec1b6dde4443..cefda175dc9efece25b3bbc13f7cb0e1d547f424 100644 --- a/app.js +++ b/app.js @@ -248,26 +248,51 @@ var firmwarewizard = function() { } } - function parseFilePath(device, match, path, href, branch) { + function parseFilePath(match, basePath, filename, branch) { + var location = basePath + filename; + + var devices = vendormodels_reverse[match]; + if (!(devices instanceof Array) || devices.length != 1) { + console.log("Error: vendormodels_reverse did not contain", match); + return; + } + var device = devices[0]; + if (device.model == '--ignore--' || device.revision == '--ignore--') { return; } - var location = path + href; - var type = findType(href); - var version = findVersion(href); - var region = findRegion(href); - var revision = device.revision; - var size = findSize(href); + var strippedFilename = filename; + strippedFilename = strippedFilename.replace(config.community_prefix, '-'); - if (revision.length === 0) { - revision = findRevision(href.replace(match, '')); - } + var version = findVersion(strippedFilename); + strippedFilename = strippedFilename.replace(version, ''); + + strippedFilename = strippedFilename.replace(match, ''); + + var revision = device.revision || findRevision(strippedFilename); + strippedFilename = strippedFilename.replace(revision, ''); + + var region = findRegion(strippedFilename); + strippedFilename = strippedFilename.replace(region, ''); if (region.length) { revision += '-' + region; } + var size = findSize(strippedFilename); + strippedFilename = strippedFilename.replace(size, ''); + + var type = findType(strippedFilename); + strippedFilename = strippedFilename.replace(type, ''); + + strippedFilename = strippedFilename.replace(/.(bin|img.gz|img|tar|vdi|vmdk)/, ''); + strippedFilename = strippedFilename.replace(/-/g, ''); + + if (strippedFilename !== '') { + console.log("Match for file", filename, "was not exhaustive."); + } + // collect branch versions app.currentVersions[branch] = version; @@ -701,8 +726,6 @@ var firmwarewizard = function() { // parse the contents of the given directories function loadDirectories() { - var vendormodels_reverse = buildVendorModelsReverse(); - // sort by length to get the longest match var matches = Object.keys(vendormodels_reverse).sort(function(a, b) { if (a.length < b.length) return 1; @@ -725,10 +748,7 @@ var firmwarewizard = function() { } var match = reMatch.exec(href); if (match) { - var devices = vendormodels_reverse[match[1]]; - for (var i in devices) { - parseFilePath(devices[i], match[1], basePath, href, branch); - } + parseFilePath(match[1], basePath, href, branch); } else if (config.listMissingImages) { console.log("No rule for firmware image:", href); } @@ -761,6 +781,7 @@ var firmwarewizard = function() { } } + var vendormodels_reverse = buildVendorModelsReverse(); loadDirectories(); // set link to firmware source directory diff --git a/config_template.js b/config_template.js index 866895977f29e6e759c8497571a926a9e7cb6fa2..444dccf9d7c31ccbfc82c9adbf3a9a400e46d429 100644 --- a/config_template.js +++ b/config_template.js @@ -18,6 +18,8 @@ var config = { listMissingImages: false, // see devices.js for different vendor model maps vendormodels: vendormodels, + // community prefix of the firmware images + community_prefix: 'gluon-ffda-', // relative image paths and branch directories: { // some demo sources diff --git a/devices.js b/devices.js index b1d679bf5077cc49e4f8d021a79c5c2b8db56898..e6a1c1010e84d2c71f47cb86b679beb8faf967b5 100644 --- a/devices.js +++ b/devices.js @@ -1,56 +1,58 @@ var vendormodels = { "8devices": { - "Carambola Board 2": "carambola2" + "Carambola Board 2": "8devices-carambola2-board" }, "Alfa": { - "AP121": "ap121", - "AP121U": "ap121u", - "Hornet-UB": "hornet-ub", - "Tube2H": "tube2h", - "N2 / N5": "n2-n5" + "AP121": {"alfa-ap121": "", "alfa-network-ap121": ""}, + "AP121U": {"alfa-ap121u": "", "alfa-network-ap121u": ""}, + "Hornet-UB": {"alfa-hornet-ub": "", "alfa-network-hornet-ub": ""}, + "Tube2H": {"alfa-tube2h": "", "alfa-network-tube2h": ""}, + "N2 / N5": {"alfa-n2-n5": "", "alfa-network-n2-n5": ""}, }, "Allnet": { - "ALL0315N": "all0315n" + "ALL0315N": "allnet-all0315n" }, "Buffalo": { - "WZR-600DHP": {"wzr-600dhp": "v2"}, - "WZR-HP-AG300H": "wzr-hp-ag300h", - "WZR-HP-G300H": "wzr-hp-g300h", - "WZR-HP-G300NH": {"wzr-hp-g300nh": "v1", "wzr-hp-g300nh2": "v2"}, - "WZR-HP-G450H": "wzr-hp-g450h", + "WZR-600DHP": {"buffalo-wzr-600dhp": "v2"}, + "WZR-HP-AG300H": {"buffalo-wzr-hp-ag300h": "", "buffalo-wzr-hp-ag300h-wzr-600dhp": ""}, + "WZR-HP-G300H": {"buffalo-wzr-hp-g300h": ""}, + "WZR-HP-G300NH": {"buffalo-wzr-hp-g300nh": "v1", "buffalo-wzr-hp-g300nh2": "v2"}, + "WZR-HP-G450H": {"buffalo-wzr-hp-g450h": ""}, }, "D-Link": { - "DIR-505": "dir-505", - "DIR-615": {"dir-615-c1": "c1/c2", "dir-615-rev-c1": "c1/c2", "dir-615-d": "d1-d4", "dir-615-e1": "e1/e2", "dir-615-e4": "e3-e5", "dir-615-h1": "h1/h2"}, - "DIR-825": "dir-825", - "DIR-860L": "dir-860l" + "DIR-505": "d-link-dir-505-rev", + "DIR-615": {"d-link-dir-615-c1": "c1/c2", "d-link-dir-615-rev-c1": "c1/c2", + "d-link-dir-615-d": "d1-d4", "d-link-dir-615-e1": "e1/e2", + "d-link-dir-615-e4": "e3-e5", "d-link-dir-615-h1": "h1/h2"}, + "DIR-825": "d-link-dir-825-rev", + "DIR-860L": "d-link-dir-860l" }, "GL Innovations": { - "AR150": "ar150", - "iNet 6408a": "inet-6408a", - "iNet 6416a": "inet-6416a" + "AR150": "gl-ar150", + "iNet 6408a": "gl-inet-6408a", + "iNet 6416a": "gl-inet-6416a" }, "LeMaker": { - "Banana Pi": "banana-pi", - "Banana Pro": "banana-pro", + "Banana Pi": "lemaker-banana-pi", + "Banana Pro": "lemaker-banana-pro", "Lamobo": "lamobo" }, "Linksys": { - "WRT160NL": "wrt160nl" + "WRT160NL": "linksys-wrt160nl" }, "Meraki": { - "MR12": "mr12", - "MR16": "mr16", - "MR62": "mr62", - "MR66": "mr66" + "MR12": "meraki-mr12", + "MR16": "meraki-mr16", + "MR62": "meraki-mr62", + "MR66": "meraki-mr66" }, "Mikrotik": { @@ -59,27 +61,27 @@ var vendormodels = { }, "Netgear": { - "WNR2200": "wnr2200", - "WNDR3700": {"wndr3700": "v1", "wndr3700v2": "v2", "wndr3700v3": "v3", "wndr3700v4": "v4"}, - "WNDR3800": "wndr3800", - "WNDR4300": "wndr4300", - "WNDRMAC": {"wndrmac": "v1", "wndrmacv2": "v2"}, + "WNR2200": "netgear-wnr2200", + "WNDR3700": {"netgear-wndr3700": "v1", "netgear-wndr3700v2": "v2", "netgear-wndr3700v3": "v3", "netgear-wndr3700v4": "v4"}, + "WNDR3800": "netgear-wndr3800", + "WNDR4300": "netgear-wndr4300", + "WNDRMAC": {"netgear-wndrmac": "v1", "netgear-wndrmacv2": "v2"}, }, "Onion": { - "Omega": "omega" + "Omega": "onion-omega" }, "Open-Mesh": { - "MR1750": {"mr1750": "v1", "mr1750v2": "v2"}, - "MR600": {"mr600": "v1", "mr600v2": "v2"}, - "MR900": {"mr900": "v1", "mr900v2": "v2"}, - "OM2P HS": {"om2p-hs": "v1", "om2p-hsv3": "v3"}, - "OM2P LC": "om2p-lc", - "OM2P": {"openmesh-om2p": "v1", "om2pv2": "v2"}, + "MR1750": {"openmesh-mr1750": "v1", "openmesh-mr1750v2": "v2"}, + "MR600": {"openmesh-mr600": "v1", "openmesh-mr600v2": "v2"}, + "MR900": {"openmesh-mr900": "v1", "openmesh-mr900v2": "v2"}, + "OM2P HS": {"openmesh-om2p-hs": "v1", "openmesh-om2p-hsv3": "v3"}, + "OM2P LC": "openmesh-om2p-lc", + "OM2P": {"openmesh-om2p": "v1", "openmesh-om2pv2": "v2"}, "OM5P-AC": {"openmesh-om5p-ac": "v1", "openmesh-om5p-acv2": "v2"}, - "OM5P-AN": "om5p-an", - "OM5P": "om5p" + "OM5P-AN": "openmesh-om5p-an", + "OM5P": "openmesh-om5p" }, "PC Engines": { @@ -92,63 +94,68 @@ var vendormodels = { }, "TP-Link": { - "Archer C5": {"archer-c5": "v1"}, - "Archer C7": "archer-c7", - "CPE 210": {"cpe210": "", "cpe210-220": ""}, - "CPE 220": {"cpe220": "", "cpe210-220": ""}, - "CPE 510": {"cpe510": "", "cpe510-520": ""}, - "CPE 520": {"cpe520": "", "cpe510-520": ""}, - "WBS 210": "wbs210", - "WBS 510": "wbs510", - "TL-MR13U": "tl-mr13u", - "TL-MR3020": "tl-mr3020", - "TL-MR3040": "tl-mr3040", - "TL-MR3220": "tl-mr3220", - "TL-MR3420": "tl-mr3420", - "TL-WA701N-ND": {"tl-wa701n": "", "tl-wa701nd": ""}, - "TL-WA750RE": "tl-wa750re", - "TL-WA7510N": "tl-wa7510n", - "TL-WA801N-ND": {"tl-wa801n": "", "wa801nd": ""}, - "TL-WA830RE": "tl-wa830re", - "TL-WA850RE": "tl-wa850re", - "TL-WA860RE": "tl-wa860re", - "TL-WA901N-ND": {"tl-wa901n": "", "tl-wa901nd": ""}, - "TL-WDR3500": "tl-wdr3500", - "TL-WDR3600": "tl-wdr3600", - "TL-WDR4300": "tl-wdr4300", - "TL-WDR4900": "tl-wdr4900", - "TL-WR1043N-ND": {"tl-wr1043n": "", "tl-wr1043nd": ""}, - "TL-WR2543N-ND": {"tl-wr2543": "", "tl-wr2543n": ""}, - "TL-WR703N": "tl-wr703n", - "TL-WR710N": "tl-wr710n", - "TL-WR740N-ND": "tl-wr740n", - "TL-WR741N-ND": "tl-wr741n", - "TL-WR743N-ND": "tl-wr743n", - "TL-WR841N-ND": {"tl-wr841n": "", "tl-wr841nd": ""}, - "TL-WR842N-ND": "tl-wr842n", - "TL-WR843N-ND": "tl-wr843n", - "TL-WR940N-ND": {"tl-wr940n": "", "tl-wr941nd-v4": "v1", "tl-wr941nd-v5": "v2", "tl-wr941nd-v6": "v3"}, - "TL-WR941N-ND": {"wr941n-nd": "", "tl-wr941nd": "", "tl-wr941nd-v4": "v4", "tl-wr941nd-v5": "v5", "tl-wr941nd-v6": "v6"} + "Archer C5": {"tp-link-archer-c5": "v1"}, + "Archer C7": "tp-link-archer-c7", + "CPE 210": {"tp-link-cpe210": "", "tp-link-cpe210-220": ""}, + "CPE 220": {"tp-link-cpe220": "", "tp-link-cpe210-220": ""}, + "CPE 510": {"tp-link-cpe510": "", "tp-link-cpe510-520": ""}, + "CPE 520": {"tp-link-cpe520": "", "tp-link-cpe510-520": ""}, + "WBS 210": "tp-link-wbs210", + "WBS 510": "tp-link-wbs510", + "TL-MR13U": "tp-link-tl-mr13u", + "TL-MR3020": "tp-link-tl-mr3020", + "TL-MR3040": "tp-link-tl-mr3040", + "TL-MR3220": "tp-link-tl-mr3220", + "TL-MR3420": "tp-link-tl-mr3420", + "TL-WA701N-ND": {"tp-link-tl-wa701nd": "", "tp-link-tl-wa701n-nd": ""}, + "TL-WA750RE": "tp-link-tl-wa750re", + "TL-WA7510N": "tp-link-tl-wa7510n", + "TL-WA801N-ND": {"tp-link-tl-wa801n": "", "tp-link-tl-wa801n-nd": ""}, + "TL-WA830RE": "tp-link-tl-wa830re", + "TL-WA850RE": "tp-link-tl-wa850re", + "TL-WA860RE": "tp-link-tl-wa860re", + "TL-WA901N-ND": {"tp-link-tl-wa901nd": "", "tp-link-tl-wa901n-nd": ""}, + "TL-WDR3500": "tp-link-tl-wdr3500", + "TL-WDR3600": "tp-link-tl-wdr3600", + "TL-WDR4300": "tp-link-tl-wdr4300", + "TL-WDR4900": "tp-link-tl-wdr4900", + "TL-WR1043N-ND": {"tp-link-tl-wr1043n-nd": ""}, + "TL-WR2543N-ND": {"tp-link-tl-wr2543n-nd": ""}, + "TL-WR703N": "tp-link-tl-wr703n", + "TL-WR710N": "tp-link-tl-wr710n", + "TL-WR740N-ND": "tp-link-tl-wr740n-nd", + "TL-WR741N-ND": "tp-link-tl-wr741n-nd", + "TL-WR743N-ND": "tp-link-tl-wr743n-nd", + "TL-WR841N-ND": {"tp-link-tl-wr841n-nd": "", "tp-link-tl-wr841nd": ""}, + "TL-WR842N-ND": {"tp-link-tl-wr842n-nd": ""}, + "TL-WR843N-ND": {"tp-link-tl-wr843n-nd": ""}, + "TL-WR940N-ND": {"tp-link-tl-wr940n": "", "tp-link-tl-wr940n-nd": "", "tp-link-tl-wr941nd-v4": "v1", "tp-link-tl-wr941nd-v5": "v2", "tp-link-tl-wr941nd-v6": "v3"}, + "TL-WR941N-ND": {"tp-link-tl-wr941nd": "", "tp-link-tl-wr941n-nd": "", "tp-link-tl-wr941nd-v4": "v4", "tp-link-tl-wr941nd-v5": "v5", "tp-link-tl-wr941nd-v6": "v6"} }, "Ubiquiti": { "AirGateway": {"ubnt-air-gateway": "", "ubiquiti-airgateway": ""}, "AirRouter": {"ubnt-air-router": "", "ubiquiti-airrouter": ""}, - "Bullet": {"bullet-m2": "M2", "bullet-m5": "M5", "bullet-m": "--ignore--"}, - "Litestation SR71": "ls-sr71", - "NanoStation Loco": {"loco-m-xw": "--ignore--", "loco-m2": "M2 XM", "loco-m5": "M5 XM", "loco-m2-xw": "M2 XW", "loco-m5-xw": "M5 XW"}, - "NanoStation": {"nanostation-m": "--ignore--", "nano-m": "--ignore--", "nanostation-m-xw": "--ignore--", "nano-m-xw": "--ignore--", - "nanostation-m2": "M2 XM", "nano-m2": "M2 XM", "nanostation-m2-xw": "M2 XW", "nano-m2-xw": "M2 XW", - "nanostation-m5": "M5 XM", "nano-m5": "M5 XM", "nanostation-m5-xw": "M5 XW", "nano-m5-xw": "M5 XW"}, - "PicoStation": "picostation", - "Rocket": {"rocket-m-xw": "M XW", "rocket": ""}, - "UniFi AP": "unifi", - "UniFi AP LR": "unifi-ap-lr", - "UniFi AP Pro": "unifi-ap-pro", - "UniFi AP AC Pro": "unifi-ac-pro", - "UniFi AP AC Lite": "unifi-ac-lite", - "UniFi AP Outdoor": {"unifi-outdoor": "", "unifiap-outdoor": ""}, - "UniFi AP Outdoor+": {"unifi-outdoor-plus": "", "ubiquiti-unifiap-outdoor\\\+": "", "ubiquiti-unifiap-outdoor%2B": ""} + "Bullet": {"ubiquiti-bullet-m2": "M2", "ubiquiti-bullet-m5": "M5", "bullet-m": "--ignore--"}, + "Litestation SR71": "ubiquiti-ls-sr71", + "NanoStation Loco": {"ubiquiti-loco-m-xw": "--ignore--", + "ubiquiti-nanostation-loco-m2": "M2 XM", "ubiquiti-nanostation-loco-m2-xw": "M2 XW", + "ubiquiti-nanostation-loco-m5": "M5 XM", "ubiquiti-nanostation-loco-m5-xw": "M5 XW"}, + "NanoStation": {"ubiquiti-nanostation-m": "--ignore--", "ubiquiti-nano-m": "--ignore--", "ubiquiti-nanostation-m-xw": "--ignore--", "ubiquiti-nano-m-xw": "--ignore--", + "ubiquiti-nanostation-m2": "M2 XM", "ubiquiti-nano-m2": "M2 XM", "ubiquiti-nanostation-m2-xw": "M2 XW", "ubiquiti-nano-m2-xw": "M2 XW", + "ubiquiti-nanostation-m5": "M5 XM", "ubiquiti-nano-m5": "M5 XM", "ubiquiti-nanostation-m5-xw": "M5 XW", "ubiquiti-nano-m5-xw": "M5 XW"}, + "PicoStation": {"ubiquiti-picostation-m": "M", + "ubiquiti-picostation-m2": "M2"}, + "Rocket": {"ubiquiti-rocket-m": "M", "ubiquiti-rocket-m-xw": "M XW", + "ubiquiti-rocket-m2": "M2", "ubiquiti-rocket-m2-xw": "M2 XW", + "ubiquiti-rocket-m5": "M5", "ubiquiti-rocket-m5-xw": "M5 XW"}, + "UniFi AP": {"ubiquiti-unifi": "--ignore--", "ubiquiti-unifi-ap": ""}, + "UniFi AP LR": "ubiquiti-unifi-ap-lr", + "UniFi AP Pro": "ubiquiti-unifi-ap-pro", + "UniFi AP AC Pro": "ubiquiti-unifi-ac-pro", + "UniFi AP AC Lite": "ubiquiti-unifi-ac-lite", + "UniFi AP Outdoor": {"ubiquiti-unifi-outdoor": "", "ubiquiti-unifiap-outdoor": ""}, + "UniFi AP Outdoor+": {"ubiquiti-unifi-outdoor-plus": "", "ubiquiti-unifiap-outdoor\\\+": "", "ubiquiti-unifiap-outdoor%2B": ""} }, "VoCore": { @@ -156,8 +163,8 @@ var vendormodels = { }, "Western Digital": { - "My Net N600": "my-net-n600", - "My Net N750": "my-net-n750" + "My Net N600": {"wd-my-net-n600": ""}, + "My Net N750": {"wd-my-net-n750": ""} }, "x86": {