From e89fc437cbddcc7f7a141b2f02f960ee5ee132ef Mon Sep 17 00:00:00 2001 From: sriramv Date: Sat, 6 May 2023 10:58:49 +0530 Subject: [PATCH] Initial Commit:GWM --- .gitignore | 53 +- .htaccess | 49 + LICENSE | 22 + README.md | 62 + app/.htaccess | 6 + app/Common.php | 15 + app/Config/App.php | 447 ++++ app/Config/Autoload.php | 97 + app/Config/Boot/development.php | 32 + app/Config/Boot/production.php | 21 + app/Config/Boot/testing.php | 32 + app/Config/CURLRequest.php | 20 + app/Config/Cache.php | 169 ++ app/Config/Constants.php | 94 + app/Config/ContentSecurityPolicy.php | 176 ++ app/Config/Cookie.php | 105 + app/Config/Database.php | 84 + app/Config/DocTypes.php | 43 + app/Config/Email.php | 117 + app/Config/Encryption.php | 92 + app/Config/Events.php | 48 + app/Config/Exceptions.php | 77 + app/Config/Feature.php | 30 + app/Config/Filters.php | 64 + app/Config/ForeignCharacters.php | 9 + app/Config/Format.php | 77 + app/Config/Generators.php | 41 + app/Config/Honeypot.php | 42 + app/Config/Images.php | 31 + app/Config/Kint.php | 51 + app/Config/Logger.php | 150 ++ app/Config/Migrations.php | 52 + app/Config/Mimes.php | 532 ++++ app/Config/Modules.php | 76 + app/Config/Pager.php | 37 + app/Config/Paths.php | 75 + app/Config/Publisher.php | 28 + app/Config/Routes.php | 64 + app/Config/Security.php | 101 + app/Config/Services.php | 32 + app/Config/Session.php | 102 + app/Config/Toolbar.php | 91 + app/Config/UserAgents.php | 252 ++ app/Config/Validation.php | 44 + app/Config/View.php | 56 + app/Controllers/Admin_controller.php | 115 + app/Controllers/BaseController.php | 58 + app/Controllers/Dashboard.php | 33 + app/Controllers/Home.php | 11 + app/Controllers/Member_controller.php | 127 + app/Database/Migrations/.gitkeep | 0 app/Database/Seeds/.gitkeep | 0 app/Filters/.gitkeep | 0 app/Helpers/.gitkeep | 0 app/Language/.gitkeep | 0 app/Language/en/Validation.php | 4 + app/Libraries/.gitkeep | 0 app/Models/.gitkeep | 0 app/Models/Dashboard_model.php | 24 + app/Models/Member_model.php | 47 + app/Models/User_model.php | 47 + app/ThirdParty/.gitkeep | 0 app/Views/admin_login.php | 104 + app/Views/dashboard.php | 4 + app/Views/errors/cli/error_404.php | 7 + app/Views/errors/cli/error_exception.php | 65 + app/Views/errors/cli/production.php | 5 + app/Views/errors/html/debug.css | 197 ++ app/Views/errors/html/debug.js | 116 + app/Views/errors/html/error_404.php | 84 + app/Views/errors/html/error_exception.php | 392 +++ app/Views/errors/html/production.php | 25 + app/Views/layout/footer.php | 84 + app/Views/layout/header.php | 269 ++ app/Views/member_form.php | 95 + app/Views/member_login.php | 103 + app/Views/member_registration.php | 170 ++ app/Views/members_list.php | 68 + app/Views/welcome_message.php | 325 +++ app/index.html | 11 + builds | 125 + composer.json | 39 + composer.lock | 2178 +++++++++++++++++ index.php | 67 + phpunit.xml.dist | 57 + preload.php | 113 + spark | 99 + tests/README.md | 122 + .../2020-02-22-222222_example_migration.php | 37 + .../_support/Database/Seeds/ExampleSeeder.php | 41 + tests/_support/Libraries/ConfigReader.php | 17 + tests/_support/Models/ExampleModel.php | 24 + tests/database/ExampleDatabaseTest.php | 46 + tests/session/ExampleSessionTest.php | 18 + tests/unit/HealthTest.php | 50 + writable/.htaccess | 6 + writable/cache/index.html | 11 + writable/debugbar/.gitkeep | 0 .../debugbar/debugbar_1683343273.690034.json | 1 + .../debugbar/debugbar_1683343300.367408.json | 1 + .../debugbar/debugbar_1683343317.627592.json | 1 + .../debugbar/debugbar_1683343408.366334.json | 1 + .../debugbar/debugbar_1683343678.936444.json | 1 + .../debugbar/debugbar_1683343882.810625.json | 1 + .../debugbar/debugbar_1683343895.524963.json | 1 + .../debugbar/debugbar_1683343899.213266.json | 1 + .../debugbar/debugbar_1683344022.810115.json | 1 + .../debugbar/debugbar_1683346911.983963.json | 1 + .../debugbar/debugbar_1683346914.883620.json | 1 + .../debugbar/debugbar_1683346958.516941.json | 1 + .../debugbar/debugbar_1683346963.249491.json | 1 + .../debugbar/debugbar_1683346964.984600.json | 1 + .../debugbar/debugbar_1683347159.386231.json | 1 + .../debugbar/debugbar_1683347164.002894.json | 1 + .../debugbar/debugbar_1683347169.594889.json | 1 + .../debugbar/debugbar_1683347170.593123.json | 1 + .../debugbar/debugbar_1683347198.708385.json | 1 + .../debugbar/debugbar_1683347199.901285.json | 1 + writable/logs/index.html | 11 + writable/logs/log-2023-05-03.log | 830 +++++++ writable/logs/log-2023-05-04.log | 195 ++ writable/logs/log-2023-05-05.log | 631 +++++ writable/logs/log-2023-05-06.log | 163 ++ ...ci_session0i93k9qqorgcjbn6ppodienfcrfhfb1d | 1 + ...ci_session2eqqpir9ngfn6q6usb2pvsunrtksvg9p | 1 + ...ci_session2hbtsrqbgmqm4rbn5ns4tieaeam3gnm6 | 1 + ...ci_session2iu73j8ecc4ocpv5dhmoe9qogkjhrtvl | 1 + ...ci_session4m2tba8kbb1qa0seco7nit1f5vdpb8ha | 1 + ...ci_session71dr5hbqcr2cgkcs91cqene4r05ggi11 | 1 + ...ci_session7fdvcoc6o5t3thsv9o4o8icpjud2n1cu | 1 + ...ci_sessionbpl7dckpvk3f8r5bmur3td4efjbmq961 | 1 + ...ci_sessionbtv72erdm39nm7i81kbqk7gnbs6kvd5b | 1 + ...ci_sessionc4a0gfaa3rulimad72qg04s7dneq8j7r | 1 + ...ci_sessionctveqnpv6mm0veh9caorrgn7amlmdpem | 1 + ...ci_sessionemqdt1b1apo2n62b91r96c3tq09gjcia | 1 + ...ci_sessionh6i8bq3bft05lh18l1gejqin2vch1jas | 1 + ...ci_sessionj5l49e4djl9r9lf1hbmqqbq6k4m1r1ln | 1 + ...ci_sessionjms6redjr1m5brg03en2cbj832s58vqq | 1 + ...ci_sessionk3i3stppr6nluouf5f16nclj16f3bj1l | 1 + ...ci_sessionlf341aarqjcon1e6i547od23ij771j05 | 1 + ...ci_sessionm387c3qq6v03s38n17u0hsod7714adpv | 1 + ...ci_sessionmpjp4tdqufaqv9p412evii4qg7dpqt80 | 1 + ...ci_sessionmsb734oombglaclpmsnbh5j2ne2p942a | 1 + ...ci_sessionmsft6qkkcbnrnpchkibmn6ecksp0uc0l | 1 + ...ci_sessiono0c356vu6ph3u11b5ll4u1re745f2uu1 | 1 + ...ci_sessionoiqe7obcmdi4gbmdi28oq08relbsk2mv | 1 + ...ci_sessionp4ljc1ampbehk4lu5293qh06mglv6roj | 1 + ...ci_sessionpbkbtmiou99n33l4h4kt6ter0s3h4iu4 | 1 + ...ci_sessionpduft182s1dpl4ff07npf3qv5087d9t4 | 1 + ...ci_sessions7goldpfeb01o8eo0o68hn9intp4vsuj | 1 + ...ci_sessionsasgb1julgrdedlj4069l67r22rdo6k3 | 1 + ...ci_sessiont031950cqmq68slj2417hvsjk1vn83f4 | 1 + ...ci_sessionvbv3ok269208184988jojsesmm7cqsua | 1 + writable/session/index.html | 11 + writable/uploads/index.html | 11 + 155 files changed, 11390 insertions(+), 50 deletions(-) create mode 100644 .htaccess create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/.htaccess create mode 100644 app/Common.php create mode 100644 app/Config/App.php create mode 100644 app/Config/Autoload.php create mode 100644 app/Config/Boot/development.php create mode 100644 app/Config/Boot/production.php create mode 100644 app/Config/Boot/testing.php create mode 100644 app/Config/CURLRequest.php create mode 100644 app/Config/Cache.php create mode 100644 app/Config/Constants.php create mode 100644 app/Config/ContentSecurityPolicy.php create mode 100644 app/Config/Cookie.php create mode 100644 app/Config/Database.php create mode 100644 app/Config/DocTypes.php create mode 100644 app/Config/Email.php create mode 100644 app/Config/Encryption.php create mode 100644 app/Config/Events.php create mode 100644 app/Config/Exceptions.php create mode 100644 app/Config/Feature.php create mode 100644 app/Config/Filters.php create mode 100644 app/Config/ForeignCharacters.php create mode 100644 app/Config/Format.php create mode 100644 app/Config/Generators.php create mode 100644 app/Config/Honeypot.php create mode 100644 app/Config/Images.php create mode 100644 app/Config/Kint.php create mode 100644 app/Config/Logger.php create mode 100644 app/Config/Migrations.php create mode 100644 app/Config/Mimes.php create mode 100644 app/Config/Modules.php create mode 100644 app/Config/Pager.php create mode 100644 app/Config/Paths.php create mode 100644 app/Config/Publisher.php create mode 100644 app/Config/Routes.php create mode 100644 app/Config/Security.php create mode 100644 app/Config/Services.php create mode 100644 app/Config/Session.php create mode 100644 app/Config/Toolbar.php create mode 100644 app/Config/UserAgents.php create mode 100644 app/Config/Validation.php create mode 100644 app/Config/View.php create mode 100644 app/Controllers/Admin_controller.php create mode 100644 app/Controllers/BaseController.php create mode 100644 app/Controllers/Dashboard.php create mode 100644 app/Controllers/Home.php create mode 100644 app/Controllers/Member_controller.php create mode 100644 app/Database/Migrations/.gitkeep create mode 100644 app/Database/Seeds/.gitkeep create mode 100644 app/Filters/.gitkeep create mode 100644 app/Helpers/.gitkeep create mode 100644 app/Language/.gitkeep create mode 100644 app/Language/en/Validation.php create mode 100644 app/Libraries/.gitkeep create mode 100644 app/Models/.gitkeep create mode 100644 app/Models/Dashboard_model.php create mode 100644 app/Models/Member_model.php create mode 100644 app/Models/User_model.php create mode 100644 app/ThirdParty/.gitkeep create mode 100644 app/Views/admin_login.php create mode 100644 app/Views/dashboard.php create mode 100644 app/Views/errors/cli/error_404.php create mode 100644 app/Views/errors/cli/error_exception.php create mode 100644 app/Views/errors/cli/production.php create mode 100644 app/Views/errors/html/debug.css create mode 100644 app/Views/errors/html/debug.js create mode 100644 app/Views/errors/html/error_404.php create mode 100644 app/Views/errors/html/error_exception.php create mode 100644 app/Views/errors/html/production.php create mode 100644 app/Views/layout/footer.php create mode 100644 app/Views/layout/header.php create mode 100644 app/Views/member_form.php create mode 100644 app/Views/member_login.php create mode 100644 app/Views/member_registration.php create mode 100644 app/Views/members_list.php create mode 100644 app/Views/welcome_message.php create mode 100644 app/index.html create mode 100644 builds create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 index.php create mode 100644 phpunit.xml.dist create mode 100644 preload.php create mode 100644 spark create mode 100644 tests/README.md create mode 100644 tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php create mode 100644 tests/_support/Database/Seeds/ExampleSeeder.php create mode 100644 tests/_support/Libraries/ConfigReader.php create mode 100644 tests/_support/Models/ExampleModel.php create mode 100644 tests/database/ExampleDatabaseTest.php create mode 100644 tests/session/ExampleSessionTest.php create mode 100644 tests/unit/HealthTest.php create mode 100644 writable/.htaccess create mode 100644 writable/cache/index.html create mode 100644 writable/debugbar/.gitkeep create mode 100644 writable/debugbar/debugbar_1683343273.690034.json create mode 100644 writable/debugbar/debugbar_1683343300.367408.json create mode 100644 writable/debugbar/debugbar_1683343317.627592.json create mode 100644 writable/debugbar/debugbar_1683343408.366334.json create mode 100644 writable/debugbar/debugbar_1683343678.936444.json create mode 100644 writable/debugbar/debugbar_1683343882.810625.json create mode 100644 writable/debugbar/debugbar_1683343895.524963.json create mode 100644 writable/debugbar/debugbar_1683343899.213266.json create mode 100644 writable/debugbar/debugbar_1683344022.810115.json create mode 100644 writable/debugbar/debugbar_1683346911.983963.json create mode 100644 writable/debugbar/debugbar_1683346914.883620.json create mode 100644 writable/debugbar/debugbar_1683346958.516941.json create mode 100644 writable/debugbar/debugbar_1683346963.249491.json create mode 100644 writable/debugbar/debugbar_1683346964.984600.json create mode 100644 writable/debugbar/debugbar_1683347159.386231.json create mode 100644 writable/debugbar/debugbar_1683347164.002894.json create mode 100644 writable/debugbar/debugbar_1683347169.594889.json create mode 100644 writable/debugbar/debugbar_1683347170.593123.json create mode 100644 writable/debugbar/debugbar_1683347198.708385.json create mode 100644 writable/debugbar/debugbar_1683347199.901285.json create mode 100644 writable/logs/index.html create mode 100644 writable/logs/log-2023-05-03.log create mode 100644 writable/logs/log-2023-05-04.log create mode 100644 writable/logs/log-2023-05-05.log create mode 100644 writable/logs/log-2023-05-06.log create mode 100644 writable/session/ci_session0i93k9qqorgcjbn6ppodienfcrfhfb1d create mode 100644 writable/session/ci_session2eqqpir9ngfn6q6usb2pvsunrtksvg9p create mode 100644 writable/session/ci_session2hbtsrqbgmqm4rbn5ns4tieaeam3gnm6 create mode 100644 writable/session/ci_session2iu73j8ecc4ocpv5dhmoe9qogkjhrtvl create mode 100644 writable/session/ci_session4m2tba8kbb1qa0seco7nit1f5vdpb8ha create mode 100644 writable/session/ci_session71dr5hbqcr2cgkcs91cqene4r05ggi11 create mode 100644 writable/session/ci_session7fdvcoc6o5t3thsv9o4o8icpjud2n1cu create mode 100644 writable/session/ci_sessionbpl7dckpvk3f8r5bmur3td4efjbmq961 create mode 100644 writable/session/ci_sessionbtv72erdm39nm7i81kbqk7gnbs6kvd5b create mode 100644 writable/session/ci_sessionc4a0gfaa3rulimad72qg04s7dneq8j7r create mode 100644 writable/session/ci_sessionctveqnpv6mm0veh9caorrgn7amlmdpem create mode 100644 writable/session/ci_sessionemqdt1b1apo2n62b91r96c3tq09gjcia create mode 100644 writable/session/ci_sessionh6i8bq3bft05lh18l1gejqin2vch1jas create mode 100644 writable/session/ci_sessionj5l49e4djl9r9lf1hbmqqbq6k4m1r1ln create mode 100644 writable/session/ci_sessionjms6redjr1m5brg03en2cbj832s58vqq create mode 100644 writable/session/ci_sessionk3i3stppr6nluouf5f16nclj16f3bj1l create mode 100644 writable/session/ci_sessionlf341aarqjcon1e6i547od23ij771j05 create mode 100644 writable/session/ci_sessionm387c3qq6v03s38n17u0hsod7714adpv create mode 100644 writable/session/ci_sessionmpjp4tdqufaqv9p412evii4qg7dpqt80 create mode 100644 writable/session/ci_sessionmsb734oombglaclpmsnbh5j2ne2p942a create mode 100644 writable/session/ci_sessionmsft6qkkcbnrnpchkibmn6ecksp0uc0l create mode 100644 writable/session/ci_sessiono0c356vu6ph3u11b5ll4u1re745f2uu1 create mode 100644 writable/session/ci_sessionoiqe7obcmdi4gbmdi28oq08relbsk2mv create mode 100644 writable/session/ci_sessionp4ljc1ampbehk4lu5293qh06mglv6roj create mode 100644 writable/session/ci_sessionpbkbtmiou99n33l4h4kt6ter0s3h4iu4 create mode 100644 writable/session/ci_sessionpduft182s1dpl4ff07npf3qv5087d9t4 create mode 100644 writable/session/ci_sessions7goldpfeb01o8eo0o68hn9intp4vsuj create mode 100644 writable/session/ci_sessionsasgb1julgrdedlj4069l67r22rdo6k3 create mode 100644 writable/session/ci_sessiont031950cqmq68slj2417hvsjk1vn83f4 create mode 100644 writable/session/ci_sessionvbv3ok269208184988jojsesmm7cqsua create mode 100644 writable/session/index.html create mode 100644 writable/uploads/index.html diff --git a/.gitignore b/.gitignore index b24d71e..17aae07 100644 --- a/.gitignore +++ b/.gitignore @@ -1,50 +1,3 @@ -# These are some examples of commonly ignored file patterns. -# You should customize this list as applicable to your project. -# Learn more about .gitignore: -# https://www.atlassian.com/git/tutorials/saving-changes/gitignore - -# Node artifact files -node_modules/ -dist/ - -# Compiled Java class files -*.class - -# Compiled Python bytecode -*.py[cod] - -# Log files -*.log - -# Package files -*.jar - -# Maven -target/ -dist/ - -# JetBrains IDE -.idea/ - -# Unit test reports -TEST*.xml - -# Generated by MacOS -.DS_Store - -# Generated by Windows -Thumbs.db - -# Applications -*.app -*.exe -*.war - -# Large media files -*.mp4 -*.tiff -*.avi -*.flv -*.mov -*.wmv - +/public +/vendor +.env \ No newline at end of file diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..dbed322 --- /dev/null +++ b/.htaccess @@ -0,0 +1,49 @@ +# Disable directory browsing +Options -Indexes + +# ---------------------------------------------------------------------- +# Rewrite engine +# ---------------------------------------------------------------------- + +# Turning on the rewrite engine is necessary for the following rules and features. +# FollowSymLinks must be enabled for this to work. + + Options +FollowSymlinks + RewriteEngine On + + # If you installed CodeIgniter in a subfolder, you will need to + # change the following line to match the subfolder you need. + # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase + # RewriteBase / + + # Redirect Trailing Slashes... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Rewrite "www.example.com -> example.com" + RewriteCond %{HTTPS} !=on + RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] + RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] + + # Checks to see if the user is attempting to access a valid file, + # such as an image or css document, if this isn't true it sends the + # request to the front controller, index.php + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA] + + # Ensure Authorization header is passed along + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + + + # If we don't have mod_rewrite installed, all 404's + # can be sent to index.php, and everything works as normal. + ErrorDocument 404 index.php + + +# Disable server signature start + ServerSignature Off +# Disable server signature end diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0119e5f --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 British Columbia Institute of Technology +Copyright (c) 2019-2023 CodeIgniter Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..461e949 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# CodeIgniter 4 Application Starter + +## What is CodeIgniter? + +CodeIgniter is a PHP full-stack web framework that is light, fast, flexible and secure. +More information can be found at the [official site](https://codeigniter.com). + +This repository holds a composer-installable app starter. +It has been built from the +[development repository](https://github.com/codeigniter4/CodeIgniter4). + +More information about the plans for version 4 can be found in [CodeIgniter 4](https://forum.codeigniter.com/forumdisplay.php?fid=28) on the forums. + +The user guide corresponding to the latest version of the framework can be found +[here](https://codeigniter4.github.io/userguide/). + +## Installation & updates + +`composer create-project codeigniter4/appstarter` then `composer update` whenever +there is a new release of the framework. + +When updating, check the release notes to see if there are any changes you might need to apply +to your `app` folder. The affected files can be copied or merged from +`vendor/codeigniter4/framework/app`. + +## Setup + +Copy `env` to `.env` and tailor for your app, specifically the baseURL +and any database settings. + +## Important Change with index.php + +`index.php` is no longer in the root of the project! It has been moved inside the *public* folder, +for better security and separation of components. + +This means that you should configure your web server to "point" to your project's *public* folder, and +not to the project root. A better practice would be to configure a virtual host to point there. A poor practice would be to point your web server to the project root and expect to enter *public/...*, as the rest of your logic and the +framework are exposed. + +**Please** read the user guide for a better explanation of how CI4 works! + +## Repository Management + +We use GitHub issues, in our main repository, to track **BUGS** and to track approved **DEVELOPMENT** work packages. +We use our [forum](http://forum.codeigniter.com) to provide SUPPORT and to discuss +FEATURE REQUESTS. + +This repository is a "distribution" one, built by our release preparation script. +Problems with it can be raised on our forum, or as issues in the main repository. + +## Server Requirements + +PHP version 7.4 or higher is required, with the following extensions installed: + +- [intl](http://php.net/manual/en/intl.requirements.php) +- [mbstring](http://php.net/manual/en/mbstring.installation.php) + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- [mysqlnd](http://php.net/manual/en/mysqlnd.install.php) if you plan to use MySQL +- [libcurl](http://php.net/manual/en/curl.requirements.php) if you plan to use the HTTP\CURLRequest library diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 0000000..f24db0a --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + diff --git a/app/Common.php b/app/Common.php new file mode 100644 index 0000000..95f5544 --- /dev/null +++ b/app/Common.php @@ -0,0 +1,15 @@ + + */ + public array $allowedHostnames = []; + + /** + * -------------------------------------------------------------------------- + * Index File + * -------------------------------------------------------------------------- + * + * Typically this will be your index.php file, unless you've renamed it to + * something else. If you are using mod_rewrite to remove the page set this + * variable so that it is blank. + */ + public string $indexPage = ''; + + /** + * -------------------------------------------------------------------------- + * URI PROTOCOL + * -------------------------------------------------------------------------- + * + * This item determines which server global should be used to retrieve the + * URI string. The default setting of 'REQUEST_URI' works for most servers. + * If your links do not seem to work, try one of the other delicious flavors: + * + * 'REQUEST_URI' Uses $_SERVER['REQUEST_URI'] + * 'QUERY_STRING' Uses $_SERVER['QUERY_STRING'] + * 'PATH_INFO' Uses $_SERVER['PATH_INFO'] + * + * WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded! + */ + public string $uriProtocol = 'REQUEST_URI'; + + /** + * -------------------------------------------------------------------------- + * Default Locale + * -------------------------------------------------------------------------- + * + * The Locale roughly represents the language and location that your visitor + * is viewing the site from. It affects the language strings and other + * strings (like currency markers, numbers, etc), that your program + * should run under for this request. + */ + public string $defaultLocale = 'en'; + + /** + * -------------------------------------------------------------------------- + * Negotiate Locale + * -------------------------------------------------------------------------- + * + * If true, the current Request object will automatically determine the + * language to use based on the value of the Accept-Language header. + * + * If false, no automatic detection will be performed. + */ + public bool $negotiateLocale = false; + + /** + * -------------------------------------------------------------------------- + * Supported Locales + * -------------------------------------------------------------------------- + * + * If $negotiateLocale is true, this array lists the locales supported + * by the application in descending order of priority. If no match is + * found, the first locale will be used. + * + * @var string[] + */ + public array $supportedLocales = ['en']; + + /** + * -------------------------------------------------------------------------- + * Application Timezone + * -------------------------------------------------------------------------- + * + * The default timezone that will be used in your application to display + * dates with the date helper, and can be retrieved through app_timezone() + * + * @see https://www.php.net/manual/en/timezones.php for list of timezones supported by PHP. + */ + public string $appTimezone = 'UTC'; + + /** + * -------------------------------------------------------------------------- + * Default Character Set + * -------------------------------------------------------------------------- + * + * This determines which character set is used by default in various methods + * that require a character set to be provided. + * + * @see http://php.net/htmlspecialchars for a list of supported charsets. + */ + public string $charset = 'UTF-8'; + + /** + * -------------------------------------------------------------------------- + * URI PROTOCOL + * -------------------------------------------------------------------------- + * + * If true, this will force every request made to this application to be + * made via a secure connection (HTTPS). If the incoming request is not + * secure, the user will be redirected to a secure version of the page + * and the HTTP Strict Transport Security header will be set. + */ + public bool $forceGlobalSecureRequests = false; + + /** + * -------------------------------------------------------------------------- + * Session Driver + * -------------------------------------------------------------------------- + * + * The session storage driver to use: + * - `CodeIgniter\Session\Handlers\FileHandler` + * - `CodeIgniter\Session\Handlers\DatabaseHandler` + * - `CodeIgniter\Session\Handlers\MemcachedHandler` + * - `CodeIgniter\Session\Handlers\RedisHandler` + * + * @deprecated use Config\Session::$driver instead. + */ + public string $sessionDriver = FileHandler::class; + + /** + * -------------------------------------------------------------------------- + * Session Cookie Name + * -------------------------------------------------------------------------- + * + * The session cookie name, must contain only [0-9a-z_-] characters + * + * @deprecated use Config\Session::$cookieName instead. + */ + public string $sessionCookieName = 'ci_session'; + + /** + * -------------------------------------------------------------------------- + * Session Expiration + * -------------------------------------------------------------------------- + * + * The number of SECONDS you want the session to last. + * Setting to 0 (zero) means expire when the browser is closed. + * + * @deprecated use Config\Session::$expiration instead. + */ + public int $sessionExpiration = 7200; + + /** + * -------------------------------------------------------------------------- + * Session Save Path + * -------------------------------------------------------------------------- + * + * The location to save sessions to and is driver dependent. + * + * For the 'files' driver, it's a path to a writable directory. + * WARNING: Only absolute paths are supported! + * + * For the 'database' driver, it's a table name. + * Please read up the manual for the format with other session drivers. + * + * IMPORTANT: You are REQUIRED to set a valid save path! + * + * @deprecated use Config\Session::$savePath instead. + */ + public string $sessionSavePath = WRITEPATH . 'session'; + + /** + * -------------------------------------------------------------------------- + * Session Match IP + * -------------------------------------------------------------------------- + * + * Whether to match the user's IP address when reading the session data. + * + * WARNING: If you're using the database driver, don't forget to update + * your session table's PRIMARY KEY when changing this setting. + * + * @deprecated use Config\Session::$matchIP instead. + */ + public bool $sessionMatchIP = false; + + /** + * -------------------------------------------------------------------------- + * Session Time to Update + * -------------------------------------------------------------------------- + * + * How many seconds between CI regenerating the session ID. + * + * @deprecated use Config\Session::$timeToUpdate instead. + */ + public int $sessionTimeToUpdate = 300; + + /** + * -------------------------------------------------------------------------- + * Session Regenerate Destroy + * -------------------------------------------------------------------------- + * + * Whether to destroy session data associated with the old session ID + * when auto-regenerating the session ID. When set to FALSE, the data + * will be later deleted by the garbage collector. + * + * @deprecated use Config\Session::$regenerateDestroy instead. + */ + public bool $sessionRegenerateDestroy = false; + + /** + * -------------------------------------------------------------------------- + * Session Database Group + * -------------------------------------------------------------------------- + * + * DB Group for the database session. + * + * @deprecated use Config\Session::$DBGroup instead. + */ + public ?string $sessionDBGroup = null; + + /** + * -------------------------------------------------------------------------- + * Cookie Prefix + * -------------------------------------------------------------------------- + * + * Set a cookie name prefix if you need to avoid collisions. + * + * @deprecated use Config\Cookie::$prefix property instead. + */ + public string $cookiePrefix = ''; + + /** + * -------------------------------------------------------------------------- + * Cookie Domain + * -------------------------------------------------------------------------- + * + * Set to `.your-domain.com` for site-wide cookies. + * + * @deprecated use Config\Cookie::$domain property instead. + */ + public string $cookieDomain = ''; + + /** + * -------------------------------------------------------------------------- + * Cookie Path + * -------------------------------------------------------------------------- + * + * Typically will be a forward slash. + * + * @deprecated use Config\Cookie::$path property instead. + */ + public string $cookiePath = '/'; + + /** + * -------------------------------------------------------------------------- + * Cookie Secure + * -------------------------------------------------------------------------- + * + * Cookie will only be set if a secure HTTPS connection exists. + * + * @deprecated use Config\Cookie::$secure property instead. + */ + public bool $cookieSecure = false; + + /** + * -------------------------------------------------------------------------- + * Cookie HttpOnly + * -------------------------------------------------------------------------- + * + * Cookie will only be accessible via HTTP(S) (no JavaScript). + * + * @deprecated use Config\Cookie::$httponly property instead. + */ + public bool $cookieHTTPOnly = true; + + /** + * -------------------------------------------------------------------------- + * Cookie SameSite + * -------------------------------------------------------------------------- + * + * Configure cookie SameSite setting. Allowed values are: + * - None + * - Lax + * - Strict + * - '' + * + * Alternatively, you can use the constant names: + * - `Cookie::SAMESITE_NONE` + * - `Cookie::SAMESITE_LAX` + * - `Cookie::SAMESITE_STRICT` + * + * Defaults to `Lax` for compatibility with modern browsers. Setting `''` + * (empty string) means default SameSite attribute set by browsers (`Lax`) + * will be set on cookies. If set to `None`, `$cookieSecure` must also be set. + * + * @deprecated use Config\Cookie::$samesite property instead. + */ + public ?string $cookieSameSite = 'Lax'; + + /** + * -------------------------------------------------------------------------- + * Reverse Proxy IPs + * -------------------------------------------------------------------------- + * + * If your server is behind a reverse proxy, you must whitelist the proxy + * IP addresses from which CodeIgniter should trust headers such as + * X-Forwarded-For or Client-IP in order to properly identify + * the visitor's IP address. + * + * You need to set a proxy IP address or IP address with subnets and + * the HTTP header for the client IP address. + * + * Here are some examples: + * [ + * '10.0.1.200' => 'X-Forwarded-For', + * '192.168.5.0/24' => 'X-Real-IP', + * ] + * + * @var array + */ + public array $proxyIPs = []; + + /** + * -------------------------------------------------------------------------- + * CSRF Token Name + * -------------------------------------------------------------------------- + * + * The token name. + * + * @deprecated Use `Config\Security` $tokenName property instead of using this property. + */ + public string $CSRFTokenName = 'csrf_test_name'; + + /** + * -------------------------------------------------------------------------- + * CSRF Header Name + * -------------------------------------------------------------------------- + * + * The header name. + * + * @deprecated Use `Config\Security` $headerName property instead of using this property. + */ + public string $CSRFHeaderName = 'X-CSRF-TOKEN'; + + /** + * -------------------------------------------------------------------------- + * CSRF Cookie Name + * -------------------------------------------------------------------------- + * + * The cookie name. + * + * @deprecated Use `Config\Security` $cookieName property instead of using this property. + */ + public string $CSRFCookieName = 'csrf_cookie_name'; + + /** + * -------------------------------------------------------------------------- + * CSRF Expire + * -------------------------------------------------------------------------- + * + * The number in seconds the token should expire. + * + * @deprecated Use `Config\Security` $expire property instead of using this property. + */ + public int $CSRFExpire = 7200; + + /** + * -------------------------------------------------------------------------- + * CSRF Regenerate + * -------------------------------------------------------------------------- + * + * Regenerate token on every submission? + * + * @deprecated Use `Config\Security` $regenerate property instead of using this property. + */ + public bool $CSRFRegenerate = true; + + /** + * -------------------------------------------------------------------------- + * CSRF Redirect + * -------------------------------------------------------------------------- + * + * Redirect to previous page with error on failure? + * + * @deprecated Use `Config\Security` $redirect property instead of using this property. + */ + public bool $CSRFRedirect = false; + + /** + * -------------------------------------------------------------------------- + * CSRF SameSite + * -------------------------------------------------------------------------- + * + * Setting for CSRF SameSite cookie token. Allowed values are: + * - None + * - Lax + * - Strict + * - '' + * + * Defaults to `Lax` as recommended in this link: + * + * @see https://portswigger.net/web-security/csrf/samesite-cookies + * + * @deprecated `Config\Cookie` $samesite property is used. + */ + public string $CSRFSameSite = 'Lax'; + + /** + * -------------------------------------------------------------------------- + * Content Security Policy + * -------------------------------------------------------------------------- + * + * Enables the Response's Content Secure Policy to restrict the sources that + * can be used for images, scripts, CSS files, audio, video, etc. If enabled, + * the Response object will populate default values for the policy from the + * `ContentSecurityPolicy.php` file. Controllers can always add to those + * restrictions at run time. + * + * For a better understanding of CSP, see these documents: + * + * @see http://www.html5rocks.com/en/tutorials/security/content-security-policy/ + * @see http://www.w3.org/TR/CSP/ + */ + public bool $CSPEnabled = false; +} diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php new file mode 100644 index 0000000..abd9df9 --- /dev/null +++ b/app/Config/Autoload.php @@ -0,0 +1,97 @@ + SYSTEMPATH, + * 'App' => APPPATH + * ]; + * + * @var array|string> + * @phpstan-var array> + */ + public $psr4 = [ + APP_NAMESPACE => APPPATH, // For custom app namespace + 'Config' => APPPATH . 'Config', + ]; + + /** + * ------------------------------------------------------------------- + * Class Map + * ------------------------------------------------------------------- + * The class map provides a map of class names and their exact + * location on the drive. Classes loaded in this manner will have + * slightly faster performance because they will not have to be + * searched for within one or more directories as they would if they + * were being autoloaded through a namespace. + * + * Prototype: + * $classmap = [ + * 'MyClass' => '/path/to/class/file.php' + * ]; + * + * @var array + */ + public $classmap = []; + + /** + * ------------------------------------------------------------------- + * Files + * ------------------------------------------------------------------- + * The files array provides a list of paths to __non-class__ files + * that will be autoloaded. This can be useful for bootstrap operations + * or for loading functions. + * + * Prototype: + * $files = [ + * '/path/to/my/file.php', + * ]; + * + * @var string[] + * @phpstan-var list + */ + public $files = []; + + /** + * ------------------------------------------------------------------- + * Helpers + * ------------------------------------------------------------------- + * Prototype: + * $helpers = [ + * 'form', + * ]; + * + * @var string[] + * @phpstan-var list + */ + public $helpers = []; +} diff --git a/app/Config/Boot/development.php b/app/Config/Boot/development.php new file mode 100644 index 0000000..05a8612 --- /dev/null +++ b/app/Config/Boot/development.php @@ -0,0 +1,32 @@ + + */ + public array $file = [ + 'storePath' => WRITEPATH . 'cache/', + 'mode' => 0640, + ]; + + /** + * ------------------------------------------------------------------------- + * Memcached settings + * ------------------------------------------------------------------------- + * Your Memcached servers can be specified below, if you are using + * the Memcached drivers. + * + * @see https://codeigniter.com/user_guide/libraries/caching.html#memcached + * + * @var array + */ + public array $memcached = [ + 'host' => '127.0.0.1', + 'port' => 11211, + 'weight' => 1, + 'raw' => false, + ]; + + /** + * ------------------------------------------------------------------------- + * Redis settings + * ------------------------------------------------------------------------- + * Your Redis server can be specified below, if you are using + * the Redis or Predis drivers. + * + * @var array + */ + public array $redis = [ + 'host' => '127.0.0.1', + 'password' => null, + 'port' => 6379, + 'timeout' => 0, + 'database' => 0, + ]; + + /** + * -------------------------------------------------------------------------- + * Available Cache Handlers + * -------------------------------------------------------------------------- + * + * This is an array of cache engine alias' and class names. Only engines + * that are listed here are allowed to be used. + * + * @var array + */ + public array $validHandlers = [ + 'dummy' => DummyHandler::class, + 'file' => FileHandler::class, + 'memcached' => MemcachedHandler::class, + 'predis' => PredisHandler::class, + 'redis' => RedisHandler::class, + 'wincache' => WincacheHandler::class, + ]; +} diff --git a/app/Config/Constants.php b/app/Config/Constants.php new file mode 100644 index 0000000..47b92f8 --- /dev/null +++ b/app/Config/Constants.php @@ -0,0 +1,94 @@ +` element. + * + * Will default to self if not overridden + * + * @var string|string[]|null + */ + public $baseURI; + + /** + * Lists the URLs for workers and embedded frame contents + * + * @var string|string[] + */ + public $childSrc = 'self'; + + /** + * Limits the origins that you can connect to (via XHR, + * WebSockets, and EventSource). + * + * @var string|string[] + */ + public $connectSrc = 'self'; + + /** + * Specifies the origins that can serve web fonts. + * + * @var string|string[] + */ + public $fontSrc; + + /** + * Lists valid endpoints for submission from `
` tags. + * + * @var string|string[] + */ + public $formAction = 'self'; + + /** + * Specifies the sources that can embed the current page. + * This directive applies to ``, `