Overview
Comment: | Implémentation envoi de mail chiffré PGP |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
567f9ab5d9c3e13c9f39ff4532d70636 |
User & Date: | bohwaz on 2017-09-07 07:24:01 |
Other Links: | branch diff | manifest | tags |
Context
2017-09-08
| ||
01:48 | Fix problèmes d'envoi de mails check-in: 4f308662d1 user: bohwaz tags: dev | |
2017-09-07
| ||
07:24 | Implémentation envoi de mail chiffré PGP check-in: 567f9ab5d9 user: bohwaz tags: dev | |
2017-09-05
| ||
06:03 | Lors de la mise à jour, si ID était le champ identifiant, remplacement par numéro de membre check-in: 91546b8154 user: bohwaz tags: dev | |
Changes
Modified src/include/lib/Garradin/Membres/Session.php from [b5c8d6d848] to [9a1ca990e6].
︙ | ︙ | |||
144 145 146 147 148 149 150 | static public function recoverPasswordCheck($id) { $db = DB::getInstance(); $config = Config::getInstance(); $champ_id = $config->get('champ_identifiant'); | | | 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | static public function recoverPasswordCheck($id) { $db = DB::getInstance(); $config = Config::getInstance(); $champ_id = $config->get('champ_identifiant'); $membre = $db->first('SELECT id, email, passe, clef_pgp FROM membres WHERE '.$champ_id.' = ? LIMIT 1;', trim($id)); if (!$membre || trim($membre->email) == '') { return false; } // valide pour 1 heure minimum |
︙ | ︙ | |||
167 168 169 170 171 172 173 | $query = sprintf('%s.%s.%s', $id, $expire, $hash); $message = "Bonjour,\n\nVous avez oublié votre mot de passe ? Pas de panique !\n\n"; $message.= "Il vous suffit de cliquer sur le lien ci-dessous pour recevoir un nouveau mot de passe.\n\n"; $message.= WWW_URL . 'admin/password.php?c=' . $query; $message.= "\n\nSi vous n'avez pas demandé à recevoir ce message, ignorez-le, votre mot de passe restera inchangé."; | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | $query = sprintf('%s.%s.%s', $id, $expire, $hash); $message = "Bonjour,\n\nVous avez oublié votre mot de passe ? Pas de panique !\n\n"; $message.= "Il vous suffit de cliquer sur le lien ci-dessous pour recevoir un nouveau mot de passe.\n\n"; $message.= WWW_URL . 'admin/password.php?c=' . $query; $message.= "\n\nSi vous n'avez pas demandé à recevoir ce message, ignorez-le, votre mot de passe restera inchangé."; Utils::mail($membre->email, '['.$config->get('nom_asso').'] Mot de passe perdu ?', $message, $membre->clef_pgp); return true; } static public function recoverPasswordConfirm($code) { if (substr_count($code, '.') !== 2) { |
︙ | ︙ | |||
193 194 195 196 197 198 199 | $expire_timestamp = ($expire * 3600) + strtotime('2017-01-01'); if (time() / 3600 > $expire_timestamp) { return false; } | | | 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | $expire_timestamp = ($expire * 3600) + strtotime('2017-01-01'); if (time() / 3600 > $expire_timestamp) { return false; } $membre = $db->first('SELECT id, email, passe, clef_pgp FROM membres WHERE id = ? LIMIT 1;', (int)$id); if (!$membre || trim($membre->email) == '') { return false; } $hash = hash_hmac('sha256', $membre->email . $membre->id . $membre->passe . $expire, SECRET_KEY, true); |
︙ | ︙ | |||
219 220 221 222 223 224 225 | $message.= "Votre nouveau mot de passe : ".$password."\n\n"; $message.= "Si vous n'avez pas demandé à recevoir ce message, merci de nous le signaler."; $password = Membres::hashPassword($password); $db->update('membres', ['passe' => $password], 'id = :id', ['id' => (int)$id]); | | | 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 | $message.= "Votre nouveau mot de passe : ".$password."\n\n"; $message.= "Si vous n'avez pas demandé à recevoir ce message, merci de nous le signaler."; $password = Membres::hashPassword($password); $db->update('membres', ['passe' => $password], 'id = :id', ['id' => (int)$id]); return Utils::mail($membre->email, '['.$config->get('nom_asso').'] Nouveau mot de passe', $message, $membre->clef_pgp); } public function editUser($data) { (new Membres)->edit($this->user->id, $data, false); $this->refresh(); |
︙ | ︙ |
Modified src/include/lib/Garradin/Utils.php from [38a24e8737] to [9c877cfda5].
︙ | ︙ | |||
404 405 406 407 408 409 410 | $str = preg_replace('/<em>(\V*?)<\/em>/', '\'\'$1\'\'', $str); $str = preg_replace('/<li>(\V*?)<\/li>/', '* $1', $str); $str = preg_replace('/<ul>|<\/ul>/', '', $str); $str = preg_replace('/<a href="([^"]*?)">(\V*?)<\/a>/', '[[$2 | $1]]', $str); return $str; } | | | | > | | | < > | | < | | | 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 | $str = preg_replace('/<em>(\V*?)<\/em>/', '\'\'$1\'\'', $str); $str = preg_replace('/<li>(\V*?)<\/li>/', '* $1', $str); $str = preg_replace('/<ul>|<\/ul>/', '', $str); $str = preg_replace('/<a href="([^"]*?)">(\V*?)<\/a>/', '[[$2 | $1]]', $str); return $str; } static public function mail($to, $subject, $content, $headers = [], $pgp_key = null) { // Création du contenu du message $content = wordwrap($content); $content = trim($content); $content = preg_replace("#(?<!\r)\n#si", "\r\n", $content); $config = Config::getInstance(); if (empty($headers['From'])) { $headers['From'] = '"NE PAS REPONDRE" <'.$config->get('email_envoi_automatique').'>'; } $headers['MIME-Version'] = '1.0'; $headers['Content-type'] = 'text/plain; charset=UTF-8'; $headers['Return-Path'] = $config->get('email_envoi_automatique'); $hash = sha1(uniqid() . var_export([$additional_headers, $to, $subject, $content], true)); $headers['Message-ID'] = sprintf('%s@%s', $hash, isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : gethostname()); if ($pgp_key) { $content = Security::encryptWithPublicKey($pgp_key, $content); } if (!is_array($to)) { $to = [$to]; } foreach ($to as $recipient) { if (!self::_sendMail($recipient, $subject, $content, $headers)) { throw new \RuntimeException('Impossible d\'envoyer l\'email'); } } return true; } |
︙ | ︙ |