Mercurial > openid
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/> |