comparison src/ur/openidUser.ur @ 23:e5df3d3554d3

fakeId parameter
author Adam Chlipala <adam@chlipala.net>
date Sun, 16 Jan 2011 13:21:34 -0500
parents 70ab0230649b
children c560ec5bf514
comparison
equal deleted inserted replaced
22:70ab0230649b 23:e5df3d3554d3
16 val afterLogout : url 16 val afterLogout : url
17 val secureCookies : bool 17 val secureCookies : bool
18 val association : Openid.association_mode 18 val association : Openid.association_mode
19 val realm : option string 19 val realm : option string
20 val formClass : css_class 20 val formClass : css_class
21 val fakeId : option string
21 end) = struct 22 end) = struct
22 23
23 type user = string 24 type user = string
24 val show_user = _ 25 val show_user = _
25 val inj_user = _ 26 val inj_user = _
173 SET Identifier = {[Some ident]} 174 SET Identifier = {[Some ident]}
174 WHERE Id = {[login.Session]}); 175 WHERE Id = {[login.Session]});
175 redirect (bless after) 176 redirect (bless after)
176 | None => error <xml>Missing session cookie</xml> 177 | None => error <xml>Missing session cookie</xml>
177 178
179 fun fakeCallback ident after ses =
180 av <- getCookie auth;
181 case av of
182 Some (SigningUp signup) =>
183 invalid <- oneRowE1 (SELECT COUNT( * ) = 0
184 FROM session
185 WHERE session.Id = {[signup.Session]}
186 AND session.Key = {[signup.Key]});
187 if invalid then
188 error <xml>Invalid or expired session</xml>
189 else
190 dml (UPDATE session
191 SET Identifier = {[Some ident]}
192 WHERE Id = {[signup.Session]});
193 signupDetails after
194 | Some (LoggedIn login) =>
195 invalid <- oneRowE1 (SELECT COUNT( * ) = 0
196 FROM session
197 WHERE session.Id = {[login.Session]}
198 AND session.Key = {[login.Key]});
199 if invalid then
200 error <xml>Invalid or expired session</xml>
201 else
202 dml (UPDATE session
203 SET Identifier = {[Some ident]}
204 WHERE Id = {[login.Session]});
205 redirect (bless after)
206 | None => error <xml>Missing session cookie</xml>
207
178 fun newSession () = 208 fun newSession () =
179 ses <- nextval sessionIds; 209 ses <- nextval sessionIds;
180 now <- now; 210 now <- now;
181 key <- rand; 211 key <- rand;
182 dml (INSERT INTO session (Id, Key, Identifier, Expires) 212 dml (INSERT INTO session (Id, Key, Identifier, Expires)
194 ses <- newSession (); 224 ses <- newSession ();
195 setCookie auth {Value = LoggedIn (r ++ ses), 225 setCookie auth {Value = LoggedIn (r ++ ses),
196 Expires = None, 226 Expires = None,
197 Secure = M.secureCookies}; 227 Secure = M.secureCookies};
198 ses <- return ses.Session; 228 ses <- return ses.Session;
199 msg <- Openid.authenticate (opCallback after ses) 229 if M.fakeId = Some ident then
200 {Association = M.association, 230 fakeCallback ident after ses
201 Realm = M.realm, 231 else
202 Identifier = ident}; 232 msg <- Openid.authenticate (opCallback after ses)
203 error <xml>Login with your identity provider failed: {[msg]}</xml> 233 {Association = M.association,
234 Realm = M.realm,
235 Identifier = ident};
236 error <xml>Login with your identity provider failed: {[msg]}</xml>
204 237
205 fun doSignup after r = 238 fun doSignup after r =
206 ses <- newSession (); 239 ses <- newSession ();
207 setCookie auth {Value = SigningUp ses, 240 setCookie auth {Value = SigningUp ses,
208 Expires = None, 241 Expires = None,
209 Secure = M.secureCookies}; 242 Secure = M.secureCookies};
210 ses <- return ses.Session; 243 ses <- return ses.Session;
211 msg <- Openid.authenticate (opCallback after ses) 244 if M.fakeId = Some r.Identifier then
212 {Association = M.association, 245 fakeCallback r.Identifier after ses
213 Realm = M.realm, 246 else
214 Identifier = r.Identifier}; 247 msg <- Openid.authenticate (opCallback after ses)
215 error <xml>Login with your identity provider failed: {[msg]}</xml> 248 {Association = M.association,
249 Realm = M.realm,
250 Identifier = r.Identifier};
251 error <xml>Login with your identity provider failed: {[msg]}</xml>
216 252
217 fun signup after = 253 fun signup after =
218 wrap "Account Signup" <xml> 254 wrap "Account Signup" <xml>
219 <form> 255 <form>
220 OpenID Identifier: <textbox{#Identifier}/><br/> 256 OpenID Identifier: <textbox{#Identifier}/><br/>