���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!language.php000066600000003037151734541700007056 0ustar00 isset( $details['language'] ) ? $this->sanitize_language( $details['language'] ) : '' ); return $this->save_data( $details, $no_target_url, $data ); } /** * Sanitize the language value to a CSV string * * @param string $language User supplied language strings. * @return string */ private function sanitize_language( $language ) { $parts = explode( ',', str_replace( ' ', '', sanitize_text_field( $language ) ) ); return implode( ',', $parts ); } public function is_match( $url ) { $matches = explode( ',', $this->language ); $requested = Redirection_Request::get_accept_language(); foreach ( $matches as $match ) { if ( in_array( $match, $requested, true ) ) { return true; } } return false; } public function get_data() { return array_merge( array( 'language' => $this->language, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->language = isset( $values['language'] ) ? $values['language'] : ''; } } url.php000066600000001730151734541700006073 0ustar00sanitize_url( $data ); } public function is_match( $url ) { return true; } public function get_target_url( $original_url, $matched_url, Red_Source_Flags $flag, $is_matched ) { $target = $this->url; if ( $flag->is_regex() ) { $target = $this->get_target_regex_url( $matched_url, $target, $original_url, $flag ); } return $target; } public function get_data() { if ( $this->url ) { return [ 'url' => $this->url, ]; } return null; } public function load( $values ) { $this->url = $values; } } login.php000066600000003324151734541700006402 0ustar00 isset( $details['logged_in'] ) ? $this->sanitize_url( $details['logged_in'] ) : '', 'logged_out' => isset( $details['logged_out'] ) ? $this->sanitize_url( $details['logged_out'] ) : '', ]; } public function is_match( $url ) { return is_user_logged_in(); } public function get_target_url( $requested_url, $source_url, Red_Source_Flags $flags, $match ) { $target = false; if ( $match && $this->logged_in !== '' ) { $target = $this->logged_in; } elseif ( ! $match && $this->logged_out !== '' ) { $target = $this->logged_out; } if ( $flags->is_regex() && $target ) { $target = $this->get_target_regex_url( $source_url, $target, $requested_url, $flags ); } return $target; } public function get_data() { return [ 'logged_in' => $this->logged_in, 'logged_out' => $this->logged_out, ]; } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = unserialize( $values ); $this->logged_in = isset( $values['logged_in'] ) ? $values['logged_in'] : ''; $this->logged_out = isset( $values['logged_out'] ) ? $values['logged_out'] : ''; } } referrer.php000066600000003037151734541700007107 0ustar00 isset( $details['regex'] ) && $details['regex'] ? true : false, 'referrer' => isset( $details['referrer'] ) ? $this->sanitize_referrer( $details['referrer'] ) : '', ); return $this->save_data( $details, $no_target_url, $data ); } public function sanitize_referrer( $agent ) { return $this->sanitize_url( $agent ); } public function is_match( $url ) { if ( $this->regex ) { $regex = new Red_Regex( $this->referrer, true ); return $regex->is_match( Redirection_Request::get_referrer() ); } return Redirection_Request::get_referrer() === $this->referrer; } public function get_data() { return array_merge( array( 'regex' => $this->regex, 'referrer' => $this->referrer, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->regex = isset( $values['regex'] ) ? $values['regex'] : false; $this->referrer = isset( $values['referrer'] ) ? $values['referrer'] : ''; } } user-agent.php000066600000003010151734541700007334 0ustar00 isset( $details['regex'] ) && $details['regex'] ? true : false, 'agent' => isset( $details['agent'] ) ? $this->sanitize_agent( $details['agent'] ) : '', ); return $this->save_data( $details, $no_target_url, $data ); } private function sanitize_agent( $agent ) { return $this->sanitize_url( $agent ); } public function is_match( $url ) { if ( $this->regex ) { $regex = new Red_Regex( $this->agent, true ); return $regex->is_match( Redirection_Request::get_user_agent() ); } return $this->agent === Redirection_Request::get_user_agent(); } public function get_data() { return array_merge( array( 'regex' => $this->regex, 'agent' => $this->agent, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->regex = isset( $values['regex'] ) ? $values['regex'] : false; $this->agent = isset( $values['agent'] ) ? $values['agent'] : ''; } } cookie.php000066600000000762151734541700006546 0ustar00regex ) { $regex = new Red_Regex( $this->value, true ); return $regex->is_match( Redirection_Request::get_cookie( $this->name ) ); } return Redirection_Request::get_cookie( $this->name ) === $this->value; } } custom-filter.php000066600000002040151734541700010061 0ustar00 isset( $details['filter'] ) ? $this->sanitize_filter( $details['filter'] ) : '', ]; return $this->save_data( $details, $no_target_url, $data ); } public function sanitize_filter( $name ) { $name = preg_replace( '/[^A-Za-z0-9\-_]/', '', sanitize_text_field( $name ) ); return trim( $name ); } public function is_match( $url ) { return apply_filters( $this->filter, false, $url ); } public function get_data() { return array_merge( [ 'filter' => $this->filter, ], $this->get_from_data() ); } public function load( $values ) { $values = $this->load_data( $values ); $this->filter = isset( $values['filter'] ) ? $values['filter'] : ''; } } server.php000066600000002657151734541700006610 0ustar00 isset( $details['server'] ) ? $this->sanitize_server( $details['server'] ) : '' ); return $this->save_data( $details, $no_target_url, $data ); } private function sanitize_server( $server ) { if ( strpos( $server, 'http' ) === false ) { $server = ( is_ssl() ? 'https://' : 'http://' ) . $server; } $parts = wp_parse_url( $server ); if ( isset( $parts['host'] ) ) { return $parts['scheme'] . '://' . $parts['host']; } return ''; } public function is_match( $url ) { $server = wp_parse_url( $this->server, PHP_URL_HOST ); return $server === Redirection_Request::get_server_name(); } public function get_data() { return array_merge( array( 'server' => $this->server, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->server = isset( $values['server'] ) ? $values['server'] : ''; } } page.php000066600000002055151734541700006206 0ustar00 isset( $details['page'] ) ? $this->sanitize_page( $details['page'] ) : '404' ); return $this->save_data( $details, $no_target_url, $data ); } private function sanitize_page( $page ) { return '404'; } public function is_match( $url ) { return is_404(); } public function get_data() { return array_merge( array( 'page' => $this->page, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->page = isset( $values['page'] ) ? $values['page'] : '404'; } } from-notfrom.php000066600000005164151734541700007723 0ustar00 isset( $details['url_from'] ) ? $this->sanitize_url( $details['url_from'] ) : '', 'url_notfrom' => isset( $details['url_notfrom'] ) ? $this->sanitize_url( $details['url_notfrom'] ) : '', ), $data ); } return $data; } /** * Get target URL for this match, depending on whether we match or not * * @param string $requested_url Request URL. * @param string $source_url Redirect source URL. * @param Red_Source_Flags $flags Redirect flags. * @param boolean $matched Has the source been matched. * @return string|false */ public function get_target_url( $requested_url, $source_url, Red_Source_Flags $flags, $matched ) { // Action needs a target URL based on whether we matched or not $target = $this->get_matched_target( $matched ); if ( $flags->is_regex() && $target ) { return $this->get_target_regex_url( $source_url, $target, $requested_url, $flags ); } return $target; } /** * Return the matched target if we have matched and one exists, or return the unmatched target if not matched. * * @param boolean $matched Is it matched. * @return false|string */ private function get_matched_target( $matched ) { if ( $this->url_from !== '' && $matched ) { return $this->url_from; } if ( $this->url_notfrom !== '' && ! $matched ) { return $this->url_notfrom; } return false; } /** * Load the data into the instance. * * @param string $values Serialized PHP data. * @return array */ private function load_data( $values ) { $values = @unserialize( $values ); if ( isset( $values['url_from'] ) ) { $this->url_from = $values['url_from']; } if ( isset( $values['url_notfrom'] ) ) { $this->url_notfrom = $values['url_notfrom']; } return $values; } /** * Get the match data * * @return array */ private function get_from_data() { return [ 'url_from' => $this->url_from, 'url_notfrom' => $this->url_notfrom, ]; } } http-header.php000066600000004053151734541700007477 0ustar00 isset( $details['regex'] ) && $details['regex'] ? true : false, 'name' => isset( $details['name'] ) ? $this->sanitize_name( $details['name'] ) : '', 'value' => isset( $details['value'] ) ? $this->sanitize_value( $details['value'] ) : '', ); return $this->save_data( $details, $no_target_url, $data ); } public function sanitize_name( $name ) { $name = $this->sanitize_url( sanitize_text_field( $name ) ); $name = str_replace( ' ', '', $name ); $name = preg_replace( '/[^A-Za-z0-9\-_]/', '', $name ); return trim( trim( $name, ':' ) ); } public function sanitize_value( $value ) { return $this->sanitize_url( sanitize_text_field( $value ) ); } public function is_match( $url ) { if ( $this->regex ) { $regex = new Red_Regex( $this->value, true ); return $regex->is_match( Redirection_Request::get_header( $this->name ) ); } return Redirection_Request::get_header( $this->name ) === $this->value; } public function get_data() { return array_merge( array( 'regex' => $this->regex, 'name' => $this->name, 'value' => $this->value, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->regex = isset( $values['regex'] ) ? $values['regex'] : false; $this->name = isset( $values['name'] ) ? $values['name'] : ''; $this->value = isset( $values['value'] ) ? $values['value'] : ''; } } ip.php000066600000003434151734541700005704 0ustar00 isset( $details['ip'] ) && is_array( $details['ip'] ) ? $this->sanitize_ips( $details['ip'] ) : [] ); return $this->save_data( $details, $no_target_url, $data ); } /** * Sanitize a single IP * * @param string $ip IP. * @return string|false */ private function sanitize_single_ip( $ip ) { $ip = @inet_pton( trim( sanitize_text_field( $ip ) ) ); if ( $ip !== false ) { return @inet_ntop( $ip ); // Convert back to string } return false; } /** * Sanitize a list of IPs * * @param string[] $ips List of IPs. * @return string[] */ private function sanitize_ips( array $ips ) { $ips = array_map( array( $this, 'sanitize_single_ip' ), $ips ); return array_values( array_filter( array_unique( $ips ) ) ); } /** * Get a list of IPs that match. * * @param string $match_ip IP to match. * @return string[] */ private function get_matching_ips( $match_ip ) { $current_ip = @inet_pton( $match_ip ); return array_filter( $this->ip, function( $ip ) use ( $current_ip ) { return @inet_pton( $ip ) === $current_ip; } ); } public function is_match( $url ) { $matched = $this->get_matching_ips( Redirection_Request::get_ip() ); return count( $matched ) > 0; } public function get_data() { return array_merge( array( 'ip' => $this->ip, ), $this->get_from_data() ); } public function load( $values ) { $values = $this->load_data( $values ); $this->ip = isset( $values['ip'] ) ? $values['ip'] : []; } } from-url.php000066600000003741151734541700007040 0ustar00 isset( $details['url'] ) ? $this->sanitize_url( $details['url'] ) : '', ], $data ); } return $data; } /** * Get target URL for this match, depending on whether we match or not * * @param string $requested_url Request URL. * @param string $source_url Redirect source URL. * @param Red_Source_Flags $flags Redirect flags. * @param boolean $matched Is the URL matched. * @return string|false */ public function get_target_url( $requested_url, $source_url, Red_Source_Flags $flags, $matched ) { $target = $this->get_matched_target( $matched ); if ( $flags->is_regex() && $target ) { return $this->get_target_regex_url( $source_url, $target, $requested_url, $flags ); } return $target; } /** * Return the matched target, if one exists. * * @param boolean $matched Is it matched. * @return false|string */ private function get_matched_target( $matched ) { if ( $matched ) { return $this->url; } return false; } /** * Load the data into the instance. * * @param string $values Serialized PHP data. * @return array */ private function load_data( $values ) { $values = unserialize( $values ); if ( isset( $values['url'] ) ) { $this->url = $values['url']; } return $values; } /** * Get the loaded data as an array. * * @return array */ private function get_from_data() { return [ 'url' => $this->url, ]; } } user-role.php000066600000001777151734541700007221 0ustar00 isset( $details['role'] ) ? $details['role'] : '' ); return $this->save_data( $details, $no_target_url, $data ); } public function is_match( $url ) { return current_user_can( $this->role ); } public function get_data() { return array_merge( array( 'role' => $this->role, ), $this->get_from_data() ); } /** * Load the match data into this instance. * * @param string $values Match values, as read from the database (plain text or serialized PHP). * @return void */ public function load( $values ) { $values = $this->load_data( $values ); $this->role = isset( $values['role'] ) ? $values['role'] : ''; } }