Commit 4b361f4c authored by Raulin's avatar Raulin
parents acb51b2c 9e5ac5ed
No preview for this file type
<?php
// show error reporting
error_reporting(E_ALL);
// set your default time-zone
date_default_timezone_set('Asia/Manila');
// variables used for jwt
$key = "example_key";
$iss = "http://example.org";
$aud = "http://example.com";
$iat = 1356999524;
$nbf = 1357000000;
?>
\ No newline at end of file
<?php
class Database{
// specify your own database credentials
private $host = "localhost";
private $db_name = "liang_wu";
private $username = "liang.wu";
private $password = "oMmyE2aw";
public $conn;
// get the database connection
public function getConnection(){
$this->conn = null;
try{
$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
$this->conn->exec("set names utf8");
}catch(PDOException $exception){
echo "Connection error: " . $exception->getMessage();
}
return $this->conn;
}
}
?>
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
// get database connection
include_once '../config/database.php';
// instantiate product object
include_once '../objects/identite.php';
$database = new Database();
$db = $database->getConnection();
$identite = new Identite($db);
// get posted data
$data = json_decode(file_get_contents("php://input"));
// make sure data is not empty
if(
!empty($data->login) &&
!empty($data->password) &&
!empty($data->pseudo) &&
!empty($data->age) &&
!empty($data->poids) &&
!empty($data->taille) &&
!empty($data->sexe) &&
!empty($data->niveaudusport)
){
// set product property values
$identite->login = $data->login;
$identite->password = $data->password;
$identite->pseudo = $data->pseudo;
$identite->age = $data->age;
$identite->poids = $data->poids;
$identite->taille = $data->taille;
$identite->sexe = $data->sexe;
$identite->niveaudusport = $data->niveaudusport;
if($identite->create()){
// set response code - 201 created
http_response_code(201);
// tell the user
echo json_encode(array("message" => "L'identifiant est bien crée!"));
}
// if unable to create the product, tell the user
else{
// set response code - 503 service unavailable
http_response_code(503);
// tell the user
echo json_encode(array("message" => "Impossible de créer."));
}
}
// tell the user data is incomplete
else{
// set response code - 400 bad request
http_response_code(400);
// tell the user
echo json_encode(array("message" => "Informations incomplètes"));
}
?>
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
// include database and object file
include_once '../config/database.php';
include_once '../objects/identite.php';
// get database connection
$database = new Database();
$db = $database->getConnection();
// prepare product object
$identite = new Identite($db);
// get product id
$data = json_decode(file_get_contents("php://input"));
// set product id to be deleted
$identite->id = $data->id;
// delete the product
if($identite->delete()){
// set response code - 200 ok
http_response_code(200);
// tell the user
echo json_encode(array("message" => "L'identifiant a bien été supprimé."));
}
// if unable to delete the product
else{
// set response code - 503 service unavailable
http_response_code(503);
// tell the user
echo json_encode(array("message" => "Impossible de supprimer"));
}
?>
\ No newline at end of file
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
// files needed to connect to database
include_once '../config/database.php';
include_once '../objects/identite.php';
// get database connection
$database = new Database();
$db = $database->getConnection();
// instantiate user object
$identite = new Identite($db);
// get posted data
$data = json_decode(file_get_contents("php://input"));
// set product property values
$identite->login = $data->login;
$login_exists = $identite->loginExists();
// check if email exists and if password is correct
if($login_exists){
$password = $identite->password;
if($password==$data->password){
http_response_code(200);
echo json_encode(array(
"message" => "Successful login."
));
}
else{
http_response_code(401);
// tell the user login failed
echo json_encode(array("message" => "Mot de passe incorrect"));
}
}
// login failed
else{
// set response code
http_response_code(401);
// tell the user login failed
echo json_encode(array("message" => "login inexistant."));
}
?>
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
// include database and object files
include_once '../config/database.php';
include_once '../objects/identite.php';
// instantiate database and identite object
$database = new Database();
$db = $database->getConnection();
// initialize object
$identite = new Identite($db);
// read products will be here
// query products
$stmt = $identite->read();
$num = $stmt->rowCount();
// check if more than 0 record found
if($num>0){
// products array
$identites_arr=array();
$identites_arr["records"]=array();
// retrieve our table contents
// fetch() is faster than fetchAll()
// http://stackoverflow.com/questions/2770630/pdofetchall-vs-pdofetch-in-a-loop
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
// extract row
// this will make $row['name'] to
// just $name only
extract($row);
$identite_item=array(
"id" => $id,
"login" => $login,
"password" => $password,
"pseudo" => $pseudo,
"age" => $age,
"poids" => $poids,
"taille" => $taille,
"sexe" => $sexe,
"niveaudusport" =>$niveaudusport
);
array_push($identites_arr["records"], $identite_item);
}
// set response code - 200 OK
http_response_code(200);
// show products data in json format
echo json_encode($identites_arr);
}
// no products found will be here
else{
// set response code - 404 Not found
http_response_code(404);
// tell the user no products found
echo json_encode(
array("message" => "No products found.")
);
}
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: access");
header("Access-Control-Allow-Methods: GET");
header("Access-Control-Allow-Credentials: true");
header('Content-Type: application/json');
// include database and object files
include_once '../config/database.php';
include_once '../objects/identite.php';
// get database connection
$database = new Database();
$db = $database->getConnection();
// prepare product object
$identite = new Identite($db);
// set ID property of record to read
$identite->login = isset($_GET['login']) ? $_GET['login'] : die();
// read the details of product to be edited
$identite->readOne();
if($identite->id!=null){
// create array
$identite_arr = array(
"id" => $identite->id,
"login" => $identite->login,
"password" => $identite->password,
"pseudo" => $identite->pseudo,
"age" => $identite->age,
"poids" => $identite->poids,
"taille" => $identite->taille,
"sexe" => $identite->sexe,
"niveaudusport" =>$identite->niveaudusport
);
// set response code - 200 OK
http_response_code(200);
// make it json format
echo json_encode($identite_arr);
}
else{
// set response code - 404 Not found
http_response_code(404);
// tell the user product does not exist
echo json_encode(array("message" => "Cet identifiant n'existe pas."));
}
?>
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
// include database and object files
include_once '../config/core.php';
include_once '../config/database.php';
include_once '../objects/identite.php';
// instantiate database and product object
$database = new Database();
$db = $database->getConnection();
// initialize object
$identite = new Identite($db);
// get keywords
$keywords=isset($_GET["s"]) ? $_GET["s"] : "";
// query products
$stmt = $identite->search($keywords);
$num = $stmt->rowCount();
// check if more than 0 record found
if($num>0){
// products array
$identites_arr=array();
$identites_arr["records"]=array();
// retrieve our table contents
// fetch() is faster than fetchAll()
// http://stackoverflow.com/questions/2770630/pdofetchall-vs-pdofetch-in-a-loop
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
// extract row
// this will make $row['name'] to
// just $name only
extract($row);
$identite_item=array(
"id" => $id,
"login" => $login,
"password" => $password,
"pseudo" => $pseudo,
"age" => $age,
"poids" => $poids,
"taille" => $taille,
"sexe" => $sexe,
"niveaudusport" =>$niveaudusport
);
array_push($identites_arr["records"], $identite_item);
}
// set response code - 200 OK
http_response_code(200);
// show products data
echo json_encode($identites_arr);
}
else{
// set response code - 404 Not found
http_response_code(404);
// tell the user no products found
echo json_encode(
array("message" => "L'identifiant est introuvable")
);
}
?>
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
// include database and object files
include_once '../config/database.php';
include_once '../objects/identite.php';
// get database connection
$database = new Database();
$db = $database->getConnection();
// prepare product object
$identite = new Identite($db);
// get id of product to be edited
$data = json_decode(file_get_contents("php://input"));
// set ID property of product to be edited
$identite->id = $data->id;
// set product property values
$identite->login = $data->login;
$identite->password = $data->password;
$identite->pseudo = $data->pseudo;
$identite->age = $data->age;
$identite->poids = $data->poids;
$identite->taille = $data->taille;
$identite->sexe = $data->sexe;
$identite->niveaudusport = $data->niveaudusport;
// update the product
if($identite->update()){
// set response code - 200 ok
http_response_code(200);
// tell the user
echo json_encode(array("message" => "Les modifications ont été prises en compte."));
}
// if unable to update the product, tell the user
else{
// set response code - 503 service unavailable
http_response_code(503);
// tell the user
echo json_encode(array("message" => "Impossible de mettre à jour"));
}
?>
<?php
// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
// required to decode jwt
include_once '../config/core.php';
include_once '../libs/php-jwt-master/src/BeforeValidException.php';
include_once '../libs/php-jwt-master/src/ExpiredException.php';
include_once '../libs/php-jwt-master/src/SignatureInvalidException.php';
include_once '../libs/php-jwt-master/src/JWT.php';
use \Firebase\JWT\JWT;
// get posted data
$data = json_decode(file_get_contents("php://input"));
// get jwt
$jwt=isset($data->jwt) ? $data->jwt : "";
// if jwt is not empty
if($jwt){
// if decode succeed, show user details
try {
// decode jwt
$decoded = JWT::decode($jwt, $key, array('HS256'));
// set response code
http_response_code(200);
// show user details
echo json_encode(array(
"message" => "Access granted.",
"data" => $decoded->data
));
}
// if decode fails, it means jwt is invalid
catch (Exception $e){
// set response code
http_response_code(401);
// tell the user access denied & show error message
echo json_encode(array(
"message" => "Access denied.",
"error" => $e->getMessage()
));
}
}
// show error message if jwt is empty
else{
// set response code
http_response_code(401);
// tell the user access denied
echo json_encode(array("message" => "Access denied."));
}
?>
\ No newline at end of file
Copyright (c) 2011, Neuman Vong
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Neuman Vong nor the names of other
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[![Build Status](https://travis-ci.org/firebase/php-jwt.png?branch=master)](https://travis-ci.org/firebase/php-jwt)
[![Latest Stable Version](https://poser.pugx.org/firebase/php-jwt/v/stable)](https://packagist.org/packages/firebase/php-jwt)
[![Total Downloads](https://poser.pugx.org/firebase/php-jwt/downloads)](https://packagist.org/packages/firebase/php-jwt)
[![License](https://poser.pugx.org/firebase/php-jwt/license)](https://packagist.org/packages/firebase/php-jwt)
PHP-JWT
=======
A simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to [RFC 7519](https://tools.ietf.org/html/rfc7519).
Installation
------------
Use composer to manage your dependencies and download PHP-JWT:
```bash
composer require firebase/php-jwt
```
Example
-------
```php
<?php
use \Firebase\JWT\JWT;
$key = "example_key";
$payload = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);
/**
* IMPORTANT:
* You must specify supported algorithms for your application. See
* https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
* for a list of spec-compliant algorithms.
*/
$jwt = JWT::encode($payload, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);
/*
NOTE: This will now be an object instead of an associative array. To get
an associative array, you will need to cast it as such:
*/
$decoded_array = (array) $decoded;
/**
* You can add a leeway to account for when there is a clock skew times between
* the signing and verifying servers. It is recommended that this leeway should
* not be bigger than a few minutes.
*
* Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef
*/
JWT::$leeway = 60; // $leeway in seconds
$decoded = JWT::decode($jwt, $key, array('HS256'));
?>
```
Example with RS256 (openssl)
----------------------------
```php
<?php
use \Firebase\JWT\JWT;
$privateKey = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC8kGa1pSjbSYZVebtTRBLxBz5H4i2p/llLCrEeQhta5kaQu/Rn
vuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t0tyazyZ8JXw+KgXTxldMPEL9
5+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4ehde/zUxo6UvS7UrBQIDAQAB
AoGAb/MXV46XxCFRxNuB8LyAtmLDgi/xRnTAlMHjSACddwkyKem8//8eZtw9fzxz
bWZ/1/doQOuHBGYZU8aDzzj59FZ78dyzNFoF91hbvZKkg+6wGyd/LrGVEB+Xre0J
Nil0GReM2AHDNZUYRv+HYJPIOrB0CRczLQsgFJ8K6aAD6F0CQQDzbpjYdx10qgK1
cP59UHiHjPZYC0loEsk7s+hUmT3QHerAQJMZWC11Qrn2N+ybwwNblDKv+s5qgMQ5
5tNoQ9IfAkEAxkyffU6ythpg/H0Ixe1I2rd0GbF05biIzO/i77Det3n4YsJVlDck
ZkcvY3SK2iRIL4c9yY6hlIhs+K9wXTtGWwJBAO9Dskl48mO7woPR9uD22jDpNSwe
k90OMepTjzSvlhjbfuPN1IdhqvSJTDychRwn1kIJ7LQZgQ8fVz9OCFZ/6qMCQGOb
qaGwHmUK6xzpUbbacnYrIM6nLSkXgOAwv7XXCojvY614ILTK3iXiLBOxPu5Eu13k
eUz9sHyD6vkgZzjtxXECQAkp4Xerf5TGfQXGXhxIX52yH+N2LtujCdkQZjXAsGdm
B2zNzvrlgRmgBrklMTrMYgm1NPcW+bRLGcwgW2PTvNM=
-----END RSA PRIVATE KEY-----
EOD;
$publicKey = <<<EOD
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H
4i2p/llLCrEeQhta5kaQu/RnvuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t
0tyazyZ8JXw+KgXTxldMPEL95+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4
ehde/zUxo6UvS7UrBQIDAQAB
-----END PUBLIC KEY-----
EOD;
$payload = array(
"iss" => "example.org",
"aud" => "example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);
$jwt = JWT::encode($payload, $privateKey, 'RS256');
echo "Encode:\n" . print_r($jwt, true) . "\n";
$decoded = JWT::decode($jwt, $publicKey, array('RS256'));
/*
NOTE: This will now be an object instead of an associative array. To get
an associative array, you will need to cast it as such:
*/
$decoded_array = (array) $decoded;
echo "Decode:\n" . print_r($decoded_array, true) . "\n";
?>
```
Changelog
---------
#### 5.0.0 / 2017-06-26
- Support RS384 and RS512.
See [#117](https://github.com/firebase/php-jwt/pull/117). Thanks [@joostfaassen](https://github.com/joostfaassen)!
- Add an example for RS256 openssl.
See [#125](https://github.com/firebase/php-jwt/pull/125). Thanks [@akeeman](https://github.com/akeeman)!
- Detect invalid Base64 encoding in signature.
See [#162](https://github.com/firebase/php-jwt/pull/162). Thanks [@psignoret](https://github.com/psignoret)!
- Update `JWT::verify` to handle OpenSSL errors.
See [#159](https://github.com/firebase/php-jwt/pull/159). Thanks [@bshaffer](https://github.com/bshaffer)!
- Add `array` type hinting to `decode` method
See [#101](https://github.com/firebase/php-jwt/pull/101). Thanks [@hywak](https://github.com/hywak)!
- Add all JSON error types.
See [#110](https://github.com/firebase/php-jwt/pull/110). Thanks [@gbalduzzi](https://github.com/gbalduzzi)!
- Bugfix 'kid' not in given key list.
See [#129](https://github.com/firebase/php-jwt/pull/129). Thanks [@stampycode](https://github.com/stampycode)!
- Miscellaneous cleanup, documentation and test fixes.
See [#107](https://github.com/firebase/php-jwt/pull/107), [#115](https://github.com/firebase/php-jwt/pull/115),
[#160](https://github.com/firebase/php-jwt/pull/160), [#161](https://github.com/firebase/php-jwt/pull/161), and
[#165](https://github.com/firebase/php-jwt/pull/165). Thanks [@akeeman](https://github.com/akeeman),
[@chinedufn](https://github.com/chinedufn), and [@bshaffer](https://github.com/bshaffer)!
#### 4.0.0 / 2016-07-17
- Add support for late static binding. See [#88](https://github.com/firebase/php-jwt/pull/88) for details. Thanks to [@chappy84](https://github.com/chappy84)!
- Use static `$timestamp` instead of `time()` to improve unit testing. See [#93](https://github.com/firebase/php-jwt/pull/93) for details. Thanks to [@josephmcdermott](https://github.com/josephmcdermott)!
- Fixes to exceptions classes. See [#81](https://github.com/firebase/php-jwt/pull/81) for details. Thanks to [@Maks3w](https://github.com/Maks3w)!
- Fixes to PHPDoc. See [#76](https://github.com/firebase/php-jwt/pull/76) for details. Thanks to [@akeeman](https://github.com/akeeman)!
#### 3.0.0 / 2015-07-22
- Minimum PHP version updated from `5.2.0` to `5.3.0`.
- Add `\Firebase\JWT` namespace. See
[#59](https://github.com/firebase/php-jwt/pull/59) for details. Thanks to
[@Dashron](https://github.com/Dashron)!
- Require a non-empty key to decode and verify a JWT. See
[#60](https://github.com/firebase/php-jwt/pull/60) for details. Thanks to
[@sjones608](https://github.com/sjones608)!
- Cleaner documentation blocks in the code. See
[#62](https://github.com/firebase/php-jwt/pull/62) for details. Thanks to
[@johanderuijter](https://github.com/johanderuijter)!
#### 2.2.0 / 2015-06-22
- Add support for adding custom, optional JWT headers to `JWT::encode()`. See
[#53](https://github.com/firebase/php-jwt/pull/53/files) for details. Thanks to
[@mcocaro](https://github.com/mcocaro)!
#### 2.1.0 / 2015-05-20
- Add support for adding a leeway to `JWT:decode()` that accounts for clock skew
between signing and verifying entities. Thanks to [@lcabral](https://github.com/lcabral)!
- Add support for passing an object implementing the `ArrayAccess` interface for
`$keys` argument in `JWT::decode()`. Thanks to [@aztech-dev](https://github.com/aztech-dev)!
#### 2.0.0 / 2015-04-01
- **Note**: It is strongly recommended that you update to > v2.0.0 to address
known security vulnerabilities in prior versions when both symmetric and
asymmetric keys are used together.
- Update signature for `JWT::decode(...)` to require an array of supported
algorithms to use when verifying token signatures.
Tests
-----
Run the tests using phpunit:
```bash
$ pear install PHPUnit
$ phpunit --configuration phpunit.xml.dist
PHPUnit 3.7.10 by Sebastian Bergmann.
.....
Time: 0 seconds, Memory: 2.50Mb
OK (5 tests, 5 assertions)
```
New Lines in private keys
-----
If your private key contains `\n` characters, be sure to wrap it in double quotes `""`
and not single quotes `''` in order to properly interpret the escaped characters.
License
-------
[3-Clause BSD](http://opensource.org/licenses/BSD-3-Clause).
{
"name": "firebase/php-jwt",
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
"keywords": [
"php",
"jwt"
],
"authors": [
{
"name": "Neuman Vong",
"email": "neuman+pear@twilio.com",
"role": "Developer"
},
{
"name": "Anant Narayanan",
"email": "anant@php.net",
"role": "Developer"
}
],
"license": "BSD-3-Clause",
"require": {
"php": ">=5.3.0"
},
"autoload": {
"psr-4": {
"Firebase\\JWT\\": "src"
}
},
"require-dev": {
"phpunit/phpunit": ">=4.8 <=9"
}
}
<?php
namespace Firebase\JWT;
class BeforeValidException extends \UnexpectedValueException
{
}
<?php
namespace Firebase\JWT;
class ExpiredException extends \UnexpectedValueException
{
}
<?php
namespace Firebase\JWT;
use DomainException;
use UnexpectedValueException;
/**
* JSON Web Key implementation, based on this spec:
* https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41
*
* PHP version 5
*
* @category Authentication
* @package Authentication_JWT
* @author Bui Sy Nguyen <nguyenbs@gmail.com>
* @license http://opensource.org/licenses/BSD-3-Clause 3-clause BSD
* @link https://github.com/firebase/php-jwt
*/
class JWK
{
/**
* Parse a set of JWK keys
*
* @param array $jwks The JSON Web Key Set as an associative array
*
* @return array An associative array that represents the set of keys
*
* @throws InvalidArgumentException Provided JWK Set is empty
* @throws UnexpectedValueException Provided JWK Set was invalid
* @throws DomainException OpenSSL failure
*
* @uses parseKey
*/
public static function parseKeySet(array $jwks)
{
$keys = array();
if (!isset($jwks['keys'])) {
throw new UnexpectedValueException('"keys" member must exist in the JWK Set');
}
if (empty($jwks['keys'])) {
throw new InvalidArgumentException('JWK Set did not contain any keys');
}
foreach ($jwks['keys'] as $k => $v) {
$kid = isset($v['kid']) ? $v['kid'] : $k;
if ($key = self::parseKey($v)) {
$keys[$kid] = $key;
}
}
if (0 === \count($keys)) {
throw new UnexpectedValueException('No supported algorithms found in JWK Set');
}
return $keys;
}
/**
* Parse a JWK key
*
* @param array $jwk An individual JWK
*
* @return resource|array An associative array that represents the key
*
* @throws InvalidArgumentException Provided JWK is empty
* @throws UnexpectedValueException Provided JWK was invalid
* @throws DomainException OpenSSL failure
*
* @uses createPemFromModulusAndExponent
*/
private static function parseKey(array $jwk)
{
if (empty($jwk)) {
throw new InvalidArgumentException('JWK must not be empty');
}
if (!isset($jwk['kty'])) {
throw new UnexpectedValueException('JWK must contain a "kty" parameter');
}
switch ($jwk['kty']) {
case 'RSA':
if (\array_key_exists('d', $jwk)) {
throw new UnexpectedValueException('RSA private keys are not supported');
}
if (!isset($jwk['n']) || !isset($jwk['e'])) {
throw new UnexpectedValueException('RSA keys must contain values for both "n" and "e"');
}
$pem = self::createPemFromModulusAndExponent($jwk['n'], $jwk['e']);
$publicKey = \openssl_pkey_get_public($pem);
if (false === $publicKey) {
throw new DomainException(
'OpenSSL error: ' . \openssl_error_string()
);
}
return $publicKey;
default:
// Currently only RSA is supported
break;
}
}
/**
* Create a public key represented in PEM format from RSA modulus and exponent information
*
* @param string $n The RSA modulus encoded in Base64
* @param string $e The RSA exponent encoded in Base64
*
* @return string The RSA public key represented in PEM format
*
* @uses encodeLength
*/
private static function createPemFromModulusAndExponent($n, $e)
{
$modulus = JWT::urlsafeB64Decode($n);
$publicExponent = JWT::urlsafeB64Decode($e);
$components = array(
'modulus' => \pack('Ca*a*', 2, self::encodeLength(\strlen($modulus)), $modulus),
'publicExponent' => \pack('Ca*a*', 2, self::encodeLength(\strlen($publicExponent)), $publicExponent)
);
$rsaPublicKey = \pack(
'Ca*a*a*',
48,
self::encodeLength(\strlen($components['modulus']) + \strlen($components['publicExponent'])),
$components['modulus'],
$components['publicExponent']
);
// sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
$rsaOID = \pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
$rsaPublicKey = \chr(0) . $rsaPublicKey;
$rsaPublicKey = \chr(3) . self::encodeLength(\strlen($rsaPublicKey)) . $rsaPublicKey;
$rsaPublicKey = \pack(
'Ca*a*',
48,
self::encodeLength(\strlen($rsaOID . $rsaPublicKey)),
$rsaOID . $rsaPublicKey
);
$rsaPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
\chunk_split(\base64_encode($rsaPublicKey), 64) .
'-----END PUBLIC KEY-----';
return $rsaPublicKey;
}
/**
* DER-encode the length
*
* DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
* {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
*
* @param int $length
* @return string
*/
private static function encodeLength($length)
{
if ($length <= 0x7F) {
return \chr($length);
}
$temp = \ltrim(\pack('N', $length), \chr(0));
return \pack('Ca*', 0x80 | \strlen($temp), $temp);
}
}
This diff is collapsed.
<?php
namespace Firebase\JWT;
class SignatureInvalidException extends \UnexpectedValueException
{
}
<?php
class Identite{
// database connection and table name
private $conn;
private $table_name = "identites";
// object properties
public $id;
public $login;
public $password;
public $pseudo;
public $age;
public $poids;
public $taille;
public $sexe;
public $niveaudusport;
// constructor with $db as database connection
public function __construct($db){
$this->conn = $db;
}
// read identites
function read(){
// select all query
$query = "SELECT * FROM $this->table_name";
// prepare query statement
$stmt = $this->conn->prepare($query);
// execute query
$stmt->execute();
return $stmt;
}
// check if given login exist in the database
function loginExists(){
// query to check if email exists
$query = "SELECT *
FROM $this->table_name
WHERE login = ?
LIMIT 0,1";
// prepare the query
$stmt = $this->conn->prepare( $query );
// sanitize
$this->login=htmlspecialchars(strip_tags($this->login));
// bind given email value
$stmt->bindParam(1, $this->login);
// execute the query
$stmt->execute();
// get number of rows
$num = $stmt->rowCount();
// if email exists, assign values to object properties for easy access and use for php sessions
if($num>0){
// get record details / values
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// assign values to object properties
$this->id = $row['id'];
$this->password = $row['password'];
$this->pseudo = $row['pseudo'];
$this->age = $row['age'];
$this->poids = $row['poids'];
$this->taille = $row['taille'];
$this->sexe = $row['sexe'];
$this->niveaudusport = $row['niveaudusport'];
// return true because email exists in the database
return true;
}
// return false if email does not exist in the database
return false;
}
// create identite
function create(){
// query to insert record
$query = "INSERT INTO
".$this->table_name."
SET
login=:login, password=:password, pseudo=:pseudo, age=:age, poids=:poids, taille=:taille, sexe=:sexe, niveaudusport=:niveaudusport";
// prepare query
$stmt = $this->conn->prepare($query);
// sanitize
$this->login=htmlspecialchars(strip_tags($this->login));
$this->password=htmlspecialchars(strip_tags($this->password));
$this->pseudo=htmlspecialchars(strip_tags($this->pseudo));
$this->age=htmlspecialchars(strip_tags($this->age));
$this->poids=htmlspecialchars(strip_tags($this->poids));
$this->taille=htmlspecialchars(strip_tags($this->taille));
$this->sexe=htmlspecialchars(strip_tags($this->sexe));
$this->niveaudusport=htmlspecialchars(strip_tags($this->niveaudusport));
// bind values
$stmt->bindParam(":login", $this->login);
$stmt->bindParam(":password", $this->password);
$stmt->bindParam(":pseudo", $this->pseudo);
$stmt->bindParam(":age", $this->age);
$stmt->bindParam(":poids", $this->poids);
$stmt->bindParam(":taille", $this->taille);
$stmt->bindParam(":sexe", $this->sexe);
$stmt->bindParam(":niveaudusport", $this->niveaudusport);
// execute query
if($stmt->execute()){
return true;
}
return false;
}
// used when filling up the update product form
function readOne(){
// query to read single record
$query = "SELECT * FROM $this->table_name WHERE login = ?";
// prepare query statement
$stmt = $this->conn->prepare( $query );
// bind id of product to be updated
$stmt->bindParam(1, $this->login);
// execute query
$stmt->execute();
// get retrieved row
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// set values to object properties
$this->id = $row['id'];
$this->password = $row['password'];
$this->pseudo = $row['pseudo'];
$this->age = $row['age'];
$this->poids = $row['poids'];
$this->taille = $row['taille'];
$this->sexe = $row['sexe'];
$this->niveaudusport = $row['niveaudusport'];
//$this->besoin_en_calories = $row['besoin_en_calories'];
}
// update the product
function update(){
// update query
$query = "UPDATE
" . $this->table_name . "
SET
login=:login,
password=:password,
pseudo=:pseudo,
age=:age,
poids=:poids,
taille=:taille,
sexe=:sexe,
niveaudusport=:niveaudusport
//besoin_en_calories =:besoin_en_calories
WHERE
id=:id";
// prepare query statement
$stmt = $this->conn->prepare($query);
// sanitize
$this->id=htmlspecialchars(strip_tags($this->id));
$this->login=htmlspecialchars(strip_tags($this->login));
$this->password=htmlspecialchars(strip_tags($this->password));
$this->pseudo=htmlspecialchars(strip_tags($this->pseudo));
$this->age=htmlspecialchars(strip_tags($this->age));
$this->poids=htmlspecialchars(strip_tags($this->poids));
$this->taille=htmlspecialchars(strip_tags($this->taille));
$this->sexe=htmlspecialchars(strip_tags($this->sexe));
$this->niveaudusport=htmlspecialchars(strip_tags($this->niveaudusport));
//$this->besoin_en_calories=htmlspecialchars(strip_tags($this->besoin_en_calories));
// bind new values
$stmt->bindParam(':id', $this->id);
$stmt->bindParam(':login', $this->login);
$stmt->bindParam(':password', $this->password);
$stmt->bindParam(':pseudo', $this->pseudo);
$stmt->bindParam(':age', $this->age);
$stmt->bindParam(':poids', $this->poids);
$stmt->bindParam(':taille', $this->taille);
$stmt->bindParam(':sexe', $this->sexe);
$stmt->bindParam(':niveaudusport', $this->niveaudusport);
// $stmt->bindParam(':besoin_en_calories', $this->besoin_en_calories);
// execute the query
if($stmt->execute()){
return true;
}
return false;
}
// delete the product
function delete(){
// delete query
$query = "DELETE FROM " . $this->table_name . " WHERE id = ?";
// prepare query
$stmt = $this->conn->prepare($query);
// sanitize
$this->id=htmlspecialchars(strip_tags($this->id));
// bind id of record to delete
$stmt->bindParam(1, $this->id);
// execute query
if($stmt->execute()){
return true;
}
return false;
}
// search products
function search($keywords){
// select all query
$query = "SELECT * FROM
" . $this->table_name . "
WHERE
login LIKE ? OR pseudo LIKE ? ";
// prepare query statement
$stmt = $this->conn->prepare($query);
// sanitize
$keywords=htmlspecialchars(strip_tags($keywords));
$keywords = "%{$keywords}%";
// bind
$stmt->bindParam(1, $keywords);
$stmt->bindParam(2, $keywords);
// execute query
$stmt->execute();
return $stmt;
}
}
?>
......@@ -76,7 +76,6 @@
<th>Type</th>
<th>Modifier</th>
<th>Supprimer</th>
<th>Ajouter au Journal </th>
</tr>
</thead>
<tbody id="tbody_aliment"><tbody>
......
......@@ -63,8 +63,8 @@ $(document).ready(function() {
data : form_data,
success : function(result){
var ac_log=JSON.parse(form_data);
document.cookie ="IdentifiantActuel="+ac_log.login;
window.location="https://eden.imt-lille-douai.fr/~liang.wu/projet_idaw/home.php";
sessionStorage.setItem('para', ac_log.login);
window.location="home.php";
},
error: function(xhr, resp, text){
......@@ -77,7 +77,3 @@ $(document).ready(function() {
});
</script>
<?php
require_once('template_footer.php');
?>
\ No newline at end of file
......@@ -11,29 +11,27 @@
</script>
<script type="text/javascript">
$(document).ready( function() {
// $ident= getCookie("IdentifiantActuel");
$.getJSON('https://eden.imt-lille-douai.fr/~liang.wu/API_LOGIN/identite/read.php',
var ident = sessionStorage.getItem('para');
// var essai= "lwu";
$.getJSON('https://eden.imt-lille-douai.fr/~liang.wu/API_LOGIN/identite/read_one.php?login='+ident,
function(data){
table = $('#tbody_info');
table.html('');
$.each( data.records, function( key, val ) {
table.append('<tr><td>'+val.id+'</td><td>'+val.login+'</td><td>'+val.password+'</td><td>'+val.pseudo+'</td><td>'+val.age+'</td><td>'+val.poids+'</td><td>'+val.taille+'</td><td>'+val.sexe+'</td><td>'+val.niveaudusport+'</td></tr>');
table.append('<tr><td>'+data.id+'</td><td>'+data.login+'</td><td>'+data.password+'</td><td>'+data.pseudo+'</td><td>'+data.age+'</td><td>'+data.poids+'</td><td>'+data.taille+'</td><td>'+data.sexe+'</td><td>'+data.niveaudusport+'</td><td>'+data.icalories+'</td></tr>');
});
}
);
});
</script>
</head>
<section id="profil_contenu" style="display : flex; flex-direction : row; ">
<div style="margin-right:100px">
<h1>informations Personnelles</h1>
<table id="table_info" class="dataTable" style="color : #212529; ">
<thead>
<tr>
<th>id</th>
<th>ID</th>
<th>login</th>
<th>password</th>
<th>pseudo</th>
......@@ -42,10 +40,105 @@
<th>taille(cm)</th>
<th>sexe</th>
<th>niveau_du_sport</th>
<th>Action</th>
<th>Besoin en calories journalier(Kcal)</th>
</tr>
</thead>
<tbody id="tbody_info"><tbody>
</table>
</div>
</section>
\ No newline at end of file
</section>
<section>
<h1>Utilisez ce formulaire, si vous voulez modifier vos informations</h1>
<form id="form_edit" action="#" method="POST" >
<div>
<label>ID (Remettez votre ID)</label>
<input type='text' id='id' name='id' class="form-control" required />
</div>
<div>
<label>Login</label>
<input type='text' id='login' name='login' class="form-control" required />
</div>
<div>
<label>Password</label>
<input type='text' id='password' name='password' class="form-control" required />
</div>
<div>
<label>Pseudo</label>
<input type='text' id='pseudo' name='pseudo' class="form-control" required/>
</div>
<div>
<label>Âge</label>
<input type='text' id='age' name='age' class="form-control" required />
</div>
<div>
<label>Poids(kg)</label>
<input type='text' id='poids' name='poids' class="form-control" required/>
</div>
<div>
<label>Taille(cm)</label>
<input type='text' id='taille' name='taille' class="form-control" required/>
</div>
<div class="form-group">
<label>Sexe</label>
<select class="form-control" id="sexe" name="sexe">
<option selected>Choisir...</option>
<option>Femme</option>
<option>Homme</option>
</select>
</div>
<div class="form-group">
<label>Niveau de sport</label>
<select class="form-control" id="niveaudusport" name="niveaudusport">
<option selected>Choisir...</option>
<option>Bas</option>
<option>Moyen</option>
<option>Elevé</option>
</select>
</div>
<!-- button to submit form -->
</div>
<div class="form-action-buttons">
<input type="submit" value="Modifier">
</div>
</form>
<script
src="https://code.jquery.com/jquery-3.4.1.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-serialize-object/2.5.0/jquery.serialize-object.min.js" ></script>
<script type="text/javascript">
$(document).ready( function($) {
// will run if create identite form was submitted
$(document).on('submit', '#form_edit', function(){
// get form data
var form_data=JSON.stringify($(this).serializeObject());
// console.log(form_data);
// submit form data to api
$.ajax({
url: "https://eden.imt-lille-douai.fr/~liang.wu/API_LOGIN/identite/update.php",
type : "POST",
contentType : 'application/json',
data : form_data
});
});
});
</script>
</section>
<head>
<meta charset="utf-8">
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.20/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.20/js/jquery.dataTables.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#table_récap').DataTable();
} );
</script>
</head>
<section>
<table>
<tr>
<td>
<table id="table_récap" class="dataTable" style="color : #212529; ">
<thead>
<tr>
<th>Login</th>
<th>Âge</th>
<th>Poids</th>
<th>Taille(m)</th>
<th>Sexe</th>
<th>Niveau de sport</th>
<th>Besoins journaliers en calories</th>
<th>CRUD</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</td>
<td>
<form onsubmit="event.preventDefault();onFormSubmit();" autocomplete="off">
<table>
<tr>
<th>Login :</th>
<td><input type="text" name="login" id="login"></td>
</tr>
<tr>
<th>Âge :</th>
<td>
<input type="text" name="age" id="age">
</td>
</tr>
<tr>
<th>Poids(kg) :</th>
<td>
<input type="text" name="poids" id="poids">
</td>
</tr>
<tr>
<th>Taille(m):</th>
<td>
<input type="text" name="taille" id="taille">
</td>
</tr>
<tr>
<th>Sexe :</th>
<td>
<label> Homme
<input type="radio" name="sex" id="M">
</label><br>
<label> Femme
<input type="radio" name="sex" id="F">
</label></td>
</tr>
<tr>
<th>Niveau de pratique sportive :</th>
<td>
<label> Bas
<input type="radio" name="sport" id="bas">
</label><br>
<label> Moyen
<input type="radio" name="sport" id="moyen">
</label><br>
<label> Elevé
<input type="radio" name="sport" id="eleve">
</label>
</td>
</tr>
<tr>
<td><input type="submit" name="Valider"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
<script src="scriptcalcul.js"></script>
<h2> Nom </h2>
<img src="logo.png" alt="" height="90px" width="150px"/>
</section>
</body>
</html>
\ No newline at end of file
......@@ -3,13 +3,13 @@ require_once('template_header.php');
?>
<section>
<div id="response"></div>
<div><a href="index.php">Se connecter</a></div>
</section>
<section>
<!-- 'create identite' html form -->
<form id="form_signup" action="#" method="POST" >
<form id="form_signup" method="POST" >
<div>
<label>Login</label>
<input type='text' id='login' name='login' class="form-control" required />
......@@ -89,19 +89,7 @@ $(document).ready( function($) {
url: "https://eden.imt-lille-douai.fr/~liang.wu/API_LOGIN/identite/create.php",
type : "POST",
contentType : 'application/json',
data : form_data,
success : function(result){
$('#response').html("<div class='alert alert-danger'>success.</div>");
},
error: function(xhr, resp, text){
// on error, tell the user login has failed & empty the input boxes
$('#response').html("<div class='alert alert-danger'>failed</div>");
login_form.find('input').val('');
}
data : form_data
});
});
});
......@@ -109,6 +97,4 @@ $(document).ready( function($) {
</section>
<?php
require_once('template_footer.php');
?>
......@@ -5,7 +5,6 @@ $mymenu = array(
// idPage titre
'home' => array( 'Accueil' ),
'profil_affichage' => array( 'Profil' ),
'profil_modif' => array( 'Modifier mon profil' ),
'aliments' => array('Aliments'),
'journal' => array('Journal')
);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment