test_server.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_OpenId
  17. * @subpackage Demos
  18. * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
  19. * @license http://framework.zend.com/license/new-bsd New BSD License
  20. */
  21. $dir = realpath(dirname(__FILE__)."/../../..");
  22. set_include_path("$dir/library" . PATH_SEPARATOR . get_include_path());
  23. /**
  24. * @see Zend_OpenId_Provider
  25. */
  26. require_once "Zend/OpenId/Provider.php";
  27. /**
  28. * @see Zend_OpenId_Extension_Sreg
  29. */
  30. require_once "Zend/OpenId/Extension/Sreg.php";
  31. /**
  32. * @see Zend_Session_Namespace
  33. */
  34. require_once "Zend/Session/Namespace.php";
  35. $server = new Zend_OpenId_Provider();
  36. /**
  37. * trust_form
  38. *
  39. * @param string $site
  40. * @param array|boolean $trusted
  41. * @return string
  42. */
  43. function trust_form($site, $trusted) {
  44. if (is_array($trusted)) {
  45. $str = "";
  46. if (isset($trusted['Zend_OpenId_Extension_Sreg'])) {
  47. $trusted = $trusted['Zend_OpenId_Extension_Sreg'];
  48. foreach ($trusted as $key => $val) {
  49. $str .= "$key:\"$val\";";
  50. }
  51. }
  52. $trusted = true;
  53. }
  54. $s = '<form method="POST">'
  55. . '<tr><td>'
  56. . '<input type="hidden" name="openid_action" value="trust">'
  57. . '<input type="hidden" name="site" value="' . $site . '">'
  58. . $site
  59. // . '</td><td>'
  60. // . ($trusted ? 'allowed' : 'denied')
  61. . '</td><td>'
  62. . ($trusted ?
  63. '<input type="submit" style="width:100px" name="deny" value="Deny">' :
  64. '<input type="submit" style="width:100px" name="allow" value="Allow">')
  65. . '</td><td>'
  66. . '<input type="submit" style="width:100px" name="del" value="Del">'
  67. . '</td><td>'.$str.'</td></tr>'
  68. . '</form>';
  69. return $s;
  70. }
  71. /**
  72. * sreg_form
  73. *
  74. * @param Zend_OpenId_Extension_Sreg $sreg
  75. * @return string
  76. */
  77. function sreg_form(Zend_OpenId_Extension_Sreg $sreg)
  78. {
  79. $s = "";
  80. $props = $sreg->getProperties();
  81. if (is_array($props) && count($props) > 0) {
  82. $s = 'It also requests additinal information about you';
  83. $s .= ' (fields marked by <u>*</u> are required)<br>';
  84. $s .= '<table border="0" cellspacing="2" cellpadding="2">';
  85. foreach ($props as $prop => $val) {
  86. if ($val) {
  87. $s .= '<tr><td><u>'.$prop.':*</u></td>';
  88. } else {
  89. $s .= '<tr><td>'.$prop.':</u></td>';
  90. }
  91. $value = "";
  92. $s .= '<td><input type="text" name="openid.sreg.'.$prop.'" value="'.$value.'"></td></tr>';
  93. }
  94. $s .= '</table><br>';
  95. $policy = $sreg->getPolicyUrl();
  96. if (!empty($policy)) {
  97. $s .= 'The private policy can be found at <a href="'.$policy.'">'.$policy.'</a>.<br>';
  98. }
  99. }
  100. return $s;
  101. }
  102. $session = new Zend_Session_Namespace("opeinid.server");
  103. Zend_Session::start();
  104. $ret = false;
  105. if ($_SERVER["REQUEST_METHOD"] == "GET") {
  106. if (!isset($_GET['openid_action']) && isset($_GET['openid_mode'])) {
  107. $ret = $server->handle($_GET, new Zend_OpenId_Extension_Sreg());
  108. } else {
  109. require_once 'Zend/View.php';
  110. $view = new Zend_View();
  111. $view->setScriptPath(dirname(__FILE__) . '/templates');
  112. $view->strictVars(true);
  113. if (isset($session->id)) {
  114. $view->id = $session->id;
  115. }
  116. if (isset($session->error)) {
  117. $view->error = $session->error;
  118. unset($session->error);
  119. }
  120. if (isset($_GET['openid_action'])) {
  121. if ($_GET['openid_action'] == 'register') {
  122. $ret = $view->render('register.phtml');
  123. } else if ($_GET['openid_action'] == 'registration_complete' &&
  124. isset($_GET['openid_name'])) {
  125. $view->name = $_GET['openid_name'];
  126. $view->url = Zend_OpenId::selfURL() . '?openid=' . $view->name;
  127. if ($server->hasUser($view->url)) {
  128. $view->url2 = Zend_OpenId::selfURL() . '?openid2=' . $view->name;
  129. $ret = $view->render('registration_complete.phtml');
  130. }
  131. } else if ($_GET['openid_action'] == 'logout') {
  132. $server->logout();
  133. header('Location: ' . $_SERVER['PHP_SELF']);
  134. exit;
  135. } else if ($_GET['openid_action'] == 'login') {
  136. if (isset($_GET['openid_identity'])) {
  137. $view->id = $_GET['openid_identity'];
  138. $view->ro = true;
  139. }
  140. $ret = $view->render('login.phtml');
  141. } else if ($_GET['openid_action'] == 'trust') {
  142. if ($server->getLoggedInUser() !== false) {
  143. $view->site = $server->getSiteRoot($_GET);
  144. $view->url = $server->getLoggedInUser();
  145. $sreg = new Zend_OpenId_Extension_Sreg();
  146. $sreg->parseRequest($_GET);
  147. $view->sreg = sreg_form($sreg);
  148. if ($server->hasUser($view->url)) {
  149. $ret = $view->render('trust.phtml');
  150. }
  151. }
  152. }
  153. } else if (isset($_GET['openid'])) {
  154. $url = Zend_OpenId::selfURL() . '?openid=' . $_GET['openid'];
  155. if ($server->hasUser($url)) {
  156. $view->server = Zend_OpenId::selfURL();
  157. $view->name = $_GET['openid'];
  158. $ret = $view->render('identity.phtml');
  159. }
  160. } else if (isset($_GET['openid2'])) {
  161. $url = Zend_OpenId::selfURL() . '?openid=' . $_GET['openid2'];
  162. if ($server->hasUser($url)) {
  163. $view->server = Zend_OpenId::selfURL();
  164. $view->name = $_GET['openid2'];
  165. $ret = $view->render('identity2.phtml');
  166. }
  167. } else {
  168. if ($server->getLoggedInUser() !== false) {
  169. $view->url = $server->getLoggedInUser();
  170. if ($server->hasUser($view->url)) {
  171. $sites = $server->getTrustedSites();
  172. $s = "";
  173. foreach ($sites as $site => $trusted) {
  174. if (is_bool($trusted) || is_array($trusted)) {
  175. $s .= trust_form($site, $trusted);
  176. }
  177. }
  178. if (empty($s)) {
  179. $s = "<tr><td>None</td></tr>";
  180. }
  181. $view->sites = $s;
  182. $ret = $view->render('profile.phtml');
  183. }
  184. } else {
  185. $ret = $view->render('login.phtml');
  186. }
  187. }
  188. }
  189. } else if ($_SERVER["REQUEST_METHOD"] == "POST") {
  190. if (!isset($_POST['openid_action']) && isset($_POST['openid_mode'])) {
  191. $ret = $server->handle($_POST, new Zend_OpenId_Extension_Sreg());
  192. } else if (isset($_POST['openid_action'])) {
  193. if ($_POST['openid_action'] == 'login' &&
  194. isset($_POST['openid_url']) &&
  195. isset($_POST['openid_password'])) {
  196. if (!$server->login($_POST['openid_url'],
  197. $_POST['openid_password'])) {
  198. $session->error = 'Wrong identity/password!';
  199. $session->id = $_POST['openid_url'];
  200. }
  201. unset($_GET['openid_action']);
  202. Zend_OpenId::redirect($_SERVER['PHP_SELF'], $_GET);
  203. } else if ($_POST['openid_action'] == 'register' &&
  204. isset($_POST['openid_name']) &&
  205. isset($_POST['openid_password']) &&
  206. isset($_POST['openid_password2'])) {
  207. $url = Zend_OpenId::selfURL() . '?openid=' . $_POST['openid_name'];
  208. if ($_POST['openid_password'] != $_POST['openid_password2']) {
  209. $session->name = $_POST['openid_name'];
  210. $session->error = 'Password mismatch.';
  211. header('Location: ' . $_SERVER['PHP_SELF'] . '?openid.action=register');
  212. } else if ($server->register($url, $_POST['openid_password'])) {
  213. header('Location: ' . $_SERVER['PHP_SELF'] . '?openid.action=registration_complete&openid.name=' . $_POST['openid_name']);
  214. } else {
  215. $session->error = 'Registration failed. Try another name.';
  216. header('Location: ' . $_SERVER['PHP_SELF'] . '?openid.action=register');
  217. }
  218. exit;
  219. } else if ($_POST['openid_action'] == 'trust') {
  220. if (isset($_GET['openid_return_to'])) {
  221. $sreg = new Zend_OpenId_Extension_Sreg();
  222. $sreg->parseResponse($_POST);
  223. if (isset($_POST['allow'])) {
  224. if (isset($_POST['forever'])) {
  225. $server->allowSite($server->getSiteRoot($_GET), $sreg);
  226. }
  227. unset($_GET['openid_action']);
  228. $server->respondToConsumer($_GET, $sreg);
  229. } else if (isset($_POST['deny'])) {
  230. if (isset($_POST['forever'])) {
  231. $server->denySite($server->getSiteRoot($_GET));
  232. }
  233. Zend_OpenId::redirect($_GET['openid_return_to'], array('openid.mode'=>'cancel'));
  234. }
  235. } else if (isset($_POST['allow'])) {
  236. $server->allowSite($_POST['site']);
  237. header('Location: ' . $_SERVER['PHP_SELF']);
  238. exit;
  239. } else if (isset($_POST['deny'])) {
  240. $server->denySite($_POST['site']);
  241. header('Location: ' . $_SERVER['PHP_SELF']);
  242. exit;
  243. } else if (isset($_POST['del'])) {
  244. $server->delSite($_POST['site']);
  245. header('Location: ' . $_SERVER['PHP_SELF']);
  246. exit;
  247. }
  248. }
  249. }
  250. }
  251. if (is_string($ret)) {
  252. echo $ret;
  253. } else if ($ret !== true) {
  254. header('HTTP/1.0 403 Forbidden');
  255. echo 'Forbidden';
  256. }