+ client: 1889 Show a link to the FAQ article about Ubuntu when port 53 is in use
Close #1889
Squashed commit of the following:
commit 4fa57f692d0a66d20e9ba9d235ec423e5118db20
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 17:28:38 2020 +0300
Revert "Update locales"
This reverts commit dd88f8047e612022678dfabe8dda446c4b8f201b.
commit dd88f8047e612022678dfabe8dda446c4b8f201b
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 17:26:00 2020 +0300
Update locales
commit 954ae2e97e988b53856766100c873e6d40b75123
Merge: 28f205a8 c1e56c83
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 17:23:50 2020 +0300
Merge branch 'master' into feature/1889
commit 28f205a858281811af7d708356e10108983c7292
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 15:39:57 2020 +0300
Rename systemdns-resolved ---> systemd-resolved
commit 3d62e26984f73285a7b788b6f42efcb3376ae562
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 15:15:10 2020 +0300
Add commas to port 53 locale
commit 457563085186244dca36a80a959e5a9486558299
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 13:34:13 2020 +0300
minor
commit 7aacf879951f8ab619824730cb28ea5cd2518812
Author: ArtemBaskal <a.baskal@adguard.com>
Date: Fri Jul 17 13:27:55 2020 +0300
+ client: Show a link to the FAQ article about Ubuntu when port 53 is in use
This commit is contained in:
parent
c1e56c837b
commit
4175d82279
|
@ -563,5 +563,6 @@
|
||||||
"filter_category_regional_desc": "Lists that focus on regional ads and tracking servers",
|
"filter_category_regional_desc": "Lists that focus on regional ads and tracking servers",
|
||||||
"filter_category_other_desc": "Other blocklists",
|
"filter_category_other_desc": "Other blocklists",
|
||||||
"original_response": "Original response",
|
"original_response": "Original response",
|
||||||
"click_to_view_queries": "Click to view queries"
|
"click_to_view_queries": "Click to view queries",
|
||||||
|
"port_53_faq_link": "Port 53 is often occupied by \"DNSStubListener\" or \"systemd-resolved\" services. Please read <0>this instruction</0> on how to resolve this."
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,10 @@ export const REPOSITORY = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const PRIVACY_POLICY_LINK = 'https://adguard.com/privacy/home.html';
|
export const PRIVACY_POLICY_LINK = 'https://adguard.com/privacy/home.html';
|
||||||
|
export const PORT_53_FAQ_LINK = 'https://github.com/AdguardTeam/AdGuardHome/wiki/FAQ#bindinuse';
|
||||||
|
|
||||||
|
export const ADDRESS_IN_USE_TEXT = 'address already in use';
|
||||||
|
export const UBUNTU_SYSTEM_PORT = 53;
|
||||||
|
|
||||||
export const INSTALL_FIRST_STEP = 1;
|
export const INSTALL_FIRST_STEP = 1;
|
||||||
export const INSTALL_TOTAL_STEPS = 5;
|
export const INSTALL_TOTAL_STEPS = 5;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { Component, Fragment } from 'react';
|
import React, { Component } from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Field, reduxForm, formValueSelector } from 'redux-form';
|
import { Field, reduxForm, formValueSelector } from 'redux-form';
|
||||||
|
@ -9,7 +9,9 @@ import Controls from './Controls';
|
||||||
import AddressList from './AddressList';
|
import AddressList from './AddressList';
|
||||||
|
|
||||||
import { getInterfaceIp } from '../../helpers/helpers';
|
import { getInterfaceIp } from '../../helpers/helpers';
|
||||||
import { ALL_INTERFACES_IP, FORM_NAME } from '../../helpers/constants';
|
import {
|
||||||
|
ALL_INTERFACES_IP, FORM_NAME, ADDRESS_IN_USE_TEXT, PORT_53_FAQ_LINK, UBUNTU_SYSTEM_PORT,
|
||||||
|
} from '../../helpers/constants';
|
||||||
import { renderInputField, toNumber } from '../../helpers/form';
|
import { renderInputField, toNumber } from '../../helpers/form';
|
||||||
import { validateRequiredValue, validateInstallPort } from '../../helpers/validators';
|
import { validateRequiredValue, validateInstallPort } from '../../helpers/validators';
|
||||||
|
|
||||||
|
@ -20,37 +22,38 @@ const STATIC_STATUS = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderInterfaces = ((interfaces) => (
|
const renderInterfaces = ((interfaces) => (
|
||||||
Object.keys(interfaces).map((item) => {
|
Object.keys(interfaces)
|
||||||
const option = interfaces[item];
|
.map((item) => {
|
||||||
const {
|
const option = interfaces[item];
|
||||||
name,
|
const {
|
||||||
ip_addresses,
|
name,
|
||||||
flags,
|
ip_addresses,
|
||||||
} = option;
|
flags,
|
||||||
|
} = option;
|
||||||
|
|
||||||
if (option && ip_addresses?.length > 0) {
|
if (option && ip_addresses?.length > 0) {
|
||||||
const ip = getInterfaceIp(option);
|
const ip = getInterfaceIp(option);
|
||||||
const isDown = flags?.includes('down');
|
const isDown = flags?.includes('down');
|
||||||
|
|
||||||
|
if (isDown) {
|
||||||
|
return (
|
||||||
|
<option value={ip} key={name} disabled>
|
||||||
|
<>
|
||||||
|
{name} - {ip} (<Trans>down</Trans>)
|
||||||
|
</>
|
||||||
|
</option>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (isDown) {
|
|
||||||
return (
|
return (
|
||||||
<option value={ip} key={name} disabled>
|
<option value={ip} key={name}>
|
||||||
<Fragment>
|
{name} - {ip}
|
||||||
{name} - {ip} (<Trans>down</Trans>)
|
|
||||||
</Fragment>
|
|
||||||
</option>
|
</option>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return false;
|
||||||
<option value={ip} key={name}>
|
})
|
||||||
{name} - {ip}
|
|
||||||
</option>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
})
|
|
||||||
));
|
));
|
||||||
|
|
||||||
class Settings extends Component {
|
class Settings extends Component {
|
||||||
|
@ -79,9 +82,9 @@ class Settings extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Fragment>
|
<>
|
||||||
{status === STATIC_STATUS.DISABLED && (
|
{status === STATIC_STATUS.DISABLED && (
|
||||||
<Fragment>
|
<>
|
||||||
<div className="mb-2">
|
<div className="mb-2">
|
||||||
<Trans values={{ ip }} components={[<strong key="0">text</strong>]}>
|
<Trans values={{ ip }} components={[<strong key="0">text</strong>]}>
|
||||||
install_static_configure
|
install_static_configure
|
||||||
|
@ -94,7 +97,7 @@ class Settings extends Component {
|
||||||
>
|
>
|
||||||
<Trans>set_static_ip</Trans>
|
<Trans>set_static_ip</Trans>
|
||||||
</button>
|
</button>
|
||||||
</Fragment>
|
</>
|
||||||
)}
|
)}
|
||||||
{status === STATIC_STATUS.ERROR && (
|
{status === STATIC_STATUS.ERROR && (
|
||||||
<div className="text-danger">
|
<div className="text-danger">
|
||||||
|
@ -108,7 +111,7 @@ class Settings extends Component {
|
||||||
</Trans>
|
</Trans>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Fragment>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,8 +124,16 @@ class Settings extends Component {
|
||||||
handleFix,
|
handleFix,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const web = { ip: webIp, port: webPort, autofix: false };
|
const web = {
|
||||||
const dns = { ip: dnsIp, port: dnsPort, autofix: false };
|
ip: webIp,
|
||||||
|
port: webPort,
|
||||||
|
autofix: false,
|
||||||
|
};
|
||||||
|
const dns = {
|
||||||
|
ip: dnsIp,
|
||||||
|
port: dnsPort,
|
||||||
|
autofix: false,
|
||||||
|
};
|
||||||
const set_static_ip = false;
|
const set_static_ip = false;
|
||||||
|
|
||||||
if (type === 'web') {
|
if (type === 'web') {
|
||||||
|
@ -143,8 +154,16 @@ class Settings extends Component {
|
||||||
handleFix,
|
handleFix,
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const web = { ip: webIp, port: webPort, autofix: false };
|
const web = {
|
||||||
const dns = { ip: dnsIp, port: dnsPort, autofix: false };
|
ip: webIp,
|
||||||
|
port: webPort,
|
||||||
|
autofix: false,
|
||||||
|
};
|
||||||
|
const dns = {
|
||||||
|
ip: dnsIp,
|
||||||
|
port: dnsPort,
|
||||||
|
autofix: false,
|
||||||
|
};
|
||||||
const set_static_ip = true;
|
const set_static_ip = true;
|
||||||
|
|
||||||
if (window.confirm(this.props.t('confirm_static_ip', { ip }))) {
|
if (window.confirm(this.props.t('confirm_static_ip', { ip }))) {
|
||||||
|
@ -228,11 +247,9 @@ class Settings extends Component {
|
||||||
onClick={() => this.handleAutofix('web')}
|
onClick={() => this.handleAutofix('web')}
|
||||||
>
|
>
|
||||||
<Trans>fix</Trans>
|
<Trans>fix</Trans>
|
||||||
</button>
|
</button>}
|
||||||
}
|
</div>}
|
||||||
<hr className="divider--small" />
|
<hr className="divider--small" />
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="setup__desc">
|
<div className="setup__desc">
|
||||||
|
@ -289,7 +306,7 @@ class Settings extends Component {
|
||||||
</div>
|
</div>
|
||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
{dnsStatus
|
{dnsStatus
|
||||||
&& <Fragment>
|
&& <>
|
||||||
<div className="setup__error text-danger">
|
<div className="setup__error text-danger">
|
||||||
{dnsStatus}
|
{dnsStatus}
|
||||||
{isDnsFixAvailable
|
{isDnsFixAvailable
|
||||||
|
@ -314,9 +331,14 @@ class Settings extends Component {
|
||||||
<Trans>autofix_warning_result</Trans>
|
<Trans>autofix_warning_result</Trans>
|
||||||
</p>
|
</p>
|
||||||
</div>}
|
</div>}
|
||||||
<hr className="divider--small" />
|
</>}
|
||||||
</Fragment>
|
{dnsPort === UBUNTU_SYSTEM_PORT && !isDnsFixAvailable
|
||||||
}
|
&& dnsStatus.includes(ADDRESS_IN_USE_TEXT)
|
||||||
|
&& <Trans
|
||||||
|
components={[<a href={PORT_53_FAQ_LINK} key="0">link</a>]}>
|
||||||
|
port_53_faq_link
|
||||||
|
</Trans>}
|
||||||
|
<hr className="divider--small" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="setup__desc">
|
<div className="setup__desc">
|
||||||
|
|
Loading…
Reference in New Issue