⌈⌋ branch:  freshcode


Hex Artifact Content

Artifact 682cf674e9c889b4c30d519aae232213914500d6:

  • File page_login.php — part of check-in [f21257ed67] at 2017-01-31 18:43:47 on branch trunk — Additional howto/comments on login page regarding `lock` field requiring proper password hash or OpenID handle. (user: mario size: 4235)

0000: 3c 3f 70 68 70 0a 2f 2a 2a 0a 20 2a 20 61 70 69  <?php./**. * api
0010: 3a 20 66 72 65 73 68 63 6f 64 65 0a 20 2a 20 74  : freshcode. * t
0020: 79 70 65 3a 20 69 6e 74 65 72 63 65 70 74 0a 20  ype: intercept. 
0030: 2a 20 74 69 74 6c 65 3a 20 4f 70 65 6e 49 44 20  * title: OpenID 
0040: 2b 20 50 57 20 6c 6f 67 69 6e 0a 20 2a 20 64 65  + PW login. * de
0050: 73 63 72 69 70 74 69 6f 6e 3a 20 4c 6f 67 69 6e  scription: Login
0060: 20 70 61 67 65 20 73 68 6f 77 73 20 75 70 20 66   page shows up f
0070: 6f 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  or authorization
0080: 2d 72 65 71 75 69 72 65 64 20 73 65 63 74 69 6f  -required sectio
0090: 6e 73 20 28 65 2e 67 2e 20 2f 73 75 62 6d 69 74  ns (e.g. /submit
00a0: 29 0a 20 2a 20 76 65 72 73 69 6f 6e 3a 20 30 2e  ). * version: 0.
00b0: 36 0a 20 2a 0a 20 2a 20 50 72 65 73 65 6e 74 73  6. *. * Presents
00c0: 20 61 20 6c 6f 67 69 6e 20 62 6f 78 2c 20 73 74   a login box, st
00d0: 61 72 74 73 20 74 68 65 20 4f 70 65 6e 49 44 20  arts the OpenID 
00e0: 61 75 74 68 20 70 72 6f 63 65 73 73 2e 0a 20 2a  auth process.. *
00f0: 20 48 61 73 20 73 6f 6d 65 20 4a 53 20 64 65 66   Has some JS def
0100: 61 75 6c 74 20 6c 69 6e 6b 73 20 66 6f 72 20 61  ault links for a
0110: 20 66 65 77 20 69 64 65 6e 74 69 74 79 20 70 72   few identity pr
0120: 6f 76 69 64 65 72 73 2e 0a 20 2a 20 41 6c 73 6f  oviders.. * Also
0130: 20 70 72 6f 76 69 64 65 73 20 61 20 2f 6c 6f 67   provides a /log
0140: 6f 75 74 20 62 75 74 74 6f 6e 20 6e 6f 77 2e 0a  out button now..
0150: 20 2a 0a 20 2a 20 41 6c 74 65 72 6e 61 74 69 76   *. * Alternativ
0160: 65 6c 79 20 61 6c 6c 6f 77 73 20 61 20 70 61 73  ely allows a pas
0170: 73 77 6f 72 64 2e 20 4e 6f 74 65 20 74 68 61 74  sword. Note that
0180: 20 74 68 69 73 20 69 73 0a 20 2a 20 6b 65 70 74   this is. * kept
0190: 20 70 6c 61 69 6e 20 69 6e 20 74 68 65 20 73 65   plain in the se
01a0: 73 73 69 6f 6e 2c 20 62 75 74 20 68 61 73 68 65  ssion, but hashe
01b0: 64 20 69 6e 20 70 65 72 2d 70 72 6f 6a 65 63 74  d in per-project
01c0: 0a 20 2a 20 60 6c 6f 63 6b 60 20 65 6e 74 72 69  . * `lock` entri
01d0: 65 73 20 6c 61 74 65 72 2e 0a 20 2a 0a 20 2a 2f  es later.. *. */
01e0: 0a 0a 0a 2f 2f 20 69 6e 69 74 69 61 74 65 20 76  ...// initiate v
01f0: 65 72 69 66 69 63 61 74 69 6f 6e 0a 69 66 20 28  erification.if (
0200: 24 5f 50 4f 53 54 2d 3e 68 61 73 28 22 6c 6f 67  $_POST->has("log
0210: 69 6e 5f 75 72 6c 22 29 29 20 7b 0a 0a 20 20 20  in_url")) {..   
0220: 20 74 72 79 20 7b 0a 20 20 20 20 20 20 20 20 24   try {.        $
0230: 6f 70 65 6e 69 64 20 3d 20 6e 65 77 20 4c 69 67  openid = new Lig
0240: 68 74 4f 70 65 6e 49 44 28 48 54 54 50 5f 48 4f  htOpenID(HTTP_HO
0250: 53 54 29 3b 0a 20 20 20 20 20 20 20 20 24 6f 70  ST);.        $op
0260: 65 6e 69 64 2d 3e 76 65 72 69 66 79 5f 70 65 65  enid->verify_pee
0270: 72 20 3d 20 66 61 6c 73 65 3b 0a 20 20 20 20 20  r = false;.     
0280: 20 20 20 24 6f 70 65 6e 69 64 2d 3e 69 64 65 6e     $openid->iden
0290: 74 69 74 79 20 3d 20 24 5f 50 4f 53 54 2d 3e 75  tity = $_POST->u
02a0: 72 69 5b 22 6c 6f 67 69 6e 5f 75 72 6c 22 5d 3b  ri["login_url"];
02b0: 0a 20 20 20 20 20 20 20 20 24 6f 70 65 6e 69 64  .        $openid
02c0: 2d 3e 6f 70 74 69 6f 6e 61 6c 20 3d 20 61 72 72  ->optional = arr
02d0: 61 79 28 22 6e 61 6d 65 50 65 72 73 6f 6e 2f 66  ay("namePerson/f
02e0: 72 69 65 6e 64 6c 79 22 29 3b 0a 20 20 20 20 20  riendly");.     
02f0: 20 20 20 65 78 69 74 28 68 65 61 64 65 72 28 22     exit(header("
0300: 4c 6f 63 61 74 69 6f 6e 3a 20 22 20 2e 20 24 6f  Location: " . $o
0310: 70 65 6e 69 64 2d 3e 61 75 74 68 55 72 6c 28 29  penid->authUrl()
0320: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 63 61  ));.    }.    ca
0330: 74 63 68 20 28 45 72 72 6f 72 45 78 63 65 70 74  tch (ErrorExcept
0340: 69 6f 6e 20 24 65 29 20 7b 0a 20 20 20 20 20 20  ion $e) {.      
0350: 20 20 24 65 72 72 6f 72 20 3d 20 24 65 2d 3e 67    $error = $e->g
0360: 65 74 4d 65 73 73 61 67 65 28 29 3b 0a 20 20 20  etMessage();.   
0370: 20 20 20 20 20 65 78 69 74 28 69 6e 63 6c 75 64       exit(includ
0380: 65 28 22 70 61 67 65 5f 65 72 72 6f 72 2e 70 68  e("page_error.ph
0390: 70 22 29 29 3b 0a 20 20 20 20 7d 0a 7d 0a 65 6c  p"));.    }.}.el
03a0: 73 65 69 66 20 28 24 5f 52 45 51 55 45 53 54 2d  seif ($_REQUEST-
03b0: 3e 68 61 73 28 22 73 65 74 5f 70 61 73 73 77 6f  >has("set_passwo
03c0: 72 64 22 29 29 20 7b 0a 20 20 20 20 24 5f 53 45  rd")) {.    $_SE
03d0: 53 53 49 4f 4e 5b 22 70 61 73 73 77 6f 72 64 22  SSION["password"
03e0: 5d 20 3d 20 24 5f 52 45 51 55 45 53 54 2d 3e 61  ] = $_REQUEST->a
03f0: 73 63 69 69 2d 3e 6e 6f 63 6f 6e 74 72 6f 6c 2d  scii->nocontrol-
0400: 3e 74 72 69 6d 5b 22 73 65 74 5f 70 61 73 73 77  >trim["set_passw
0410: 6f 72 64 22 5d 3b 0a 7d 0a 24 70 77 5f 70 6c 61  ord"];.}.$pw_pla
0420: 63 65 68 6f 6c 64 65 72 20 3d 20 21 65 6d 70 74  ceholder = !empt
0430: 79 28 24 5f 53 45 53 53 49 4f 4e 5b 22 70 61 73  y($_SESSION["pas
0440: 73 77 6f 72 64 22 5d 29 20 3f 20 22 72 65 6d 65  sword"]) ? "reme
0450: 6d 62 65 72 65 64 22 20 3a 20 22 2e 2e 2e 22 3b  mbered" : "...";
0460: 0a 0a 0a 2f 2f 20 65 6c 73 65 0a 69 6e 63 6c 75  ...// else.inclu
0470: 64 65 28 22 74 65 6d 70 6c 61 74 65 2f 68 65 61  de("template/hea
0480: 64 65 72 2e 70 68 70 22 29 3b 0a 3f 3e 20 3c 73  der.php");.?> <s
0490: 65 63 74 69 6f 6e 20 69 64 3d 6d 61 69 6e 20 63  ection id=main c
04a0: 6c 61 73 73 3d 63 6f 6e 74 61 69 6e 65 72 2d 77  lass=container-w
04b0: 69 64 74 68 3e 3c 64 69 76 20 73 74 79 6c 65 3d  idth><div style=
04c0: 22 77 69 64 74 68 3a 20 37 30 25 22 3e 3c 3f 70  "width: 70%"><?p
04d0: 68 70 0a 0a 0a 2f 2f 20 64 69 73 70 6c 61 79 20  hp...// display 
04e0: 6c 6f 67 69 6e 20 66 6f 72 6d 0a 69 66 20 28 65  login form.if (e
04f0: 6d 70 74 79 28 24 5f 53 45 53 53 49 4f 4e 5b 22  mpty($_SESSION["
0500: 6f 70 65 6e 69 64 22 5d 29 29 20 7b 0a 20 20 20  openid"])) {.   
0510: 20 24 68 5f 70 61 73 73 77 6f 72 64 20 3d 20 68   $h_password = h
0520: 74 6d 6c 73 70 65 63 69 61 6c 63 68 61 72 73 28  tmlspecialchars(
0530: 24 5f 53 45 53 53 49 4f 4e 5b 22 70 61 73 73 77  $_SESSION["passw
0540: 6f 72 64 22 5d 29 3b 0a 0a 20 20 20 20 70 72 69  ord"]);..    pri
0550: 6e 74 3c 3c 3c 48 54 4d 4c 0a 20 20 20 20 3c 68  nt<<<HTML.    <h
0560: 33 3e 4c 6f 67 69 6e 3c 2f 68 33 3e 0a 0a 20 20  3>Login</h3>..  
0570: 20 20 3c 74 61 62 6c 65 3e 0a 20 20 20 20 3c 74    <table>.    <t
0580: 72 3e 0a 20 20 20 20 3c 74 64 3e 0a 20 20 20 20  r>.    <td>.    
0590: 3c 70 3e 50 6c 65 61 73 65 20 70 72 6f 76 69 64  <p>Please provid
05a0: 65 20 61 6e 20 3c 61 20 68 72 65 66 3d 22 68 74  e an <a href="ht
05b0: 74 70 3a 2f 2f 65 6e 2e 77 69 6b 69 70 65 64 69  tp://en.wikipedi
05c0: 61 2e 6f 72 67 2f 77 69 6b 69 2f 4f 70 65 6e 49  a.org/wiki/OpenI
05d0: 44 22 3e 4f 70 65 6e 49 44 3c 2f 61 3e 20 68 61  D">OpenID</a> ha
05e0: 6e 64 6c 65 2e 3c 2f 70 3e 0a 0a 20 20 20 20 3c  ndle.</p>..    <
05f0: 70 3e 0a 20 20 20 20 20 3c 66 6f 72 6d 20 61 63  p>.     <form ac
0600: 74 69 6f 6e 3d 22 22 20 6d 65 74 68 6f 64 3d 50  tion="" method=P
0610: 4f 53 54 20 63 6c 61 73 73 3d 22 6c 6f 67 69 6e  OST class="login
0620: 20 62 6f 78 22 3e 0a 20 20 20 20 20 20 20 3c 69   box">.       <i
0630: 6e 70 75 74 20 74 79 70 65 3d 75 72 6c 20 69 64  nput type=url id
0640: 3d 6c 6f 67 69 6e 5f 75 72 6c 20 6e 61 6d 65 3d  =login_url name=
0650: 6c 6f 67 69 6e 5f 75 72 6c 20 73 69 7a 65 3d 35  login_url size=5
0660: 30 20 76 61 6c 75 65 3d 22 22 20 70 6c 61 63 65  0 value="" place
0670: 68 6f 6c 64 65 72 3d 22 68 74 74 70 3a 2f 2f 6e  holder="http://n
0680: 61 6d 65 2e 6f 70 65 6e 69 64 2e 78 79 2f 22 3e  ame.openid.xy/">
0690: 0a 20 20 20 20 20 20 20 3c 62 72 3e 0a 20 20 20  .       <br>.   
06a0: 20 20 20 20 3c 69 6e 70 75 74 20 74 79 70 65 3d      <input type=
06b0: 70 61 73 73 77 6f 72 64 20 73 74 79 6c 65 3d 64  password style=d
06c0: 69 73 70 6c 61 79 3a 6e 6f 6e 65 20 76 61 6c 75  isplay:none valu
06d0: 65 3d 64 75 6d 6d 79 3e 0a 20 20 20 20 20 20 20  e=dummy>.       
06e0: 3c 69 6e 70 75 74 20 74 79 70 65 3d 73 75 62 6d  <input type=subm
06f0: 69 74 20 76 61 6c 75 65 3d 4c 6f 67 69 6e 3e 0a  it value=Login>.
0700: 20 20 20 20 20 20 20 3c 73 70 61 6e 20 63 6c 61         <span cla
0710: 73 73 3d 22 73 65 72 76 69 63 65 2d 6c 6f 67 69  ss="service-logi
0720: 6e 73 22 3e 0a 20 20 20 20 20 20 20 20 20 20 4f  ns">.          O
0730: 72 20 75 73 65 20 79 6f 75 72 20 3c 61 20 6f 6e  r use your <a on
0740: 63 6c 69 63 6b 3d 22 24 28 27 23 6c 6f 67 69 6e  click="$('#login
0750: 5f 75 72 6c 27 29 2e 76 61 6c 28 27 68 74 74 70  _url').val('http
0760: 3a 2f 2f 66 61 63 65 62 6f 6f 6b 2d 6f 70 65 6e  ://facebook-open
0770: 69 64 2e 61 70 70 73 70 6f 74 2e 63 6f 6d 2f 59  id.appspot.com/Y
0780: 6f 75 72 46 61 63 65 42 6f 6f 6b 4c 6f 67 69 6e  ourFaceBookLogin
0790: 27 29 2e 66 6f 63 75 73 28 29 2e 70 72 6f 70 28  ').focus().prop(
07a0: 7b 73 65 6c 65 63 74 69 6f 6e 53 74 61 72 74 3a  {selectionStart:
07b0: 33 35 2c 20 73 65 6c 65 63 74 69 6f 6e 45 6e 64  35, selectionEnd
07c0: 3a 35 32 7d 29 3b 22 3e 46 61 63 65 62 6f 6f 6b  :52});">Facebook
07d0: 3c 2f 61 3e 0a 20 20 20 20 20 20 20 20 20 20 20  </a>.           
07e0: 20 20 20 20 20 7c 20 3c 61 20 6f 6e 63 6c 69 63       | <a onclic
07f0: 6b 3d 22 24 28 27 23 6c 6f 67 69 6e 5f 75 72 6c  k="$('#login_url
0800: 27 29 2e 76 61 6c 28 27 68 74 74 70 3a 2f 2f 6d  ').val('http://m
0810: 65 2e 79 61 68 6f 6f 2e 63 6f 6d 2f 23 79 6f 75  e.yahoo.com/#you
0820: 72 6e 61 6d 65 27 29 2e 66 6f 63 75 73 28 29 2e  rname').focus().
0830: 70 72 6f 70 28 7b 73 65 6c 65 63 74 69 6f 6e 53  prop({selectionS
0840: 74 61 72 74 3a 32 31 2c 20 73 65 6c 65 63 74 69  tart:21, selecti
0850: 6f 6e 45 6e 64 3a 32 39 7d 29 3b 22 3e 59 61 68  onEnd:29});">Yah
0860: 6f 6f 3c 2f 61 3e 20 7c 20 3c 62 72 3e 0a 20 20  oo</a> | <br>.  
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3c 61                <a
0880: 20 6f 6e 63 6c 69 63 6b 3d 22 24 28 27 23 6c 6f   onclick="$('#lo
0890: 67 69 6e 5f 75 72 6c 27 29 2e 76 61 6c 28 27 68  gin_url').val('h
08a0: 74 74 70 3a 2f 2f 6c 61 75 6e 63 68 70 61 64 2e  ttp://launchpad.
08b0: 6e 65 74 2f 7e 79 6f 75 72 6e 61 6d 65 27 29 2e  net/~yourname').
08c0: 66 6f 63 75 73 28 29 2e 70 72 6f 70 28 7b 73 65  focus().prop({se
08d0: 6c 65 63 74 69 6f 6e 53 74 61 72 74 3a 32 32 2c  lectionStart:22,
08e0: 20 73 65 6c 65 63 74 69 6f 6e 45 6e 64 3a 33 30   selectionEnd:30
08f0: 7d 29 3b 22 3e 4c 61 75 6e 63 68 70 61 64 3c 2f  });">Launchpad</
0900: 61 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  a>.             
0910: 20 20 20 7c 20 3c 61 20 6f 6e 63 6c 69 63 6b 3d     | <a onclick=
0920: 22 24 28 27 23 6c 6f 67 69 6e 5f 75 72 6c 27 29  "$('#login_url')
0930: 2e 76 61 6c 28 27 68 74 74 70 73 3a 2f 2f 6f 70  .val('https://op
0940: 65 6e 69 64 2e 73 74 61 63 6b 65 78 63 68 61 6e  enid.stackexchan
0950: 67 65 2e 63 6f 6d 2f 23 79 6f 75 72 6e 61 6d 65  ge.com/#yourname
0960: 27 29 2e 66 6f 63 75 73 28 29 2e 70 72 6f 70 28  ').focus().prop(
0970: 7b 73 65 6c 65 63 74 69 6f 6e 53 74 61 72 74 3a  {selectionStart:
0980: 33 34 2c 20 73 65 6c 65 63 74 69 6f 6e 45 6e 64  34, selectionEnd
0990: 3a 34 32 7d 29 3b 22 3e 53 74 61 63 6b 4f 76 65  :42});">StackOve
09a0: 72 66 6c 6f 77 3c 2f 61 3e 20 6c 6f 67 69 6e 0a  rflow</a> login.
09b0: 20 20 20 20 20 20 20 3c 2f 73 70 61 6e 3e 20 0a         </span> .
09c0: 20 20 20 20 20 3c 2f 66 6f 72 6d 3e 0a 20 20 20       </form>.   
09d0: 20 3c 2f 70 3e 0a 20 20 20 20 3c 70 3e 54 68 65   </p>.    <p>The
09e0: 72 65 20 61 72 65 20 69 6e 74 65 6e 74 69 6f 6e  re are intention
09f0: 61 6c 6c 79 20 6e 6f 20 75 73 65 72 20 61 63 63  ally no user acc
0a00: 6f 75 6e 74 73 20 6f 6e 20 66 72 65 73 68 63 6f  ounts on freshco
0a10: 64 65 2e 63 6c 75 62 2c 0a 20 20 20 20 62 75 74  de.club,.    but
0a20: 20 74 68 69 73 20 70 72 65 72 65 71 75 69 73 69   this prerequisi
0a30: 74 65 20 61 6c 73 6f 20 68 65 6c 70 73 20 65 73  te also helps es
0a40: 63 68 65 77 20 73 70 61 6d 20 73 75 62 6d 69 73  chew spam submis
0a50: 73 69 6f 6e 73 2e 3c 2f 70 3e 0a 20 20 20 20 3c  sions.</p>.    <
0a60: 2f 74 64 3e 0a 20 20 20 20 3c 74 64 3e 0a 20 20  /td>.    <td>.  
0a70: 20 20 3c 70 3e 4f 72 20 61 6c 74 65 72 6e 61 74    <p>Or alternat
0a80: 69 76 65 6c 79 20 61 20 70 65 72 2d 70 72 6f 6a  ively a per-proj
0a90: 65 63 74 20 70 61 73 73 77 6f 72 64 2e 3c 2f 70  ect password.</p
0aa0: 3e 0a 20 20 20 20 20 3c 66 6f 72 6d 20 61 63 74  >.     <form act
0ab0: 69 6f 6e 3d 22 22 20 6d 65 74 68 6f 64 3d 50 4f  ion="" method=PO
0ac0: 53 54 20 63 6c 61 73 73 3d 22 6c 6f 67 69 6e 20  ST class="login 
0ad0: 62 6f 78 22 20 73 74 79 6c 65 3d 22 62 61 63 6b  box" style="back
0ae0: 67 72 6f 75 6e 64 3a 20 23 64 64 65 3b 20 62 6f  ground: #dde; bo
0af0: 72 64 65 72 2d 63 6f 6c 6f 72 3a 20 23 39 39 62  rder-color: #99b
0b00: 3b 22 3e 0a 20 20 20 20 20 20 20 3c 69 6e 70 75  ;">.       <inpu
0b10: 74 20 74 79 70 65 3d 74 65 78 74 20 69 64 3d 6c  t type=text id=l
0b20: 6f 67 69 6e 5f 70 77 20 6e 61 6d 65 3d 73 65 74  ogin_pw name=set
0b30: 5f 70 61 73 73 77 6f 72 64 20 73 69 7a 65 3d 32  _password size=2
0b40: 30 20 76 61 6c 75 65 3d 22 7b 24 68 5f 70 61 73  0 value="{$h_pas
0b50: 73 77 6f 72 64 7d 22 20 70 6c 61 63 65 68 6f 6c  sword}" placehol
0b60: 64 65 72 3d 22 7b 24 70 77 5f 70 6c 61 63 65 68  der="{$pw_placeh
0b70: 6f 6c 64 65 72 7d 22 3e 0a 20 20 20 20 20 20 20  older}">.       
0b80: 3c 69 6e 70 75 74 20 74 79 70 65 3d 73 75 62 6d  <input type=subm
0b90: 69 74 20 76 61 6c 75 65 3d 53 61 76 65 3e 0a 20  it value=Save>. 
0ba0: 20 20 20 20 20 20 3c 62 72 3e 0a 20 20 20 20 20        <br>.     
0bb0: 20 20 3c 73 6d 61 6c 6c 3e 57 72 69 74 65 20 69    <small>Write i
0bc0: 74 20 64 6f 77 6e 20 73 6f 6d 65 77 68 65 72 65  t down somewhere
0bd0: 21 20 41 6e 64 20 75 73 65 20 22 3c 75 20 63 6c  ! And use "<u cl
0be0: 61 73 73 3d 61 63 74 69 6f 6e 3e 6c 6f 63 6b 3c  ass=action>lock<
0bf0: 2f 75 3e 22 20 77 69 74 68 69 6e 20 74 68 65 20  /u>" within the 
0c00: 73 75 62 6d 69 74 20 66 6f 72 6d 20 74 6f 20 61  submit form to a
0c10: 70 70 6c 79 20 69 74 2e 3c 2f 73 6d 61 6c 6c 3e  pply it.</small>
0c20: 0a 20 20 20 20 20 3c 2f 66 6f 72 6d 3e 0a 20 20  .     </form>.  
0c30: 20 20 3c 2f 70 3e 0a 20 20 20 20 3c 2f 74 64 3e    </p>.    </td>
0c40: 0a 20 20 20 20 3c 2f 74 72 3e 0a 20 20 20 20 3c  .    </tr>.    <
0c50: 2f 74 61 62 6c 65 3e 0a 20 20 20 20 0a 20 20 20  /table>.    .   
0c60: 20 3c 70 20 73 74 79 6c 65 3d 22 63 6f 6c 6f 72   <p style="color
0c70: 3a 23 62 62 62 22 3e 4c 6f 67 69 6e 73 20 6d 61  :#bbb">Logins ma
0c80: 79 20 66 61 69 6c 20 69 66 20 79 6f 75 20 73 70  y fail if you sp
0c90: 65 63 69 66 69 65 64 20 61 20 72 61 77 20 70 61  ecified a raw pa
0ca0: 73 73 77 6f 72 64 0a 20 20 20 20 69 6e 73 74 65  ssword.    inste
0cb0: 61 64 20 6f 66 20 61 6e 20 68 61 73 68 20 66 6f  ad of an hash fo
0cc0: 72 20 74 68 65 20 60 6c 6f 63 6b 60 20 66 69 65  r the `lock` fie
0cd0: 6c 64 2e 20 20 44 6f 6e 27 74 20 77 6f 72 72 79  ld.  Don't worry
0ce0: 2c 20 73 75 63 68 20 70 6c 61 69 6e 20 74 65 78  , such plain tex
0cf0: 74 0a 20 20 20 20 70 61 73 73 77 6f 72 64 73 20  t.    passwords 
0d00: 77 69 6c 6c 20 62 65 20 72 65 65 6e 63 72 79 70  will be reencryp
0d10: 74 65 64 20 74 77 69 63 65 20 70 65 72 20 64 61  ted twice per da
0d20: 79 2e 20 20 53 6f 20 70 6c 65 61 73 65 20 6a 75  y.  So please ju
0d30: 73 74 20 74 72 79 20 6c 61 74 65 72 2e 20 0a 20  st try later. . 
0d40: 20 20 20 2d 2d 20 49 66 20 79 6f 75 72 20 6c 6f     -- If your lo
0d50: 67 69 6e 20 75 73 69 6e 67 20 61 6e 20 4f 70 65  gin using an Ope
0d60: 6e 49 44 20 66 61 69 6c 73 2c 20 70 6c 65 61 73  nID fails, pleas
0d70: 65 20 74 61 6b 65 20 63 61 72 65 20 74 6f 20 61  e take care to a
0d80: 64 64 20 6f 72 0a 20 20 20 20 72 65 6d 6f 76 65  dd or.    remove
0d90: 20 74 68 65 20 74 72 61 69 6c 69 6e 67 20 60 2f   the trailing `/
0da0: 60 20 73 6c 61 73 68 2e 20 20 4d 61 74 63 68 69  ` slash.  Matchi
0db0: 6e 67 20 69 73 20 72 61 74 68 65 72 20 73 74 72  ng is rather str
0dc0: 69 63 74 20 61 6e 64 20 64 6f 65 73 6e 27 74 0a  ict and doesn't.
0dd0: 20 20 20 20 63 68 65 63 6b 20 66 6f 72 20 49 52      check for IR
0de0: 4c 20 65 71 75 69 76 61 6c 65 6e 63 65 20 61 74  L equivalence at
0df0: 20 74 68 65 20 6d 6f 6d 65 6e 74 2e 20 20 2d 2d   the moment.  --
0e00: 20 49 66 20 65 76 65 72 79 74 68 69 6e 67 20 65   If everything e
0e10: 6c 73 65 20 66 61 69 6c 73 2c 0a 20 20 20 20 70  lse fails,.    p
0e20: 6c 65 61 73 65 20 6a 75 73 74 20 73 65 6e 64 20  lease just send 
0e30: 61 20 6d 61 69 6c 20 74 6f 20 69 6e 66 6f 40 e2  a mail to info@.
0e40: 80 a6 3c 2f 70 3e 0a 20 20 20 20 0a 0a 0a 48 54  ..</p>.    ...HT
0e50: 4d 4c 3b 0a 7d 0a 0a 2f 2f 20 64 72 6f 70 20 72  ML;.}..// drop r
0e60: 65 6c 65 76 61 6e 74 20 73 65 73 73 69 6f 6e 20  elevant session 
0e70: 64 61 74 61 0a 65 6c 73 65 69 66 20 28 24 5f 52  data.elseif ($_R
0e80: 45 51 55 45 53 54 2d 3e 69 64 5b 22 6e 61 6d 65  EQUEST->id["name
0e90: 22 5d 20 3d 3d 20 22 6c 6f 67 6f 75 74 22 29 20  "] == "logout") 
0ea0: 7b 0a 20 20 20 20 24 5f 53 45 53 53 49 4f 4e 5b  {.    $_SESSION[
0eb0: 22 6f 70 65 6e 69 64 22 5d 20 3d 20 22 22 3b 0a  "openid"] = "";.
0ec0: 20 20 20 20 24 5f 53 45 53 53 49 4f 4e 5b 22 75      $_SESSION["u
0ed0: 73 65 72 22 5d 20 3d 20 22 22 3b 0a 20 20 20 20  ser"] = "";.    
0ee0: 70 72 69 6e 74 20 22 3c 68 33 3e 53 69 67 6e 65  print "<h3>Signe
0ef0: 64 20 6f 75 74 3c 2f 68 33 3e 22 3b 0a 7d 0a 0a  d out</h3>";.}..
0f00: 2f 2f 20 61 20 70 72 65 76 69 6f 75 73 20 6c 6f  // a previous lo
0f10: 67 69 6e 20 77 61 73 20 61 6c 72 65 61 64 79 20  gin was already 
0f20: 73 75 63 63 65 73 73 66 75 6c 0a 65 6c 73 65 20  successful.else 
0f30: 7b 0a 0a 20 20 20 20 70 72 69 6e 74 20 22 3c 68  {..    print "<h
0f40: 33 3e 41 6c 72 65 61 64 79 20 6c 6f 67 67 65 64  3>Already logged
0f50: 20 69 6e 3c 2f 68 33 3e 22 3b 0a 20 20 20 20 0a   in</h3>";.    .
0f60: 20 20 20 20 70 72 69 6e 74 20 69 73 73 65 74 28      print isset(
0f70: 24 6c 6f 67 69 6e 5f 68 69 6e 74 29 0a 20 20 20  $login_hint).   
0f80: 20 20 20 20 20 3f 20 22 3c 70 3e 24 6c 6f 67 69       ? "<p>$logi
0f90: 6e 5f 68 69 6e 74 3c 2f 70 3e 22 0a 20 20 20 20  n_hint</p>".    
0fa0: 20 20 20 20 3a 20 22 3c 70 3e 59 6f 75 20 68 61      : "<p>You ha
0fb0: 76 65 20 61 73 73 6f 63 69 61 74 65 64 20 61 6e  ve associated an
0fc0: 20 4f 70 65 6e 49 44 20 68 61 6e 64 6c 65 20 28   OpenID handle (
0fd0: 3c 76 61 72 3e 24 5f 53 45 53 53 49 4f 4e 5b 6f  <var>$_SESSION[o
0fe0: 70 65 6e 69 64 5d 3c 2f 76 61 72 3e 29 2e 0a 20  penid]</var>).. 
0ff0: 20 20 20 20 20 20 20 20 20 20 3c 66 6f 72 6d 20            <form 
1000: 61 63 74 69 6f 6e 3d 27 2f 6c 6f 67 69 6e 2f 6c  action='/login/l
1010: 6f 67 6f 75 74 27 20 6d 65 74 68 6f 64 3d 50 4f  ogout' method=PO
1020: 53 54 3e 3c 62 75 74 74 6f 6e 3e 4c 6f 67 6f 75  ST><button>Logou
1030: 74 3c 2f 62 75 74 74 6f 6e 3e 3c 2f 66 6f 72 6d  t</button></form
1040: 3e 3c 2f 70 3e 22 3b 0a 20 20 20 20 0a 7d 0a 0a  ></p>";.    .}..
1050: 3f 3e 3c 2f 64 69 76 3e 3c 2f 73 65 63 74 69 6f  ?></div></sectio
1060: 6e 3e 3c 3f 70 68 70 0a 69 6e 63 6c 75 64 65 28  n><?php.include(
1070: 22 74 65 6d 70 6c 61 74 65 2f 62 6f 74 74 6f 6d  "template/bottom
1080: 2e 70 68 70 22 29 3b 0a 0a 3f 3e                 .php");..?>