Port the old system to a more advanced setup.

This commit is contained in:
2019-03-03 16:16:31 +01:00
parent 04ae63035a
commit bfea8896de
14 changed files with 168 additions and 33 deletions

4
.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
*.lock
vendor
node_modules
.php_cs.cache

12
.php_cs Normal file
View File

@@ -0,0 +1,12 @@
<?php
$finder = PhpCsFixer\Finder::create()
->exclude('vendor')
->in(__DIR__);
return PhpCsFixer\Config::create()
->setUsingCache(true)
->setRules([
'@PSR2' => true,
'single_quote' => true,
])->setFinder($finder);

24
composer.json Normal file
View File

@@ -0,0 +1,24 @@
{
"name": "bert/isdefoobaropen.nl",
"description": "Source code for isdefoobaropen.nl",
"type": "project",
"license": "GPLv3",
"authors": [
{
"name": "Bert Peters",
"email": "bert@bertptrs.nl"
}
],
"require": {
"php": "^7.0"
},
"require-dev": {
"phpro/grumphp": "^0.15.0",
"friendsofphp/php-cs-fixer": "^2.14"
},
"autoload": {
"psr-4": {
"FooBar\\": "src/"
}
}
}

15
config/config.sample.php Normal file
View File

@@ -0,0 +1,15 @@
<?php
return [
/**
* The security works by checking if the request is made from an authorized IP-address.
*
* The address is configured as an IP-address and a subnet mask. In order to verify the entire IP-address, specify
* 32 for the mask. This option only supports IPv4 for obvious reasons.
*/
'security' => [
'mask' => 8,
'address' => '127.0.0.1',
],
'state_file' => __DIR__ . '/open.flag',
];

6
grumphp.yml Normal file
View File

@@ -0,0 +1,6 @@
parameters:
git_dir: .
bin_dir: vendor/bin
tasks:
phpcsfixer2:
config: .php_cs

View File

@@ -1,7 +0,0 @@
<?php
if(file_exists("open.flag")) {
require "isOpen.php";
} else {
require "isGesloten.php";
}
?>

8
public/index.php Normal file
View File

@@ -0,0 +1,8 @@
<?php
require_once '../vendor/autoload.php';
if (\FooBar\Configuration::loadConfig()->isOpen()) {
require 'isOpen.php';
} else {
require 'isGesloten.php';
}

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

31
public/toggle.php Normal file
View File

@@ -0,0 +1,31 @@
<?php
require_once '../vendor/autoload.php';
$configuration = \FooBar\Configuration::loadConfig();
if (isset($_POST['toggle']) && $configuration->isAuthorized()) {
$file = $configuration->stateFile();
if ($configuration->isOpen()) {
unlink($file);
} else {
touch($file);
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Verander de status van de foobar</title>
</head>
<body>
<h1>De foobar is nu
<?php
echo $configuration->isOpen() ? ' ' : ' niet ';
?>
open.</h1>
<form method="post">
<input type="submit" name="toggle" value="Verander dit">
</form>
</body>
</html>

68
src/Configuration.php Normal file
View File

@@ -0,0 +1,68 @@
<?php
namespace FooBar;
/**
* Main configuration class.
*
* Reads the app configuration from an array (or optionally a file via loadConfig) and provide easy access.
*/
class Configuration
{
private $address;
private $mask;
private $stateFile;
public function __construct(array $config)
{
$this->address = $config['security']['address'];
$this->mask = $config['security']['mask'];
$this->stateFile = $config['state_file'];
}
public static function loadConfig(): Configuration
{
$options = [
dirname(__DIR__) . '/config/config.php',
dirname(__DIR__) . '/config/config.sample.php',
];
foreach ($options as $option) {
if (file_exists($option)) {
return new Configuration(require $option);
}
}
throw new \RuntimeException('Couldn\'t find config file');
}
/**
* Check if the user is authorized to do a toggle.
*
* @param string|null $address An IP-address, or null to default to the clients address.
* @return bool true if the user should be allowed.
*/
public function isAuthorized($address = null): bool
{
$address = ip2long($address ?? $_SERVER['REMOTE_ADDR']);
$allowed = ip2long($this->address);
if ($this->mask >= 32) {
return $address === $allowed;
}
$shift = 32 - $this->mask;
return ($address >> $shift) === ($allowed >> $shift);
}
public function stateFile(): string
{
return $this->stateFile;
}
public function isOpen(): bool
{
return file_exists($this->stateFile);
}
}

View File

@@ -1,26 +0,0 @@
<?php
if(isset($_POST['toggle'])) {
if(file_exists("open.flag")) {
unlink("open.flag");
} else {
touch("open.flag");
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Verander de status van de foobar</title>
</head>
<body>
<h1>De foobar is nu
<?php
echo file_exists("open.flag") ? " " : " niet ";
?>
open.</h1>
<form method="post">
<input type="submit" name="toggle" value="Verander dit">
</form>
</body>
</html>