diff --git a/authentication.php b/authentication.php index dfc7beb..1d2e24d 100644 --- a/authentication.php +++ b/authentication.php @@ -257,9 +257,11 @@ class authentication // }}} /** Check all the REST API + * @param boolean|null $savePassword return the user password if the + * authentication is valid * @return array The details provided by the authentication mecanism */ - public function verifAuthREST () + public function verifAuthREST ($savePassword = false) // {{{ { if ($this->debug) @@ -281,14 +283,20 @@ class authentication throw new \Exception (dgettext ("domframework", "Authentication error"), 403); } + if ($savePassword === true && $authparams->email !== "anonymous") + $res["password"] = $authparams->password; return $res; } // }}} /** Return the JSON Web Token - * @param string $email The user email to store in JSON Web Token payload + * @param string|array $payload The user email to store in JSON Web Token + * payload. If an array is provided, it will be the payload + * The $this->authServers["authjwt"]["algorithm"], + * $this->authServers["authjwt"]["cipherKey"] and + * $this->authServers["authjwt"]["serverKey"] can be set */ - public function createJwtToken ($email) + public function createJwtToken ($payload) // {{{ { if (isset ($this->authServers["authjwt"]["serverKey"])) @@ -296,14 +304,21 @@ class authentication // Set the JSON Web Token as the authentication is valid require_once ("domframework/jwt.php"); $algorithm = "HS256"; + $cipherKey = null; if (isset ($this->authServers["authjwt"]["algorithm"])) $algorithm = $this->authServers["authjwt"]["algorithm"]; + if (isset ($this->authServers["authjwt"]["cipherKey"])) + $cipherKey = $this->authServers["authjwt"]["cipherKey"]; $payloadArray = array(); - $payloadArray["email"] = $email; + $payloadArray["email"] = $payload; + if (is_array ($payload)) + $payloadArray = $payload; + if (! key_exists ("email", $payloadArray) || + $payloadArray["email"] === "anonymous") + throw new \Exception ("JWT Must authenticate", 401); $jwt = new jwt (); $token = $jwt->encode ($payloadArray, - $this->authServers["authjwt"]["serverKey"], - $algorithm); + $this->authServers["authjwt"]["serverKey"], $algorithm, $cipherKey); return $token; } }