mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-26 12:46:08 +00:00
- Change the IPv6 checkbox into an option to select from IPv4 only, IPv6 only, or IPv4 and IPv6. Update functional tests. - Add type hints everywhere. - Separate out the generic URL update method to its own module. Add unit tests. - Migrate old configuration to new configuration on first read. - Store multiple IP addresses in the status. Support showing old status format of single IP address as well. Show multiple IP addresses in the status table. - Handle errors during update using exceptions for clearer code. - For generic URL based updates, capture return code, stdout and stdin in error message. Tests: - Adding a new GnuDIP domain leads to configuration setting ip_type = ipv4 - When adding a new dynamic domain, when generic option is selected IP Address Type is shown. When GnuDIP is selected, the field is hidden. - IP Address Type field is as expected. Options and description are as expected. - When a new domain is added for generic domain, the value of ip_type is set as expected. Changing the value to other values works. Configuration is updated as expected. Option values and description are as expected. - The column for IP Address is now 'IP Addresses'. When multiple IP addresses are present in the status, they are shown in multiple lines in the tables as <pre>. When no IP addresses are present, a '-' is shown in the column. - When generic domain update fails, subprocess failure code, stderr and stdout are shown in the error message. - Unit tests work. - Functional tests work. - After 5 minute period, attempts are made to update the domain - For GnuDIP and generic method: - IP address lookup works for IPv4 and IPv6. - IP address updates works for IPv4 (tested) and IPv6 (untested). - In 'both' configuration, when IPv6 update fails, IPv4 still succeeds. - Updates are skipped if the record is up-to-date. - Successful updates are performed otherwise. - Wrong password leads to proper error being shown. - When the old status is stored, it is updated during read and proper status is shown. - When configuration has old use_ipv6 key, then it is migrated when newer version of the service is started. True value is converted as 'ipv6', False value is converted as 'ipv4'. 'null' key is properly removed. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
82 lines
3.6 KiB
JavaScript
82 lines
3.6 KiB
JavaScript
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
/**
|
|
* @licstart The following is the entire license notice for the JavaScript
|
|
* code in this page.
|
|
*
|
|
* This file is part of FreedomBox.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as
|
|
* published by the Free Software Foundation, either version 3 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* @licend The above is the entire license notice for the JavaScript code
|
|
* in this page.
|
|
*/
|
|
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
const NOIP = 'https://<User>:<Pass>@dynupdate.no-ip.com/nic/update?' +
|
|
'hostname=<Domain>';
|
|
const FREEDNS = 'https://freedns.afraid.org/dynamic/update.php?' +
|
|
'_YOURAPIKEYHERE_';
|
|
|
|
document.getElementById('id_domain-service_type').addEventListener('change', () => {
|
|
setMode();
|
|
|
|
const service_type = document.getElementById('id_domain-service_type').value;
|
|
if (service_type === "noip.com") {
|
|
document.getElementById('id_domain-update_url').value = NOIP;
|
|
} else if (service_type === "freedns.afraid.org") {
|
|
document.getElementById('id_domain-update_url').value = FREEDNS;
|
|
} else { // GnuDIP and other
|
|
document.getElementById('id_domain-update_url').value = '';
|
|
}
|
|
});
|
|
|
|
document.getElementById('id_domain-show_password').addEventListener('change', () => {
|
|
if (document.getElementById('id_domain-show_password').checked) {
|
|
document.getElementById('id_domain-password').type = 'text';
|
|
} else {
|
|
document.getElementById('id_domain-password').type = 'password';
|
|
}
|
|
});
|
|
|
|
function setMode() {
|
|
const service_type = document.getElementById('id_domain-service_type').value;
|
|
if (service_type === "gnudip") {
|
|
setGnudipMode();
|
|
} else {
|
|
setUpdateUrlMode();
|
|
}
|
|
}
|
|
|
|
function setGnudipMode() {
|
|
document.querySelectorAll('.form-group').forEach((element) => {
|
|
element.style.display = 'block';
|
|
});
|
|
document.getElementById('id_domain-update_url').closest('.form-group').style.display = 'none';
|
|
document.getElementById('id_domain-disable_ssl_cert_check').closest('.form-group').style.display = 'none';
|
|
document.getElementById('id_domain-use_http_basic_auth').closest('.form-group').style.display = 'none';
|
|
document.getElementById('id_domain-ip_type').closest('.form-group').style.display = 'none';
|
|
document.getElementById('id_domain-server').closest('.form-group').style.display = 'block';
|
|
}
|
|
|
|
function setUpdateUrlMode() {
|
|
document.getElementById('id_domain-update_url').closest('.form-group').style.display = 'block';
|
|
document.getElementById('id_domain-disable_ssl_cert_check').closest('.form-group').style.display = 'block';
|
|
document.getElementById('id_domain-use_http_basic_auth').closest('.form-group').style.display = 'block';
|
|
document.getElementById('id_domain-ip_type').closest('.form-group').style.display = 'block';
|
|
document.getElementById('id_domain-server').closest('.form-group').style.display = 'none';
|
|
}
|
|
|
|
setMode();
|
|
});
|