create-berna-stencil 2.6.1 → 2.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/_tools/buildJs.js +28 -0
- package/_tools/cleanOutput.js +20 -0
- package/bin/create.js +1 -1
- package/out/.htaccess +16 -0
- package/out/404.html +163 -0
- package/out/assets/brand/favicon.svg +37 -0
- package/out/assets/brand/logo.svg +37 -0
- package/out/backend/.htaccess +7 -0
- package/out/backend/_core/composer.json +5 -0
- package/out/backend/_core/composer.lock +492 -0
- package/out/backend/_core/index.php +148 -0
- package/out/backend/_core/init.php +34 -0
- package/out/backend/_core/modules/RateLimiter.php +31 -0
- package/out/backend/_core/modules/Response.php +49 -0
- package/{src → out}/backend/_core/vendor/composer/installed.php +2 -2
- package/out/backend/api/protected/example-protected.php +17 -0
- package/out/backend/api/public/example-public.php +17 -0
- package/out/backend/database/Database.php +24 -0
- package/out/backend/database/migrations/create_example_db.sql +1 -0
- package/out/backend/web.config +17 -0
- package/out/css/fonts/bootstrap-icons.woff +0 -0
- package/out/css/fonts/bootstrap-icons.woff2 +0 -0
- package/out/css/github-markdown-dark.css +1124 -0
- package/out/css/github-markdown-light.css +1124 -0
- package/out/css/pages/404.css +21517 -0
- package/out/css/pages/homepage.css +21508 -0
- package/out/data/site.json +44 -0
- package/out/index.html +1147 -0
- package/out/js/bootstrap.bundle.min.js +7 -0
- package/out/js/pages/js/pages/404.js +6 -0
- package/out/js/pages/js/pages/homepage.js +6 -0
- package/out/js/pages/ts/pages/404.js +6 -0
- package/out/js/pages/ts/pages/homepage.js +6 -0
- package/out/llms.txt +14 -0
- package/out/robots.txt +4 -0
- package/out/sitemap.xml +15 -0
- package/out/web.config +27 -0
- package/package.json +32 -50
- package/src/frontend/data/site.json +44 -44
- package/.gitignore +0 -5
- package/src/backend/_core/vendor/graham-campbell/result-type/.gitattributes +0 -9
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +0 -132
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +0 -31
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/FUNDING.yml +0 -2
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/SECURITY.md +0 -14
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/stale.yml +0 -11
- package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/tests.yml +0 -40
- package/src/backend/_core/vendor/phpoption/phpoption/.gitattributes +0 -13
- package/src/backend/_core/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +0 -132
- package/src/backend/_core/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +0 -30
- package/src/backend/_core/vendor/phpoption/phpoption/.github/FUNDING.yml +0 -2
- package/src/backend/_core/vendor/phpoption/phpoption/.github/SECURITY.md +0 -14
- package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/static.yml +0 -40
- package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/tests.yml +0 -40
- package/src/backend/_core/vendor/vlucas/phpdotenv/.gitattributes +0 -15
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +0 -132
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +0 -30
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/FUNDING.yml +0 -2
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/SECURITY.md +0 -14
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/static.yml +0 -40
- package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +0 -70
- package/src/backend/config.php +0 -19
- /package/{src → out}/backend/_core/vendor/autoload.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/ClassLoader.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/InstalledVersions.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/composer/autoload_classmap.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/autoload_files.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/autoload_namespaces.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/autoload_psr4.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/autoload_real.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/autoload_static.php +0 -0
- /package/{src → out}/backend/_core/vendor/composer/installed.json +0 -0
- /package/{src → out}/backend/_core/vendor/composer/platform_check.php +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/README.md +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/src/Error.php +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/src/Result.php +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/src/Success.php +0 -0
- /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/Makefile +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/README.md +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -0
- /package/{src → out}/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/README.md +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/README.md +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Php80.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/README.md +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +0 -0
- /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/LICENSE +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/composer.json +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -0
- /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
class RateLimiter {
|
|
6
|
+
public static function check(string $ip, int $maxRequests = 60, int $windowSeconds = 60): void {
|
|
7
|
+
$cacheDir = __DIR__ . '/../../cache';
|
|
8
|
+
|
|
9
|
+
if (!is_dir($cacheDir)) {
|
|
10
|
+
mkdir($cacheDir, 0755, true);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
$cacheFile = $cacheDir . '/rl_' . md5($ip) . '.json';
|
|
14
|
+
$now = time();
|
|
15
|
+
$data = [];
|
|
16
|
+
|
|
17
|
+
if (file_exists($cacheFile)) {
|
|
18
|
+
$data = json_decode(file_get_contents($cacheFile), true) ?: [];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
$data = array_filter($data, fn($ts) => $ts > ($now - $windowSeconds));
|
|
22
|
+
$data[] = $now;
|
|
23
|
+
|
|
24
|
+
file_put_contents($cacheFile, json_encode(array_values($data)), LOCK_EX);
|
|
25
|
+
|
|
26
|
+
if (count($data) > $maxRequests) {
|
|
27
|
+
header('Retry-After: ' . $windowSeconds);
|
|
28
|
+
Response::error('Too Many Requests', 429);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
|
|
3
|
+
declare(strict_types=1);
|
|
4
|
+
|
|
5
|
+
if (!defined('CORE_ACCESS')) {
|
|
6
|
+
$errorPage = $_SERVER['DOCUMENT_ROOT'] . '/404.html';
|
|
7
|
+
http_response_code(404);
|
|
8
|
+
if (file_exists($errorPage)) {
|
|
9
|
+
header('Content-Type: text/html; charset=UTF-8');
|
|
10
|
+
echo file_get_contents($errorPage);
|
|
11
|
+
} else {
|
|
12
|
+
echo "404 Not Found";
|
|
13
|
+
}
|
|
14
|
+
exit;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class Response
|
|
18
|
+
{
|
|
19
|
+
public static function success(mixed $data = null, int $code = 200): never
|
|
20
|
+
{
|
|
21
|
+
http_response_code($code);
|
|
22
|
+
echo json_encode([
|
|
23
|
+
'status' => 'success',
|
|
24
|
+
'data' => $data,
|
|
25
|
+
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
26
|
+
exit;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public static function error(string $message, int $code = 400, mixed $details = null): never
|
|
30
|
+
{
|
|
31
|
+
http_response_code($code);
|
|
32
|
+
$body = [
|
|
33
|
+
'status' => 'error',
|
|
34
|
+
'message' => $message,
|
|
35
|
+
'code' => $code,
|
|
36
|
+
];
|
|
37
|
+
if ($details !== null) {
|
|
38
|
+
$body['details'] = $details;
|
|
39
|
+
}
|
|
40
|
+
echo json_encode($body, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
|
41
|
+
exit;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public static function noContent(): never
|
|
45
|
+
{
|
|
46
|
+
http_response_code(204);
|
|
47
|
+
exit;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
'name' => '__root__',
|
|
4
4
|
'pretty_version' => 'dev-main',
|
|
5
5
|
'version' => 'dev-main',
|
|
6
|
-
'reference' => '
|
|
6
|
+
'reference' => 'c0fb608d2f28aa6977fa76538d55db9be6530ce4',
|
|
7
7
|
'type' => 'library',
|
|
8
8
|
'install_path' => __DIR__ . '/../../',
|
|
9
9
|
'aliases' => array(),
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
'__root__' => array(
|
|
14
14
|
'pretty_version' => 'dev-main',
|
|
15
15
|
'version' => 'dev-main',
|
|
16
|
-
'reference' => '
|
|
16
|
+
'reference' => 'c0fb608d2f28aa6977fa76538d55db9be6530ce4',
|
|
17
17
|
'type' => 'library',
|
|
18
18
|
'install_path' => __DIR__ . '/../../',
|
|
19
19
|
'aliases' => array(),
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
declare(strict_types=1);
|
|
3
|
+
|
|
4
|
+
require_once CORE_PATH . '/modules/Response.php';
|
|
5
|
+
|
|
6
|
+
if ($method !== 'GET') {
|
|
7
|
+
Response::error('Method not allowed', 405);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//
|
|
11
|
+
// Your endpoint logic here. You can access route parameters in $requestParams array
|
|
12
|
+
//
|
|
13
|
+
|
|
14
|
+
Response::success([
|
|
15
|
+
'message' => 'Protected endpoint is working',
|
|
16
|
+
'params' => $requestParams,
|
|
17
|
+
]);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
declare(strict_types=1);
|
|
3
|
+
|
|
4
|
+
require_once CORE_PATH . '/modules/Response.php';
|
|
5
|
+
|
|
6
|
+
if ($method !== 'GET') {
|
|
7
|
+
Response::error('Method not allowed', 405);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
//
|
|
11
|
+
// Your endpoint logic here. You can access route parameters in $requestParams array
|
|
12
|
+
//
|
|
13
|
+
|
|
14
|
+
Response::success([
|
|
15
|
+
'message' => 'Public endpoint is working',
|
|
16
|
+
'params' => $requestParams,
|
|
17
|
+
]);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?php
|
|
2
|
+
declare(strict_types=1);
|
|
3
|
+
|
|
4
|
+
class Database {
|
|
5
|
+
private static ?PDO $instance = null;
|
|
6
|
+
|
|
7
|
+
private function __construct() {}
|
|
8
|
+
|
|
9
|
+
public static function getInstance(): PDO {
|
|
10
|
+
if (self::$instance === null) {
|
|
11
|
+
$config = require __DIR__ . '/../config.php';
|
|
12
|
+
|
|
13
|
+
$dsn = "mysql:host={$config['DB_HOST']};dbname={$config['DB_NAME']};charset=utf8mb4";
|
|
14
|
+
$options = [
|
|
15
|
+
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
16
|
+
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
|
17
|
+
PDO::ATTR_EMULATE_PREPARES => false,
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
self::$instance = new PDO($dsn, $config['DB_USER'], $config['DB_PASS'], $options);
|
|
21
|
+
}
|
|
22
|
+
return self::$instance;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
CREATE DATABASE example_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<configuration>
|
|
3
|
+
<system.webServer>
|
|
4
|
+
<rewrite>
|
|
5
|
+
<rules>
|
|
6
|
+
<rule name="PassThroughCoreIndex" stopProcessing="true">
|
|
7
|
+
<match url="^_core/index\.php$" ignoreCase="true" />
|
|
8
|
+
<action type="None" />
|
|
9
|
+
</rule>
|
|
10
|
+
<rule name="RewriteToFrontController" stopProcessing="true">
|
|
11
|
+
<match url="^(.*)$" ignoreCase="true" />
|
|
12
|
+
<action type="Rewrite" url="_core/index.php" appendQueryString="true" />
|
|
13
|
+
</rule>
|
|
14
|
+
</rules>
|
|
15
|
+
</rewrite>
|
|
16
|
+
</system.webServer>
|
|
17
|
+
</configuration>
|
|
Binary file
|
|
Binary file
|