init.php 2.3 KB

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