/classes/MiradouAuth.php

https://github.com/cybfr/famille.miradou.com · PHP · 154 lines · 134 code · 0 blank · 20 comment · 14 complexity · 3bccb106a239533c40c693d6a62b9bdf MD5 · raw file

  1. <?php
  2. class MiradouAuth {
  3. private $AuthRealm;
  4. function __construct($authrealm) {
  5. $this->AuthRealm = $authrealm;
  6. if (isset ( $_SESSION ['miUser'] )) {
  7. $session_user = unserialize ( $_SESSION ['miUser'] );
  8. } else {
  9. $session_user = new member ( array () );
  10. }
  11. foreach ( $session_user as $key => $value ) {
  12. $this->$key = $value;
  13. }
  14. }
  15. function loginMi($email, $password) {
  16. $user = $this->AuthRealm->getMemberByMail ( $email );
  17. if ($user) {
  18. if ($user->checkPassword ( $password )) {
  19. $_SESSION ['miUser'] = serialize ( $user );
  20. } else {
  21. $user = "wrong password";
  22. }
  23. } else {
  24. $user = "wrong e-mail";
  25. }
  26. return ($user);
  27. }
  28. function getIdStyles() {
  29. $style = " .unknownid{ background-position: 0 -10px; background-image: url(/images/fmly_ids.png);}
  30. ";
  31. foreach ( $this->AuthRealm->members as $member ) {
  32. $style .= " ." . $member->id . "{ background-position: 0 -" . $member->pictureIdx . "px; background-image: url(/images/fmly_ids.png);}
  33. ";
  34. }
  35. return ($style);
  36. }
  37. /**
  38. * Enter description here .
  39. *
  40. * ..
  41. *
  42. * @param string $fbId
  43. */
  44. function loginFb($fbId) {
  45. $user = $this->AuthRealm->getMemberByfbId ( $fbId );
  46. if ($user) {
  47. $_SESSION ['miUser'] = serialize ( $user );
  48. } else {
  49. $user = "wrong fbId";
  50. }
  51. return ($user);
  52. }
  53. /**
  54. * Enter description here .
  55. *
  56. * ..
  57. *
  58. * @param unknown_type $mailto_addr
  59. * @return Ambiguous
  60. */
  61. function sendPwResetMail($mailToAddr) {
  62. /* check e-mail addresse */
  63. $member = $this->AuthRealm->getMemberByMail ( $mailToAddr );
  64. error_log ( "sendPwResetMail($mailToAddr)" );
  65. if ($member === false) {
  66. return "Cette adresse ($mailToAddr) n'est pas enregistrée, contactez le ouaibmestre";
  67. }
  68. $key = sha1 ( $mailToAddr . microtime ( true ) . mt_rand ( 10000, 90000 ) );
  69. $query = "
  70. REPLACE INTO `famille`.`pwresetrequests` SET
  71. `key`='$key',
  72. `date`='" . date ( DATE_ATOM ) . "',
  73. `email`='" . $member->email . "',
  74. `null`='0';
  75. ";
  76. if (! mysql_query ( $query )) {
  77. if (mysql_errno () == 1062) {
  78. $msg = mysql_error ();
  79. if (strpos ( $msg, 'email', 0 )) {
  80. // TODO : cancel key then resend link
  81. error_log ( "already send a link to this address" );
  82. return "already send a link to this address";
  83. }
  84. }
  85. error_log ( "Error inserting key record.<hr>$query<hr>" . mysql_error () . "<hr>" . mysql_errno () );
  86. return "Error inserting key record.<hr>$query<hr>" . mysql_error () . "<hr>" . mysql_errno ();
  87. }
  88. error_log ( "sending mail" );
  89. $to = $mailToAddr;
  90. $fromAddr = "admin@miradou.com";
  91. $headers = "Reply-to: $fromAddr\n";
  92. $headers .= "From: $fromAddr\n";
  93. $headers .= "Errors-to: $fromAddr\n";
  94. $headers .= "MIME-Version: 1.0\n";
  95. $headers .= "Content-Transfer-Encoding: 8bit\n";
  96. $headers .= "Content-Type: text/plain; charset=utf-8\n";
  97. $site_url = "https://famille.miradou.com/Resetpw";
  98. $subject = "=?UTF-8?B?" . base64_encode ( "Votre demande de changement de mot de passe sur famille.miradou.com" ) . "?=";
  99. $url = $site_url . '?key=' . $key;
  100. $msg_body = " Bonjour François-Régis,
  101. Vous avez demandé la réinitialisation de votre mot de passe pour miradou.
  102. Pour finaliser votre demande, veuillez cliquer sur ce lien :
  103. $url
  104. * Vous navez pas demandé ce changement ? *
  105. Si vous navez pas demandé un nouveau mot de passe, informez-nous en à :
  106. $url
  107. Merci,
  108. --
  109. l'équipe miradou
  110. ";
  111. if (mail ( $mailToAddr, $subject, $msg_body, $headers )) {
  112. $msg = "Un lien vous a été envoyé pour mettre à jour votre mot de passe. Vérifiez votre mail dans quelques instants";
  113. } else {
  114. $msg = "There is some system problem in sending login details to your address. Please contact site-admin.";
  115. }
  116. error_log ( $msg );
  117. return ($msg);
  118. }
  119. function resetPassword($passwd, $key) {
  120. // TODO
  121. // check key validity=> get user
  122. $user = $this->validateKey ( $key );
  123. // update mysql : password for user
  124. if ($user) {
  125. $user->setPassword ( $passwd );
  126. $this->deleteKey ( $key );
  127. }
  128. // return link to ? page
  129. return $user;
  130. }
  131. function validateKey($key) {
  132. $sql = "
  133. SELECT * FROM famille.pwresetrequests WHERE `key` = \"$key\"";
  134. $result = mysql_query ( $sql );
  135. $keys = mysql_fetch_array ( $result );
  136. if ($keys) {
  137. return $this->AuthRealm->getMemberByMail ( $keys ['email'] );
  138. } else {
  139. return FALSE;
  140. }
  141. }
  142. private function deleteKey($key) {
  143. $query = "DELETE FROM famille.pwresetrequests WHERE `key` = \"$key\"";
  144. mysql_query ( $query );
  145. }
  146. }
  147. ?>