source: spip-zone/_plugins_/incarner/trunk/incarner_fonctions.php @ 110271

Last change on this file since 110271 was 110271, checked in by pierrekuhn82@…, 13 months ago

Version 1.3.4 : Notice sur la clé.

File size: 2.4 KB
Line 
1<?php
2/**
3 * Fonctions utiles au plugin Incarner
4 *
5 * @plugin     incarner
6 * @copyright  2016
7 * @author     Michel Bystranowski
8 * @licence    GNU/GPL
9 */
10
11/**
12 * Vérifie si une clé d'incarnation est valide
13 *
14 * @param string $cle : La clé d'incarnation
15 *
16 * @return boolean : true si la clé est valide, false sinon
17 */
18function incarner_cle_valide($cle) {
19
20        include_spip('inc/config');
21
22        if (! $cles = lire_config('incarner/cles')) {
23                $cles = array();
24        }
25        if (! $maj = lire_config('incarner/maj')) {
26                $maj = array();
27        }
28
29        if ($cles and ($id_auteur = array_search($cle, $cles))
30                        and ((time() - $maj[$id_auteur]) < _INCARNER_DELAI_EXPIRATION)) {
31                $maj[$id_auteur] = time();
32                ecrire_config('incarner/maj', $maj);
33
34                return true;
35        } else {
36                return false;
37        }
38}
39
40/**
41 * Renouveler la clé d'incarnation
42 *
43 * Si on en a pas déjà une on en crée une nouvelle
44 *
45 * @return null
46 */
47function incarner_renouveler_cle() {
48
49        include_spip('inc/config');
50        include_spip('inc/cookie');
51        include_spip('inc/session');
52
53        $cle_actuelle = isset($_COOKIE['spip_cle_incarner']) ? $_COOKIE['spip_cle_incarner'] : '';
54
55        if (! $cles = lire_config('incarner/cles')) {
56                $cles = array();
57        }
58        if (! $maj = lire_config('incarner/maj')) {
59                $maj = array();
60        }
61
62        // Support de la fonction random_bytes pour PHP < 7.0
63        include_spip('lib/random_compat-2.0.10/lib/random');
64
65        $nouvelle_cle = urlencode(bin2hex(random_bytes(16)));
66
67        /* première incarnation */
68        if (! incarner_cle_valide($cle_actuelle)) {
69                $id_auteur = session_get('id_auteur');
70        } else {
71                $id_auteur = array_search($cle_actuelle, $cles);
72        }
73
74        $cles[$id_auteur] = $nouvelle_cle;
75        $maj[$id_auteur] = time();
76
77        ecrire_config('incarner/cles', $cles);
78        ecrire_config('incarner/maj', $maj);
79
80        spip_setcookie('spip_cle_incarner', $nouvelle_cle);
81}
82
83/**
84 * Invalider la clé de l'auteur et effacer son cookie
85 *
86 * @return null
87 */
88function incarner_invalider_cle() {
89
90        include_spip('inc/config');
91        include_spip('inc/cookie');
92
93        $cle_actuelle = $_COOKIE['spip_cle_incarner'];
94
95        if (! $cles = lire_config('incarner/cles')) {
96                $cles = array();
97        }
98        if (! $maj = lire_config('incarner/maj')) {
99                $maj = array();
100        }
101
102        $index_cle_actuelle = array_search($cle_actuelle, $cles);
103
104        unset($cles[$index_cle_actuelle]);
105        unset($maj[$index_cle_actuelle]);
106        ecrire_config('incarner/cles', $cles);
107        ecrire_config('incarner/maj', $maj);
108
109        spip_setcookie('spip_cle_incarner', '');
110}
Note: See TracBrowser for help on using the repository browser.