--- openid_provider_ax.module.orig	2010-10-26 11:53:10.872696210 +0200
+++ openid_provider_ax.module	2010-10-26 11:53:33.332205930 +0200
@@ -120,6 +120,16 @@ function openid_provider_ax_response_pro
         }
         break;
       case 'store_request':
+        // Determine the realm (openid.trust_root in 1.x)
+        $realm = (empty($request['openid.realm'])) ? $request['openid.trust_root'] : $request['openid.realm'];
+        $rp = _openid_provider_rp_load($user->uid, $realm);
+        if ($rp->auto_release) {
+          $response = openid_provider_ax_store($request, $user);
+        }
+        else {
+          // Wait for openid_provider_form_submit() to execute
+          $_SESSION['openid_provider_ax']['request'] = $request;
+        }
         break;
     }
   }
@@ -127,6 +137,48 @@ function openid_provider_ax_response_pro
   return $processed;
 }
 
+function openid_provider_ax_form_openid_provider_form_alter(&$form, &$form_state) {
+  global $user;
+  if (!isset($_SESSION['openid_provider_ax'])) {
+    return;
+  }
+  drupal_set_title('OpenID store');
+  $request = $form_state['storage']['request'] = $_SESSION['openid_provider_ax']['request'];
+  unset($_SESSION['openid_provider_ax']);
+
+  $default_submits = $form['#submit'];
+  $form['#submit'] = array('openid_provider_ax_openid_provider_form_submit');
+  foreach ($default_submits as $submit) {
+    $form['#submit'][] = $submit;
+  }
+  $always_submits = $form['submit_always']['#submit'];
+  $form['submit_always']['#submit'] = array('openid_provider_ax_openid_provider_form_submit');
+  foreach ($always_submits as $submit) {
+    $form['submit_always']['#submit'][] = $submit;
+  }
+  //TODO: Display the data that will be stored.
+  $form['intro']['#value'] = '<p>' . t('The Relying Party @relying asks for permission to store data into your profile, would you like to continue?',
+                                       array('@relying' => $form_state['storage']['realm'])) . '</p>';
+}
+
+function openid_provider_ax_openid_provider_form_submit($form, &$form_state) {
+  global $user;
+  if ($form_state['values']['op'] == t('Yes; just this once') ||
+      $form_state['values']['op'] == t('Yes; always')) {
+    $request = $form_state['storage']['request'];
+    return openid_provider_ax_store($request, $user);
+  }
+}
+
+function openid_provider_ax_store($request, $account) {
+  // Update the profile data
+  //TODO: Handle result success / failure
+  module_invoke_all('openid_provider_ax', 'store', $request, $account->uid);
+  $response['openid.ns.ax'] = 'http://openid.net/srv/ax/1.0';
+  $response['openid.ax.mode'] = 'store_response_success';
+  return $response;
+}
+
 /**
  * Function takes in the request and retrieves the alias per spec being utilized.
  *
