+add_action('init', 'freeside_init');
+
+function freeside_admin_init() {
+ register_setting( 'general', 'freeside_server', 'freeside.example.com' );
+ add_settings_field( 'freeside_server', 'Freeside server', 'freeside_server_input', 'general' );
+}
+
+function freeside_server_input() {
+ $value = get_option('freeside_server');
+ //$value = ($value ? $value : 'freeside.example.com');
+ ?>
+ <INPUT TYPE="text" ID="freeside_server" NAME="freeside_server" VALUE="<?php echo htmlspecialchars($value); ?>">
+ <?php
+}
+
+//TODO: remove freeside_server on uninstall
+
+function freeside_init() {
+
+ if ( $GLOBALS['FREESIDE_PROCESS_LOGOUT'] ) {
+ $GLOBALS['FREESIDE_PROCESS_LOGOUT'] = false;
+
+ $freeside = new FreesideSelfService();
+ $response = $freeside->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;
+