🍉 Sync 2026-09-25 18:00:12

This commit is contained in:
github-actions[bot] committed 2026-09-25 18:00:12 +08:00
1 parent 7c17dda4d0
commit 2ee65a261e
135 files changed
+5726 -7799

No files matched your search

+21 -3
View File
@@ -2,10 +2,10 @@
"simple_icons": "https://github.com/simple-icons/simple-icons/tree/11.15.0",
"macdb": {
"url": "https://github.com/WH-2099/macdb",
"sha256": "dab68f6728825b5e6e894e537ffbc82d2d387eb2ba3d8dd313962dcef8076979"
"sha256": "98c197dd8a59c30b89866de97c1e8833fcb4456c753693c447f7403c5d753eb0"
},
"database": "vendors-451e5311befc.json",
"assignments": 8637,
"database": "vendors-d337209f8c00.json",
"assignments": 8712,
"supplemental_icons": {
"midea": {
"source": "https://commons.wikimedia.org/wiki/File:Midea.svg",
@@ -24,6 +24,12 @@
"sha256": "49693ef6522f58af4e059afe18c1fb3ddc8e6a5b15ac724d6a7493f47d84d849",
"author": "Koman90",
"license": "Public domain simple shape/text logo; trademark retained"
},
"haier": {
"source": "https://commons.wikimedia.org/wiki/File:Haier_logo.svg",
"sha256": "d71f652fdfb405198761e118e5c4b84fa1de76d9696bb1c13b4980c76ecb6be4",
"author": "Haier",
"license": "Public domain simple shape/text logo; trademark retained"
}
},
"aliases": {
@@ -88,6 +94,18 @@
"google": [
"Google, Inc."
],
"haier": [
"Beijing Haier IC Design Co.,Ltd",
"Haier",
"Haier Group Technologies Ltd",
"Haier cloud Health Technology (Qingdao) Co., Ltd",
"QING DAO HAIER TELECOM CO.,LTD.",
"Qingdao Haier Intelligent Home Appliance Technology Co.,Ltd",
"Qingdao Haier Multimedia Limited. ",
"Qingdao Haier Technology Co.,Ltd",
"Qingdao Haier Technology Co.Ltd",
"Qingdao HaierTechnology Co.,Ltd"
],
"honor": [
"Honor Device Co., Ltd."
],
+6
View File
@@ -16,5 +16,11 @@
"sha256": "49693ef6522f58af4e059afe18c1fb3ddc8e6a5b15ac724d6a7493f47d84d849",
"author": "Koman90",
"license": "Public domain simple shape/text logo; trademark retained"
},
"haier": {
"source": "https://commons.wikimedia.org/wiki/File:Haier_logo.svg",
"sha256": "d71f652fdfb405198761e118e5c4b84fa1de76d9696bb1c13b4980c76ecb6be4",
"author": "Haier",
"license": "Public domain simple shape/text logo; trademark retained"
}
}
+11
View File
@@ -30,6 +30,17 @@ class Aliases(unittest.TestCase):
self.assertEqual(self.brand('TCL King Electrical Appliances(Huizhou)Co.,Ltd'), 'tcl')
self.assertEqual(self.brand('Hui Zhou Gaoshengda Technology Co.,LTD'), 'tcl')
def test_haier(self):
for name in ['Qingdao Haier Technology Co.,Ltd',
'Qingdao HaierTechnology Co.,Ltd',
'QING DAO HAIER TELECOM CO.,LTD.', 'Haier']:
self.assertEqual(self.brand(name), 'haier')
self.assertIsNone(self.brand('Unrelated Haier Module Supplier'))
data = json.loads(next((ROOT / 'htdocs/luci-static/resources/oui').glob('vendors-*.json')).read_text())
mac = '34:29:EF:89:41:3C'.replace(':', '')
self.assertEqual(data['vendors'][data['prefixes'][mac[:6]]][0], 'haier')
self.assertEqual(data['vendors'][data['prefixes']['0439CB']][0], 'haier')
def test_vmware(self):
self.assertEqual(self.brand('VMware, Inc.'), 'vmware')
self.assertIsNone(self.brand('VMware Unrelated Devices'))
+14 -2
View File
@@ -26,6 +26,18 @@ function setup(fail = false) {
for (const mac of [null, '', '02:11:22:00:00:00', '01:11:22:00:00:00', 'FF:FF:FF:FF:FF:FF', '001122', '00:11-22:33:44:55'])
t.oui.decorate(t.node(), mac);
assert.equal(t.requests(), 0, 'invalid or private MACs must not fetch data');
for (let octet = 0; octet < 256; octet++) {
const mac = octet.toString(16).padStart(2, '0') + ':11:22:33:44:55';
if (!(octet & 3)) continue;
const n = t.node(); t.oui.decorate(n, mac);
assert(n.children[0].src.endsWith((octet & 3) === 2 ? '/phone.svg' : '/computer.svg'));
}
for (const mac of ['a6-11-22-33-44-55', 'AE1122334455', 'BA:71:BE:00:00:01']) {
const n = t.node(); t.oui.decorate(n, mac, true);
assert(n.children[0].src.endsWith('/phone.svg'), 'private MAC must take precedence over fnOS');
n.children[0].onerror(); assert(n.children[0].src.endsWith('/computer.svg'));
}
assert.equal(t.requests(), 0, 'phone icons must not fetch the OUI database');
const cases = [['00:11:22:00:00:00','ASUS'],['00-11-22-35-00-00','Apple'],['001122334455','ASUS'],['00:11:22:40:00:00',null],['00:AB:CD:00:00:00',null]];
const nodes = cases.map(([mac]) => { const n=t.node(); t.oui.decorate(n,mac); return n; });
await Promise.resolve(); await Promise.resolve();
@@ -42,7 +54,7 @@ function setup(fail = false) {
assert.equal(other.children[0].title,'Unknown vendor','OEM overrides must not affect other devices in the same OUI');
assert.equal(unsafe.children[0].title,'Unknown vendor');
const fnos=t.node();
t.oui.decorate(fnos,'BA:71:BE:00:00:01',true);
t.oui.decorate(fnos,'B8:71:BE:00:00:01',true);
assert.equal(fnos.children[0].title,'fnOS / FygoOS');
assert(fnos.children[0].src.endsWith('/fnos.svg'));
const overridden=t.node();
@@ -71,7 +83,7 @@ function setup(fail = false) {
enabled = true;
const host = view.renderHostname('<img src=x>', '00:11:22:00:00:00');
assert.equal(host.children[0].text, '<img src=x>');
assert.equal(scripts[0].src, '/luci-static/resources/oui/oui.js?v=8');
assert.equal(scripts[0].src, '/luci-static/resources/oui/oui.js?v=10');
view.renderHostname('host2', '00:11:22:00:00:01');
assert.equal(scripts.length, 1);
console.log('OUI runtime and optional integration checks passed');
+8
View File
@@ -295,5 +295,13 @@
"patterns": [
"^vmware(?: inc)?$"
]
},
{
"slug": "haier",
"name": "Haier / \u6d77\u5c14",
"patterns": [
"^(?:(?:qing ?dao|beijing) )?haier(?: |technology|$)"
],
"supplemental": true
}
]