badguardhome/client/src/actions/index.js

653 lines
24 KiB
JavaScript
Raw Normal View History

2018-08-30 14:25:33 +00:00
import { createAction } from 'redux-actions';
import round from 'lodash/round';
2018-11-06 02:51:00 +00:00
import { t } from 'i18next';
import { showLoading, hideLoading } from 'react-redux-loading-bar';
2018-08-30 14:25:33 +00:00
import { normalizeHistory, normalizeFilteringStatus, normalizeLogs } from '../helpers/helpers';
2019-01-22 14:17:33 +00:00
import { SETTINGS_NAMES } from '../helpers/constants';
2018-08-30 14:25:33 +00:00
import Api from '../api/Api';
const apiClient = new Api();
2018-09-14 12:37:35 +00:00
export const addErrorToast = createAction('ADD_ERROR_TOAST');
export const addSuccessToast = createAction('ADD_SUCCESS_TOAST');
export const removeToast = createAction('REMOVE_TOAST');
2018-08-30 14:25:33 +00:00
export const toggleSettingStatus = createAction('SETTING_STATUS_TOGGLE');
export const showSettingsFailure = createAction('SETTINGS_FAILURE_SHOW');
export const toggleSetting = (settingKey, status) => async (dispatch) => {
2018-09-14 13:41:34 +00:00
let successMessage = '';
try {
switch (settingKey) {
2019-01-22 14:17:33 +00:00
case SETTINGS_NAMES.filtering:
2018-09-14 13:41:34 +00:00
if (status) {
2018-11-09 06:51:28 +00:00
successMessage = 'disabled_filtering_toast';
2018-09-14 13:41:34 +00:00
await apiClient.disableFiltering();
} else {
2018-11-09 06:51:28 +00:00
successMessage = 'enabled_filtering_toast';
2018-09-14 13:41:34 +00:00
await apiClient.enableFiltering();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
2019-01-22 14:17:33 +00:00
case SETTINGS_NAMES.safebrowsing:
2018-09-14 13:41:34 +00:00
if (status) {
2018-11-09 06:51:28 +00:00
successMessage = 'disabled_safe_browsing_toast';
2018-09-14 13:41:34 +00:00
await apiClient.disableSafebrowsing();
} else {
2018-11-09 06:51:28 +00:00
successMessage = 'enabled_safe_browsing_toast';
2018-09-14 13:41:34 +00:00
await apiClient.enableSafebrowsing();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
2019-01-22 14:17:33 +00:00
case SETTINGS_NAMES.parental:
2018-09-14 13:41:34 +00:00
if (status) {
2018-11-09 06:51:28 +00:00
successMessage = 'disabled_parental_toast';
2018-09-14 13:41:34 +00:00
await apiClient.disableParentalControl();
} else {
2018-11-09 06:51:28 +00:00
successMessage = 'enabled_parental_toast';
2018-09-14 13:41:34 +00:00
await apiClient.enableParentalControl();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
2019-01-22 14:17:33 +00:00
case SETTINGS_NAMES.safesearch:
2018-09-14 13:41:34 +00:00
if (status) {
2018-11-09 06:51:28 +00:00
successMessage = 'disabled_safe_search_toast';
2018-09-14 13:41:34 +00:00
await apiClient.disableSafesearch();
} else {
2018-11-09 06:51:28 +00:00
successMessage = 'enabled_save_search_toast';
2018-09-14 13:41:34 +00:00
await apiClient.enableSafesearch();
}
dispatch(toggleSettingStatus({ settingKey }));
break;
default:
break;
}
dispatch(addSuccessToast(successMessage));
} catch (error) {
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
}
};
export const initSettingsRequest = createAction('SETTINGS_INIT_REQUEST');
export const initSettingsFailure = createAction('SETTINGS_INIT_FAILURE');
export const initSettingsSuccess = createAction('SETTINGS_INIT_SUCCESS');
export const initSettings = settingsList => async (dispatch) => {
dispatch(initSettingsRequest());
try {
const filteringStatus = await apiClient.getFilteringStatus();
const safebrowsingStatus = await apiClient.getSafebrowsingStatus();
const parentalStatus = await apiClient.getParentalStatus();
const safesearchStatus = await apiClient.getSafesearchStatus();
const {
filtering,
safebrowsing,
parental,
safesearch,
} = settingsList;
const newSettingsList = {
filtering: { ...filtering, enabled: filteringStatus.enabled },
safebrowsing: { ...safebrowsing, enabled: safebrowsingStatus.enabled },
parental: { ...parental, enabled: parentalStatus.enabled },
safesearch: { ...safesearch, enabled: safesearchStatus.enabled },
};
dispatch(initSettingsSuccess({ settingsList: newSettingsList }));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(initSettingsFailure());
}
};
export const getFilteringRequest = createAction('GET_FILTERING_REQUEST');
export const getFilteringFailure = createAction('GET_FILTERING_FAILURE');
export const getFilteringSuccess = createAction('GET_FILTERING_SUCCESS');
export const getFiltering = () => async (dispatch) => {
dispatch(getFilteringRequest());
try {
const filteringStatus = await apiClient.getFilteringStatus();
dispatch(getFilteringSuccess(filteringStatus.enabled));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getFilteringFailure());
}
};
export const toggleProtectionRequest = createAction('TOGGLE_PROTECTION_REQUEST');
export const toggleProtectionFailure = createAction('TOGGLE_PROTECTION_FAILURE');
export const toggleProtectionSuccess = createAction('TOGGLE_PROTECTION_SUCCESS');
export const toggleProtection = status => async (dispatch) => {
dispatch(toggleProtectionRequest());
let successMessage = '';
try {
if (status) {
2018-11-09 06:51:28 +00:00
successMessage = 'disabled_protection';
await apiClient.disableGlobalProtection();
} else {
2018-11-09 06:51:28 +00:00
successMessage = 'enabled_protection';
await apiClient.enableGlobalProtection();
}
dispatch(addSuccessToast(successMessage));
dispatch(toggleProtectionSuccess());
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(toggleProtectionFailure());
}
};
2018-08-30 14:25:33 +00:00
export const dnsStatusRequest = createAction('DNS_STATUS_REQUEST');
export const dnsStatusFailure = createAction('DNS_STATUS_FAILURE');
export const dnsStatusSuccess = createAction('DNS_STATUS_SUCCESS');
export const getDnsStatus = () => async (dispatch) => {
dispatch(dnsStatusRequest());
try {
const dnsStatus = await apiClient.getGlobalStatus();
dispatch(dnsStatusSuccess(dnsStatus));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(initSettingsFailure());
}
};
export const enableDnsRequest = createAction('ENABLE_DNS_REQUEST');
export const enableDnsFailure = createAction('ENABLE_DNS_FAILURE');
export const enableDnsSuccess = createAction('ENABLE_DNS_SUCCESS');
export const enableDns = () => async (dispatch) => {
dispatch(enableDnsRequest());
try {
await apiClient.startGlobalFiltering();
dispatch(enableDnsSuccess());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(enableDnsFailure());
}
};
export const disableDnsRequest = createAction('DISABLE_DNS_REQUEST');
export const disableDnsFailure = createAction('DISABLE_DNS_FAILURE');
export const disableDnsSuccess = createAction('DISABLE_DNS_SUCCESS');
export const disableDns = () => async (dispatch) => {
dispatch(disableDnsRequest());
try {
await apiClient.stopGlobalFiltering();
dispatch(disableDnsSuccess());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(disableDnsFailure(error));
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
}
};
export const getStatsRequest = createAction('GET_STATS_REQUEST');
export const getStatsFailure = createAction('GET_STATS_FAILURE');
export const getStatsSuccess = createAction('GET_STATS_SUCCESS');
export const getStats = () => async (dispatch) => {
dispatch(getStatsRequest());
try {
const stats = await apiClient.getGlobalStats();
const processedStats = {
...stats,
avg_processing_time: round(stats.avg_processing_time, 2),
};
dispatch(getStatsSuccess(processedStats));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(getStatsFailure());
}
};
2018-09-21 12:20:41 +00:00
export const getVersionRequest = createAction('GET_VERSION_REQUEST');
export const getVersionFailure = createAction('GET_VERSION_FAILURE');
export const getVersionSuccess = createAction('GET_VERSION_SUCCESS');
export const getVersion = () => async (dispatch) => {
dispatch(getVersionRequest());
try {
const newVersion = await apiClient.getGlobalVersion();
dispatch(getVersionSuccess(newVersion));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getVersionFailure());
}
};
2018-08-30 14:25:33 +00:00
export const getTopStatsRequest = createAction('GET_TOP_STATS_REQUEST');
export const getTopStatsFailure = createAction('GET_TOP_STATS_FAILURE');
export const getTopStatsSuccess = createAction('GET_TOP_STATS_SUCCESS');
export const getTopStats = () => async (dispatch, getState) => {
dispatch(getTopStatsRequest());
2018-09-12 12:38:54 +00:00
const timer = setInterval(async () => {
2018-08-30 14:25:33 +00:00
const state = getState();
2018-09-12 12:38:54 +00:00
if (state.dashboard.isCoreRunning) {
clearInterval(timer);
try {
const stats = await apiClient.getGlobalStatsTop();
dispatch(getTopStatsSuccess(stats));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
dispatch(getTopStatsFailure(error));
2018-08-30 14:25:33 +00:00
}
2018-09-12 12:38:54 +00:00
}
}, 100);
2018-08-30 14:25:33 +00:00
};
export const getLogsRequest = createAction('GET_LOGS_REQUEST');
export const getLogsFailure = createAction('GET_LOGS_FAILURE');
export const getLogsSuccess = createAction('GET_LOGS_SUCCESS');
export const getLogs = () => async (dispatch, getState) => {
dispatch(getLogsRequest());
2018-09-12 12:38:54 +00:00
const timer = setInterval(async () => {
2018-08-30 14:25:33 +00:00
const state = getState();
2018-09-12 12:38:54 +00:00
if (state.dashboard.isCoreRunning) {
clearInterval(timer);
try {
const logs = normalizeLogs(await apiClient.getQueryLog());
dispatch(getLogsSuccess(logs));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
dispatch(getLogsFailure(error));
2018-08-30 14:25:33 +00:00
}
2018-09-12 12:38:54 +00:00
}
}, 100);
2018-08-30 14:25:33 +00:00
};
export const toggleLogStatusRequest = createAction('TOGGLE_LOGS_REQUEST');
export const toggleLogStatusFailure = createAction('TOGGLE_LOGS_FAILURE');
export const toggleLogStatusSuccess = createAction('TOGGLE_LOGS_SUCCESS');
export const toggleLogStatus = queryLogEnabled => async (dispatch) => {
dispatch(toggleLogStatusRequest());
let toggleMethod;
let successMessage;
2018-08-30 14:25:33 +00:00
if (queryLogEnabled) {
toggleMethod = apiClient.disableQueryLog.bind(apiClient);
2018-11-09 06:51:28 +00:00
successMessage = 'query_log_disabled_toast';
2018-08-30 14:25:33 +00:00
} else {
toggleMethod = apiClient.enableQueryLog.bind(apiClient);
2018-11-09 06:51:28 +00:00
successMessage = 'query_log_enabled_toast';
2018-08-30 14:25:33 +00:00
}
try {
await toggleMethod();
2018-11-09 06:51:28 +00:00
dispatch(addSuccessToast(successMessage));
2018-08-30 14:25:33 +00:00
dispatch(toggleLogStatusSuccess());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(toggleLogStatusFailure());
}
};
export const setRulesRequest = createAction('SET_RULES_REQUEST');
export const setRulesFailure = createAction('SET_RULES_FAILURE');
export const setRulesSuccess = createAction('SET_RULES_SUCCESS');
export const setRules = rules => async (dispatch) => {
dispatch(setRulesRequest());
try {
2018-09-28 14:47:34 +00:00
const replacedLineEndings = rules
.replace(/^\n/g, '')
.replace(/\n\s*\n/g, '\n');
await apiClient.setRules(replacedLineEndings);
2018-11-09 06:51:28 +00:00
dispatch(addSuccessToast('updated_custom_filtering_toast'));
2018-08-30 14:25:33 +00:00
dispatch(setRulesSuccess());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(setRulesFailure());
}
};
export const getFilteringStatusRequest = createAction('GET_FILTERING_STATUS_REQUEST');
export const getFilteringStatusFailure = createAction('GET_FILTERING_STATUS_FAILURE');
export const getFilteringStatusSuccess = createAction('GET_FILTERING_STATUS_SUCCESS');
export const getFilteringStatus = () => async (dispatch) => {
dispatch(getFilteringStatusRequest());
try {
const status = await apiClient.getFilteringStatus();
dispatch(getFilteringStatusSuccess({ status: normalizeFilteringStatus(status) }));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(getFilteringStatusFailure());
}
};
export const toggleFilterRequest = createAction('FILTER_ENABLE_REQUEST');
export const toggleFilterFailure = createAction('FILTER_ENABLE_FAILURE');
export const toggleFilterSuccess = createAction('FILTER_ENABLE_SUCCESS');
export const toggleFilterStatus = url => async (dispatch, getState) => {
dispatch(toggleFilterRequest());
const state = getState();
const { filters } = state.filtering;
const filter = filters.filter(filter => filter.url === url)[0];
const { enabled } = filter;
let toggleStatusMethod;
if (enabled) {
toggleStatusMethod = apiClient.disableFilter.bind(apiClient);
} else {
toggleStatusMethod = apiClient.enableFilter.bind(apiClient);
}
try {
await toggleStatusMethod(url);
dispatch(toggleFilterSuccess(url));
dispatch(getFilteringStatus());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(toggleFilterFailure());
}
};
export const refreshFiltersRequest = createAction('FILTERING_REFRESH_REQUEST');
export const refreshFiltersFailure = createAction('FILTERING_REFRESH_FAILURE');
export const refreshFiltersSuccess = createAction('FILTERING_REFRESH_SUCCESS');
export const refreshFilters = () => async (dispatch) => {
dispatch(refreshFiltersRequest());
dispatch(showLoading());
2018-08-30 14:25:33 +00:00
try {
const refreshText = await apiClient.refreshFilters();
dispatch(refreshFiltersSuccess());
if (refreshText.includes('OK')) {
if (refreshText.includes('OK 0')) {
2018-11-09 06:51:28 +00:00
dispatch(addSuccessToast('all_filters_up_to_date_toast'));
} else {
dispatch(addSuccessToast(refreshText.replace(/OK /g, '')));
}
} else {
dispatch(addErrorToast({ error: refreshText }));
}
2018-08-30 14:25:33 +00:00
dispatch(getFilteringStatus());
dispatch(hideLoading());
2018-08-30 14:25:33 +00:00
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(refreshFiltersFailure());
dispatch(hideLoading());
2018-08-30 14:25:33 +00:00
}
};
export const handleRulesChange = createAction('HANDLE_RULES_CHANGE');
export const getStatsHistoryRequest = createAction('GET_STATS_HISTORY_REQUEST');
export const getStatsHistoryFailure = createAction('GET_STATS_HISTORY_FAILURE');
export const getStatsHistorySuccess = createAction('GET_STATS_HISTORY_SUCCESS');
export const getStatsHistory = () => async (dispatch) => {
dispatch(getStatsHistoryRequest());
try {
const statsHistory = await apiClient.getGlobalStatsHistory();
const normalizedHistory = normalizeHistory(statsHistory);
dispatch(getStatsHistorySuccess(normalizedHistory));
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(getStatsHistoryFailure());
}
};
export const addFilterRequest = createAction('ADD_FILTER_REQUEST');
export const addFilterFailure = createAction('ADD_FILTER_FAILURE');
export const addFilterSuccess = createAction('ADD_FILTER_SUCCESS');
export const addFilter = (url, name) => async (dispatch) => {
2018-08-30 14:25:33 +00:00
dispatch(addFilterRequest());
try {
await apiClient.addFilter(url, name);
2018-08-30 14:25:33 +00:00
dispatch(addFilterSuccess(url));
dispatch(getFilteringStatus());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(addFilterFailure());
}
};
export const removeFilterRequest = createAction('ADD_FILTER_REQUEST');
export const removeFilterFailure = createAction('ADD_FILTER_FAILURE');
export const removeFilterSuccess = createAction('ADD_FILTER_SUCCESS');
export const removeFilter = url => async (dispatch) => {
dispatch(removeFilterRequest());
try {
await apiClient.removeFilter(url);
dispatch(removeFilterSuccess(url));
dispatch(getFilteringStatus());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(removeFilterFailure());
}
};
export const toggleFilteringModal = createAction('FILTERING_MODAL_TOGGLE');
export const downloadQueryLogRequest = createAction('DOWNLOAD_QUERY_LOG_REQUEST');
export const downloadQueryLogFailure = createAction('DOWNLOAD_QUERY_LOG_FAILURE');
export const downloadQueryLogSuccess = createAction('DOWNLOAD_QUERY_LOG_SUCCESS');
export const downloadQueryLog = () => async (dispatch) => {
let data;
dispatch(downloadQueryLogRequest());
try {
data = await apiClient.downloadQueryLog();
dispatch(downloadQueryLogSuccess());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(downloadQueryLogFailure());
}
return data;
};
export const handleUpstreamChange = createAction('HANDLE_UPSTREAM_CHANGE');
export const setUpstreamRequest = createAction('SET_UPSTREAM_REQUEST');
export const setUpstreamFailure = createAction('SET_UPSTREAM_FAILURE');
export const setUpstreamSuccess = createAction('SET_UPSTREAM_SUCCESS');
export const setUpstream = url => async (dispatch) => {
dispatch(setUpstreamRequest());
try {
await apiClient.setUpstream(url);
2018-11-09 06:51:28 +00:00
dispatch(addSuccessToast('updated_upstream_dns_toast'));
2018-08-30 14:25:33 +00:00
dispatch(setUpstreamSuccess());
} catch (error) {
2018-09-14 12:37:35 +00:00
dispatch(addErrorToast({ error }));
2018-08-30 14:25:33 +00:00
dispatch(setUpstreamFailure());
}
};
export const testUpstreamRequest = createAction('TEST_UPSTREAM_REQUEST');
export const testUpstreamFailure = createAction('TEST_UPSTREAM_FAILURE');
export const testUpstreamSuccess = createAction('TEST_UPSTREAM_SUCCESS');
export const testUpstream = servers => async (dispatch) => {
dispatch(testUpstreamRequest());
try {
2018-09-21 15:50:06 +00:00
const upstreamResponse = await apiClient.testUpstream(servers);
2018-09-21 15:50:06 +00:00
const testMessages = Object.keys(upstreamResponse).map((key) => {
const message = upstreamResponse[key];
if (message !== 'OK') {
2018-11-09 06:51:28 +00:00
dispatch(addErrorToast({ error: t('dns_test_not_ok_toast', { key }) }));
}
2018-09-21 15:50:06 +00:00
return message;
});
2018-09-21 15:57:27 +00:00
if (testMessages.every(message => message === 'OK')) {
2018-11-09 06:51:28 +00:00
dispatch(addSuccessToast('dns_test_ok_toast'));
}
2018-09-21 15:50:06 +00:00
dispatch(testUpstreamSuccess());
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(testUpstreamFailure());
}
};
2018-11-22 14:56:57 +00:00
export const changeLanguageRequest = createAction('CHANGE_LANGUAGE_REQUEST');
export const changeLanguageFailure = createAction('CHANGE_LANGUAGE_FAILURE');
export const changeLanguageSuccess = createAction('CHANGE_LANGUAGE_SUCCESS');
export const changeLanguage = lang => async (dispatch) => {
dispatch(changeLanguageRequest());
try {
await apiClient.changeLanguage(lang);
dispatch(changeLanguageSuccess());
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(changeLanguageFailure());
}
};
export const getLanguageRequest = createAction('GET_LANGUAGE_REQUEST');
export const getLanguageFailure = createAction('GET_LANGUAGE_FAILURE');
export const getLanguageSuccess = createAction('GET_LANGUAGE_SUCCESS');
export const getLanguage = () => async (dispatch) => {
dispatch(getLanguageRequest());
try {
const language = await apiClient.getCurrentLanguage();
dispatch(getLanguageSuccess(language));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getLanguageFailure());
}
};
export const getDhcpStatusRequest = createAction('GET_DHCP_STATUS_REQUEST');
export const getDhcpStatusSuccess = createAction('GET_DHCP_STATUS_SUCCESS');
export const getDhcpStatusFailure = createAction('GET_DHCP_STATUS_FAILURE');
export const getDhcpStatus = () => async (dispatch) => {
dispatch(getDhcpStatusRequest());
try {
const status = await apiClient.getDhcpStatus();
dispatch(getDhcpStatusSuccess(status));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getDhcpStatusFailure());
}
};
2018-12-24 08:48:23 +00:00
export const getDhcpInterfacesRequest = createAction('GET_DHCP_INTERFACES_REQUEST');
export const getDhcpInterfacesSuccess = createAction('GET_DHCP_INTERFACES_SUCCESS');
export const getDhcpInterfacesFailure = createAction('GET_DHCP_INTERFACES_FAILURE');
export const getDhcpInterfaces = () => async (dispatch) => {
dispatch(getDhcpInterfacesRequest());
try {
const interfaces = await apiClient.getDhcpInterfaces();
dispatch(getDhcpInterfacesSuccess(interfaces));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getDhcpInterfacesFailure());
}
};
export const findActiveDhcpRequest = createAction('FIND_ACTIVE_DHCP_REQUEST');
export const findActiveDhcpSuccess = createAction('FIND_ACTIVE_DHCP_SUCCESS');
export const findActiveDhcpFailure = createAction('FIND_ACTIVE_DHCP_FAILURE');
export const findActiveDhcp = name => async (dispatch) => {
dispatch(findActiveDhcpRequest());
try {
const activeDhcp = await apiClient.findActiveDhcp(name);
dispatch(findActiveDhcpSuccess(activeDhcp));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(findActiveDhcpFailure());
}
};
export const setDhcpConfigRequest = createAction('SET_DHCP_CONFIG_REQUEST');
export const setDhcpConfigSuccess = createAction('SET_DHCP_CONFIG_SUCCESS');
export const setDhcpConfigFailure = createAction('SET_DHCP_CONFIG_FAILURE');
// TODO rewrite findActiveDhcp part
2019-01-23 14:22:04 +00:00
export const setDhcpConfig = values => async (dispatch, getState) => {
const { config } = getState().dhcp;
const updatedConfig = { ...config, ...values };
dispatch(setDhcpConfigRequest());
2019-01-23 14:22:04 +00:00
if (values.interface_name) {
2019-01-22 14:17:33 +00:00
dispatch(findActiveDhcpRequest());
try {
2019-01-23 14:22:04 +00:00
const activeDhcp = await apiClient.findActiveDhcp(values.interface_name);
2019-01-22 14:17:33 +00:00
dispatch(findActiveDhcpSuccess(activeDhcp));
if (!activeDhcp.found) {
2019-01-23 14:22:04 +00:00
try {
await apiClient.setDhcpConfig(updatedConfig);
dispatch(setDhcpConfigSuccess(updatedConfig));
dispatch(addSuccessToast('dhcp_config_saved'));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(setDhcpConfigFailure());
}
2019-01-22 14:17:33 +00:00
} else {
dispatch(addErrorToast({ error: 'dhcp_found' }));
}
2019-01-22 14:17:33 +00:00
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(findActiveDhcpFailure());
}
} else {
try {
2019-01-23 14:22:04 +00:00
await apiClient.setDhcpConfig(updatedConfig);
dispatch(setDhcpConfigSuccess(updatedConfig));
dispatch(addSuccessToast('dhcp_config_saved'));
2019-01-22 14:17:33 +00:00
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(setDhcpConfigFailure());
}
}
};
export const toggleDhcpRequest = createAction('TOGGLE_DHCP_REQUEST');
export const toggleDhcpFailure = createAction('TOGGLE_DHCP_FAILURE');
export const toggleDhcpSuccess = createAction('TOGGLE_DHCP_SUCCESS');
// TODO rewrite findActiveDhcp part
2018-12-13 11:38:00 +00:00
export const toggleDhcp = config => async (dispatch) => {
dispatch(toggleDhcpRequest());
if (config.enabled) {
try {
2018-12-13 11:38:00 +00:00
await apiClient.setDhcpConfig({ ...config, enabled: false });
dispatch(toggleDhcpSuccess());
2019-01-23 14:22:04 +00:00
dispatch(addSuccessToast('disabled_dhcp'));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(toggleDhcpFailure());
}
} else {
dispatch(findActiveDhcpRequest());
try {
const activeDhcp = await apiClient.findActiveDhcp(config.interface_name);
dispatch(findActiveDhcpSuccess(activeDhcp));
if (!activeDhcp.found) {
try {
await apiClient.setDhcpConfig({ ...config, enabled: true });
dispatch(toggleDhcpSuccess());
2019-01-23 14:22:04 +00:00
dispatch(addSuccessToast('enabled_dhcp'));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(toggleDhcpFailure());
}
} else {
dispatch(addErrorToast({ error: 'dhcp_found' }));
}
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(findActiveDhcpFailure());
}
}
};