diff src/ur/openid.ur @ 5:443f27cd1572

Detecting cancellation
author Adam Chlipala <adam@chlipala.net>
date Sun, 26 Dec 2010 17:36:07 -0500
parents 2d409aff8800
children 99496175078b
line wrap: on
line diff
--- a/src/ur/openid.ur	Sun Dec 26 17:19:52 2010 -0500
+++ b/src/ur/openid.ur	Sun Dec 26 17:36:07 2010 -0500
@@ -52,9 +52,16 @@
         case OpenidFfi.getOutput os "openid.error" of
             Some v => error <xml>Authentication failed: {[v]}</xml>
           | None =>
-            case OpenidFfi.getOutput os "openid.identity" of
-                None => error <xml>Missing identity in OP response</xml>
-              | Some v => return <xml>Identity: {[v]}</xml>
+            case OpenidFfi.getOutput os "openid.mode" of
+                None => error <xml>No <tt>openid.mode</tt> in response</xml>
+              | Some mode =>
+                case mode of
+                    "cancel" => error <xml>You canceled the authentication!</xml>
+                  | "id_res" =>
+                    (case OpenidFfi.getOutput os "openid.identity" of
+                         None => error <xml>Missing identity in OP response</xml>
+                       | Some v => return <xml>Identity: {[v]}</xml>)
+                  | _ => error <xml>Unexpected <tt>openid.mode</tt>: <tt>{[mode]}</tt></xml>
 
 fun authenticate id =
     dy <- discover id;