Merge in DNS/adguard-home from beta-client-2 to master
Squashed commit of the following:
commit b2640cc49a6c5484d730b534dcf5a8013d7fa478
Merge: 659def862 aef4659e9
Author: Eugene Burkov <e.burkov@adguard.com>
Date: Tue Dec 29 19:23:09 2020 +0300
Merge branch 'master' into beta-client-2
commit 659def8626467949c35b7a6a0c99ffafb07b4385
Author: Eugene Burkov <e.burkov@adguard.com>
Date: Tue Dec 29 17:25:14 2020 +0300
all: upgrade github actions node version
commit b4b8cf8dd75672e9155da5d111ac66e8f5ba1535
Author: Vladislav Abdulmyanov <v.abdulmyanov@adguard.com>
Date: Tue Dec 29 16:57:14 2020 +0300
all: beta client squashed
405 lines
13 KiB
TypeScript
405 lines
13 KiB
TypeScript
// This file was autogenerated. Please do not change.
|
|
// All changes will be overwrited on commit.
|
|
export interface ITlsConfig {
|
|
certificate_chain?: string;
|
|
certificate_path?: string;
|
|
dns_names?: string[];
|
|
enabled?: boolean;
|
|
force_https?: boolean;
|
|
issuer?: string;
|
|
key_type?: string;
|
|
not_after?: string;
|
|
not_before?: string;
|
|
port_dns_over_quic?: number;
|
|
port_dns_over_tls?: number;
|
|
port_https?: number;
|
|
private_key?: string;
|
|
private_key_path?: string;
|
|
server_name?: string;
|
|
subject?: string;
|
|
valid_cert?: boolean;
|
|
valid_chain?: boolean;
|
|
valid_key?: boolean;
|
|
valid_pair?: boolean;
|
|
warning_validation?: string;
|
|
}
|
|
|
|
export default class TlsConfig {
|
|
readonly _certificate_chain: string | undefined;
|
|
|
|
/** */
|
|
get certificateChain(): string | undefined {
|
|
return this._certificate_chain;
|
|
}
|
|
|
|
readonly _certificate_path: string | undefined;
|
|
|
|
/** */
|
|
get certificatePath(): string | undefined {
|
|
return this._certificate_path;
|
|
}
|
|
|
|
readonly _dns_names: string[] | undefined;
|
|
|
|
/**
|
|
* Description: The value of SubjectAltNames field of the first certificate in the chain.
|
|
*
|
|
* Example: *.example.org
|
|
*/
|
|
get dnsNames(): string[] | undefined {
|
|
return this._dns_names;
|
|
}
|
|
|
|
readonly _enabled: boolean | undefined;
|
|
|
|
/**
|
|
* Description: enabled is the encryption (DOT/DOH/HTTPS) status
|
|
* Example: true
|
|
*/
|
|
get enabled(): boolean | undefined {
|
|
return this._enabled;
|
|
}
|
|
|
|
readonly _force_https: boolean | undefined;
|
|
|
|
/**
|
|
* Description: if true, forces HTTP->HTTPS redirect
|
|
* Example: true
|
|
*/
|
|
get forceHttps(): boolean | undefined {
|
|
return this._force_https;
|
|
}
|
|
|
|
readonly _issuer: string | undefined;
|
|
|
|
/**
|
|
* Description: The issuer of the first certificate in the chain.
|
|
* Example: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US
|
|
*/
|
|
get issuer(): string | undefined {
|
|
return this._issuer;
|
|
}
|
|
|
|
readonly _key_type: string | undefined;
|
|
|
|
/**
|
|
* Description: Key type.
|
|
* Example: RSA
|
|
*/
|
|
get keyType(): string | undefined {
|
|
return this._key_type;
|
|
}
|
|
|
|
readonly _not_after: string | undefined;
|
|
|
|
/**
|
|
* Description: The NotAfter field of the first certificate in the chain.
|
|
*
|
|
* Example: 2019-05-01T10:47:32Z
|
|
*/
|
|
get notAfter(): string | undefined {
|
|
return this._not_after;
|
|
}
|
|
|
|
readonly _not_before: string | undefined;
|
|
|
|
/**
|
|
* Description: The NotBefore field of the first certificate in the chain.
|
|
*
|
|
* Example: 2019-01-31T10:47:32Z
|
|
*/
|
|
get notBefore(): string | undefined {
|
|
return this._not_before;
|
|
}
|
|
|
|
readonly _port_dns_over_quic: number | undefined;
|
|
|
|
/**
|
|
* Description: DNS-over-QUIC port. If 0, DOQ will be disabled.
|
|
* Example: 784
|
|
*/
|
|
get portDnsOverQuic(): number | undefined {
|
|
return this._port_dns_over_quic;
|
|
}
|
|
|
|
readonly _port_dns_over_tls: number | undefined;
|
|
|
|
/**
|
|
* Description: DNS-over-TLS port. If 0, DOT will be disabled.
|
|
* Example: 853
|
|
*/
|
|
get portDnsOverTls(): number | undefined {
|
|
return this._port_dns_over_tls;
|
|
}
|
|
|
|
readonly _port_https: number | undefined;
|
|
|
|
/**
|
|
* Description: HTTPS port. If 0, HTTPS will be disabled.
|
|
* Example: 443
|
|
*/
|
|
get portHttps(): number | undefined {
|
|
return this._port_https;
|
|
}
|
|
|
|
readonly _private_key: string | undefined;
|
|
|
|
/** */
|
|
get privateKey(): string | undefined {
|
|
return this._private_key;
|
|
}
|
|
|
|
readonly _private_key_path: string | undefined;
|
|
|
|
/** */
|
|
get privateKeyPath(): string | undefined {
|
|
return this._private_key_path;
|
|
}
|
|
|
|
readonly _server_name: string | undefined;
|
|
|
|
/**
|
|
* Description: server_name is the hostname of your HTTPS/TLS server
|
|
* Example: example.org
|
|
*/
|
|
get serverName(): string | undefined {
|
|
return this._server_name;
|
|
}
|
|
|
|
readonly _subject: string | undefined;
|
|
|
|
/**
|
|
* Description: The subject of the first certificate in the chain.
|
|
* Example: CN=example.org
|
|
*/
|
|
get subject(): string | undefined {
|
|
return this._subject;
|
|
}
|
|
|
|
readonly _valid_cert: boolean | undefined;
|
|
|
|
/**
|
|
* Description: Set to true if the specified certificates chain is a valid chain of X509 certificates.
|
|
*
|
|
* Example: true
|
|
*/
|
|
get validCert(): boolean | undefined {
|
|
return this._valid_cert;
|
|
}
|
|
|
|
readonly _valid_chain: boolean | undefined;
|
|
|
|
/**
|
|
* Description: Set to true if the specified certificates chain is verified and issued by a known CA.
|
|
*
|
|
* Example: true
|
|
*/
|
|
get validChain(): boolean | undefined {
|
|
return this._valid_chain;
|
|
}
|
|
|
|
readonly _valid_key: boolean | undefined;
|
|
|
|
/**
|
|
* Description: Set to true if the key is a valid private key.
|
|
* Example: true
|
|
*/
|
|
get validKey(): boolean | undefined {
|
|
return this._valid_key;
|
|
}
|
|
|
|
readonly _valid_pair: boolean | undefined;
|
|
|
|
/**
|
|
* Description: Set to true if both certificate and private key are correct.
|
|
*
|
|
* Example: true
|
|
*/
|
|
get validPair(): boolean | undefined {
|
|
return this._valid_pair;
|
|
}
|
|
|
|
readonly _warning_validation: string | undefined;
|
|
|
|
/**
|
|
* Description: A validation warning message with the issue description.
|
|
*
|
|
* Example: You have specified an empty certificate
|
|
*/
|
|
get warningValidation(): string | undefined {
|
|
return this._warning_validation;
|
|
}
|
|
|
|
constructor(props: ITlsConfig) {
|
|
if (typeof props.certificate_chain === 'string') {
|
|
this._certificate_chain = props.certificate_chain.trim();
|
|
}
|
|
if (typeof props.certificate_path === 'string') {
|
|
this._certificate_path = props.certificate_path.trim();
|
|
}
|
|
if (props.dns_names) {
|
|
this._dns_names = props.dns_names;
|
|
}
|
|
if (typeof props.enabled === 'boolean') {
|
|
this._enabled = props.enabled;
|
|
}
|
|
if (typeof props.force_https === 'boolean') {
|
|
this._force_https = props.force_https;
|
|
}
|
|
if (typeof props.issuer === 'string') {
|
|
this._issuer = props.issuer.trim();
|
|
}
|
|
if (typeof props.key_type === 'string') {
|
|
this._key_type = props.key_type.trim();
|
|
}
|
|
if (typeof props.not_after === 'string') {
|
|
this._not_after = props.not_after.trim();
|
|
}
|
|
if (typeof props.not_before === 'string') {
|
|
this._not_before = props.not_before.trim();
|
|
}
|
|
if (typeof props.port_dns_over_quic === 'number') {
|
|
this._port_dns_over_quic = props.port_dns_over_quic;
|
|
}
|
|
if (typeof props.port_dns_over_tls === 'number') {
|
|
this._port_dns_over_tls = props.port_dns_over_tls;
|
|
}
|
|
if (typeof props.port_https === 'number') {
|
|
this._port_https = props.port_https;
|
|
}
|
|
if (typeof props.private_key === 'string') {
|
|
this._private_key = props.private_key.trim();
|
|
}
|
|
if (typeof props.private_key_path === 'string') {
|
|
this._private_key_path = props.private_key_path.trim();
|
|
}
|
|
if (typeof props.server_name === 'string') {
|
|
this._server_name = props.server_name.trim();
|
|
}
|
|
if (typeof props.subject === 'string') {
|
|
this._subject = props.subject.trim();
|
|
}
|
|
if (typeof props.valid_cert === 'boolean') {
|
|
this._valid_cert = props.valid_cert;
|
|
}
|
|
if (typeof props.valid_chain === 'boolean') {
|
|
this._valid_chain = props.valid_chain;
|
|
}
|
|
if (typeof props.valid_key === 'boolean') {
|
|
this._valid_key = props.valid_key;
|
|
}
|
|
if (typeof props.valid_pair === 'boolean') {
|
|
this._valid_pair = props.valid_pair;
|
|
}
|
|
if (typeof props.warning_validation === 'string') {
|
|
this._warning_validation = props.warning_validation.trim();
|
|
}
|
|
}
|
|
|
|
serialize(): ITlsConfig {
|
|
const data: ITlsConfig = {
|
|
};
|
|
if (typeof this._certificate_chain !== 'undefined') {
|
|
data.certificate_chain = this._certificate_chain;
|
|
}
|
|
if (typeof this._certificate_path !== 'undefined') {
|
|
data.certificate_path = this._certificate_path;
|
|
}
|
|
if (typeof this._dns_names !== 'undefined') {
|
|
data.dns_names = this._dns_names;
|
|
}
|
|
if (typeof this._enabled !== 'undefined') {
|
|
data.enabled = this._enabled;
|
|
}
|
|
if (typeof this._force_https !== 'undefined') {
|
|
data.force_https = this._force_https;
|
|
}
|
|
if (typeof this._issuer !== 'undefined') {
|
|
data.issuer = this._issuer;
|
|
}
|
|
if (typeof this._key_type !== 'undefined') {
|
|
data.key_type = this._key_type;
|
|
}
|
|
if (typeof this._not_after !== 'undefined') {
|
|
data.not_after = this._not_after;
|
|
}
|
|
if (typeof this._not_before !== 'undefined') {
|
|
data.not_before = this._not_before;
|
|
}
|
|
if (typeof this._port_dns_over_quic !== 'undefined') {
|
|
data.port_dns_over_quic = this._port_dns_over_quic;
|
|
}
|
|
if (typeof this._port_dns_over_tls !== 'undefined') {
|
|
data.port_dns_over_tls = this._port_dns_over_tls;
|
|
}
|
|
if (typeof this._port_https !== 'undefined') {
|
|
data.port_https = this._port_https;
|
|
}
|
|
if (typeof this._private_key !== 'undefined') {
|
|
data.private_key = this._private_key;
|
|
}
|
|
if (typeof this._private_key_path !== 'undefined') {
|
|
data.private_key_path = this._private_key_path;
|
|
}
|
|
if (typeof this._server_name !== 'undefined') {
|
|
data.server_name = this._server_name;
|
|
}
|
|
if (typeof this._subject !== 'undefined') {
|
|
data.subject = this._subject;
|
|
}
|
|
if (typeof this._valid_cert !== 'undefined') {
|
|
data.valid_cert = this._valid_cert;
|
|
}
|
|
if (typeof this._valid_chain !== 'undefined') {
|
|
data.valid_chain = this._valid_chain;
|
|
}
|
|
if (typeof this._valid_key !== 'undefined') {
|
|
data.valid_key = this._valid_key;
|
|
}
|
|
if (typeof this._valid_pair !== 'undefined') {
|
|
data.valid_pair = this._valid_pair;
|
|
}
|
|
if (typeof this._warning_validation !== 'undefined') {
|
|
data.warning_validation = this._warning_validation;
|
|
}
|
|
return data;
|
|
}
|
|
|
|
validate(): string[] {
|
|
const validate = {
|
|
enabled: !this._enabled ? true : typeof this._enabled === 'boolean',
|
|
server_name: !this._server_name ? true : typeof this._server_name === 'string' && !this._server_name ? true : this._server_name,
|
|
force_https: !this._force_https ? true : typeof this._force_https === 'boolean',
|
|
port_https: !this._port_https ? true : typeof this._port_https === 'number',
|
|
port_dns_over_tls: !this._port_dns_over_tls ? true : typeof this._port_dns_over_tls === 'number',
|
|
port_dns_over_quic: !this._port_dns_over_quic ? true : typeof this._port_dns_over_quic === 'number',
|
|
certificate_chain: !this._certificate_chain ? true : typeof this._certificate_chain === 'string' && !this._certificate_chain ? true : this._certificate_chain,
|
|
private_key: !this._private_key ? true : typeof this._private_key === 'string' && !this._private_key ? true : this._private_key,
|
|
certificate_path: !this._certificate_path ? true : typeof this._certificate_path === 'string' && !this._certificate_path ? true : this._certificate_path,
|
|
private_key_path: !this._private_key_path ? true : typeof this._private_key_path === 'string' && !this._private_key_path ? true : this._private_key_path,
|
|
valid_cert: !this._valid_cert ? true : typeof this._valid_cert === 'boolean',
|
|
valid_chain: !this._valid_chain ? true : typeof this._valid_chain === 'boolean',
|
|
subject: !this._subject ? true : typeof this._subject === 'string' && !this._subject ? true : this._subject,
|
|
issuer: !this._issuer ? true : typeof this._issuer === 'string' && !this._issuer ? true : this._issuer,
|
|
not_before: !this._not_before ? true : typeof this._not_before === 'string' && !this._not_before ? true : this._not_before,
|
|
not_after: !this._not_after ? true : typeof this._not_after === 'string' && !this._not_after ? true : this._not_after,
|
|
dns_names: !this._dns_names ? true : this._dns_names.reduce((result, p) => result && typeof p === 'string', true),
|
|
valid_key: !this._valid_key ? true : typeof this._valid_key === 'boolean',
|
|
key_type: !this._key_type ? true : typeof this._key_type === 'string' && !this._key_type ? true : this._key_type,
|
|
warning_validation: !this._warning_validation ? true : typeof this._warning_validation === 'string' && !this._warning_validation ? true : this._warning_validation,
|
|
valid_pair: !this._valid_pair ? true : typeof this._valid_pair === 'boolean',
|
|
};
|
|
const isError: string[] = [];
|
|
Object.keys(validate).forEach((key) => {
|
|
if (!(validate as any)[key]) {
|
|
isError.push(key);
|
|
}
|
|
});
|
|
return isError;
|
|
}
|
|
|
|
update(props: Partial<ITlsConfig>): TlsConfig {
|
|
return new TlsConfig({ ...this.serialize(), ...props });
|
|
}
|
|
}
|