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.
Files changed (213) hide show
  1. package/README.md +6 -1
  2. package/_tools/buildJs.js +28 -0
  3. package/_tools/cleanOutput.js +20 -0
  4. package/bin/create.js +1 -1
  5. package/out/.htaccess +16 -0
  6. package/out/404.html +163 -0
  7. package/out/assets/brand/favicon.svg +37 -0
  8. package/out/assets/brand/logo.svg +37 -0
  9. package/out/backend/.htaccess +7 -0
  10. package/out/backend/_core/composer.json +5 -0
  11. package/out/backend/_core/composer.lock +492 -0
  12. package/out/backend/_core/index.php +148 -0
  13. package/out/backend/_core/init.php +34 -0
  14. package/out/backend/_core/modules/RateLimiter.php +31 -0
  15. package/out/backend/_core/modules/Response.php +49 -0
  16. package/{src → out}/backend/_core/vendor/composer/installed.php +2 -2
  17. package/out/backend/api/protected/example-protected.php +17 -0
  18. package/out/backend/api/public/example-public.php +17 -0
  19. package/out/backend/database/Database.php +24 -0
  20. package/out/backend/database/migrations/create_example_db.sql +1 -0
  21. package/out/backend/web.config +17 -0
  22. package/out/css/fonts/bootstrap-icons.woff +0 -0
  23. package/out/css/fonts/bootstrap-icons.woff2 +0 -0
  24. package/out/css/github-markdown-dark.css +1124 -0
  25. package/out/css/github-markdown-light.css +1124 -0
  26. package/out/css/pages/404.css +21517 -0
  27. package/out/css/pages/homepage.css +21508 -0
  28. package/out/data/site.json +44 -0
  29. package/out/index.html +1147 -0
  30. package/out/js/bootstrap.bundle.min.js +7 -0
  31. package/out/js/pages/js/pages/404.js +6 -0
  32. package/out/js/pages/js/pages/homepage.js +6 -0
  33. package/out/js/pages/ts/pages/404.js +6 -0
  34. package/out/js/pages/ts/pages/homepage.js +6 -0
  35. package/out/llms.txt +14 -0
  36. package/out/robots.txt +4 -0
  37. package/out/sitemap.xml +15 -0
  38. package/out/web.config +27 -0
  39. package/package.json +32 -50
  40. package/src/frontend/data/site.json +44 -44
  41. package/.gitignore +0 -5
  42. package/src/backend/_core/vendor/graham-campbell/result-type/.gitattributes +0 -9
  43. package/src/backend/_core/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +0 -132
  44. package/src/backend/_core/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +0 -31
  45. package/src/backend/_core/vendor/graham-campbell/result-type/.github/FUNDING.yml +0 -2
  46. package/src/backend/_core/vendor/graham-campbell/result-type/.github/SECURITY.md +0 -14
  47. package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/stale.yml +0 -11
  48. package/src/backend/_core/vendor/graham-campbell/result-type/.github/workflows/tests.yml +0 -40
  49. package/src/backend/_core/vendor/phpoption/phpoption/.gitattributes +0 -13
  50. package/src/backend/_core/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +0 -132
  51. package/src/backend/_core/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +0 -30
  52. package/src/backend/_core/vendor/phpoption/phpoption/.github/FUNDING.yml +0 -2
  53. package/src/backend/_core/vendor/phpoption/phpoption/.github/SECURITY.md +0 -14
  54. package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/static.yml +0 -40
  55. package/src/backend/_core/vendor/phpoption/phpoption/.github/workflows/tests.yml +0 -40
  56. package/src/backend/_core/vendor/vlucas/phpdotenv/.gitattributes +0 -15
  57. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +0 -132
  58. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +0 -30
  59. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/FUNDING.yml +0 -2
  60. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/SECURITY.md +0 -14
  61. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/static.yml +0 -40
  62. package/src/backend/_core/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +0 -70
  63. package/src/backend/config.php +0 -19
  64. /package/{src → out}/backend/_core/vendor/autoload.php +0 -0
  65. /package/{src → out}/backend/_core/vendor/composer/ClassLoader.php +0 -0
  66. /package/{src → out}/backend/_core/vendor/composer/InstalledVersions.php +0 -0
  67. /package/{src → out}/backend/_core/vendor/composer/LICENSE +0 -0
  68. /package/{src → out}/backend/_core/vendor/composer/autoload_classmap.php +0 -0
  69. /package/{src → out}/backend/_core/vendor/composer/autoload_files.php +0 -0
  70. /package/{src → out}/backend/_core/vendor/composer/autoload_namespaces.php +0 -0
  71. /package/{src → out}/backend/_core/vendor/composer/autoload_psr4.php +0 -0
  72. /package/{src → out}/backend/_core/vendor/composer/autoload_real.php +0 -0
  73. /package/{src → out}/backend/_core/vendor/composer/autoload_static.php +0 -0
  74. /package/{src → out}/backend/_core/vendor/composer/installed.json +0 -0
  75. /package/{src → out}/backend/_core/vendor/composer/platform_check.php +0 -0
  76. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/CHANGELOG.md +0 -0
  77. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/LICENSE +0 -0
  78. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/README.md +0 -0
  79. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/composer.json +0 -0
  80. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/phpunit.xml.dist +0 -0
  81. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/src/Error.php +0 -0
  82. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/src/Result.php +0 -0
  83. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/src/Success.php +0 -0
  84. /package/{src → out}/backend/_core/vendor/graham-campbell/result-type/tests/ResultTest.php +0 -0
  85. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/LICENSE +0 -0
  86. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/Makefile +0 -0
  87. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/README.md +0 -0
  88. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/composer.json +0 -0
  89. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/phpstan-baseline.neon +0 -0
  90. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/phpstan.neon.dist +0 -0
  91. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/phpunit.xml.dist +0 -0
  92. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +0 -0
  93. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/None.php +0 -0
  94. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Option.php +0 -0
  95. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/src/PhpOption/Some.php +0 -0
  96. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +0 -0
  97. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +0 -0
  98. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +0 -0
  99. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +0 -0
  100. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +0 -0
  101. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/tests/bootstrap.php +0 -0
  102. /package/{src → out}/backend/_core/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +0 -0
  103. /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/Ctype.php +0 -0
  104. /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/LICENSE +0 -0
  105. /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/README.md +0 -0
  106. /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/bootstrap.php +0 -0
  107. /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/bootstrap80.php +0 -0
  108. /package/{src → out}/backend/_core/vendor/symfony/polyfill-ctype/composer.json +0 -0
  109. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/LICENSE +0 -0
  110. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Mbstring.php +0 -0
  111. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/README.md +0 -0
  112. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +0 -0
  113. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +0 -0
  114. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +0 -0
  115. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +0 -0
  116. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap.php +0 -0
  117. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/bootstrap80.php +0 -0
  118. /package/{src → out}/backend/_core/vendor/symfony/polyfill-mbstring/composer.json +0 -0
  119. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/LICENSE +0 -0
  120. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Php80.php +0 -0
  121. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/PhpToken.php +0 -0
  122. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/README.md +0 -0
  123. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +0 -0
  124. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +0 -0
  125. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +0 -0
  126. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +0 -0
  127. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +0 -0
  128. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/bootstrap.php +0 -0
  129. /package/{src → out}/backend/_core/vendor/symfony/polyfill-php80/composer.json +0 -0
  130. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/.editorconfig +0 -0
  131. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/LICENSE +0 -0
  132. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/Makefile +0 -0
  133. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/README.md +0 -0
  134. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/UPGRADING.md +0 -0
  135. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/composer.json +0 -0
  136. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/phpstan-baseline.neon +0 -0
  137. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/phpstan.neon.dist +0 -0
  138. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/phpunit.xml.dist +0 -0
  139. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Dotenv.php +0 -0
  140. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +0 -0
  141. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +0 -0
  142. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +0 -0
  143. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +0 -0
  144. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +0 -0
  145. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Loader.php +0 -0
  146. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +0 -0
  147. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +0 -0
  148. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Entry.php +0 -0
  149. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +0 -0
  150. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +0 -0
  151. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Lines.php +0 -0
  152. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Parser.php +0 -0
  153. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +0 -0
  154. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Parser/Value.php +0 -0
  155. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +0 -0
  156. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +0 -0
  157. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +0 -0
  158. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +0 -0
  159. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +0 -0
  160. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +0 -0
  161. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +0 -0
  162. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +0 -0
  163. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +0 -0
  164. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +0 -0
  165. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +0 -0
  166. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +0 -0
  167. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +0 -0
  168. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +0 -0
  169. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +0 -0
  170. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +0 -0
  171. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +0 -0
  172. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +0 -0
  173. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/FileStore.php +0 -0
  174. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +0 -0
  175. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +0 -0
  176. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Store/StringStore.php +0 -0
  177. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Util/Regex.php +0 -0
  178. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Util/Str.php +0 -0
  179. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/src/Validator.php +0 -0
  180. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +0 -0
  181. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +0 -0
  182. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +0 -0
  183. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +0 -0
  184. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +0 -0
  185. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +0 -0
  186. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +0 -0
  187. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +0 -0
  188. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +0 -0
  189. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +0 -0
  190. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +0 -0
  191. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +0 -0
  192. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +0 -0
  193. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +0 -0
  194. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +0 -0
  195. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +0 -0
  196. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +0 -0
  197. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +0 -0
  198. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +0 -0
  199. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +0 -0
  200. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +0 -0
  201. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +0 -0
  202. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +0 -0
  203. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +0 -0
  204. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +0 -0
  205. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +0 -0
  206. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +0 -0
  207. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +0 -0
  208. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +0 -0
  209. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +0 -0
  210. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +0 -0
  211. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +0 -0
  212. /package/{src → out}/backend/_core/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +0 -0
  213. /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' => '4719f94db95d3c803abf3cf434a4e47e38526a14',
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' => '4719f94db95d3c803abf3cf434a4e47e38526a14',
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>