24 lines
652 B
JavaScript
24 lines
652 B
JavaScript
'use strict';
|
||
|
||
const crypto = require('crypto');
|
||
|
||
/**
|
||
* 工具服务入口鉴权:LibreDesk 在工具的 Headers 配置里带 X-Tools-Key。
|
||
* 未配置 key 时 fail-closed(返回 enabled=false,server 会直接 503)。
|
||
*/
|
||
function createAuther(expectedKey) {
|
||
const key = String(expectedKey || '');
|
||
const expected = Buffer.from(key);
|
||
|
||
function verify(value) {
|
||
if (!key) return false;
|
||
const given = Buffer.from(String(value || ''));
|
||
if (given.length !== expected.length) return false;
|
||
return crypto.timingSafeEqual(given, expected);
|
||
}
|
||
|
||
return { enabled: key.length > 0, verify };
|
||
}
|
||
|
||
module.exports = { createAuther };
|