init.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. class Auth_Remote extends Plugin implements IAuthModule {
  3. private $host;
  4. private $base;
  5. function about() {
  6. return array(1.0,
  7. "Authenticates against remote password (e.g. supplied by Apache)",
  8. "fox",
  9. true);
  10. }
  11. function init($host) {
  12. $this->host = $host;
  13. $this->base = new Auth_Base();
  14. $host->add_hook($host::HOOK_AUTH_USER, $this);
  15. }
  16. function get_login_by_ssl_certificate() {
  17. $cert_serial = db_escape_string(get_ssl_certificate_id());
  18. if ($cert_serial) {
  19. $result = db_query("SELECT login FROM ttrss_user_prefs, ttrss_users
  20. WHERE pref_name = 'SSL_CERT_SERIAL' AND value = '$cert_serial' AND
  21. owner_uid = ttrss_users.id");
  22. if (db_num_rows($result) != 0) {
  23. return db_escape_string(db_fetch_result($result, 0, "login"));
  24. }
  25. }
  26. return "";
  27. }
  28. /**
  29. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  30. */
  31. function authenticate($login, $password) {
  32. $try_login = db_escape_string($_SERVER["REMOTE_USER"]);
  33. // php-cgi
  34. if (!$try_login) $try_login = db_escape_string($_SERVER["REDIRECT_REMOTE_USER"]);
  35. if (!$try_login) $try_login = db_escape_string($_SERVER["PHP_AUTH_USER"]);
  36. if (!$try_login) $try_login = $this->get_login_by_ssl_certificate();
  37. if ($try_login) {
  38. $user_id = $this->base->auto_create_user($try_login, $password);
  39. if ($user_id) {
  40. $_SESSION["fake_login"] = $try_login;
  41. $_SESSION["fake_password"] = "******";
  42. $_SESSION["hide_hello"] = true;
  43. $_SESSION["hide_logout"] = true;
  44. // LemonLDAP can send user informations via HTTP HEADER
  45. if (defined('AUTH_AUTO_CREATE') && AUTH_AUTO_CREATE){
  46. // update user name
  47. $fullname = $_SERVER['HTTP_USER_NAME'] ? $_SERVER['HTTP_USER_NAME'] : $_SERVER['AUTHENTICATE_CN'];
  48. if ($fullname){
  49. $fullname = db_escape_string($fullname);
  50. db_query("UPDATE ttrss_users SET full_name = '$fullname' WHERE id = " .
  51. $user_id);
  52. }
  53. // update user mail
  54. $email = $_SERVER['HTTP_USER_MAIL'] ? $_SERVER['HTTP_USER_MAIL'] : $_SERVER['AUTHENTICATE_MAIL'];
  55. if ($email){
  56. $email = db_escape_string($email);
  57. db_query("UPDATE ttrss_users SET email = '$email' WHERE id = " .
  58. $user_id);
  59. }
  60. }
  61. return $user_id;
  62. }
  63. }
  64. return false;
  65. }
  66. function api_version() {
  67. return 2;
  68. }
  69. }