logout( array( 'session_id' => $_COOKIE['freeside_session_id'], ) ); setcookie('freeside_session_id', '', time() - 3600); $error = $response['error']; if ( $error ) { error_log("Logout error: $error"); } return; } if ( ! $GLOBALS['FREESIDE_PROCESS_LOGIN'] ) { return; } else { $GLOBALS['FREESIDE_PROCESS_LOGIN'] = false; } $freeside = new FreesideSelfService(); $response = $freeside->login( array( 'email' => strtolower($_POST['freeside_email']), 'username' => strtolower($_POST['freeside_username']), 'domain' => strtolower($_POST['freeside_domain']), 'password' => $_POST['freeside_password'], ) ); #error_log("[login] received response from freeside: $response"); $error = $response['error']; error_log($error); if ( $error ) { $url = isset($_SERVER['HTTPS']) ? 'https://' : 'http://'; $url .= $_SERVER['SERVER_NAME']; $url .= $_SERVER['REQUEST_URI']; wp_redirect(dirname($url). '/example_login.php?'. 'username='. urlencode($_POST['freeside_username']). '&domain='. urlencode($_POST['freeside_domain']). '&email='. urlencode($_POST['freeside_email']). '&freeside_error='. urlencode($error) ); exit; } // sucessful login $session_id = $response['session_id']; //error_log("[login] logged into freeside with session_id=$freeside_session_id, setting cookie"); setcookie('freeside_session_id', $session_id); $GLOBALS['FREESIDE_LOGIN_RESPONSE'] = $response; } function freeside_flatten($hash) { if ( !is_array($hash) ) return $hash; $flat = array(); array_walk($hash, function($value, $key, &$to) { array_push($to, $key, $value); }, $flat); foreach ($hash as $key => $value) { $flat[] = $key; $flat[] = $value; } return($flat); } class FreesideSelfService { function FreesideSelfService() { $this; } public function __call($name, $arguments) { $URL = 'http://'. get_option('freeside_server'). ':8080'; //error_log("[FreesideSelfService] $name called, sending to ". $URL); $request = xmlrpc_encode_request("FS.ClientAPI_XMLRPC.$name", freeside_flatten($arguments[0])); $context = stream_context_create( array( 'http' => array( 'method' => "POST", 'header' => "Content-Type: text/xml", 'content' => $request ))); $file = file_get_contents($URL, false, $context); $response = xmlrpc_decode($file); if (isset($response) && xmlrpc_is_fault($response)) { trigger_error("[FreesideSelfService] XML-RPC communication error: $response[faultString] ($response[faultCode])"); } else { //error_log("[FreesideSelfService] $response"); return $response; } } } ?>