badguardhome/client/src/api/Api.js

560 lines
18 KiB
JavaScript
Raw Normal View History

2018-08-30 14:25:33 +00:00
import axios from 'axios';
2019-10-15 09:31:01 +00:00
import { getPathWithQueryString } from '../helpers/helpers';
2020-01-21 13:57:51 +00:00
import { R_PATH_LAST_PART } from '../helpers/constants';
2019-09-05 09:12:58 +00:00
class Api {
2018-08-30 14:25:33 +00:00
baseUrl = 'control';
async makeRequest(path, method = 'POST', config) {
2018-09-14 12:37:35 +00:00
try {
const response = await axios({
url: `${this.baseUrl}/${path}`,
method,
...config,
});
return response.data;
} catch (error) {
2018-09-14 18:31:20 +00:00
console.error(error);
2019-02-18 16:36:24 +00:00
const errorPath = `${this.baseUrl}/${path}`;
if (error.response) {
2020-01-21 13:57:51 +00:00
if (error.response.status === 403) {
const loginPageUrl = window.location.href.replace(R_PATH_LAST_PART, '/login.html');
window.location.replace(loginPageUrl);
return false;
}
2019-02-18 16:36:24 +00:00
throw new Error(`${errorPath} | ${error.response.data} | ${error.response.status}`);
}
2019-02-19 08:05:30 +00:00
throw new Error(`${errorPath} | ${error.message ? error.message : error}`);
2018-09-14 12:37:35 +00:00
}
2018-08-30 14:25:33 +00:00
}
// Global methods
GLOBAL_STATUS = { path: 'status', method: 'GET' };
2019-03-06 11:45:21 +00:00
GLOBAL_SET_UPSTREAM_DNS = { path: 'set_upstreams_config', method: 'POST' };
GLOBAL_TEST_UPSTREAM_DNS = { path: 'test_upstream_dns', method: 'POST' };
2019-06-25 14:56:50 +00:00
GLOBAL_VERSION = { path: 'version.json', method: 'POST' };
2019-05-16 14:24:30 +00:00
GLOBAL_UPDATE = { path: 'update', method: 'POST' };
2018-08-30 14:25:33 +00:00
getGlobalStatus() {
const { path, method } = this.GLOBAL_STATUS;
return this.makeRequest(path, method);
}
setUpstream(url) {
const { path, method } = this.GLOBAL_SET_UPSTREAM_DNS;
const config = {
data: url,
2019-03-06 11:45:21 +00:00
headers: { 'Content-Type': 'application/json' },
2018-08-30 14:25:33 +00:00
};
return this.makeRequest(path, method, config);
}
testUpstream(servers) {
const { path, method } = this.GLOBAL_TEST_UPSTREAM_DNS;
const config = {
data: servers,
2019-03-06 11:45:21 +00:00
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, config);
}
2019-06-25 14:56:50 +00:00
getGlobalVersion(data) {
2018-09-21 12:20:41 +00:00
const { path, method } = this.GLOBAL_VERSION;
2019-06-25 14:56:50 +00:00
const config = {
data,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, config);
2018-09-21 12:20:41 +00:00
}
2019-05-16 14:24:30 +00:00
getUpdate() {
const { path, method } = this.GLOBAL_UPDATE;
return this.makeRequest(path, method);
}
2018-08-30 14:25:33 +00:00
// Filtering
FILTERING_STATUS = { path: 'filtering/status', method: 'GET' };
FILTERING_ADD_FILTER = { path: 'filtering/add_url', method: 'POST' };
FILTERING_REMOVE_FILTER = { path: 'filtering/remove_url', method: 'POST' };
FILTERING_SET_RULES = { path: 'filtering/set_rules', method: 'POST' };
2018-08-30 14:25:33 +00:00
FILTERING_REFRESH = { path: 'filtering/refresh', method: 'POST' };
2019-09-12 13:19:35 +00:00
FILTERING_SET_URL = { path: 'filtering/set_url', method: 'POST' };
FILTERING_CONFIG = { path: 'filtering/config', method: 'POST' };
2020-01-22 14:25:50 +00:00
FILTERING_CHECK_HOST = { path: 'filtering/check_host', method: 'GET' };
2018-08-30 14:25:33 +00:00
getFilteringStatus() {
const { path, method } = this.FILTERING_STATUS;
2018-08-30 14:25:33 +00:00
return this.makeRequest(path, method);
}
refreshFilters() {
const { path, method } = this.FILTERING_REFRESH;
return this.makeRequest(path, method);
}
addFilter(config) {
2018-08-30 14:25:33 +00:00
const { path, method } = this.FILTERING_ADD_FILTER;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
2018-08-30 14:25:33 +00:00
};
return this.makeRequest(path, method, parameters);
2018-08-30 14:25:33 +00:00
}
removeFilter(config) {
2018-08-30 14:25:33 +00:00
const { path, method } = this.FILTERING_REMOVE_FILTER;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
2018-08-30 14:25:33 +00:00
};
return this.makeRequest(path, method, parameters);
2018-08-30 14:25:33 +00:00
}
setRules(rules) {
const { path, method } = this.FILTERING_SET_RULES;
const parameters = {
data: rules,
headers: { 'Content-Type': 'text/plain' },
};
return this.makeRequest(path, method, parameters);
}
2019-09-12 13:19:35 +00:00
setFiltersConfig(config) {
const { path, method } = this.FILTERING_CONFIG;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
2018-08-30 14:25:33 +00:00
};
2019-09-12 13:19:35 +00:00
return this.makeRequest(path, method, parameters);
2018-08-30 14:25:33 +00:00
}
2019-09-12 13:19:35 +00:00
setFilterUrl(config) {
const { path, method } = this.FILTERING_SET_URL;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
2018-08-30 14:25:33 +00:00
};
2019-09-12 13:19:35 +00:00
return this.makeRequest(path, method, parameters);
2018-08-30 14:25:33 +00:00
}
2020-01-22 14:25:50 +00:00
checkHost(params) {
const { path, method } = this.FILTERING_CHECK_HOST;
const url = getPathWithQueryString(path, params);
return this.makeRequest(url, method);
}
2018-08-30 14:25:33 +00:00
// Parental
PARENTAL_STATUS = { path: 'parental/status', method: 'GET' };
PARENTAL_ENABLE = { path: 'parental/enable', method: 'POST' };
PARENTAL_DISABLE = { path: 'parental/disable', method: 'POST' };
getParentalStatus() {
const { path, method } = this.PARENTAL_STATUS;
return this.makeRequest(path, method);
}
enableParentalControl() {
const { path, method } = this.PARENTAL_ENABLE;
const parameter = 'sensitivity=TEEN'; // this parameter TEEN is hardcoded
const config = {
data: parameter,
headers: { 'Content-Type': 'text/plain' },
};
return this.makeRequest(path, method, config);
}
disableParentalControl() {
const { path, method } = this.PARENTAL_DISABLE;
return this.makeRequest(path, method);
}
// Safebrowsing
SAFEBROWSING_STATUS = { path: 'safebrowsing/status', method: 'GET' };
SAFEBROWSING_ENABLE = { path: 'safebrowsing/enable', method: 'POST' };
SAFEBROWSING_DISABLE = { path: 'safebrowsing/disable', method: 'POST' };
getSafebrowsingStatus() {
const { path, method } = this.SAFEBROWSING_STATUS;
return this.makeRequest(path, method);
}
enableSafebrowsing() {
const { path, method } = this.SAFEBROWSING_ENABLE;
return this.makeRequest(path, method);
}
disableSafebrowsing() {
const { path, method } = this.SAFEBROWSING_DISABLE;
return this.makeRequest(path, method);
}
// Safesearch
SAFESEARCH_STATUS = { path: 'safesearch/status', method: 'GET' };
SAFESEARCH_ENABLE = { path: 'safesearch/enable', method: 'POST' };
SAFESEARCH_DISABLE = { path: 'safesearch/disable', method: 'POST' };
getSafesearchStatus() {
const { path, method } = this.SAFESEARCH_STATUS;
return this.makeRequest(path, method);
}
enableSafesearch() {
const { path, method } = this.SAFESEARCH_ENABLE;
return this.makeRequest(path, method);
}
disableSafesearch() {
const { path, method } = this.SAFESEARCH_DISABLE;
return this.makeRequest(path, method);
}
2018-11-22 14:56:57 +00:00
// Language
CURRENT_LANGUAGE = { path: 'i18n/current_language', method: 'GET' };
CHANGE_LANGUAGE = { path: 'i18n/change_language', method: 'POST' };
getCurrentLanguage() {
const { path, method } = this.CURRENT_LANGUAGE;
return this.makeRequest(path, method);
}
changeLanguage(lang) {
const { path, method } = this.CHANGE_LANGUAGE;
const parameters = {
data: lang,
headers: { 'Content-Type': 'text/plain' },
};
return this.makeRequest(path, method, parameters);
}
// DHCP
DHCP_STATUS = { path: 'dhcp/status', method: 'GET' };
DHCP_SET_CONFIG = { path: 'dhcp/set_config', method: 'POST' };
DHCP_FIND_ACTIVE = { path: 'dhcp/find_active_dhcp', method: 'POST' };
2018-12-24 08:48:23 +00:00
DHCP_INTERFACES = { path: 'dhcp/interfaces', method: 'GET' };
2019-05-28 12:07:46 +00:00
DHCP_ADD_STATIC_LEASE = { path: 'dhcp/add_static_lease', method: 'POST' };
DHCP_REMOVE_STATIC_LEASE = { path: 'dhcp/remove_static_lease', method: 'POST' };
2019-10-15 14:14:24 +00:00
DHCP_RESET = { path: 'dhcp/reset', method: 'POST' };
getDhcpStatus() {
2018-12-13 11:38:00 +00:00
const { path, method } = this.DHCP_STATUS;
return this.makeRequest(path, method);
}
2018-12-24 08:48:23 +00:00
getDhcpInterfaces() {
const { path, method } = this.DHCP_INTERFACES;
return this.makeRequest(path, method);
}
setDhcpConfig(config) {
2018-12-13 11:38:00 +00:00
const { path, method } = this.DHCP_SET_CONFIG;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
findActiveDhcp(name) {
2018-12-13 11:38:00 +00:00
const { path, method } = this.DHCP_FIND_ACTIVE;
const parameters = {
data: name,
headers: { 'Content-Type': 'text/plain' },
};
return this.makeRequest(path, method, parameters);
2019-05-28 12:07:46 +00:00
}
addStaticLease(config) {
const { path, method } = this.DHCP_ADD_STATIC_LEASE;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
removeStaticLease(config) {
const { path, method } = this.DHCP_REMOVE_STATIC_LEASE;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
2019-01-18 17:17:48 +00:00
2019-10-15 14:14:24 +00:00
resetDhcp() {
const { path, method } = this.DHCP_RESET;
return this.makeRequest(path, method);
}
2019-01-18 17:17:48 +00:00
// Installation
2019-02-01 16:52:42 +00:00
INSTALL_GET_ADDRESSES = { path: 'install/get_addresses', method: 'GET' };
INSTALL_CONFIGURE = { path: 'install/configure', method: 'POST' };
INSTALL_CHECK_CONFIG = { path: 'install/check_config', method: 'POST' };
2019-01-18 17:17:48 +00:00
getDefaultAddresses() {
2019-02-01 16:52:42 +00:00
const { path, method } = this.INSTALL_GET_ADDRESSES;
2019-01-18 17:17:48 +00:00
return this.makeRequest(path, method);
}
setAllSettings(config) {
2019-02-01 16:52:42 +00:00
const { path, method } = this.INSTALL_CONFIGURE;
2019-01-18 17:17:48 +00:00
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
checkConfig(config) {
const { path, method } = this.INSTALL_CHECK_CONFIG;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
2019-01-18 17:17:48 +00:00
};
return this.makeRequest(path, method, parameters);
}
// DNS-over-HTTPS and DNS-over-TLS
TLS_STATUS = { path: 'tls/status', method: 'GET' };
TLS_CONFIG = { path: 'tls/configure', method: 'POST' };
TLS_VALIDATE = { path: 'tls/validate', method: 'POST' };
getTlsStatus() {
const { path, method } = this.TLS_STATUS;
return this.makeRequest(path, method);
}
setTlsConfig(config) {
const { path, method } = this.TLS_CONFIG;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
validateTlsConfig(config) {
const { path, method } = this.TLS_VALIDATE;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
2019-05-22 14:59:57 +00:00
// Per-client settings
GET_CLIENTS = { path: 'clients', method: 'GET' };
FIND_CLIENTS = { path: 'clients/find', method: 'GET' };
ADD_CLIENT = { path: 'clients/add', method: 'POST' };
DELETE_CLIENT = { path: 'clients/delete', method: 'POST' };
UPDATE_CLIENT = { path: 'clients/update', method: 'POST' };
2019-05-22 14:59:57 +00:00
getClients() {
const { path, method } = this.GET_CLIENTS;
return this.makeRequest(path, method);
}
addClient(config) {
const { path, method } = this.ADD_CLIENT;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
deleteClient(config) {
const { path, method } = this.DELETE_CLIENT;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
updateClient(config) {
const { path, method } = this.UPDATE_CLIENT;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
2019-05-30 14:26:19 +00:00
findClients(params) {
const { path, method } = this.FIND_CLIENTS;
const url = getPathWithQueryString(path, params);
return this.makeRequest(url, method);
}
2019-05-30 14:26:19 +00:00
// DNS access settings
ACCESS_LIST = { path: 'access/list', method: 'GET' };
ACCESS_SET = { path: 'access/set', method: 'POST' };
getAccessList() {
const { path, method } = this.ACCESS_LIST;
return this.makeRequest(path, method);
}
setAccessList(config) {
const { path, method } = this.ACCESS_SET;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
2019-07-22 12:32:12 +00:00
// DNS rewrites
REWRITES_LIST = { path: 'rewrite/list', method: 'GET' };
REWRITE_ADD = { path: 'rewrite/add', method: 'POST' };
REWRITE_DELETE = { path: 'rewrite/delete', method: 'POST' };
getRewritesList() {
const { path, method } = this.REWRITES_LIST;
return this.makeRequest(path, method);
}
addRewrite(config) {
const { path, method } = this.REWRITE_ADD;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
deleteRewrite(config) {
const { path, method } = this.REWRITE_DELETE;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
2019-07-18 11:52:47 +00:00
// Blocked services
BLOCKED_SERVICES_LIST = { path: 'blocked_services/list', method: 'GET' };
BLOCKED_SERVICES_SET = { path: 'blocked_services/set', method: 'POST' };
getBlockedServices() {
const { path, method } = this.BLOCKED_SERVICES_LIST;
return this.makeRequest(path, method);
}
setBlockedServices(config) {
const { path, method } = this.BLOCKED_SERVICES_SET;
const parameters = {
data: config,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, parameters);
}
// Settings for statistics
GET_STATS = { path: 'stats', method: 'GET' };
STATS_INFO = { path: 'stats_info', method: 'GET' };
STATS_CONFIG = { path: 'stats_config', method: 'POST' };
2019-08-30 15:35:27 +00:00
STATS_RESET = { path: 'stats_reset', method: 'POST' };
getStats() {
const { path, method } = this.GET_STATS;
return this.makeRequest(path, method);
}
getStatsInfo() {
const { path, method } = this.STATS_INFO;
return this.makeRequest(path, method);
}
setStatsConfig(data) {
const { path, method } = this.STATS_CONFIG;
const config = {
data,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, config);
}
2019-08-30 15:35:27 +00:00
resetStats() {
const { path, method } = this.STATS_RESET;
return this.makeRequest(path, method);
}
2019-09-04 14:39:35 +00:00
// Query log
GET_QUERY_LOG = { path: 'querylog', method: 'GET' };
2019-09-04 14:39:35 +00:00
QUERY_LOG_CONFIG = { path: 'querylog_config', method: 'POST' };
QUERY_LOG_INFO = { path: 'querylog_info', method: 'GET' };
QUERY_LOG_CLEAR = { path: 'querylog_clear', method: 'POST' };
getQueryLog(params) {
2019-09-04 14:39:35 +00:00
const { path, method } = this.GET_QUERY_LOG;
2019-10-15 09:31:01 +00:00
const url = getPathWithQueryString(path, params);
return this.makeRequest(url, method);
2019-09-04 14:39:35 +00:00
}
getQueryLogInfo() {
const { path, method } = this.QUERY_LOG_INFO;
return this.makeRequest(path, method);
}
setQueryLogConfig(data) {
const { path, method } = this.QUERY_LOG_CONFIG;
const config = {
data,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, config);
}
clearQueryLog() {
const { path, method } = this.QUERY_LOG_CLEAR;
return this.makeRequest(path, method);
}
2019-09-05 16:07:14 +00:00
// Login
LOGIN = { path: 'login', method: 'POST' };
login(data) {
const { path, method } = this.LOGIN;
const config = {
data,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, config);
}
2019-10-23 07:31:54 +00:00
// Profile
GET_PROFILE = { path: 'profile', method: 'GET' };
getProfile() {
const { path, method } = this.GET_PROFILE;
return this.makeRequest(path, method);
}
2019-12-04 18:52:38 +00:00
// DNS config
GET_DNS_CONFIG = { path: 'dns_info', method: 'GET' };
SET_DNS_CONFIG = { path: 'dns_config', method: 'POST' };
getDnsConfig() {
const { path, method } = this.GET_DNS_CONFIG;
return this.makeRequest(path, method);
}
setDnsConfig(data) {
const { path, method } = this.SET_DNS_CONFIG;
const config = {
data,
headers: { 'Content-Type': 'application/json' },
};
return this.makeRequest(path, method, config);
}
2018-08-30 14:25:33 +00:00
}
2019-09-05 09:12:58 +00:00
const apiClient = new Api();
export default apiClient;