Security: verwijder hardcoded wachtwoord, voeg random-wachtwoord-generator toe bij eerste installatie
This commit is contained in:
@@ -2,11 +2,15 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Natural Earth World Map SVG generator for CodePress CMS
|
||||
* Natural Earth World Map SVG generator voor CodePress CMS.
|
||||
*
|
||||
* Converts the Natural Earth 110m TopoJSON (public domain) into a plain SVG
|
||||
* where every country path carries its ISO 3166-1 alpha-2 code as the id,
|
||||
* so the admin statistics page can colour countries with plain CSS.
|
||||
* Zet de Natural Earth 110m TopoJSON (publiek domein) om in een plain SVG
|
||||
* waarin elk land-pad zijn ISO 3166-1 alpha-2 code als id meekrijgt, zodat
|
||||
* de admin-statistiekpagina landen met pure CSS kan inkleuren. Wordt via
|
||||
* de CLI uitgevoerd en schrijft public/assets/img/world-map.svg.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @package CodePress
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -66,6 +70,18 @@ function nameToAlpha2(): array
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Main generator-functie: bouwt de wereldkaart-SVG uit TopoJSON.
|
||||
*
|
||||
* Download (met caching) de countries-110m.json, decodeert delta-gecodeerde
|
||||
* arcs, projecteert op een equirectangular canvas met antimeridian-unwrap,
|
||||
* verzamelt paden per ISO alpha-2 code en schrijft de SVG naar
|
||||
* public/assets/img/world-map.svg.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @param bool $verbose Of voortgang en statistieken naar stdout worden geschreven.
|
||||
* @return bool True bij succes, false bij een download- of parse-fout.
|
||||
*/
|
||||
function generateWorldMapSvg(bool $verbose = false): bool
|
||||
{
|
||||
$outPath = dirname(__DIR__) . '/public/assets/img/world-map.svg';
|
||||
@@ -104,6 +120,11 @@ function generateWorldMapSvg(bool $verbose = false): bool
|
||||
$scale = $topo['transform']['scale'];
|
||||
$translate = $topo['transform']['translate'];
|
||||
|
||||
/**
|
||||
* Delta-gecodeerde arcs decoderen naar plain lon/lat-punten.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
// Decode delta-encoded arcs into plain lon/lat pairs. Projection happens
|
||||
// later, after antimeridian handling, because that works in degrees.
|
||||
$decodedArcs = [];
|
||||
@@ -130,6 +151,14 @@ function generateWorldMapSvg(bool $verbose = false): bool
|
||||
$names = [];
|
||||
$skipped = [];
|
||||
|
||||
/**
|
||||
* Per land de TopoJSON-geometrie omzetten in SVG-paden.
|
||||
*
|
||||
* Bepaalt ISO alpha-2 (via numeric map of naam map), slaat Antarctica over,
|
||||
* bouwt Polygon/MultiPolygon-rings op en verzamelt paden per code.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
foreach ($topo['objects']['countries']['geometries'] as $geo) {
|
||||
$rawId = $geo['id'] ?? '';
|
||||
$countryName = $geo['properties']['name'] ?? 'Unknown';
|
||||
@@ -261,6 +290,15 @@ function generateWorldMapSvg(bool $verbose = false): bool
|
||||
$pathsByCode[$alpha2] .= ($pathsByCode[$alpha2] === '' ? '' : ' ') . $pathD;
|
||||
}
|
||||
|
||||
/**
|
||||
* SVG-document samenstellen en wegschrijven.
|
||||
*
|
||||
* Sorteert paden per code, formattert <path>-elementen met id, data-name,
|
||||
* class, d en <title>, voegt inline CSS toe en schrijft het resultaat naar
|
||||
* de output-map.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
ksort($pathsByCode);
|
||||
|
||||
$svgPaths = [];
|
||||
@@ -303,6 +341,14 @@ function generateWorldMapSvg(bool $verbose = false): bool
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* CLI-entrypoint: wereldkaart-SVG genereren.
|
||||
*
|
||||
* Roept generateWorldMapSvg() aan en rapporteert het resultaat; bij een
|
||||
* fout wordt met exit(1) afgesloten.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
if (php_sapi_name() === 'cli') {
|
||||
echo "Wereldkaart SVG genereren uit Natural Earth TopoJSON...\n";
|
||||
if (generateWorldMapSvg(true)) {
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
* DB-IP Lite database downloader & binaire converter voor CodePress CMS.
|
||||
*
|
||||
* Downloadt de DB-IP Lite country-CSV (gzip) van download.db-ip.com, pakt
|
||||
* deze uit en zet de IP-ranges om in compacte binaire bestanden voor IPv4
|
||||
* en IPv6 (met 2-byte country codes), plus een meta.json met bron en
|
||||
* statistieken. Kan via de CLI of vanuit een admin-handler worden aangeroepen.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @package CodePress
|
||||
*/
|
||||
/**
|
||||
* DB-IP Lite database downloader & binary converter for CodePress CMS
|
||||
*/
|
||||
@@ -9,6 +20,16 @@ if (php_sapi_name() !== 'cli' && (!isset($_SESSION['admin_user']))) {
|
||||
// Can also be included from admin handler
|
||||
}
|
||||
|
||||
/**
|
||||
* GeoIP-database bijwerken: downloaden, uitpakken en converteren.
|
||||
*
|
||||
* Probeert maximaal drie recente maandelijkse DB-IP Lite releases. Bij
|
||||
* succes worden ipv4.bin en ipv6.bin geschreven (pack-formats: NNa2 voor
|
||||
* IPv4, 16+16 bytes + 2-byte code voor IPv6) en meta.json weggeschreven.
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @return array Resultaat-array met keys: success, message en (optioneel) meta.
|
||||
*/
|
||||
function updateGeoIPDatabase(): array
|
||||
{
|
||||
$baseDir = dirname(__DIR__) . '/admin/storage/geoip';
|
||||
@@ -55,6 +76,14 @@ function updateGeoIPDatabase(): array
|
||||
$v4Count = 0;
|
||||
$v6Count = 0;
|
||||
|
||||
/**
|
||||
* CSV-records omzetten naar binaire IPv4-/IPv6-records.
|
||||
*
|
||||
* Elke geldige regel met start-, end-IP en 2-letterige country code wordt
|
||||
* weggeschreven naar het juiste binaire bestand met bijbehorend pack-formaat.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
foreach ($lines as $line) {
|
||||
$line = trim($line);
|
||||
if ($line === '' || $line[0] === '#') continue;
|
||||
@@ -112,6 +141,13 @@ function updateGeoIPDatabase(): array
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* CLI-entrypoint: DB-IP Lite database bijwerken.
|
||||
*
|
||||
* Roept updateGeoIPDatabase() aan en print het resultaatbericht.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
if (php_sapi_name() === 'cli' && basename(__FILE__) === basename($_SERVER['SCRIPT_FILENAME'])) {
|
||||
echo "DB-IP Lite database bijwerken...\n";
|
||||
$res = updateGeoIPDatabase();
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
* CodePress CMS — Admin wachtwoord reset CLI
|
||||
* CodePress CMS — Admin wachtwoord reset CLI.
|
||||
*
|
||||
* Reset het wachtwoord van een admin-gebruiker via de command line. Genereert
|
||||
* een random wachtwoord wanneer er geen wordt meegegeven en wist tevens de
|
||||
* brute-force lockout voor de gebruiker, zodat direct inloggen weer mogelijk is.
|
||||
*
|
||||
* Gebruik:
|
||||
* php cli/reset-admin-password.php [gebruikersnaam] [nieuw_wachtwoord]
|
||||
@@ -12,8 +16,16 @@
|
||||
* Voorbeelden:
|
||||
* php cli/reset-admin-password.php admin
|
||||
* php cli/reset-admin-password.php admin MijnNieuweWachtwoord123
|
||||
*
|
||||
* @since 2.6.4
|
||||
* @package CodePress
|
||||
*/
|
||||
|
||||
/**
|
||||
* CLI-only guard: dit script mag alleen via de CLI uitgevoerd worden.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
if (php_sapi_name() !== 'cli') {
|
||||
fwrite(STDERR, "Dit script kan alleen via de CLI uitgevoerd worden.\n");
|
||||
exit(1);
|
||||
@@ -24,6 +36,11 @@ require_once $rootDir . '/admin/src/AdminAuth.php';
|
||||
|
||||
$appConfig = require $rootDir . '/admin/config/app.php';
|
||||
|
||||
/**
|
||||
* Argumenten parsen en gebruik tonen bij ontbrekende gebruikersnaam.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
// Argumenten parsen
|
||||
$username = $argv[1] ?? '';
|
||||
$password = $argv[2] ?? '';
|
||||
@@ -39,6 +56,11 @@ if ($username === '') {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* AdminAuth aanmaken en controleren of de gebruiker bestaat.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
// AdminAuth aanmaken (zonder sessie requirements)
|
||||
$auth = new AdminAuth($appConfig);
|
||||
|
||||
@@ -50,6 +72,11 @@ if (!isset($users[$username])) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wachtwoord genereren indien niet expliciet opgegeven.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
// Wachtwoord genereren als niet opgegeven
|
||||
if ($password === '') {
|
||||
$password = bin2hex(random_bytes(12));
|
||||
@@ -58,6 +85,13 @@ if ($password === '') {
|
||||
$generated = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wachtwoord wijzigen en brute-force lockout wissen.
|
||||
*
|
||||
* Bij een mislukte wachtwoordwijziging wordt met exit(1) afgesloten.
|
||||
*
|
||||
* @since 2.6.4
|
||||
*/
|
||||
// Wachtwoord wijzigen
|
||||
$result = $auth->changePassword($username, $password);
|
||||
if (!$result['success']) {
|
||||
|
||||
Reference in New Issue
Block a user