mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-09-14 20:34:19 +08:00
74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import uci from "uci";
|
|
import { FIREWALL_DNS_FORWARD, type FirewallDnsForward, LuciFlied } from "../../../enum/hijpass";
|
|
|
|
type DnsForwardTarget = {
|
|
available: boolean;
|
|
port: string;
|
|
}
|
|
|
|
function isPort(value: string) {
|
|
const port = Number(value);
|
|
return Number.isInteger(port) && port > 0 && port <= 65535;
|
|
}
|
|
|
|
function getPreRoutingTarget(): DnsForwardTarget {
|
|
const dns = uci.get_first(LuciFlied.CONF_NAME, LuciFlied.DNS_SECTION_TYPE);
|
|
const port = dns?.cdg_port || '';
|
|
return {
|
|
available: dns?.dns_service === 'chinadns-ng' && isPort(port),
|
|
port,
|
|
};
|
|
}
|
|
|
|
function getRoutingTarget(): DnsForwardTarget {
|
|
const shunt = uci.get_first(LuciFlied.CONF_NAME, LuciFlied.SHUNT_SECTION_TYPE);
|
|
const port = shunt?.dns_listen_port || '';
|
|
return {
|
|
available: shunt?.enabled !== '0' && isPort(port),
|
|
port,
|
|
};
|
|
}
|
|
|
|
function getTargetLabel(name: string, target: DnsForwardTarget) {
|
|
let label = name;
|
|
if (target.port) {
|
|
label += ': ' + target.port;
|
|
}
|
|
if (!target.available) {
|
|
label += ' - ' + _('Not available');
|
|
}
|
|
return label;
|
|
}
|
|
|
|
const FirewallDnsForwardUtils = {
|
|
getSource: function (): FirewallDnsForward | string {
|
|
return uci.get_first(LuciFlied.CONF_NAME, LuciFlied.FIREWALL_SECTION_TYPE, 'dns_forward')
|
|
|| FIREWALL_DNS_FORWARD.NONE;
|
|
},
|
|
|
|
getPreRoutingTarget,
|
|
|
|
getRoutingTarget,
|
|
|
|
getTargetLabel,
|
|
|
|
validateSource: function (source: FirewallDnsForward | string): true | string {
|
|
if (!source || source === FIREWALL_DNS_FORWARD.NONE) {
|
|
return true;
|
|
}
|
|
if (source === FIREWALL_DNS_FORWARD.PRE_ROUTING) {
|
|
return getPreRoutingTarget().available
|
|
? true
|
|
: _('Independent DNS is unavailable or has no valid listen port');
|
|
}
|
|
if (source === FIREWALL_DNS_FORWARD.ROUTING) {
|
|
return getRoutingTarget().available
|
|
? true
|
|
: _('Core DNS is disabled or has no valid listen port');
|
|
}
|
|
return _('Unknown DNS forwarding source: %s').format(source);
|
|
},
|
|
}
|
|
|
|
export { FirewallDnsForwardUtils }
|