init.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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(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(db_fetch_result($result, 0, "login"));
  26. }
  27. }
  28. return "";
  29. }
  30. function authenticate($login, $password) {
  31. $try_login = db_escape_string($_SERVER["REMOTE_USER"]);
  32. if (!$try_login) $try_login = $this->get_login_by_ssl_certificate();
  33. # if (!$try_login) $try_login = "test_qqq";
  34. if ($try_login) {
  35. $user_id = $this->base->auto_create_user($try_login);
  36. if ($user_id) {
  37. $_SESSION["fake_login"] = $try_login;
  38. $_SESSION["fake_password"] = "******";
  39. $_SESSION["hide_hello"] = true;
  40. $_SESSION["hide_logout"] = true;
  41. // LemonLDAP can send user informations via HTTP HEADER
  42. if (defined('AUTH_AUTO_CREATE') && AUTH_AUTO_CREATE){
  43. // update user name
  44. $fullname = $_SERVER['HTTP_USER_NAME'] ? $_SERVER['HTTP_USER_NAME'] : $_SERVER['AUTHENTICATE_CN'];
  45. if ($fullname){
  46. $fullname = db_escape_string($fullname);
  47. db_query($this->link, "UPDATE ttrss_users SET full_name = '$fullname' WHERE id = " .
  48. $user_id);
  49. }
  50. // update user mail
  51. $email = $_SERVER['HTTP_USER_MAIL'] ? $_SERVER['HTTP_USER_MAIL'] : $_SERVER['AUTHENTICATE_MAIL'];
  52. if ($email){
  53. $email = db_escape_string($email);
  54. db_query($this->link, "UPDATE ttrss_users SET email = '$email' WHERE id = " .
  55. $user_id);
  56. }
  57. }
  58. return $user_id;
  59. }
  60. }
  61. return false;
  62. }
  63. }
  64. ?>