HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/delta/wp-content/plugins/better-wp-security/core/packages/data/src/firewall/actions.js
/**
 * External dependencies
 */
import { isEqual } from 'lodash';

/**
 * WordPress dependencies
 */
import { addQueryArgs, getQueryArg } from '@wordpress/url';
import apiFetch from '@wordpress/api-fetch';

/**
 * Internal dependencies
 */
import { getSelf } from '@ithemes/security-utils';
import { path } from './constant';

export const query = ( queryId, queryParams = {} ) => async ( { dispatch } ) => {
	let response, items;

	dispatch( { type: START_QUERY, queryId, queryParams } );

	try {
		response = await apiFetch( {
			path: addQueryArgs( path, queryParams ),
			parse: false,
		} );
		items = await response.json();
	} catch ( error ) {
		dispatch( { type: FAILED_QUERY, queryId, queryParams, error } );

		return error;
	}

	dispatch( receiveQuery(
		queryId,
		queryParams.context || 'view',
		response,
		items,
		'replace'
	) );
	dispatch( { type: FINISH_QUERY, queryId, queryParams, response } );

	return items;
};

export const refreshQuery = ( queryId ) => async ( { select, dispatch } ) => {
	const queryParams = select.getQueryParams( queryId );
	dispatch.query( queryId, queryParams );
};

export const fetchQueryPrevPage = ( queryId, mode = 'append' ) => ( ...args ) => {
	return fetchQueryLink( queryId, 'prev', mode )( ...args );
};

export const fetchQueryNextPage = ( queryId, mode = 'append' ) => ( ...args ) => {
	return fetchQueryLink( queryId, 'next', mode )( ...args );
};

const fetchQueryLink = ( queryId, rel, mode ) => async ( { select, dispatch } ) => {
	const link = select.getQueryHeaderLink(
		queryId,
		rel
	);

	if ( ! link ) {
		return [];
	}

	let response, items;

	dispatch( { type: START_QUERY, queryId } );

	try {
		response = await apiFetch( {
			url: link.link,
			parse: false,
		} );
		items = await response.json();
	} catch ( error ) {
		dispatch( { type: FAILED_QUERY, queryId, error } );

		return error;
	}

	const context = getQueryArg( link.link, 'context' ) || 'view';
	dispatch( receiveQuery( queryId, context, response, items, mode ) );
	dispatch( { type: FINISH_QUERY, queryId, response } );

	return response;
};

export const editItem = ( self, edit ) => async ( { select, dispatch } ) => {
	const item = select.getItem( self );
	const edited = select.getEditedItem( self );

	// If our edits are restoring us to the current state of the item,
	// just clear all the edits instead.
	if ( isEqual( item, { ...edited, ...edit } ) ) {
		dispatch( {
			type: 'RESET_EDITS',
			self,
		} );
	} else {
		dispatch( {
			type: 'EDIT_ITEM',
			self,
			edit,
		} );
	}
};

export function resetEdits( self ) {
	return {
		type: 'RESET_EDITS',
		self,
	};
}

export function resetAllEdits() {
	return {
		type: 'RESET_ALL_EDITS',
	};
}

export const saveEditedItem = ( self ) => async ( { select, dispatch } ) => {
	const edited = select.getEditedItem( self );

	if ( ! edited || ! select.isDirty( self ) ) {
		return edited;
	}

	const saved = await dispatch.saveItem( edited );

	dispatch( resetEdits( self ) );

	return saved;
};

export const saveItem = ( item ) => async ( { dispatch } ) => {
	const self = getSelf( item );

	if ( self ) {
		dispatch( { type: 'START_SAVING', self } );
	}

	try {
		const response = await apiFetch( {
			url: self,
			path: ! self && path,
			method: self ? 'PUT' : 'POST',
			data: item,
		} );
		dispatch( { type: 'RECEIVE_ITEM', item: response } );

		if ( self ) {
			dispatch( { type: 'FINISH_SAVING', self } );
		}

		return response;
	} catch ( error ) {
		if ( self ) {
			dispatch( { type: 'FAILED_SAVING', self, error } );
		}

		throw error;
	}
};

export const deleteItem = ( self ) => async ( { dispatch } ) => {
	dispatch( { type: 'START_DELETING', self } );

	try {
		await apiFetch( {
			url: self,
			method: 'DELETE',
		} );
		dispatch( { type: 'FINISH_DELETING', self } );
	} catch ( error ) {
		dispatch( { type: 'FAILED_DELETING', self, error } );
	}
};

function receiveQuery( queryId, context, response, items, mode ) {
	return {
		type: RECEIVE_QUERY,
		queryId,
		context,
		response,
		items,
		mode,
	};
}

export const RECEIVE_QUERY = 'RECEIVE_QUERY';
export const RECEIVE_ITEM = 'RECEIVE_ITEM';

export const START_QUERY = 'START_QUERY';
export const FINISH_QUERY = 'FINISH_QUERY';
export const FAILED_QUERY = 'FAILED_QUERY';