init.php 2.1 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. function authenticate($login, $password) {
  29. $try_login = db_escape_string($_SERVER["REMOTE_USER"]);
  30. // php-cgi
  31. if (!$try_login) $try_login = db_escape_string($_SERVER["REDIRECT_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, $password);
  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("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("UPDATE ttrss_users SET email = '$email' WHERE id = " .
  55. $user_id);
  56. }
  57. }
  58. return $user_id;
  59. }
  60. }
  61. return false;
  62. }
  63. function api_version() {
  64. return 2;
  65. }
  66. }
  67. ?>