{"action":"created","comment":{"url":"https://api.github.com/repos/Quentinix/Wave/pulls/comments/205767118","pull_request_review_id":141105005,"id":205767118,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNTc2NzExOA==","diff_hunk":"@@ -0,0 +1,519 @@\n+<?php\n+// phpcs:disable Generic.Files.LineLength\n+\n+namespace Wave;\n+\n+use Exception;\n+\n+/**\n+ * Classe de la gestion des comptes\n+ *\n+ * @package Wave\n+ * @author  Quentinix <git@quentinix.fr>\n+ */\n+class Account extends Config\n+{\n+\n+    private $sqlConnect;\n+    \n+    /**\n+     * Appel de la connexion à la base de données\n+     */\n+    public function __construct()\n+    {\n+        $sqlClass = new Sql;\n+        $this->sqlConnect = $sqlClass->getSqlConnect();\n+    }\n+\n+    /**\n+     * Permet la création d'un nouveau utilisateur\n+     * Retourne false si l'utilisateur existe déjà\n+     * Retourne true si l'utilisateur a bien été créé\n+     *\n+     * @param String $user\n+     * @param String $pass\n+     * @param String $email\n+     * @param Array  $perso\n+     *\n+     * @throws Exception\n+     * @return boolean\n+     */\n+    public function accountCreate($user, $pass, $email = null, $perso = [])\n+    {\n+        if ($user == \"\") {\n+            throw new Exception(\"User n'est pas renseignée.\");\n+        }\n+        if ($pass == \"\") {\n+            throw new Exception(\"Pass n'est pas renseignée.\");\n+        }\n+        $user_norm = normalizer_normalize($user);\n+        if ($email === null) {\n+            $sqlResult = mysqli_query($this->sqlConnect, \"SELECT * FROM \" . $this->getConfigSqlTableUser() . \" WHERE `user_norm` LIKE '\" . $user_norm . \"'\");\n+        } else {\n+            $sqlResult = mysqli_query($this->sqlConnect, \"SELECT * FROM \" . $this->getConfigSqlTableUser() . \" WHERE `user_norm` LIKE '\" . $user_norm . \"' OR `email` LIKE '\" . $email . \"'\");\n+        }\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        if (mysqli_fetch_array($sqlResult) !== null) {\n+            return false;\n+        }\n+        $perso = json_encode($perso);\n+        $hash = new Hash;\n+        $passCrypt = $hash->hashCreate($pass);\n+        mysqli_query($this->sqlConnect, \"INSERT INTO `\" . $this->getConfigSqlTableUser() . \"` (`id`, `user`, `user_norm`, `pass`, `email`, `perso`) VALUES (NULL, '\" . $user . \"', '\" . $user_norm . \"', '\" . $passCrypt . \"', '\" . $email . \"', '\" . $perso . \"')\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        return true;\n+    }\n+\n+    /**\n+     * Permet la suppression d'un compte d'utilisateur\n+     * Retourne false si le compte a pas été supprimé\n+     * Retourne true si le compte a été supprimé\n+     *\n+     * @param  String $user\n+     *\n+     * @throws Exception\n+     * @return Boolean\n+     */\n+    public function accountDelete($user)\n+    {\n+        if ($user == \"\") {\n+            throw new Exception(\"User n'est pas renseignée.\");\n+        }\n+        mysqli_query($this->sqlConnect, \"DELETE FROM `\" . $this->getConfigSqlTableUser() . \"` WHERE `user` = '\" . $user . \"'\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        if (mysqli_affected_rows($this->sqlConnect) == 0) {\n+            return false;\n+        }\n+        return true;\n+    }\n+\n+    /**\n+     * Retourne la liste des utilisateurs\n+     *\n+     * @throws Exception\n+     * @return Array\n+     */\n+    public function accountUsersList()\n+    {\n+        $return = [];\n+        $sqlResult = mysqli_query($this->sqlConnect, \"SELECT user FROM \" . $this->getConfigSqlTableUser);\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        while ($sqlRow = mysqli_fetch_array($sqlResult)) {\n+            $return[] = $sqlRow[\"user\"];\n+        }\n+        return $return;\n+    }\n+\n+    /**\n+     * Retourne le détail de l'utilisateur mis en paramètre\n+     * Si l'utilisateur n'existe pas, alors Null est retourné\n+     * Si l'utilisateur existe, alors un tableau avec le détail de l'utilisateur est retourné\n+     *\n+     * @param  String $user\n+     *\n+     * @throws Exception\n+     * @return Null|Array\n+     */\n+    public function accountUserDetail($user)\n+    {\n+        $sqlResult = mysqli_query($this->sqlConnect, \"SELECT * FROM \" . $this->getConfigSqlTableUser . \" WHERE `user` LIKE '\" . $user . \"'\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        while ($sqlRow = mysqli_fetch_array($sqlResult)) {\n+            $return[\"user\"] = $sqlRow[\"user\"];\n+            $return[\"user_norm\"] = $sqlRow[\"user_norm\"];\n+            $return[\"permission\"] = $sqlRow[\"permission\"];\n+            $return[\"email\"] = $sqlRow[\"email\"];\n+            $return[\"ip_access\"] = json_decode($sqlRow[\"ip_access\"]);\n+            $return[\"Recovery_time\"] = $sqlRow[\"Recovery_time\"];\n+            $return[\"perso\"] = json_decode($sqlRow[\"perso\"]);\n+        }\n+        if (isset($return)) {\n+            return $return;\n+        } else {\n+            return null;\n+        }\n+    }\n+\n+    /**\n+     * Permet la connexion de l'utilisateur\n+     * Retourne 0 si l'utilisateur est bien connecté\n+     * Retourne 1 si le mot de passe est faux\n+     * Retourne 2 si l'utilisateur n'existe pas\n+     * Retourne 3 si l'ip de l'utilisateur n'est pas permit\n+     * Retourne 4 si l'utilisateur à trop d'essais\n+     *\n+     * @param String $user\n+     * @param String $pass\n+     *\n+     * @throws Exception\n+     * @return Integer\n+     */\n+    public function accountConnect($user, $pass, $loginEver)\n+    {\n+        if ($user == \"\") {\n+            throw new Exception(\"User n'est pas renseignée.\");\n+        }\n+        if ($pass == \"\") {\n+            throw new Exception(\"Pass n'est pas renseignée.\");\n+        }\n+        $user_norm = normalizer_normalize($user);\n+        if ($this->getConfigSessionSelect == 3) {\n+            $sqlResult = mysqli_query($this->sqlConnect, \"SELECT id, pass, try, ip_access FROM `\" . $this->getConfigSqlTableUser() . \"` WHERE `user_norm` LIKE '\" . $user_norm . \"' OR `email` LIKE '\" . $user . \"'\");\n+        } elseif ($this->getConfigSessionSelect == 2) {\n+            $sqlResult = mysqli_query($this->sqlConnect, \"SELECT id, pass, try, ip_access FROM `\" . $this->getConfigSqlTableUser() . \"` WHERE `email` LIKE '\" . $user . \"'\");\n+        } elseif ($this->getConfigSessionSelect == 1) {\n+            $sqlResult = mysqli_query($this->sqlConnect, \"SELECT id, pass, try, ip_access FROM `\" . $this->getConfigSqlTableUser() . \"` WHERE `user_norm` LIKE '\" . $user_norm . \"'\");\n+        } else {\n+            throw new Exception(\"configSessionSelect ne possède pas la bonne configuration, Executer à nouveau 'composer run-script config' dans le dossier 'vendor/quentinix/wave/'.\");\n+        }\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        while ($sqlRow = mysqli_fetch_array($sqlResult)) {\n+            if ($sqlRow[\"try\"] >= $this->getConfigMaxTry()) {\n+                return 4; // L'utilisateur à trop d'essais\n+            }\n+            $passVerif = $sqlRow[\"pass\"];\n+            $userId = $sqlRow[\"id\"];\n+            $ip_access = json_decode($sqlRow[\"ip_access\"]);\n+        }\n+        if (! isset($userId)) {\n+            return 2; // L'utilisateur n'existe pas\n+        }\n+        if (array_search($_SERVER[\"REMOTE_ADDR\"], $ip_access) !== false) {\n+            return 3; // L'ip n'est pas permit de se connecter\n+        }\n+        $hash = new Hash;\n+        if ($hash->hashVerif($pass, $passVerif)) {\n+            @session_start();\n+            session_regenerate_id();\n+            $expire = time() + $this->getConfigSessionExpire();\n+            mysqli_query($this->sqlConnect, \"INSERT INTO `\" . $this->getConfigSqlTableSession() . \"` (`id`, `user_id`, `session_id`,`ip`, `expire`, `loginEver`) VALUES (NULL, '\" . $userId . \"', '\" . session_id() . \"', '\" . $_SERVER[\"REMOTE_ADDR\"] . \"', '\" . $expire . \"', '\" . $loginEver . \"')\");\n+            if (mysqli_errno($this->sqlConnect)) {\n+                throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+            }\n+            mysqli_query($this->sqlConnect, \"UPDATE `\" . $this->getConfigSqlTableUser() . \"` SET `try` = 0 WHERE `\" . $this->getConfigSqlTableUser() . \"`.`user_norm` LIKE \" . $user_norm . \";\");\n+            if (mysqli_errno($this->sqlConnect)) {\n+                throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+            }\n+            return 0; // L'utilisateur est connecté\n+        }\n+        mysqli_query($this->sqlConnect, \"UPDATE `\" . $this->getConfigSqlTableUser() . \"` SET `try` = `try` + 1 WHERE `\" . $this->getConfigSqlTableUser() . \"`.`user_norm` LIKE \" . $user_norm . \";\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        return 1; // Le mot de passe est faux\n+    }\n+\n+    /**\n+     * Réinitialise le compteur d'essais\n+     *\n+     * @param  String $user\n+     *\n+     * @throws Exception\n+     * @return Void\n+     */\n+    public function accountUnblock($user)\n+    {\n+        mysqli_query($this->sqlConnect, \"UPDATE `\" . $this->getConfigSqlTableUser . \"` SET `try` = '0' WHERE `user` = \" . $user);\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+    }\n+\n+    /**\n+     * Permet la déconnexion de l'utilisateur\n+     * Retourne rien si la requête SQL ne possède pas de problème\n+     *\n+     * @throws Exception\n+     * @return Void\n+     */\n+    public function accountDisconnect()\n+    {\n+        @session_start();\n+        mysqli_query($this->sqlConnect, \"DELETE FROM `\" . $this->getConfigSqlTableSession() . \"` WHERE `session_id` = '\" . session_id() . \"'\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        session_regenerate_id();\n+    }\n+\n+    /**\n+     * Permet de modifier les informations d'un utilisateur\n+     * Retourne false si l'utilisateur n'existe pas\n+     * Retourne true si les modifications sont bien enregistrées\n+     *\n+     * @param String      $user\n+     * @param Null|String $email\n+     * @param Array       $perso\n+     *\n+     * @throws Exception\n+     * @return Boolean\n+     */\n+    public function accountMod($user, $email = null, $perso = [])\n+    {\n+        $user_norm = normalizer_normalize($user);\n+        $sqlResult = mysqli_query($this->sqlConnect, \"SELECT perso, email FROM \" . $this->getConfigSqlTableUser() . \" WHERE `user_norm` LIKE '\" . $user_norm . \"'\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        if ($sqlRow = mysqli_fetch_array($sqlResult) === null) {\n+            return false;\n+        } else {\n+            $persoBase = json_decode($sqlRow[\"perso\"]);\n+            if ($email === null) {\n+                $email = $sqlRow[\"email\"];\n+            }\n+        }\n+        foreach ($perso as $key => $value) {\n+            $persoBase[$key] = $value;\n+        }\n+        $perso = json_encode($persoBase);\n+        $sqlQuery = \"UPDATE `\" . $this->getConfigSqlTableUser() . \"` SET (email, perso) VALUE ('\" . $email . \"', '\" . $perso . \"') WHERE `user_norm` LIKE \" . $user_norm;\n+        mysqli_query($this->sqlConnect, $sqlQuery);\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        return true;\n+    }\n+\n+    /**\n+     * Permet de modifier le mot de passe d'un utilisateur\n+     * Retourne false si l'utilisateur n'existe pas\n+     * Retourne true si le mot de passe à bien été enregistré\n+     *\n+     * @param String $mdp\n+     *\n+     * @throws Exception\n+     * @return Boolean\n+     */\n+    public function accountModMdp($user, $mdp)\n+    {\n+        $userNorm = normalizer_normalize($user);\n+        $hash = new Hash;\n+        $mdpHash = $hash->hashCreate($mdp);\n+        mysqli_query($this->sqlConnect, \"UPDATE `\" . $this->getConfigSqlTableUser() . \"` SET `pass` = '\" . $mdpHash . \"' WHERE `user_norm` = \" . $userNorm);\n+        if (mysqli_affected_rows($this->sqlConnect) !== 1) {\n+            return false;\n+        }\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        return true;\n+    }\n+\n+    /**\n+     * Permet de modifier le niveau de permission d'un utilisateur.\n+     * Retourne false si le niveau de permission n'est pas attribué.\n+     * Retourne true si le niveau de permission est assigné.\n+     *\n+     * @param String  $user\n+     * @param Integer $permission\n+     *\n+     * @throws Exception\n+     * @return Boolean\n+     */\n+    public function accountUpdatePerm($user, $permission)\n+    {\n+        if ($user == \"\") {\n+            throw new Exception(\"User n'est pas renseignée.\");\n+        }\n+        if ($permission === \"\") {\n+            throw new Exception(\"Permission n'est pas renseignée.\");\n+        }\n+        mysqli_query($this->sqlConnect, \"UPDATE `\" . $this->getConfigSqlTableUser() . \"` SET `permission` = '\" . $permission . \"' WHERE `user` = '\" . $user . \"'\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        if (mysqli_affected_rows($this->sqlConnect) == 0) {\n+            return false;\n+        }\n+        return true;\n+    }\n+\n+    /**\n+     * Permet de renvoyer un tableau des informations de l'utilisateur connecté\n+     *\n+     * @throws Exception\n+     * @return Boolean[]|Mixed[]\n+     */\n+    public function accountVerif()\n+    {\n+        @session_start();\n+        $sqlResult = mysqli_query($this->sqlConnect, \"SELECT user, permission, email, ip_access, try, recovery_time, perso, session_id, ip, expire, login_ever FROM `\" . $this->getConfigSqlTableUser . \"` JOIN \" . $this->getConfigSqlTableSession . \" ON \" . $this->getConfigSqlTableUser . \".id LIKE \" . $this->getConfigSqlTableSession . \".user_id WHERE session_id = \" . session_id() . \" AND (expire > \" . time() . \" OR loginEver = 1) AND ip = '\" . $_SERVER[\"REMOTE_ADDR\"] . \"'\");\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        while ($sqlRow = mysqli_fetch_array($sqlResult)) {\n+            return array(\n+                \"connect\" => true,\n+                \"user\" => $sqlRow[\"user\"],\n+                \"permission\" => $sqlRow[\"permission\"],\n+                \"email\" => $sqlRow[\"email\"],\n+                \"ip_access\" => json_decode($sqlRow[\"ip_access\"]),\n+                \"try\" => $sqlRow[\"try\"],\n+                \"recovery_time\" => $sqlRow[\"recovery_time\"],\n+                \"perso\" => json_decode($sqlRow[\"perso\"]),\n+                \"session_id\" => $sqlRow[\"session_id\"],\n+                \"ip\" => $sqlRow[\"ip\"],\n+                \"expire\" => $sqlRow[\"expire\"],\n+                \"login_ever\" => $sqlRow[\"login_ever\"],\n+            );\n+        }\n+        return array(\n+            \"connect\" => false\n+        );\n+    }\n+\n+    /**\n+     * Permet de retourner une valeur boolean selon la permission de\n+     * l'utilisateur\n+     * Retourne false si l'utilisateur n'est pas connecté ou si il ne possède\n+     * pas suffisament de permission\n+     * Retourne true si l'utilisateur possède suffisament de permission\n+     *\n+     * @param Integer $minPerm\n+     *\n+     * @return Boolean\n+     */\n+    public function accountVerifPerm($minPerm)\n+    {\n+        $verif = $this->accountVerif();\n+        if ($verif[\"connect\"] == true and $verif[\"permission\"] >= $minPerm) {\n+            return true;\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * Permet de retourner une valeur boolean selon la permission de\n+     * l'utilisateur\n+     * Retourne false si l'utilisateur n'est pas connecté ou si il possède\n+     * trop de permission\n+     * Retourne true si l'utilisateur possède suffisament peu de permission\n+     *\n+     * @param Interger $maxPerm\n+     *\n+     * @return Boolean\n+     */\n+    public function accountVerifPermReverse($maxPerm)\n+    {\n+        $verif = $this->accountVerif();\n+        if ($verif[\"connect\"] == true and $verif[\"permission\"] <= $minPerm) {\n+            return true;\n+        }\n+        return false;\n+    }\n+\n+    /**\n+     * Permet la suppression des sessions expirées dans la base de données\n+     * Retourne rien si la requête SQL est correctement executée\n+     *\n+     * @throws Exception\n+     * @return Void\n+     */\n+    public function accountClearSession()\n+    {\n+        mysqli_query($this->sqlConnect, \"DELETE FROM `\" . $this->getConfigSqlTableSession() . \"` WHERE `expire` < \" . time());\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+    }\n+\n+    /**\n+     * Permet la création d'un jeton pour la récupération d'un compte\n+     * utilisateur\n+     *\n+     * @param String $email\n+     * @param String $user\n+     *\n+     * @throws Exception\n+     * @return String|Null\n+     */\n+    public function accountRecoveryCreate($email, $user)\n+    {\n+        if ($email == \"\") {\n+            throw new Exception(\"Email n'est pas renseignée.\");\n+        }\n+        if ($user == \"\") {\n+            throw new Exception(\"User n'est pas renseignée.\");\n+        }\n+        $sqlResult = mysqli_query($this->sqlConnect, \"SELECT id FROM `\" . $this->getConfigSqlTableUser() . \"` WHERE `user` LIKE '\" . $user . \"' AND `email` LIKE '\" . $email . \"' AND `recovery_time` <= \" . time());\n+        if (mysqli_errno($this->sqlConnect)) {\n+            throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+        }\n+        while ($sqlRow = mysqli_fetch_array($sqlResult)) {\n+            $uniqid = md5(uniqid()) . md5(uniqid());\n+            $expire = time() + $this->getConfigRecoveryExpire();\n+            mysqli_query($this->sqlConnect, \"INSERT INTO `\" . $this->getConfigSqlTableRecovery() . \"` (`id`, `token`, `user_id`, `expire`) VALUES (NULL, '\" . $uniqid . \"', '\" . $sqlRow[\"id\"] . \"', '\" . $expire . \"')\");\n+            if (mysqli_errno($this->sqlConnect)) {\n+                throw new Exception(\"Echec requête SQL : \" . mysqli_errno($this->sqlConnect) . \" : \" . mysqli_error($this->sqlConnect));\n+            }\n+            mysqli_query($sqlConnect, \"UPDATE `\" . $this->getConfigSqlTableUser() . \"` SET `recovery_time` = '\" . time() + $this->getConfigRecoveryRetry . \"' WHERE `user` = '\" . $user .\"'\");","path":"class/Account.php","position":462,"original_position":462,"commit_id":"ca8b71ae38feb59fc3758da4fc19218f11c19ce2","original_commit_id":"ca8b71ae38feb59fc3758da4fc19218f11c19ce2","user":{"login":"codacy-bot","id":19940114,"node_id":"MDQ6VXNlcjE5OTQwMTE0","avatar_url":"https://avatars1.githubusercontent.com/u/19940114?v=4","gravatar_id":"","url":"https://api.github.com/users/codacy-bot","html_url":"https://github.com/codacy-bot","followers_url":"https://api.github.com/users/codacy-bot/followers","following_url":"https://api.github.com/users/codacy-bot/following{/other_user}","gists_url":"https://api.github.com/users/codacy-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/codacy-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codacy-bot/subscriptions","organizations_url":"https://api.github.com/users/codacy-bot/orgs","repos_url":"https://api.github.com/users/codacy-bot/repos","events_url":"https://api.github.com/users/codacy-bot/events{/privacy}","received_events_url":"https://api.github.com/users/codacy-bot/received_events","type":"User","site_admin":false},"body":"![Codacy](https://app.codacy.com/assets/images/favicon.png) Issue found: [Avoid unused local variables such as '$sqlConnect'.](https://app.codacy.com/app/Quentinix/UserManager/pullRequest?prid=1960954)","created_at":"2018-07-27T13:10:33Z","updated_at":"2018-07-27T13:10:33Z","html_url":"https://github.com/Quentinix/Wave/pull/52#discussion_r205767118","pull_request_url":"https://api.github.com/repos/Quentinix/Wave/pulls/52","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/Quentinix/Wave/pulls/comments/205767118"},"html":{"href":"https://github.com/Quentinix/Wave/pull/52#discussion_r205767118"},"pull_request":{"href":"https://api.github.com/repos/Quentinix/Wave/pulls/52"}}},"pull_request":{"url":"https://api.github.com/repos/Quentinix/Wave/pulls/52","id":204426825,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA0NDI2ODI1","html_url":"https://github.com/Quentinix/Wave/pull/52","diff_url":"https://github.com/Quentinix/Wave/pull/52.diff","patch_url":"https://github.com/Quentinix/Wave/pull/52.patch","issue_url":"https://api.github.com/repos/Quentinix/Wave/issues/52","number":52,"state":"open","locked":false,"title":"Dev","user":{"login":"Quentinix","id":24853553,"node_id":"MDQ6VXNlcjI0ODUzNTUz","avatar_url":"https://avatars1.githubusercontent.com/u/24853553?v=4","gravatar_id":"","url":"https://api.github.com/users/Quentinix","html_url":"https://github.com/Quentinix","followers_url":"https://api.github.com/users/Quentinix/followers","following_url":"https://api.github.com/users/Quentinix/following{/other_user}","gists_url":"https://api.github.com/users/Quentinix/gists{/gist_id}","starred_url":"https://api.github.com/users/Quentinix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quentinix/subscriptions","organizations_url":"https://api.github.com/users/Quentinix/orgs","repos_url":"https://api.github.com/users/Quentinix/repos","events_url":"https://api.github.com/users/Quentinix/events{/privacy}","received_events_url":"https://api.github.com/users/Quentinix/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-07-27T13:08:49Z","updated_at":"2018-07-27T13:10:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fa14da71934069bfd78f5d337f3ce8153bf46890","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Quentinix/Wave/pulls/52/commits","review_comments_url":"https://api.github.com/repos/Quentinix/Wave/pulls/52/comments","review_comment_url":"https://api.github.com/repos/Quentinix/Wave/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Quentinix/Wave/issues/52/comments","statuses_url":"https://api.github.com/repos/Quentinix/Wave/statuses/ca8b71ae38feb59fc3758da4fc19218f11c19ce2","head":{"label":"Quentinix:dev","ref":"dev","sha":"ca8b71ae38feb59fc3758da4fc19218f11c19ce2","user":{"login":"Quentinix","id":24853553,"node_id":"MDQ6VXNlcjI0ODUzNTUz","avatar_url":"https://avatars1.githubusercontent.com/u/24853553?v=4","gravatar_id":"","url":"https://api.github.com/users/Quentinix","html_url":"https://github.com/Quentinix","followers_url":"https://api.github.com/users/Quentinix/followers","following_url":"https://api.github.com/users/Quentinix/following{/other_user}","gists_url":"https://api.github.com/users/Quentinix/gists{/gist_id}","starred_url":"https://api.github.com/users/Quentinix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quentinix/subscriptions","organizations_url":"https://api.github.com/users/Quentinix/orgs","repos_url":"https://api.github.com/users/Quentinix/repos","events_url":"https://api.github.com/users/Quentinix/events{/privacy}","received_events_url":"https://api.github.com/users/Quentinix/received_events","type":"User","site_admin":false},"repo":{"id":109386163,"node_id":"MDEwOlJlcG9zaXRvcnkxMDkzODYxNjM=","name":"Wave","full_name":"Quentinix/Wave","owner":{"login":"Quentinix","id":24853553,"node_id":"MDQ6VXNlcjI0ODUzNTUz","avatar_url":"https://avatars1.githubusercontent.com/u/24853553?v=4","gravatar_id":"","url":"https://api.github.com/users/Quentinix","html_url":"https://github.com/Quentinix","followers_url":"https://api.github.com/users/Quentinix/followers","following_url":"https://api.github.com/users/Quentinix/following{/other_user}","gists_url":"https://api.github.com/users/Quentinix/gists{/gist_id}","starred_url":"https://api.github.com/users/Quentinix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quentinix/subscriptions","organizations_url":"https://api.github.com/users/Quentinix/orgs","repos_url":"https://api.github.com/users/Quentinix/repos","events_url":"https://api.github.com/users/Quentinix/events{/privacy}","received_events_url":"https://api.github.com/users/Quentinix/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Quentinix/Wave","description":"Gestionnaire d'utilisateurs utilisable pour les sites web. ","fork":false,"url":"https://api.github.com/repos/Quentinix/Wave","forks_url":"https://api.github.com/repos/Quentinix/Wave/forks","keys_url":"https://api.github.com/repos/Quentinix/Wave/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Quentinix/Wave/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Quentinix/Wave/teams","hooks_url":"https://api.github.com/repos/Quentinix/Wave/hooks","issue_events_url":"https://api.github.com/repos/Quentinix/Wave/issues/events{/number}","events_url":"https://api.github.com/repos/Quentinix/Wave/events","assignees_url":"https://api.github.com/repos/Quentinix/Wave/assignees{/user}","branches_url":"https://api.github.com/repos/Quentinix/Wave/branches{/branch}","tags_url":"https://api.github.com/repos/Quentinix/Wave/tags","blobs_url":"https://api.github.com/repos/Quentinix/Wave/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Quentinix/Wave/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Quentinix/Wave/git/refs{/sha}","trees_url":"https://api.github.com/repos/Quentinix/Wave/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Quentinix/Wave/statuses/{sha}","languages_url":"https://api.github.com/repos/Quentinix/Wave/languages","stargazers_url":"https://api.github.com/repos/Quentinix/Wave/stargazers","contributors_url":"https://api.github.com/repos/Quentinix/Wave/contributors","subscribers_url":"https://api.github.com/repos/Quentinix/Wave/subscribers","subscription_url":"https://api.github.com/repos/Quentinix/Wave/subscription","commits_url":"https://api.github.com/repos/Quentinix/Wave/commits{/sha}","git_commits_url":"https://api.github.com/repos/Quentinix/Wave/git/commits{/sha}","comments_url":"https://api.github.com/repos/Quentinix/Wave/comments{/number}","issue_comment_url":"https://api.github.com/repos/Quentinix/Wave/issues/comments{/number}","contents_url":"https://api.github.com/repos/Quentinix/Wave/contents/{+path}","compare_url":"https://api.github.com/repos/Quentinix/Wave/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Quentinix/Wave/merges","archive_url":"https://api.github.com/repos/Quentinix/Wave/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Quentinix/Wave/downloads","issues_url":"https://api.github.com/repos/Quentinix/Wave/issues{/number}","pulls_url":"https://api.github.com/repos/Quentinix/Wave/pulls{/number}","milestones_url":"https://api.github.com/repos/Quentinix/Wave/milestones{/number}","notifications_url":"https://api.github.com/repos/Quentinix/Wave/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Quentinix/Wave/labels{/name}","releases_url":"https://api.github.com/repos/Quentinix/Wave/releases{/id}","deployments_url":"https://api.github.com/repos/Quentinix/Wave/deployments","created_at":"2017-11-03T11:05:26Z","updated_at":"2018-02-13T16:29:03Z","pushed_at":"2018-07-27T13:08:50Z","git_url":"git://github.com/Quentinix/Wave.git","ssh_url":"git@github.com:Quentinix/Wave.git","clone_url":"https://github.com/Quentinix/Wave.git","svn_url":"https://github.com/Quentinix/Wave","homepage":"","size":905,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":24,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":24,"watchers":0,"default_branch":"master"}},"base":{"label":"Quentinix:master","ref":"master","sha":"b9d31f7cae6c2fc3b7e16712744d105f5e9d26fe","user":{"login":"Quentinix","id":24853553,"node_id":"MDQ6VXNlcjI0ODUzNTUz","avatar_url":"https://avatars1.githubusercontent.com/u/24853553?v=4","gravatar_id":"","url":"https://api.github.com/users/Quentinix","html_url":"https://github.com/Quentinix","followers_url":"https://api.github.com/users/Quentinix/followers","following_url":"https://api.github.com/users/Quentinix/following{/other_user}","gists_url":"https://api.github.com/users/Quentinix/gists{/gist_id}","starred_url":"https://api.github.com/users/Quentinix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quentinix/subscriptions","organizations_url":"https://api.github.com/users/Quentinix/orgs","repos_url":"https://api.github.com/users/Quentinix/repos","events_url":"https://api.github.com/users/Quentinix/events{/privacy}","received_events_url":"https://api.github.com/users/Quentinix/received_events","type":"User","site_admin":false},"repo":{"id":109386163,"node_id":"MDEwOlJlcG9zaXRvcnkxMDkzODYxNjM=","name":"Wave","full_name":"Quentinix/Wave","owner":{"login":"Quentinix","id":24853553,"node_id":"MDQ6VXNlcjI0ODUzNTUz","avatar_url":"https://avatars1.githubusercontent.com/u/24853553?v=4","gravatar_id":"","url":"https://api.github.com/users/Quentinix","html_url":"https://github.com/Quentinix","followers_url":"https://api.github.com/users/Quentinix/followers","following_url":"https://api.github.com/users/Quentinix/following{/other_user}","gists_url":"https://api.github.com/users/Quentinix/gists{/gist_id}","starred_url":"https://api.github.com/users/Quentinix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quentinix/subscriptions","organizations_url":"https://api.github.com/users/Quentinix/orgs","repos_url":"https://api.github.com/users/Quentinix/repos","events_url":"https://api.github.com/users/Quentinix/events{/privacy}","received_events_url":"https://api.github.com/users/Quentinix/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Quentinix/Wave","description":"Gestionnaire d'utilisateurs utilisable pour les sites web. ","fork":false,"url":"https://api.github.com/repos/Quentinix/Wave","forks_url":"https://api.github.com/repos/Quentinix/Wave/forks","keys_url":"https://api.github.com/repos/Quentinix/Wave/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Quentinix/Wave/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Quentinix/Wave/teams","hooks_url":"https://api.github.com/repos/Quentinix/Wave/hooks","issue_events_url":"https://api.github.com/repos/Quentinix/Wave/issues/events{/number}","events_url":"https://api.github.com/repos/Quentinix/Wave/events","assignees_url":"https://api.github.com/repos/Quentinix/Wave/assignees{/user}","branches_url":"https://api.github.com/repos/Quentinix/Wave/branches{/branch}","tags_url":"https://api.github.com/repos/Quentinix/Wave/tags","blobs_url":"https://api.github.com/repos/Quentinix/Wave/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Quentinix/Wave/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Quentinix/Wave/git/refs{/sha}","trees_url":"https://api.github.com/repos/Quentinix/Wave/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Quentinix/Wave/statuses/{sha}","languages_url":"https://api.github.com/repos/Quentinix/Wave/languages","stargazers_url":"https://api.github.com/repos/Quentinix/Wave/stargazers","contributors_url":"https://api.github.com/repos/Quentinix/Wave/contributors","subscribers_url":"https://api.github.com/repos/Quentinix/Wave/subscribers","subscription_url":"https://api.github.com/repos/Quentinix/Wave/subscription","commits_url":"https://api.github.com/repos/Quentinix/Wave/commits{/sha}","git_commits_url":"https://api.github.com/repos/Quentinix/Wave/git/commits{/sha}","comments_url":"https://api.github.com/repos/Quentinix/Wave/comments{/number}","issue_comment_url":"https://api.github.com/repos/Quentinix/Wave/issues/comments{/number}","contents_url":"https://api.github.com/repos/Quentinix/Wave/contents/{+path}","compare_url":"https://api.github.com/repos/Quentinix/Wave/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Quentinix/Wave/merges","archive_url":"https://api.github.com/repos/Quentinix/Wave/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Quentinix/Wave/downloads","issues_url":"https://api.github.com/repos/Quentinix/Wave/issues{/number}","pulls_url":"https://api.github.com/repos/Quentinix/Wave/pulls{/number}","milestones_url":"https://api.github.com/repos/Quentinix/Wave/milestones{/number}","notifications_url":"https://api.github.com/repos/Quentinix/Wave/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Quentinix/Wave/labels{/name}","releases_url":"https://api.github.com/repos/Quentinix/Wave/releases{/id}","deployments_url":"https://api.github.com/repos/Quentinix/Wave/deployments","created_at":"2017-11-03T11:05:26Z","updated_at":"2018-02-13T16:29:03Z","pushed_at":"2018-07-27T13:08:50Z","git_url":"git://github.com/Quentinix/Wave.git","ssh_url":"git@github.com:Quentinix/Wave.git","clone_url":"https://github.com/Quentinix/Wave.git","svn_url":"https://github.com/Quentinix/Wave","homepage":"","size":905,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":24,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":24,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Quentinix/Wave/pulls/52"},"html":{"href":"https://github.com/Quentinix/Wave/pull/52"},"issue":{"href":"https://api.github.com/repos/Quentinix/Wave/issues/52"},"comments":{"href":"https://api.github.com/repos/Quentinix/Wave/issues/52/comments"},"review_comments":{"href":"https://api.github.com/repos/Quentinix/Wave/pulls/52/comments"},"review_comment":{"href":"https://api.github.com/repos/Quentinix/Wave/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Quentinix/Wave/pulls/52/commits"},"statuses":{"href":"https://api.github.com/repos/Quentinix/Wave/statuses/ca8b71ae38feb59fc3758da4fc19218f11c19ce2"}},"author_association":"OWNER"}}
{"actor":{"display_login":"codacy-bot"}}