Viewing File: /home/rtsgrob/ww3/wp-content/plugins/integromat-connector/class/class-logger.php

<?php

namespace Integromat;

class Logger {
	const MAXFILESIZEMB = 5;
	const CIPHERMETHOD  = 'AES-256-ECB';

	private static function get_file_location() {
		return WP_CONTENT_DIR . '/uploads/iwclog.dat';
	}

	private static function check() {
		if ( ! self::file_exists() ) {
			self::create_file();
		} else {
			$fsize = filesize( self::get_file_location() );
			if ( $fsize > ( self::MAXFILESIZEMB * 1000000 ) ) {
				self::create_file();
			}
		}
	}

	private static function create_file() {
		$init                            = 'Log file initiated @ ' . date( 'Y-m-d G:i:s' ) . "\n=SERVER INFO START=";
		$server_data                     = $_SERVER;
		$server_data['REQUEST_URI']      = self::strip_request_query( sanitize_url( $_SERVER['REQUEST_URI'] ) );
		$server_data['HTTP_IWC_API_KEY'] = ( isset( $server_data['HTTP_IWC_API_KEY'] ) ? substr( sanitize_text_field( $_SERVER['HTTP_IWC_API_KEY'] ), 0, 5 ) . '...' : 'Not Provided' );

		$server_data['SERVER_SOFTWARE']    = sanitize_text_field( $_SERVER['SERVER_SOFTWARE'] );
		$server_data['REQUEST_URI']        = sanitize_url( $_SERVER['REQUEST_URI'] );
		$server_data['REDIRECT_UNIQUE_ID'] = sanitize_text_field( $_SERVER['REDIRECT_UNIQUE_ID'] );

		$server_data['REDIRECT_STATUS']                  = sanitize_text_field( $_SERVER['REDIRECT_STATUS'] );
		$server_data['UNIQUE_ID']                        = sanitize_text_field( $_SERVER['UNIQUE_ID'] );
		$server_data['HTTP_X_DATADOG_SAMPLING_PRIORITY'] = sanitize_text_field( $_SERVER['HTTP_X_DATADOG_SAMPLING_PRIORITY'] );
		$server_data['HTTP_X_DATADOG_SAMPLED']           = sanitize_text_field( $_SERVER['HTTP_X_DATADOG_SAMPLED'] );
		$server_data['HTTP_X_DATADOG_PARENT_ID']         = sanitize_text_field( $_SERVER['HTTP_X_DATADOG_PARENT_ID'] );

		$server_data['HTTP_X_DATADOG_TRACE_ID'] = sanitize_text_field( $_SERVER['HTTP_X_DATADOG_TRACE_ID'] );
		$server_data['CONTENT_TYPE']            = sanitize_text_field( $_SERVER['CONTENT_TYPE'] );
		$server_data['HTTP_USER_AGENT']         = sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] );
		$server_data['HTTP_X_FORWARDED_PORT']   = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_PORT'] );

		$server_data['HTTP_X_FORWARDED_SSL']   = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_SSL'] );
		$server_data['HTTP_X_FORWARDED_PROTO'] = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_PROTO'] );
		$server_data['HTTP_X_FORWARDED_FOR']   = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_FOR'] );
		$server_data['HTTP_X_REAL_IP']         = sanitize_text_field( $_SERVER['HTTP_X_REAL_IP'] );
		$server_data['HTTP_CONNECTION']        = sanitize_text_field( $_SERVER['HTTP_CONNECTION'] );
		$server_data['HTTP_HOST']              = sanitize_text_field( $_SERVER['HTTP_HOST'] );
		$server_data['HTTP_X_FORWARDED_HOST']  = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_HOST'] );
		$server_data['PATH']                   = sanitize_text_field( $_SERVER['PATH'] );
		$server_data['DYLD_LIBRARY_PATH']      = sanitize_text_field( $_SERVER['DYLD_LIBRARY_PATH'] );
		$server_data['SERVER_SIGNATURE']       = sanitize_text_field( $_SERVER['SERVER_SIGNATURE'] );
		$server_data['SERVER_NAME']            = sanitize_text_field( $_SERVER['SERVER_NAME'] );
		$server_data['SERVER_ADDR']            = sanitize_text_field( $_SERVER['SERVER_ADDR'] );
		$server_data['SERVER_PORT']            = sanitize_text_field( $_SERVER['SERVER_PORT'] );
		$server_data['REMOTE_ADDR']            = sanitize_text_field( $_SERVER['REMOTE_ADDR'] );
		$server_data['DOCUMENT_ROOT']          = sanitize_text_field( $_SERVER['DOCUMENT_ROOT'] );
		$server_data['REQUEST_SCHEME']         = sanitize_text_field( $_SERVER['REQUEST_SCHEME'] );
		$server_data['CONTEXT_PREFIX']         = sanitize_text_field( $_SERVER['CONTEXT_PREFIX'] );
		$server_data['CONTEXT_DOCUMENT_ROOT']  = sanitize_text_field( $_SERVER['CONTEXT_DOCUMENT_ROOT'] );
		$server_data['SERVER_ADMIN']           = sanitize_email( $_SERVER['SERVER_ADMIN'] );
		$server_data['SCRIPT_FILENAME']        = sanitize_text_field( $_SERVER['SCRIPT_FILENAME'] );
		$server_data['REMOTE_PORT']            = sanitize_text_field( $_SERVER['REMOTE_PORT'] );
		$server_data['REDIRECT_URL']           = sanitize_text_field( $_SERVER['REDIRECT_URL'] );
		$server_data['GATEWAY_INTERFACE']      = sanitize_text_field( $_SERVER['GATEWAY_INTERFACE'] );
		$server_data['SERVER_PROTOCOL']        = sanitize_text_field( $_SERVER['SERVER_PROTOCOL'] );
		$server_data['REQUEST_METHOD']         = sanitize_text_field( $_SERVER['REQUEST_METHOD'] );
		$server_data['SCRIPT_NAME']            = sanitize_text_field( $_SERVER['SCRIPT_NAME'] );
		$server_data['PHP_SELF']               = sanitize_text_field( $_SERVER['PHP_SELF'] );
		$server_data['REQUEST_TIME_FLOAT']     = sanitize_text_field( $_SERVER['REQUEST_TIME_FLOAT'] );
		$server_data['REQUEST_TIME']           = sanitize_text_field( $_SERVER['REQUEST_TIME'] );

		/*
		unset( $server_data['QUERY_STRING'] );
		unset( $server_data['REDIRECT_QUERY_STRING'] );
		unset( $server_data['HTTP_AUTHORIZATION'] );
		unset( $server_data['REDIRECT_HTTP_AUTHORIZATION'] );
		unset( $server_data['HTTP_COOKIE'] );
		if ( isset( $server_data['PHP_AUTH_USER'] ) ) {
			$server_data['PHP_AUTH_USER'] = '*******';
		}
		if ( isset( $server_data['PHP_AUTH_PW'] ) ) {
			$server_data['PHP_AUTH_PW'] = '*******';
		}
		*/
		$init .= str_replace( 'Array', '', print_r( $server_data, true ) ) . "=SERVER INFO END=\n\n";
		file_put_contents( self::get_file_location(), self::encrypt( $init ) );
		if ( ! self::file_exists() ) {
			die( '{"code": "log_write_fail", "message": "Log file can not be created. Check permissions."}' );
		}
	}

	public static function file_exists() {
		return file_exists( self::get_file_location() );
	}

	private static function encrypt( $data ) {
		return openssl_encrypt( $data, self::CIPHERMETHOD, self::get_enc_key() );
	}

	private static function decrypt( $data ) {
		return openssl_decrypt( $data, self::CIPHERMETHOD, self::get_enc_key() );
	}

	private static function strip_request_query( $request ) {
		$f = explode( '?', $request );
		return $f[0];
	}

	private static function get_record( $codes ) {
		$r = array(
			'request' => sanitize_text_field( $_SERVER['REQUEST_METHOD'] ) . ' ' . self::strip_request_query( sanitize_url( $_SERVER['REQUEST_URI'] ) ),
			'ip'      => sanitize_url( $_SERVER['REMOTE_ADDR'] ),
			'codes'   => $codes . '(' . (string) is_user_logged_in() . ')',
		);
		$r = str_replace( array( '[', 'Array', ']' ), '', print_r( $r, true ) );
		$r = str_replace( ' =>', ':', $r );
		return date( 'Y-m-d G:i:s' ) . ' ' . $r . "\n";
	}

	public static function write( $codes ) {
		self::check();
		$log_data     = self::get_plain_file_content();
		$new_log_data = self::encrypt( $log_data . self::get_record( $codes ) );
		file_put_contents( self::get_file_location(), $new_log_data );
	}

	public static function get_plain_file_content() {
		if ( ! file_exists( self::get_file_location() ) ) {
			die( '{"code": "log_read_fail", "message": "Log file does not exist."}' );
		}
		$enc_data = file_get_contents( self::get_file_location() );
		return self::decrypt( $enc_data );
	}

	private static function get_enc_key() {
		$key = get_option( 'iwc_api_key' );
		if ( empty( $key ) ) {
			file_put_contents( self::get_file_location(), 'iwc_api_key Not Found' );
		}
		return $key;
	}

	public static function download() {
		$log_data = self::get_plain_file_content();
		header( 'Content-Type: application/octet-stream' );
		header( 'Content-Transfer-Encoding: Binary' );
		header( 'Content-disposition: attachment; filename="log.txt"' );
		echo $log_data;
		exit;
	}
}
Back to Directory File Manager