Compare commits

...

2 Commits

Author SHA1 Message Date
58c50f0e1d php session 2020-11-13 13:10:56 +01:00
bda833f6e3 404! 2020-11-13 05:08:21 +01:00
8 changed files with 109 additions and 105 deletions

32
404.php Normal file
View File

@ -0,0 +1,32 @@
<?php
require("classes.php");
$grid = new Grid();
$grid->generate();
header("HTTP/1.0 404 Not Found", true, 404);
$urlDir = $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["DOCUMENT_URI"]);
$urlExample = $urlDir . "/" . $grid->toString();
?>
<!DOCTYPE html>
<html lang='fr'>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width' />
<title>Sudoku non trouvé</title>
<link rel='stylesheet' type='text/css' href='style.css' />
<link rel="icon" type="image/png" href="favicon.png">
</head>
<body>
<header>
<h1>#404</h1>
</header>
L'adresse URL doit être de la forme : <?=$urlDir?>/<em>grille</em>,<br/>
<em>grille</em> étant une suite de 81 caractères représentant la grille de gauche à droite puis de haut en bas, soit :
<ul>
<li>un chiffre entre 1 et 9 pour les cases connues</li>
<li>un point pour les case vides</li>
</ul>
Exemple : <a href='<?=$urlExample?>'><?=$urlExample?></a><br/>
</body>
</html>

View File

@ -1,8 +0,0 @@
<?php
require("classes.php");
$grid = new Grid();
$grid->generate();
header("Location: " . $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["DOCUMENT_URI"]) . "/" . $grid->toString());
exit();
?>

8
index.php Normal file
View File

@ -0,0 +1,8 @@
<?php
require("classes.php");
session_start();
$grid = new Grid();
$grid->generate();
header("Location: ".$_SERVER["REQUEST_SCHEME"]."://".$_SERVER["HTTP_HOST"].dirname($_SERVER["DOCUMENT_URI"])."/".$grid->toString());
exit();
?>

View File

@ -1,32 +1,33 @@
<?php
$gridStr = strip_tags($_GET['grid']);
session_start();
$currentGrid = $_SESSION["currentGrid"];
?>
{
"short_name": "Sudoku",
"name": "Sudoku",
"description": "Remplissez la grille de sorte que chaque ligne, colonne et région (carré de 3×3 cases) contienne tous les chiffres de 1 à 9.",
"icons": [{
"src": "thumbnail.png?grid=<?=$gridStr?>&size=48",
"src": "thumbnail.png?size=48",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=72",
"src": "thumbnail.png?size=72",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=96",
"src": "thumbnail.png?size=96",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=144",
"src": "thumbnail.png?size=144",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=168",
"src": "thumbnail.png?size=168",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=192",
"src": "thumbnail.png?size=192",
"sizes": "192x192",
"type": "image/png"
}],
@ -41,29 +42,29 @@
"name": "Sudoku : cette grille",
"short_name": "Ce sudoku",
"description": "Continuer cette grille de sudoku",
"url": "<?=$gridStr?>",
"url": "<?=$currentGrid?>",
"icons": [{
"src": "thumbnail.png?grid=<?=$gridStr?>&size=48",
"src": "thumbnail.png?size=48",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=72",
"src": "thumbnail.png?size=72",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=96",
"src": "thumbnail.png?size=96",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=144",
"src": "thumbnail.png?size=144",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=168",
"src": "thumbnail.png?size=168",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=<?=$gridStr?>&size=192",
"src": "thumbnail.png?size=192",
"sizes": "192x192",
"type": "image/png"
}]
@ -74,27 +75,27 @@
"description": "Grille de sudoku vierge",
"url": ".................................................................................",
"icons": [{
"src": "thumbnail.png?grid=.................................................................................&size=48",
"src": "thumbnail.png?size=48",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.................................................................................&size=72",
"src": "thumbnail.png?size=72",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.................................................................................&size=96",
"src": "thumbnail.png?size=96",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.................................................................................&size=144",
"src": "thumbnail.png?size=144",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.................................................................................&size=168",
"src": "thumbnail.png?size=168",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.................................................................................&size=192",
"src": "thumbnail.png?size=192",
"sizes": "192x192",
"type": "image/png"
}]
@ -105,27 +106,27 @@
"description": "Nouvelle grille de sudoku",
"url": ".",
"icons": [{
"src": "thumbnail.png?grid=.528.3....4.9.1...39.562......73.129...1.64.7...42.3656.13.5...28.6.4...4.5287...&size=48",
"src": "thumbnail.png?size=48",
"sizes": "48x48",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.528.3....4.9.1...39.562......73.129...1.64.7...42.3656.13.5...28.6.4...4.5287...&size=72",
"src": "thumbnail.png?size=72",
"sizes": "72x72",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.528.3....4.9.1...39.562......73.129...1.64.7...42.3656.13.5...28.6.4...4.5287...&size=96",
"src": "thumbnail.png?size=96",
"sizes": "96x96",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.528.3....4.9.1...39.562......73.129...1.64.7...42.3656.13.5...28.6.4...4.5287...&size=144",
"src": "thumbnail.png?size=144",
"sizes": "144x144",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.528.3....4.9.1...39.562......73.129...1.64.7...42.3656.13.5...28.6.4...4.5287...&size=168",
"src": "thumbnail.png?size=168",
"sizes": "168x168",
"type": "image/png"
}, {
"src": "thumbnail.png?grid=.528.3....4.9.1...39.562......73.129...1.64.7...42.3656.13.5...28.6.4...4.5287...&size=192",
"src": "thumbnail.png?size=192",
"sizes": "192x192",
"type": "image/png"
}]

View File

@ -5,26 +5,31 @@ location /sudoku/ {
rewrite ^ https://$server_name$request_uri? permanent;
}
index gen-grid.php;
index index.php;
try_files $uri $uri/ @add-php-extention;
location ~ [^/]\.php(/|$) {
try_files $uri @sudoku-grid;
try_files $uri =404;
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php/php7.3-fpm-sudoku.sock;
fastcgi_index gen-grid.php;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
error_page 404 /sudoku/404.php;
location /sudoku/404.php {
internal;
}
}
location ~ "^/sudoku/([1-9.]{81})$" {
rewrite "^/sudoku/([1-9.]{81})$" /sudoku/sudoku.php?grid=$1 last;
}
location @add-php-extention {
rewrite ^([^?#]*)(\?.*)?(#.*)?$ $1.php$2$3 last;
}
location @sudoku-grid {
rewrite ^/sudoku/(.*).php$ /sudoku/sudoku.php?grid=$1 last;
}

View File

@ -1,5 +1,6 @@
<?php
$location = strip_tags($_GET['location']);
session_start();
$currentGrid = $_SESSION["currentGrid"];
header ("Content-type: application/javascript");
?>
/*
@ -20,7 +21,7 @@ Copyright 2015, 2019, 2020 Google LLC. All Rights Reserved.
const OFFLINE_VERSION = 1;
const CACHE_NAME = "offline";
// Customize this with a different URL if needed.
const OFFLINE_URL = "<?=$location?>";
const OFFLINE_URL = "<?=$currentGrid?>";
self.addEventListener("install", (event) => {
event.waitUntil(

View File

@ -1,9 +1,8 @@
<?php
require("classes.php");
$gridStr = strip_tags($_GET['grid']);
// URL contains grid
if (preg_match("#^[1-9.]{81}$#", $gridStr)) {
session_start();
$currentGrid = strip_tags($_GET['grid']);
$_SESSION["currentGrid"] = $currentGrid;
?>
<!DOCTYPE html>
<html lang='fr' prefix="og: https://ogp.me/ns#">
@ -13,24 +12,24 @@
<title>Sudoku</title>
<link rel='stylesheet' type='text/css' href='style.css' />
<script src='sudoku.js'></script>
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=57" sizes="57x57">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=114" sizes="114x114">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=72" sizes="72x72">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=144" sizes="144x144">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=60" sizes="60x60">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=120" sizes="120x120">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=76" sizes="76x76">
<link rel="apple-touch-icon" href="thumbnail.png?grid=<?=$gridStr?>&size=152" sizes="152x152">
<link rel="icon" type="image/png" href="thumbnail.png?grid=<?=$gridStr?>&size=196" sizes="196x196">
<link rel="icon" type="image/png" href="thumbnail.png?grid=<?=$gridStr?>&size=160" sizes="160x160">
<link rel="icon" type="image/png" href="thumbnail.png?grid=<?=$gridStr?>&size=96" sizes="96x96">
<link rel="icon" type="image/png" href="thumbnail.png?grid=<?=$gridStr?>&size=16" sizes="16x16">
<link rel="icon" type="image/png" href="thumbnail.png?grid=<?=$gridStr?>&size=32" sizes="32x32">
<link rel="manifest" href="manifest.json?grid=<?=$gridStr?>">
<link rel="apple-touch-icon" href="thumbnail.png?size=57" sizes="57x57">
<link rel="apple-touch-icon" href="thumbnail.png?size=114" sizes="114x114">
<link rel="apple-touch-icon" href="thumbnail.png?size=72" sizes="72x72">
<link rel="apple-touch-icon" href="thumbnail.png?size=144" sizes="144x144">
<link rel="apple-touch-icon" href="thumbnail.png?size=60" sizes="60x60">
<link rel="apple-touch-icon" href="thumbnail.png?size=120" sizes="120x120">
<link rel="apple-touch-icon" href="thumbnail.png?size=76" sizes="76x76">
<link rel="apple-touch-icon" href="thumbnail.png?size=152" sizes="152x152">
<link rel="icon" type="image/png" href="thumbnail.png?size=196" sizes="196x196">
<link rel="icon" type="image/png" href="thumbnail.png?size=160" sizes="160x160">
<link rel="icon" type="image/png" href="thumbnail.png?size=96" sizes="96x96">
<link rel="icon" type="image/png" href="thumbnail.png?size=16" sizes="16x16">
<link rel="icon" type="image/png" href="thumbnail.png?size=32" sizes="32x32">
<link rel="manifest" href="manifest.json">
<meta property="og:title" content="Sudoku"/>
<meta property="og:type" content="website"/>
<meta property="og:url" content="<?=$_SERVER["REQUEST_SCHEME"]."://" . $_SERVER["HTTP_HOST"].$_SERVER["DOCUMENT_URI"]?>"/>
<meta property="og:image" content="<?=$_SERVER["REQUEST_SCHEME"]."://" . $_SERVER["HTTP_HOST"].dirname($_SERVER["DOCUMENT_URI"])?>/thumbnail.png?grid=<?=$gridStr?>&size=200"/>
<meta property="og:url" content="<?=$_SERVER["REQUEST_SCHEME"]."://".$_SERVER["HTTP_HOST"].$_SERVER["DOCUMENT_URI"]?>"/>
<meta property="og:image" content="<?=$_SERVER["REQUEST_SCHEME"]."://".$_SERVER["HTTP_HOST"].dirname($_SERVER["DOCUMENT_URI"])?>/thumbnail.png?size=200"/>
<meta property="og:image:width" content="200"/>
<meta property="og:image:height" content="200"/>
<meta property="og:description" content="Remplissez la grille de sorte que chaque ligne, colonne et région (carré de 3×3 cases) contienne tous les chiffres de 1 à 9."/>
@ -50,7 +49,7 @@
<tr>
<?php
for ($column = 0; $column < 9; $column++) {
$value = $gridStr[9*$row+$column];
$value = $currentGrid[9*$row+$column];
if ($value == UNKNOWN) {
?>
<td><input type='number' min='1' max='9' step='1' value='' title='Valeurs possibles [Clic-droit]'/></td>
@ -111,38 +110,3 @@
</footer>
</body>
</html>
<?php
} else {
$grid = new Grid();
$grid->generate();
header("HTTP/1.0 400 Bad Request", true, 400);
$urlDir = $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["HTTP_HOST"] . dirname($_SERVER["DOCUMENT_URI"]);
$urlExample = $urlDir . "/" . $grid->toString();
?>
<!DOCTYPE html>
<html lang='fr'>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width' />
<title>Adresse incorrecte</title>
<link rel='stylesheet' type='text/css' href='style.css' />
<link rel="icon" type="image/png" href="favicon.png">
</head>
<body>
<header>
<h1>Adresse incorrecte</h1>
</header>
L'adresse URL doit être de la forme : <?=$urlDir?>/<em>grille</em>,<br/>
<em>grille</em> étant une suite de 81 caractères représentant la grille de gauche à droite puis de haut en bas, soit :
<ul>
<li>un chiffre entre 1 et 9 pour les cases connues</li>
<li>un point pour les case vides</li>
</ul>
Exemple : <a href='<?=$urlExample?>'><?=$urlExample?></a><br/>
</body>
</html>
<?php
}
?>

View File

@ -1,7 +1,8 @@
<?php
require("classes.php");
session_start();
$currentGrid = $_SESSION["currentGrid"];
header ("Content-type: image/png");
const UNKNOWN = ".";
$gridStr = strip_tags($_GET['grid']);
$size = (int) $_GET['size'];
$thumbnail = imagecreate($size, $size);
$transparent = imagecolorallocate($thumbnail, 1, 1, 1);
@ -25,7 +26,7 @@
$x = $start;
$y = $start;
$boxSizeMinusOne = $boxSize - 1;
foreach(str_split($gridStr) as $i => $value) {
foreach(str_split($_SESSION["currentGrid"]) as $i => $value) {
if ($i % 3 == 0) $x++;
if ($i % 27 == 0) $y++;
if ($value == UNKNOWN) {
@ -58,7 +59,7 @@
$x = $start + 1;
$y = $start + 1;
$boxSizeMinusTwo = $boxSize - 2;
foreach(str_split($gridStr) as $i => $value) {
foreach(str_split($_SESSION["currentGrid"]) as $i => $value) {
if ($value == UNKNOWN) {
$bgColor = $white;
} else {
@ -93,7 +94,7 @@
$x = $start + 1;
$y = $start + 1;
$boxSizeMinusTwo = $boxSize - 2;
foreach(str_split($gridStr) as $i => $value) {
foreach(str_split($_SESSION["currentGrid"]) as $i => $value) {
if ($value == UNKNOWN) {
$bgColor = $white;
} else {