'CUSTOM', 'error_log_path' => '/storage/www/logs/', 'error_log_name' => 'sites_auth_errors.log', 'error_log_timezone' => 'Europe/Rome' ); // Configurated options private $options ; /** * Start up */ public function __construct() { // Listen for the activate event register_activation_hook(AX_LOGWRITER_FILE, array($this, 'ax_logwriter_activate')); // Listen for the uninstall event register_uninstall_hook(AX_LOGWRITER_FILE, array('axLogWriter', 'ax_logwriter_uninstall')); add_action( 'wp_login_failed', array( $this, 'ax_logwriter_login_failed_hook' ) ); add_filter( 'xmlrpc_pingback_error', array( $this, 'ax_logwriter_pingback_error_hook' ), 1 ); add_filter( 'plugin_action_links_' . AX_LOGWRITER_BASENAME, array( $this, 'ax_logwriter_settings_link' ) ); add_filter( 'plugin_row_meta', array( $this, 'ax_logwriter_row_meta' ), 10, 2 ); } /** * HOOK functions */ public function ax_logwriter_login_failed_hook($username) { $site_name = "unknown" ; if( function_exists( "get_bloginfo" ) ) { $tmp_site_name = get_bloginfo('name') ; if( !empty( $tmp_site_name ) ) { $site_name = $tmp_site_name; } } $real_ip = $this->ax_logwriter_get_real_ip() ; $this->ax_logwriter_log_writer("Authentication failure on [".$site_name."] for ".$username." from ".$real_ip.""); } public function ax_logwriter_pingback_error_hook($ixr_error) { $site_name = "unknown" ; if( function_exists( "get_bloginfo" ) ) { $tmp_site_name = get_bloginfo('name') ; if( !empty( $tmp_site_name ) ) { $site_name = $tmp_site_name; } } if ( $ixr_error->code === 48 ) return $ixr_error; // don't punish duplication $real_ip = $this->ax_logwriter_get_real_ip() ; $this->ax_logwriter_log_writer("Pingback error ".$ixr_error->code." generated on [".$site_name."] from ".$real_ip.""); return $ixr_error; } public function ax_logwriter_settings_link( $links ) { // Add settings link on plugin page $action_links = array( 'settings' => '' . __('Settings', 'General') . '', ); return array_merge( $action_links, $links ); } /** * Show row meta on the plugin screen. * * @access public * @param mixed $links Plugin Row Meta * @param mixed $file Plugin Base file * @return array */ public function ax_logwriter_row_meta( $links, $file ) { if ( $file == AX_LOGWRITER_BASENAME ) { $row_meta = array( 'home' => 'Home', 'faq' => 'FAQ', 'support' => 'Support', 'rate' => 'Rate', 'donate' => 'Donate', ); return array_merge( $links, $row_meta ); } return (array) $links; } public function ax_logwriter_activate() { // Add option to WP option table update_option($this->option_name, $this->defaults); } static function ax_logwriter_uninstall() { // Remove option from WP option table delete_option('ax_logwriter'); } /** * Operational functions */ public function ax_logwriter_log_writer( $data_to_write = "Unkown error for authentication or xmlrpc" ) { /** * Function used for writing the final log */ $options = get_option( $this->option_name ); $defaults = $this->defaults; $error_type = ( isset( $options[ 'error_type' ] ) ? $options[ 'error_type' ] : $defaults[ 'error_type' ] ); $error_log_path = ( isset( $options[ 'error_log_path' ] ) ? $options[ 'error_log_path' ] : $defaults[ 'error_log_path' ] ); $error_log_name = ( isset( $options[ 'error_log_name' ] ) ? $options[ 'error_log_name' ] : $defaults[ 'error_log_name' ] ); $error_log_timezone = ( isset( $options[ 'error_log_timezone' ] ) ? $options[ 'error_log_timezone' ] : $defaults[ 'error_log_timezone' ] ); if( function_exists( "current_time" ) ) { $tmp_time = current_time("D M d H:i:s.u Y") ; if( !empty( $tmp_time ) ) $time = $tmp_time; } else { // Due to WP timezone rewrite date_default_timezone_set($error_log_timezone); $time = date("D M d H:i:s.u Y"); } switch( $error_type ) { case "SYSTEM" : // Error by SYSLOG openlog('wordpress('.$_SERVER['HTTP_HOST'].')', LOG_NDELAY|LOG_PID, LOG_AUTHPRIV); syslog(LOG_NOTICE,$data_to_write); break; case "APACHE" : // Error by APACHE ERROR LOG error_log('wordpress('.$_SERVER['HTTP_HOST'].') '.$data_to_write, 0); break; case "CUSTOM" : // Error by custom log if( is_dir( $error_log_path ) && is_writable( $error_log_path ) && !empty( $error_log_name ) ) error_log('['.$time.'] wordpress('.$_SERVER['HTTP_HOST'].') '.$data_to_write.PHP_EOL, 3, $error_log_path.$error_log_name ); else error_log('wordpress('.$_SERVER['HTTP_HOST'].') '.$data_to_write, 0); break; default : // Error by APACHE ERROR LOG error_log('wordpress('.$_SERVER['HTTP_HOST'].') '.$data_to_write, 0); } } public function ax_logwriter_get_real_ip() { /** * Function used to analyze the user's IP address */ $ip = getenv("REMOTE_ADDR"); // default if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); return $ip ; } }