This commit is contained in:
		
						commit
						5ec9cbd698
					
				
							
								
								
									
										133
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,133 @@
 | 
				
			|||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# Operating Specific Junk Files
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# OS X
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					.AppleDouble
 | 
				
			||||||
 | 
					.LSOverride
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# OS X Thumbnails
 | 
				
			||||||
 | 
					._*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows image file caches
 | 
				
			||||||
 | 
					Thumbs.db
 | 
				
			||||||
 | 
					ehthumbs.db
 | 
				
			||||||
 | 
					Desktop.ini
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Recycle Bin used on file shares
 | 
				
			||||||
 | 
					$RECYCLE.BIN/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Installer files
 | 
				
			||||||
 | 
					*.cab
 | 
				
			||||||
 | 
					*.msi
 | 
				
			||||||
 | 
					*.msm
 | 
				
			||||||
 | 
					*.msp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows shortcuts
 | 
				
			||||||
 | 
					*.lnk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linux
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# KDE directory preferences
 | 
				
			||||||
 | 
					.directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linux trash folder which might appear on any partition or disk
 | 
				
			||||||
 | 
					.Trash-*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# Environment Files
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# These should never be under version control,
 | 
				
			||||||
 | 
					# as it poses a security risk.
 | 
				
			||||||
 | 
					.env
 | 
				
			||||||
 | 
					.vagrant
 | 
				
			||||||
 | 
					Vagrantfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#------------------------
 | 
				
			||||||
 | 
					# Sqlite database
 | 
				
			||||||
 | 
					#------------------------
 | 
				
			||||||
 | 
					writable/*.sqlite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# Temporary Files
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					writable/cache/*
 | 
				
			||||||
 | 
					!writable/cache/index.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					writable/logs/*
 | 
				
			||||||
 | 
					!writable/logs/index.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					writable/session/*
 | 
				
			||||||
 | 
					!writable/session/index.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					writable/uploads/*
 | 
				
			||||||
 | 
					!writable/uploads/index.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					writable/debugbar/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					php_errors.log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# User Guide Temp Files
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					user_guide_src/build/*
 | 
				
			||||||
 | 
					user_guide_src/cilexer/build/*
 | 
				
			||||||
 | 
					user_guide_src/cilexer/dist/*
 | 
				
			||||||
 | 
					user_guide_src/cilexer/pycilexer.egg-info/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# Test Files
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					tests/coverage*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Don't save phpunit under version control.
 | 
				
			||||||
 | 
					phpunit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# Composer
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					vendor/
 | 
				
			||||||
 | 
					composer.lock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					# IDE / Development Files
 | 
				
			||||||
 | 
					#-------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Modules Testing
 | 
				
			||||||
 | 
					_modules/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# phpenv local config
 | 
				
			||||||
 | 
					.php-version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Jetbrains editors (PHPStorm, etc)
 | 
				
			||||||
 | 
					.idea/
 | 
				
			||||||
 | 
					*.iml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Netbeans
 | 
				
			||||||
 | 
					nbproject/
 | 
				
			||||||
 | 
					build/
 | 
				
			||||||
 | 
					nbbuild/
 | 
				
			||||||
 | 
					dist/
 | 
				
			||||||
 | 
					nbdist/
 | 
				
			||||||
 | 
					nbactions.xml
 | 
				
			||||||
 | 
					nb-configuration.xml
 | 
				
			||||||
 | 
					.nb-gradle/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sublime Text
 | 
				
			||||||
 | 
					*.tmlanguage.cache
 | 
				
			||||||
 | 
					*.tmPreferences.cache
 | 
				
			||||||
 | 
					*.stTheme.cache
 | 
				
			||||||
 | 
					*.sublime-workspace
 | 
				
			||||||
 | 
					*.sublime-project
 | 
				
			||||||
 | 
					.phpintel
 | 
				
			||||||
 | 
					/api/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Visual Studio Code
 | 
				
			||||||
 | 
					.vscode/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/results/
 | 
				
			||||||
 | 
					/phpunit*.xml
 | 
				
			||||||
 | 
					/.phpunit.*.cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					The MIT License (MIT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Copyright (c) 2014-2019 British Columbia Institute of Technology
 | 
				
			||||||
 | 
					Copyright (c) 2019-2022 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.
 | 
				
			||||||
							
								
								
									
										25
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					## What is ci4-example-auth?
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					This is simple example of implementation of Authentication with CodeIgniter 4 framework
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					## Installation & updates
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					git clone https://git.jurisic.org/ijurisic/ci4-example-auth.git
 | 
				
			||||||
 | 
					cd ci4-auth
 | 
				
			||||||
 | 
					composer update
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setup type of database for users (for example sqlite) and Timezone
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					cp env .env
 | 
				
			||||||
 | 
					sed -i "/# database.default.hostname = localhost/i database.default.DBDriver = SQLite3" .env
 | 
				
			||||||
 | 
					sed -i "/database.default.DBDriver = SQLite3/i database.default.database = database.sqlite" .env
 | 
				
			||||||
 | 
					sed -i "/# app.forceGlobalSecureRequests = false/a app.appTimezone = 'Europe/Zagreb'" .env
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Init. of application
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					php spark key:generate
 | 
				
			||||||
 | 
					php spark migrate
 | 
				
			||||||
 | 
					php spark serve
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										6
									
								
								app/.htaccess
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								app/.htaccess
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					<IfModule authz_core_module>
 | 
				
			||||||
 | 
					    Require all denied
 | 
				
			||||||
 | 
					</IfModule>
 | 
				
			||||||
 | 
					<IfModule !authz_core_module>
 | 
				
			||||||
 | 
					    Deny from all
 | 
				
			||||||
 | 
					</IfModule>
 | 
				
			||||||
							
								
								
									
										15
									
								
								app/Common.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								app/Common.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * The goal of this file is to allow developers a location
 | 
				
			||||||
 | 
					 * where they can overwrite core procedural functions and
 | 
				
			||||||
 | 
					 * replace them with their own. This file is loaded during
 | 
				
			||||||
 | 
					 * the bootstrap process and is called during the framework's
 | 
				
			||||||
 | 
					 * execution.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This can be looked at as a `master helper` file that is
 | 
				
			||||||
 | 
					 * loaded early on, and may also contain additional functions
 | 
				
			||||||
 | 
					 * that you'd like to use throughout your entire application
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @see: https://codeigniter4.github.io/CodeIgniter4/
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
							
								
								
									
										466
									
								
								app/Config/App.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										466
									
								
								app/Config/App.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,466 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Session\Handlers\FileHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class App extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Base Site URL
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * URL to your CodeIgniter root. Typically this will be your base URL,
 | 
				
			||||||
 | 
					     * WITH a trailing slash:
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     *    http://example.com/
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If this is not set then CodeIgniter will try guess the protocol, domain
 | 
				
			||||||
 | 
					     * and path to your installation. However, you should always configure this
 | 
				
			||||||
 | 
					     * explicitly and never rely on auto-guessing, especially in production
 | 
				
			||||||
 | 
					     * environments.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $baseURL = 'http://localhost:8080/';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * 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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $indexPage = 'index.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * 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!
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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 $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()
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $appTimezone = 'America/Chicago';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * 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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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`
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $sessionDriver = FileHandler::class;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Session Cookie Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The session cookie name, must contain only [0-9a-z_-] characters
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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!
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $sessionMatchIP = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Session Time to Update
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * How many seconds between CI regenerating the session ID.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $sessionRegenerateDestroy = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Prefix
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Set a cookie name prefix if you need to avoid collisions.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated use Config\Cookie::$prefix property instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $cookiePrefix = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Domain
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Set to `.your-domain.com` for site-wide cookies.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated use Config\Cookie::$domain property instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $cookieDomain = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Path
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Typically will be a forward slash.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated use Config\Cookie::$path property instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $cookiePath = '/';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Secure
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Cookie will only be set if a secure HTTPS connection exists.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated use Config\Cookie::$secure property instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $cookieSecure = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie HttpOnly
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Cookie will only be accessible via HTTP(S) (no JavaScript).
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated use Config\Cookie::$httponly property instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|null
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated use Config\Cookie::$samesite property instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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
 | 
				
			||||||
 | 
					     * HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify
 | 
				
			||||||
 | 
					     * the visitor's IP address.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * You can use both an array or a comma-separated list of proxy addresses,
 | 
				
			||||||
 | 
					     * as well as specifying whole subnets. Here are a few examples:
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Comma-separated:	'10.0.1.200,192.168.5.0/24'
 | 
				
			||||||
 | 
					     * Array: ['10.0.1.200', '192.168.5.0/24']
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $proxyIPs = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Token Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The token name.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated Use `Config\Security` $tokenName property instead of using this property.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CSRFTokenName = 'csrf_test_name';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Header Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The header name.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated Use `Config\Security` $headerName property instead of using this property.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CSRFHeaderName = 'X-CSRF-TOKEN';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Cookie Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The cookie name.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated Use `Config\Security` $cookieName property instead of using this property.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CSRFExpire = 7200;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Regenerate
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Regenerate token on every submission?
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated Use `Config\Security` $regenerate property instead of using this property.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CSRFRegenerate = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Redirect
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Redirect to previous page with error on failure?
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated Use `Config\Security` $redirect property instead of using this property.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CSRFRedirect = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * 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.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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/
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CSPEnabled = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										87
									
								
								app/Config/Autoload.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								app/Config/Autoload.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\AutoloadConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * AUTOLOADER CONFIGURATION
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file defines the namespaces and class maps so the Autoloader
 | 
				
			||||||
 | 
					 * can find the files as needed.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * NOTE: If you use an identical key in $psr4 or $classmap, then
 | 
				
			||||||
 | 
					 * the values in this file will overwrite the framework's values.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Autoload extends AutoloadConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Namespaces
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * This maps the locations of any namespaces in your application to
 | 
				
			||||||
 | 
					     * their location on the file system. These are used by the autoloader
 | 
				
			||||||
 | 
					     * to locate files the first time they have been instantiated.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The '/app' and '/system' directories are already mapped for you.
 | 
				
			||||||
 | 
					     * you may change the name of the 'App' namespace if you wish,
 | 
				
			||||||
 | 
					     * but this should be done prior to creating any namespaced classes,
 | 
				
			||||||
 | 
					     * else you will need to modify all of those classes for this to work.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Prototype:
 | 
				
			||||||
 | 
					     *```
 | 
				
			||||||
 | 
					     *   $psr4 = [
 | 
				
			||||||
 | 
					     *       'CodeIgniter' => SYSTEMPATH,
 | 
				
			||||||
 | 
					     *       'App'	       => APPPATH
 | 
				
			||||||
 | 
					     *   ];
 | 
				
			||||||
 | 
					     *```
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    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<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    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 array<int, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $files = [];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								app/Config/Boot/development.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/Config/Boot/development.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | ERROR DISPLAY
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | In development, we want to show as many errors as possible to help
 | 
				
			||||||
 | 
					 | make sure they don't make it to production. And save us hours of
 | 
				
			||||||
 | 
					 | painful debugging.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					error_reporting(-1);
 | 
				
			||||||
 | 
					ini_set('display_errors', '1');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | DEBUG BACKTRACES
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | If true, this constant will tell the error screens to display debug
 | 
				
			||||||
 | 
					 | backtraces along with the other error information. If you would
 | 
				
			||||||
 | 
					 | prefer to not see this, set this value to false.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('SHOW_DEBUG_BACKTRACE') || define('SHOW_DEBUG_BACKTRACE', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | DEBUG MODE
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Debug mode is an experimental flag that can allow changes throughout
 | 
				
			||||||
 | 
					 | the system. This will control whether Kint is loaded, and a few other
 | 
				
			||||||
 | 
					 | items. It can always be used within your own application too.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('CI_DEBUG') || define('CI_DEBUG', true);
 | 
				
			||||||
							
								
								
									
										21
									
								
								app/Config/Boot/production.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								app/Config/Boot/production.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | ERROR DISPLAY
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Don't show ANY in production environments. Instead, let the system catch
 | 
				
			||||||
 | 
					 | it and display a generic error message.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					ini_set('display_errors', '0');
 | 
				
			||||||
 | 
					error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | DEBUG MODE
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Debug mode is an experimental flag that can allow changes throughout
 | 
				
			||||||
 | 
					 | the system. It's not widely used currently, and may not survive
 | 
				
			||||||
 | 
					 | release of the framework.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('CI_DEBUG') || define('CI_DEBUG', false);
 | 
				
			||||||
							
								
								
									
										32
									
								
								app/Config/Boot/testing.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/Config/Boot/testing.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | ERROR DISPLAY
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | In development, we want to show as many errors as possible to help
 | 
				
			||||||
 | 
					 | make sure they don't make it to production. And save us hours of
 | 
				
			||||||
 | 
					 | painful debugging.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					error_reporting(-1);
 | 
				
			||||||
 | 
					ini_set('display_errors', '1');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | DEBUG BACKTRACES
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | If true, this constant will tell the error screens to display debug
 | 
				
			||||||
 | 
					 | backtraces along with the other error information. If you would
 | 
				
			||||||
 | 
					 | prefer to not see this, set this value to false.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('SHOW_DEBUG_BACKTRACE') || define('SHOW_DEBUG_BACKTRACE', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | DEBUG MODE
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Debug mode is an experimental flag that can allow changes throughout
 | 
				
			||||||
 | 
					 | the system. It's not widely used currently, and may not survive
 | 
				
			||||||
 | 
					 | release of the framework.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('CI_DEBUG') || define('CI_DEBUG', true);
 | 
				
			||||||
							
								
								
									
										22
									
								
								app/Config/CURLRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								app/Config/CURLRequest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CURLRequest extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CURLRequest Share Options
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Whether share options between requests or not.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If true, all the options won't be reset between requests.
 | 
				
			||||||
 | 
					     * It may cause an error request with unnecessary headers.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $shareOptions = true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										181
									
								
								app/Config/Cache.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								app/Config/Cache.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,181 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Cache\Handlers\DummyHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Cache\Handlers\FileHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Cache\Handlers\MemcachedHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Cache\Handlers\PredisHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Cache\Handlers\RedisHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Cache\Handlers\WincacheHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Cache extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Primary Handler
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The name of the preferred handler that should be used. If for some reason
 | 
				
			||||||
 | 
					     * it is not available, the $backupHandler will be used in its place.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $handler = 'file';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Backup Handler
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The name of the handler that will be used in case the first one is
 | 
				
			||||||
 | 
					     * unreachable. Often, 'file' is used here since the filesystem is
 | 
				
			||||||
 | 
					     * always available, though that's not always practical for the app.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $backupHandler = 'dummy';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cache Directory Path
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The path to where cache files should be stored, if using a file-based
 | 
				
			||||||
 | 
					     * system.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated Use the driver-specific variant under $file
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $storePath = WRITEPATH . 'cache/';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cache Include Query String
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Whether to take the URL query string into consideration when generating
 | 
				
			||||||
 | 
					     * output cache files. Valid options are:
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     *    false      = Disabled
 | 
				
			||||||
 | 
					     *    true       = Enabled, take all query parameters into account.
 | 
				
			||||||
 | 
					     *                 Please be aware that this may result in numerous cache
 | 
				
			||||||
 | 
					     *                 files generated for the same page over and over again.
 | 
				
			||||||
 | 
					     *    array('q') = Enabled, but only take into account the specified list
 | 
				
			||||||
 | 
					     *                 of query parameters.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $cacheQueryString = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Key Prefix
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This string is added to all cache item names to help avoid collisions
 | 
				
			||||||
 | 
					     * if you run multiple applications with the same cache engine.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $prefix = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Default TTL
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The default number of seconds to save items when none is specified.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * WARNING: This is not used by framework handlers where 60 seconds is
 | 
				
			||||||
 | 
					     * hard-coded, but may be useful to projects and modules. This will replace
 | 
				
			||||||
 | 
					     * the hard-coded value in a future release.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $ttl = 60;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Reserved Characters
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * A string of reserved characters that will not be allowed in keys or tags.
 | 
				
			||||||
 | 
					     * Strings that violate this restriction will cause handlers to throw.
 | 
				
			||||||
 | 
					     * Default: {}()/\@:
 | 
				
			||||||
 | 
					     * Note: The default set is required for PSR-6 compliance.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $reservedCharacters = '{}()/\@:';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * File settings
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Your file storage preferences can be specified below, if you are using
 | 
				
			||||||
 | 
					     * the File driver.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, int|string|null>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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<string, boolean|int|string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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<string, int|string|null>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $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<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $validHandlers = [
 | 
				
			||||||
 | 
					        'dummy'     => DummyHandler::class,
 | 
				
			||||||
 | 
					        'file'      => FileHandler::class,
 | 
				
			||||||
 | 
					        'memcached' => MemcachedHandler::class,
 | 
				
			||||||
 | 
					        'predis'    => PredisHandler::class,
 | 
				
			||||||
 | 
					        'redis'     => RedisHandler::class,
 | 
				
			||||||
 | 
					        'wincache'  => WincacheHandler::class,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										94
									
								
								app/Config/Constants.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								app/Config/Constants.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,94 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 | --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | App Namespace
 | 
				
			||||||
 | 
					 | --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 | This defines the default Namespace that is used throughout
 | 
				
			||||||
 | 
					 | CodeIgniter to refer to the Application directory. Change
 | 
				
			||||||
 | 
					 | this constant to change the namespace that all application
 | 
				
			||||||
 | 
					 | classes should use.
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 | NOTE: changing this will require manually modifying the
 | 
				
			||||||
 | 
					 | existing namespaces of App\* namespaced-classes.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('APP_NAMESPACE') || define('APP_NAMESPACE', 'App');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 | --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Composer Path
 | 
				
			||||||
 | 
					 | --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 | The path that Composer's autoload file is expected to live. By default,
 | 
				
			||||||
 | 
					 | the vendor folder is in the Root directory, but you can customize that here.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('COMPOSER_PATH') || define('COMPOSER_PATH', ROOTPATH . 'vendor/autoload.php');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Timing Constants
 | 
				
			||||||
 | 
					 |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 | Provide simple ways to work with the myriad of PHP functions that
 | 
				
			||||||
 | 
					 | require information to be in seconds.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('SECOND') || define('SECOND', 1);
 | 
				
			||||||
 | 
					defined('MINUTE') || define('MINUTE', 60);
 | 
				
			||||||
 | 
					defined('HOUR')   || define('HOUR', 3600);
 | 
				
			||||||
 | 
					defined('DAY')    || define('DAY', 86400);
 | 
				
			||||||
 | 
					defined('WEEK')   || define('WEEK', 604800);
 | 
				
			||||||
 | 
					defined('MONTH')  || define('MONTH', 2_592_000);
 | 
				
			||||||
 | 
					defined('YEAR')   || define('YEAR', 31_536_000);
 | 
				
			||||||
 | 
					defined('DECADE') || define('DECADE', 315_360_000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 | --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 | Exit Status Codes
 | 
				
			||||||
 | 
					 | --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 | Used to indicate the conditions under which the script is exit()ing.
 | 
				
			||||||
 | 
					 | While there is no universal standard for error codes, there are some
 | 
				
			||||||
 | 
					 | broad conventions.  Three such conventions are mentioned below, for
 | 
				
			||||||
 | 
					 | those who wish to make use of them.  The CodeIgniter defaults were
 | 
				
			||||||
 | 
					 | chosen for the least overlap with these conventions, while still
 | 
				
			||||||
 | 
					 | leaving room for others to be defined in future versions and user
 | 
				
			||||||
 | 
					 | applications.
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 | The three main conventions used for determining exit status codes
 | 
				
			||||||
 | 
					 | are as follows:
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 |    Standard C/C++ Library (stdlibc):
 | 
				
			||||||
 | 
					 |       http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html
 | 
				
			||||||
 | 
					 |       (This link also contains other GNU-specific conventions)
 | 
				
			||||||
 | 
					 |    BSD sysexits.h:
 | 
				
			||||||
 | 
					 |       http://www.gsp.com/cgi-bin/man.cgi?section=3&topic=sysexits
 | 
				
			||||||
 | 
					 |    Bash scripting:
 | 
				
			||||||
 | 
					 |       http://tldp.org/LDP/abs/html/exitcodes.html
 | 
				
			||||||
 | 
					 |
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('EXIT_SUCCESS')        || define('EXIT_SUCCESS', 0);        // no errors
 | 
				
			||||||
 | 
					defined('EXIT_ERROR')          || define('EXIT_ERROR', 1);          // generic error
 | 
				
			||||||
 | 
					defined('EXIT_CONFIG')         || define('EXIT_CONFIG', 3);         // configuration error
 | 
				
			||||||
 | 
					defined('EXIT_UNKNOWN_FILE')   || define('EXIT_UNKNOWN_FILE', 4);   // file not found
 | 
				
			||||||
 | 
					defined('EXIT_UNKNOWN_CLASS')  || define('EXIT_UNKNOWN_CLASS', 5);  // unknown class
 | 
				
			||||||
 | 
					defined('EXIT_UNKNOWN_METHOD') || define('EXIT_UNKNOWN_METHOD', 6); // unknown class member
 | 
				
			||||||
 | 
					defined('EXIT_USER_INPUT')     || define('EXIT_USER_INPUT', 7);     // invalid user input
 | 
				
			||||||
 | 
					defined('EXIT_DATABASE')       || define('EXIT_DATABASE', 8);       // database error
 | 
				
			||||||
 | 
					defined('EXIT__AUTO_MIN')      || define('EXIT__AUTO_MIN', 9);      // lowest automatically-assigned error code
 | 
				
			||||||
 | 
					defined('EXIT__AUTO_MAX')      || define('EXIT__AUTO_MAX', 125);    // highest automatically-assigned error code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @deprecated Use \CodeIgniter\Events\Events::PRIORITY_LOW instead.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					define('EVENT_PRIORITY_LOW', 200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @deprecated Use \CodeIgniter\Events\Events::PRIORITY_NORMAL instead.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					define('EVENT_PRIORITY_NORMAL', 100);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @deprecated Use \CodeIgniter\Events\Events::PRIORITY_HIGH instead.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					define('EVENT_PRIORITY_HIGH', 10);
 | 
				
			||||||
							
								
								
									
										188
									
								
								app/Config/ContentSecurityPolicy.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								app/Config/ContentSecurityPolicy.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,188 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Stores the default settings for the ContentSecurityPolicy, if you
 | 
				
			||||||
 | 
					 * choose to use it. The values here will be read in and set as defaults
 | 
				
			||||||
 | 
					 * for the site. If needed, they can be overridden on a page-by-page basis.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Suggested reference for explanations:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @see https://www.html5rocks.com/en/tutorials/security/content-security-policy/
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class ContentSecurityPolicy extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // Broadbrush CSP management
 | 
				
			||||||
 | 
					    // -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Default CSP report context
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $reportOnly = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Specifies a URL where a browser will send reports
 | 
				
			||||||
 | 
					     * when a content security policy is violated.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $reportURI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instructs user agents to rewrite URL schemes, changing
 | 
				
			||||||
 | 
					     * HTTP to HTTPS. This directive is for websites with
 | 
				
			||||||
 | 
					     * large numbers of old URLs that need to be rewritten.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $upgradeInsecureRequests = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // Sources allowed
 | 
				
			||||||
 | 
					    // Note: once you set a policy to 'none', it cannot be further restricted
 | 
				
			||||||
 | 
					    // -------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Will default to self if not overridden
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $defaultSrc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Lists allowed scripts' URLs.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $scriptSrc = 'self';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Lists allowed stylesheets' URLs.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $styleSrc = 'self';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Defines the origins from which images can be loaded.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $imageSrc = 'self';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Restricts the URLs that can appear in a page's `<base>` 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 `<form>` tags.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $formAction = 'self';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Specifies the sources that can embed the current page.
 | 
				
			||||||
 | 
					     * This directive applies to `<frame>`, `<iframe>`, `<embed>`,
 | 
				
			||||||
 | 
					     * and `<applet>` tags. This directive can't be used in
 | 
				
			||||||
 | 
					     * `<meta>` tags and applies only to non-HTML resources.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $frameAncestors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The frame-src directive restricts the URLs which may
 | 
				
			||||||
 | 
					     * be loaded into nested browsing contexts.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array|string|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $frameSrc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Restricts the origins allowed to deliver video and audio.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $mediaSrc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Allows control over Flash and other plugins.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $objectSrc = 'self';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var string|string[]|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $manifestSrc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Limits the kinds of plugins a page may invoke.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $pluginTypes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * List of actions allowed.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string|string[]|null
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $sandbox;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Nonce tag for style
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $styleNonceTag = '{csp-style-nonce}';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Nonce tag for script
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $scriptNonceTag = '{csp-script-nonce}';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Replace nonce tag automatically
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $autoNonce = true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										119
									
								
								app/Config/Cookie.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								app/Config/Cookie.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use DateTimeInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Cookie extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Prefix
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Set a cookie name prefix if you need to avoid collisions.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $prefix = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Expires Timestamp
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Default expires timestamp for cookies. Setting this to `0` will mean the
 | 
				
			||||||
 | 
					     * cookie will not have the `Expires` attribute and will behave as a session
 | 
				
			||||||
 | 
					     * cookie.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var DateTimeInterface|int|string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $expires = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Path
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Typically will be a forward slash.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $path = '/';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Domain
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Set to `.your-domain.com` for site-wide cookies.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $domain = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Secure
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Cookie will only be set if a secure HTTPS connection exists.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $secure = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie HTTPOnly
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Cookie will only be accessible via HTTP(S) (no JavaScript).
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $httponly = 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`, `$secure` must also be set.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $samesite = 'Lax';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Cookie Raw
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This flag allows setting a "raw" cookie, i.e., its name and value are
 | 
				
			||||||
 | 
					     * not URL encoded using `rawurlencode()`.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If this is set to `true`, cookie names should be compliant of RFC 2616's
 | 
				
			||||||
 | 
					     * list of allowed characters.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#attributes
 | 
				
			||||||
 | 
					     * @see https://tools.ietf.org/html/rfc2616#section-2.2
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $raw = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										91
									
								
								app/Config/Database.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								app/Config/Database.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Database\Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Database Configuration
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Database extends Config
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The directory that holds the Migrations
 | 
				
			||||||
 | 
					     * and Seeds directories.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $filesPath = APPPATH . 'Database' . DIRECTORY_SEPARATOR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Lets you choose which connection group to
 | 
				
			||||||
 | 
					     * use if no other is specified.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $defaultGroup = 'default';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The default database connection.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $default = [
 | 
				
			||||||
 | 
					        'DSN'      => '',
 | 
				
			||||||
 | 
					        'hostname' => 'localhost',
 | 
				
			||||||
 | 
					        'username' => '',
 | 
				
			||||||
 | 
					        'password' => '',
 | 
				
			||||||
 | 
					        'database' => '',
 | 
				
			||||||
 | 
					        'DBDriver' => 'MySQLi',
 | 
				
			||||||
 | 
					        'DBPrefix' => '',
 | 
				
			||||||
 | 
					        'pConnect' => false,
 | 
				
			||||||
 | 
					        'DBDebug'  => (ENVIRONMENT !== 'production'),
 | 
				
			||||||
 | 
					        'charset'  => 'utf8',
 | 
				
			||||||
 | 
					        'DBCollat' => 'utf8_general_ci',
 | 
				
			||||||
 | 
					        'swapPre'  => '',
 | 
				
			||||||
 | 
					        'encrypt'  => false,
 | 
				
			||||||
 | 
					        'compress' => false,
 | 
				
			||||||
 | 
					        'strictOn' => false,
 | 
				
			||||||
 | 
					        'failover' => [],
 | 
				
			||||||
 | 
					        'port'     => 3306,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This database connection is used when
 | 
				
			||||||
 | 
					     * running PHPUnit database tests.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $tests = [
 | 
				
			||||||
 | 
					        'DSN'         => '',
 | 
				
			||||||
 | 
					        'hostname'    => '127.0.0.1',
 | 
				
			||||||
 | 
					        'username'    => '',
 | 
				
			||||||
 | 
					        'password'    => '',
 | 
				
			||||||
 | 
					        'database'    => ':memory:',
 | 
				
			||||||
 | 
					        'DBDriver'    => 'SQLite3',
 | 
				
			||||||
 | 
					        'DBPrefix'    => 'db_',  // Needed to ensure we're working correctly with prefixes live. DO NOT REMOVE FOR CI DEVS
 | 
				
			||||||
 | 
					        'pConnect'    => false,
 | 
				
			||||||
 | 
					        'DBDebug'     => (ENVIRONMENT !== 'production'),
 | 
				
			||||||
 | 
					        'charset'     => 'utf8',
 | 
				
			||||||
 | 
					        'DBCollat'    => 'utf8_general_ci',
 | 
				
			||||||
 | 
					        'swapPre'     => '',
 | 
				
			||||||
 | 
					        'encrypt'     => false,
 | 
				
			||||||
 | 
					        'compress'    => false,
 | 
				
			||||||
 | 
					        'strictOn'    => false,
 | 
				
			||||||
 | 
					        'failover'    => [],
 | 
				
			||||||
 | 
					        'port'        => 3306,
 | 
				
			||||||
 | 
					        'foreignKeys' => true,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        parent::__construct();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Ensure that we always set the database group to 'tests' if
 | 
				
			||||||
 | 
					        // we are currently running an automated test suite, so that
 | 
				
			||||||
 | 
					        // we don't overwrite live data on accident.
 | 
				
			||||||
 | 
					        if (ENVIRONMENT === 'testing') {
 | 
				
			||||||
 | 
					            $this->defaultGroup = 'tests';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										33
									
								
								app/Config/DocTypes.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								app/Config/DocTypes.php
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DocTypes
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * List of valid document types.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $list = [
 | 
				
			||||||
 | 
					        'xhtml11'           => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
 | 
				
			||||||
 | 
					        'xhtml1-strict'     => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
 | 
				
			||||||
 | 
					        'xhtml1-trans'      => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
 | 
				
			||||||
 | 
					        'xhtml1-frame'      => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
 | 
				
			||||||
 | 
					        'xhtml-basic11'     => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
 | 
				
			||||||
 | 
					        'html5'             => '<!DOCTYPE html>',
 | 
				
			||||||
 | 
					        'html4-strict'      => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',
 | 
				
			||||||
 | 
					        'html4-trans'       => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',
 | 
				
			||||||
 | 
					        'html4-frame'       => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">',
 | 
				
			||||||
 | 
					        'mathml1'           => '<!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">',
 | 
				
			||||||
 | 
					        'mathml2'           => '<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">',
 | 
				
			||||||
 | 
					        'svg10'             => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">',
 | 
				
			||||||
 | 
					        'svg11'             => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">',
 | 
				
			||||||
 | 
					        'svg11-basic'       => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">',
 | 
				
			||||||
 | 
					        'svg11-tiny'        => '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">',
 | 
				
			||||||
 | 
					        'xhtml-math-svg-xh' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
 | 
				
			||||||
 | 
					        'xhtml-math-svg-sh' => '<!DOCTYPE svg:svg PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">',
 | 
				
			||||||
 | 
					        'xhtml-rdfa-1'      => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">',
 | 
				
			||||||
 | 
					        'xhtml-rdfa-2'      => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										170
									
								
								app/Config/Email.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								app/Config/Email.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,170 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Email extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $fromEmail;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $fromName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $recipients;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The "user agent"
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $userAgent = 'CodeIgniter';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The mail sending protocol: mail, sendmail, smtp
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $protocol = 'mail';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The server path to Sendmail.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $mailPath = '/usr/sbin/sendmail';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * SMTP Server Address
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPHost;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * SMTP Username
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPUser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * SMTP Password
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPPass;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * SMTP Port
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPPort = 25;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * SMTP Timeout (in seconds)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPTimeout = 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Enable persistent SMTP connections
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPKeepAlive = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * SMTP Encryption. Either tls or ssl
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $SMTPCrypto = 'tls';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Enable word-wrap
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $wordWrap = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Character count to wrap at
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $wrapChars = 76;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Type of mail, either 'text' or 'html'
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $mailType = 'text';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Character set (utf-8, iso-8859-1, etc.)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $charset = 'UTF-8';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Whether to validate the email address
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $validate = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Email Priority. 1 = highest. 5 = lowest. 3 = normal
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $priority = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Newline character. (Use “\r\n” to comply with RFC 822)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $CRLF = "\r\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Newline character. (Use “\r\n” to comply with RFC 822)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $newline = "\r\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Enable BCC Batch Mode.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $BCCBatchMode = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Number of emails in each BCC batch
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $BCCBatchSize = 200;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Enable notify message from server
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $DSN = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										67
									
								
								app/Config/Encryption.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								app/Config/Encryption.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Encryption configuration.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * These are the settings used for encryption, if you don't pass a parameter
 | 
				
			||||||
 | 
					 * array to the encrypter for creation/initialization.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Encryption extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Encryption Key Starter
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If you use the Encryption class you must set an encryption key (seed).
 | 
				
			||||||
 | 
					     * You need to ensure it is long enough for the cipher and mode you plan to use.
 | 
				
			||||||
 | 
					     * See the user guide for more info.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $key = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Encryption Driver to Use
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * One of the supported encryption drivers.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Available drivers:
 | 
				
			||||||
 | 
					     * - OpenSSL
 | 
				
			||||||
 | 
					     * - Sodium
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $driver = 'OpenSSL';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * SodiumHandler's Padding Length in Bytes
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This is the number of bytes that will be padded to the plaintext message
 | 
				
			||||||
 | 
					     * before it is encrypted. This value should be greater than zero.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * See the user guide for more information on padding.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $blockSize = 16;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Encryption digest
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * HMAC digest to use, e.g. 'SHA512' or 'SHA256'. Default value is 'SHA512'.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $digest = 'SHA512';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										48
									
								
								app/Config/Events.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								app/Config/Events.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Events\Events;
 | 
				
			||||||
 | 
					use CodeIgniter\Exceptions\FrameworkException;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Application Events
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Events allow you to tap into the execution of the program without
 | 
				
			||||||
 | 
					 * modifying or extending core files. This file provides a central
 | 
				
			||||||
 | 
					 * location to define your events, though they can always be added
 | 
				
			||||||
 | 
					 * at run-time, also, if needed.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You create code that can execute by subscribing to events with
 | 
				
			||||||
 | 
					 * the 'on()' method. This accepts any form of callable, including
 | 
				
			||||||
 | 
					 * Closures, that will be executed when the event is triggered.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Example:
 | 
				
			||||||
 | 
					 *      Events::on('create', [$myInstance, 'myMethod']);
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Events::on('pre_system', static function () {
 | 
				
			||||||
 | 
					    if (ENVIRONMENT !== 'testing') {
 | 
				
			||||||
 | 
					        if (ini_get('zlib.output_compression')) {
 | 
				
			||||||
 | 
					            throw FrameworkException::forEnabledZlibOutputCompression();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while (ob_get_level() > 0) {
 | 
				
			||||||
 | 
					            ob_end_flush();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ob_start(static fn ($buffer) => $buffer);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Debug Toolbar Listeners.
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * If you delete, they will no longer be collected.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    if (CI_DEBUG && ! is_cli()) {
 | 
				
			||||||
 | 
					        Events::on('DBQuery', 'CodeIgniter\Debug\Toolbar\Collectors\Database::collect');
 | 
				
			||||||
 | 
					        Services::toolbar()->respond();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										60
									
								
								app/Config/Exceptions.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								app/Config/Exceptions.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Setup how the exception handler works.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Exceptions extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * LOG EXCEPTIONS?
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * If true, then exceptions will be logged
 | 
				
			||||||
 | 
					     * through Services::Log.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Default: true
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $log = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * DO NOT LOG STATUS CODES
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Any status codes here will NOT be logged if logging is turned on.
 | 
				
			||||||
 | 
					     * By default, only 404 (Page Not Found) exceptions are ignored.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $ignoreCodes = [404];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Error Views Path
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * This is the path to the directory that contains the 'cli' and 'html'
 | 
				
			||||||
 | 
					     * directories that hold the views used to generate errors.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Default: APPPATH.'Views/errors'
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $errorViewPath = APPPATH . 'Views/errors';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * HIDE FROM DEBUG TRACE
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Any data that you would like to hide from the debug trace.
 | 
				
			||||||
 | 
					     * In order to specify 2 levels, use "/" to separate.
 | 
				
			||||||
 | 
					     * ex. ['server', 'setup/password', 'secret_token']
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $sensitiveDataInTrace = [];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								app/Config/Feature.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/Config/Feature.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Enable/disable backward compatibility breaking features.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Feature extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Enable multiple filters for a route or not.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If you enable this:
 | 
				
			||||||
 | 
					     *   - CodeIgniter\CodeIgniter::handleRequest() uses:
 | 
				
			||||||
 | 
					     *     - CodeIgniter\Filters\Filters::enableFilters(), instead of enableFilter()
 | 
				
			||||||
 | 
					     *   - CodeIgniter\CodeIgniter::tryToRouteIt() uses:
 | 
				
			||||||
 | 
					     *     - CodeIgniter\Router\Router::getFilters(), instead of getFilter()
 | 
				
			||||||
 | 
					     *   - CodeIgniter\Router\Router::handle() uses:
 | 
				
			||||||
 | 
					     *     - property $filtersInfo, instead of $filterInfo
 | 
				
			||||||
 | 
					     *     - CodeIgniter\Router\RouteCollection::getFiltersForRoute(), instead of getFilterForRoute()
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $multipleFilters = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Use improved new auto routing instead of the default legacy version.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public bool $autoRoutesImproved = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										73
									
								
								app/Config/Filters.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								app/Config/Filters.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Filters\CSRF;
 | 
				
			||||||
 | 
					use CodeIgniter\Filters\DebugToolbar;
 | 
				
			||||||
 | 
					use CodeIgniter\Filters\Honeypot;
 | 
				
			||||||
 | 
					use CodeIgniter\Filters\InvalidChars;
 | 
				
			||||||
 | 
					use CodeIgniter\Filters\SecureHeaders;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Filters extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Configures aliases for Filter classes to
 | 
				
			||||||
 | 
					     * make reading things nicer and simpler.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $aliases = [
 | 
				
			||||||
 | 
					        'csrf'          => CSRF::class,
 | 
				
			||||||
 | 
					        'toolbar'       => DebugToolbar::class,
 | 
				
			||||||
 | 
					        'honeypot'      => Honeypot::class,
 | 
				
			||||||
 | 
					        'invalidchars'  => InvalidChars::class,
 | 
				
			||||||
 | 
					        'secureheaders' => SecureHeaders::class,
 | 
				
			||||||
 | 
					        'authGuard' => \App\Filters\AuthGuard::class,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * List of filter aliases that are always
 | 
				
			||||||
 | 
					     * applied before and after every request.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $globals = [
 | 
				
			||||||
 | 
					        'before' => [
 | 
				
			||||||
 | 
					            // 'honeypot',
 | 
				
			||||||
 | 
					            // 'csrf',
 | 
				
			||||||
 | 
					            // 'invalidchars',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'after' => [
 | 
				
			||||||
 | 
					            'toolbar',
 | 
				
			||||||
 | 
					            // 'honeypot',
 | 
				
			||||||
 | 
					            // 'secureheaders',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * List of filter aliases that works on a
 | 
				
			||||||
 | 
					     * particular HTTP method (GET, POST, etc.).
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Example:
 | 
				
			||||||
 | 
					     * 'post' => ['foo', 'bar']
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If you use this, you should disable auto-routing because auto-routing
 | 
				
			||||||
 | 
					     * permits any HTTP method to access a controller. Accessing the controller
 | 
				
			||||||
 | 
					     * with a method you don’t expect could bypass the filter.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $methods = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * List of filter aliases that should run on any
 | 
				
			||||||
 | 
					     * before or after URI patterns.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Example:
 | 
				
			||||||
 | 
					     * 'isLoggedIn' => ['before' => ['account/*', 'profiles/*']]
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $filters = [];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								app/Config/ForeignCharacters.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								app/Config/ForeignCharacters.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\ForeignCharacters as BaseForeignCharacters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ForeignCharacters extends BaseForeignCharacters
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										77
									
								
								app/Config/Format.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								app/Config/Format.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Format\FormatterInterface;
 | 
				
			||||||
 | 
					use CodeIgniter\Format\JSONFormatter;
 | 
				
			||||||
 | 
					use CodeIgniter\Format\XMLFormatter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Format extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Available Response Formats
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * When you perform content negotiation with the request, these are the
 | 
				
			||||||
 | 
					     * available formats that your application supports. This is currently
 | 
				
			||||||
 | 
					     * only used with the API\ResponseTrait. A valid Formatter must exist
 | 
				
			||||||
 | 
					     * for the specified format.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * These formats are only checked when the data passed to the respond()
 | 
				
			||||||
 | 
					     * method is an array.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $supportedResponseFormats = [
 | 
				
			||||||
 | 
					        'application/json',
 | 
				
			||||||
 | 
					        'application/xml', // machine-readable XML
 | 
				
			||||||
 | 
					        'text/xml', // human-readable XML
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Formatters
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Lists the class to use to format responses with of a particular type.
 | 
				
			||||||
 | 
					     * For each mime type, list the class that should be used. Formatters
 | 
				
			||||||
 | 
					     * can be retrieved through the getFormatter() method.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $formatters = [
 | 
				
			||||||
 | 
					        'application/json' => JSONFormatter::class,
 | 
				
			||||||
 | 
					        'application/xml'  => XMLFormatter::class,
 | 
				
			||||||
 | 
					        'text/xml'         => XMLFormatter::class,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Formatters Options
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Additional Options to adjust default formatters behaviour.
 | 
				
			||||||
 | 
					     * For each mime type, list the additional options that should be used.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, int>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $formatterOptions = [
 | 
				
			||||||
 | 
					        'application/json' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,
 | 
				
			||||||
 | 
					        'application/xml'  => 0,
 | 
				
			||||||
 | 
					        'text/xml'         => 0,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * A Factory method to return the appropriate formatter for the given mime type.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return FormatterInterface
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated This is an alias of `\CodeIgniter\Format\Format::getFormatter`. Use that instead.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function getFormatter(string $mime)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return Services::format()->getFormatter($mime);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										40
									
								
								app/Config/Generators.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								app/Config/Generators.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Generators extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Generator Commands' Views
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This array defines the mapping of generator commands to the view files
 | 
				
			||||||
 | 
					     * they are using. If you need to customize them for your own, copy these
 | 
				
			||||||
 | 
					     * view files in your own folder and indicate the location here.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * You will notice that the views have special placeholders enclosed in
 | 
				
			||||||
 | 
					     * curly braces `{...}`. These placeholders are used internally by the
 | 
				
			||||||
 | 
					     * generator commands in processing replacements, thus you are warned
 | 
				
			||||||
 | 
					     * not to delete them or modify the names. If you will do so, you may
 | 
				
			||||||
 | 
					     * end up disrupting the scaffolding process and throw errors.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * YOU HAVE BEEN WARNED!
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $views = [
 | 
				
			||||||
 | 
					        'make:command'      => 'CodeIgniter\Commands\Generators\Views\command.tpl.php',
 | 
				
			||||||
 | 
					        'make:config'       => 'CodeIgniter\Commands\Generators\Views\config.tpl.php',
 | 
				
			||||||
 | 
					        'make:controller'   => 'CodeIgniter\Commands\Generators\Views\controller.tpl.php',
 | 
				
			||||||
 | 
					        'make:entity'       => 'CodeIgniter\Commands\Generators\Views\entity.tpl.php',
 | 
				
			||||||
 | 
					        'make:filter'       => 'CodeIgniter\Commands\Generators\Views\filter.tpl.php',
 | 
				
			||||||
 | 
					        'make:migration'    => 'CodeIgniter\Commands\Generators\Views\migration.tpl.php',
 | 
				
			||||||
 | 
					        'make:model'        => 'CodeIgniter\Commands\Generators\Views\model.tpl.php',
 | 
				
			||||||
 | 
					        'make:seeder'       => 'CodeIgniter\Commands\Generators\Views\seeder.tpl.php',
 | 
				
			||||||
 | 
					        'make:validation'   => 'CodeIgniter\Commands\Generators\Views\validation.tpl.php',
 | 
				
			||||||
 | 
					        'session:migration' => 'CodeIgniter\Commands\Generators\Views\migration.tpl.php',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										43
									
								
								app/Config/Honeypot.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								app/Config/Honeypot.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Honeypot extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Makes Honeypot visible or not to human
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $hidden = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Honeypot Label Content
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $label = 'Fill This Field';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Honeypot Field Name
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $name = 'honeypot';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Honeypot HTML Template
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $template = '<label>{label}</label><input type="text" name="{name}" value=""/>';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Honeypot container
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $container = '<div style="display:none">{template}</div>';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										35
									
								
								app/Config/Images.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								app/Config/Images.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Images\Handlers\GDHandler;
 | 
				
			||||||
 | 
					use CodeIgniter\Images\Handlers\ImageMagickHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Images extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Default handler used if no other handler is specified.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $defaultHandler = 'gd';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The path to the image library.
 | 
				
			||||||
 | 
					     * Required for ImageMagick, GraphicsMagick, or NetPBM.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $libraryPath = '/usr/local/bin/convert';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * The available handler classes.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $handlers = [
 | 
				
			||||||
 | 
					        'gd'      => GDHandler::class,
 | 
				
			||||||
 | 
					        'imagick' => ImageMagickHandler::class,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										51
									
								
								app/Config/Kint.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								app/Config/Kint.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use Kint\Renderer\Renderer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Kint
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * We use Kint's `RichRenderer` and `CLIRenderer`. This area contains options
 | 
				
			||||||
 | 
					 * that you can set to customize how Kint works for you.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @see https://kint-php.github.io/kint/ for details on these settings.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Kint extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    | Global Settings
 | 
				
			||||||
 | 
					    |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public $plugins;
 | 
				
			||||||
 | 
					    public $maxDepth          = 6;
 | 
				
			||||||
 | 
					    public $displayCalledFrom = true;
 | 
				
			||||||
 | 
					    public $expanded          = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    | RichRenderer Settings
 | 
				
			||||||
 | 
					    |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    public $richTheme  = 'aante-light.css';
 | 
				
			||||||
 | 
					    public $richFolder = false;
 | 
				
			||||||
 | 
					    public $richSort   = Renderer::SORT_FULL;
 | 
				
			||||||
 | 
					    public $richObjectPlugins;
 | 
				
			||||||
 | 
					    public $richTabPlugins;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					    |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    | CLI Settings
 | 
				
			||||||
 | 
					    |--------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					    public $cliColors      = true;
 | 
				
			||||||
 | 
					    public $cliForceUTF8   = false;
 | 
				
			||||||
 | 
					    public $cliDetectWidth = true;
 | 
				
			||||||
 | 
					    public $cliMinWidth    = 40;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										154
									
								
								app/Config/Logger.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								app/Config/Logger.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,154 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Log\Handlers\FileHandler;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Logger extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Error Logging Threshold
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * You can enable error logging by setting a threshold over zero. The
 | 
				
			||||||
 | 
					     * threshold determines what gets logged. Any values below or equal to the
 | 
				
			||||||
 | 
					     * threshold will be logged.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Threshold options are:
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * - 0 = Disables logging, Error logging TURNED OFF
 | 
				
			||||||
 | 
					     * - 1 = Emergency Messages - System is unusable
 | 
				
			||||||
 | 
					     * - 2 = Alert Messages - Action Must Be Taken Immediately
 | 
				
			||||||
 | 
					     * - 3 = Critical Messages - Application component unavailable, unexpected exception.
 | 
				
			||||||
 | 
					     * - 4 = Runtime Errors - Don't need immediate action, but should be monitored.
 | 
				
			||||||
 | 
					     * - 5 = Warnings - Exceptional occurrences that are not errors.
 | 
				
			||||||
 | 
					     * - 6 = Notices - Normal but significant events.
 | 
				
			||||||
 | 
					     * - 7 = Info - Interesting events, like user logging in, etc.
 | 
				
			||||||
 | 
					     * - 8 = Debug - Detailed debug information.
 | 
				
			||||||
 | 
					     * - 9 = All Messages
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * You can also pass an array with threshold levels to show individual error types
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     *     array(1, 2, 3, 8) = Emergency, Alert, Critical, and Debug messages
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * For a live site you'll usually enable Critical or higher (3) to be logged otherwise
 | 
				
			||||||
 | 
					     * your log files will fill up very fast.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array|int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $threshold = 4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Date Format for Logs
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Each item that is logged has an associated date. You can use PHP date
 | 
				
			||||||
 | 
					     * codes to set your own date formatting
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $dateFormat = 'Y-m-d H:i:s';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Log Handlers
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The logging system supports multiple actions to be taken when something
 | 
				
			||||||
 | 
					     * is logged. This is done by allowing for multiple Handlers, special classes
 | 
				
			||||||
 | 
					     * designed to write the log to their chosen destinations, whether that is
 | 
				
			||||||
 | 
					     * a file on the server, a cloud-based service, or even taking actions such
 | 
				
			||||||
 | 
					     * as emailing the dev team.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Each handler is defined by the class name used for that handler, and it
 | 
				
			||||||
 | 
					     * MUST implement the `CodeIgniter\Log\Handlers\HandlerInterface` interface.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The value of each key is an array of configuration items that are sent
 | 
				
			||||||
 | 
					     * to the constructor of each handler. The only required configuration item
 | 
				
			||||||
 | 
					     * is the 'handles' element, which must be an array of integer log levels.
 | 
				
			||||||
 | 
					     * This is most easily handled by using the constants defined in the
 | 
				
			||||||
 | 
					     * `Psr\Log\LogLevel` class.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Handlers are executed in the order defined in this array, starting with
 | 
				
			||||||
 | 
					     * the handler on top and continuing down.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $handlers = [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					         * File Handler
 | 
				
			||||||
 | 
					         * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        FileHandler::class => [
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // The log levels that this handler will handle.
 | 
				
			||||||
 | 
					            'handles' => [
 | 
				
			||||||
 | 
					                'critical',
 | 
				
			||||||
 | 
					                'alert',
 | 
				
			||||||
 | 
					                'emergency',
 | 
				
			||||||
 | 
					                'debug',
 | 
				
			||||||
 | 
					                'error',
 | 
				
			||||||
 | 
					                'info',
 | 
				
			||||||
 | 
					                'notice',
 | 
				
			||||||
 | 
					                'warning',
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * The default filename extension for log files.
 | 
				
			||||||
 | 
					             * An extension of 'php' allows for protecting the log files via basic
 | 
				
			||||||
 | 
					             * scripting, when they are to be stored under a publicly accessible directory.
 | 
				
			||||||
 | 
					             *
 | 
				
			||||||
 | 
					             * Note: Leaving it blank will default to 'log'.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            'fileExtension' => '',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * The file system permissions to be applied on newly created log files.
 | 
				
			||||||
 | 
					             *
 | 
				
			||||||
 | 
					             * IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal
 | 
				
			||||||
 | 
					             * integer notation (i.e. 0700, 0644, etc.)
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            'filePermissions' => 0644,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /*
 | 
				
			||||||
 | 
					             * Logging Directory Path
 | 
				
			||||||
 | 
					             *
 | 
				
			||||||
 | 
					             * By default, logs are written to WRITEPATH . 'logs/'
 | 
				
			||||||
 | 
					             * Specify a different destination here, if desired.
 | 
				
			||||||
 | 
					             */
 | 
				
			||||||
 | 
					            'path' => '',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * The ChromeLoggerHandler requires the use of the Chrome web browser
 | 
				
			||||||
 | 
					         * and the ChromeLogger extension. Uncomment this block to use it.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        // 'CodeIgniter\Log\Handlers\ChromeLoggerHandler' => [
 | 
				
			||||||
 | 
					        //     /*
 | 
				
			||||||
 | 
					        //      * The log levels that this handler will handle.
 | 
				
			||||||
 | 
					        //      */
 | 
				
			||||||
 | 
					        //     'handles' => ['critical', 'alert', 'emergency', 'debug',
 | 
				
			||||||
 | 
					        //                   'error', 'info', 'notice', 'warning'],
 | 
				
			||||||
 | 
					        // ],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * The ErrorlogHandler writes the logs to PHP's native `error_log()` function.
 | 
				
			||||||
 | 
					         * Uncomment this block to use it.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        // 'CodeIgniter\Log\Handlers\ErrorlogHandler' => [
 | 
				
			||||||
 | 
					        // 		/* The log levels this handler can handle. */
 | 
				
			||||||
 | 
					        // 		'handles' => ['critical', 'alert', 'emergency', 'debug', 'error', 'info', 'notice', 'warning'],
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					        // 		/*
 | 
				
			||||||
 | 
					        // 		 * The message type where the error should go. Can be 0 or 4, or use the
 | 
				
			||||||
 | 
					        // 		 * class constants: `ErrorlogHandler::TYPE_OS` (0) or `ErrorlogHandler::TYPE_SAPI` (4)
 | 
				
			||||||
 | 
					        // 		 */
 | 
				
			||||||
 | 
					        // 		'messageType' => 0,
 | 
				
			||||||
 | 
					        // ],
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										55
									
								
								app/Config/Migrations.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								app/Config/Migrations.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Migrations extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Enable/Disable Migrations
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Migrations are enabled by default.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * You should enable migrations whenever you intend to do a schema migration
 | 
				
			||||||
 | 
					     * and disable it back when you're done.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $enabled = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Migrations Table
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This is the name of the table that will store the current migrations state.
 | 
				
			||||||
 | 
					     * When migrations runs it will store in a database table which migration
 | 
				
			||||||
 | 
					     * level the system is at. It then compares the migration level in this
 | 
				
			||||||
 | 
					     * table to the $config['migration_version'] if they are not the same it
 | 
				
			||||||
 | 
					     * will migrate up. This must be set.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $table = 'migrations';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Timestamp Format
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This is the format that will be used when creating new migrations
 | 
				
			||||||
 | 
					     * using the CLI command:
 | 
				
			||||||
 | 
					     *   > php spark migrate:create
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Typical formats:
 | 
				
			||||||
 | 
					     * - YmdHis_
 | 
				
			||||||
 | 
					     * - Y-m-d-His_
 | 
				
			||||||
 | 
					     * - Y_m_d_His_
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $timestampFormat = 'Y-m-d-His_';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										532
									
								
								app/Config/Mimes.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										532
									
								
								app/Config/Mimes.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,532 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Mimes
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file contains an array of mime types.  It is used by the
 | 
				
			||||||
 | 
					 * Upload class to help identify allowed file types.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * When more than one variation for an extension exist (like jpg, jpeg, etc)
 | 
				
			||||||
 | 
					 * the most common one should be first in the array to aid the guess*
 | 
				
			||||||
 | 
					 * methods. The same applies when more than one mime-type exists for a
 | 
				
			||||||
 | 
					 * single extension.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * When working with mime types, please make sure you have the ´fileinfo´
 | 
				
			||||||
 | 
					 * extension enabled to reliably detect the media types.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Mimes
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Map of extensions to mime types.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static $mimes = [
 | 
				
			||||||
 | 
					        'hqx' => [
 | 
				
			||||||
 | 
					            'application/mac-binhex40',
 | 
				
			||||||
 | 
					            'application/mac-binhex',
 | 
				
			||||||
 | 
					            'application/x-binhex40',
 | 
				
			||||||
 | 
					            'application/x-mac-binhex40',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'cpt' => 'application/mac-compactpro',
 | 
				
			||||||
 | 
					        'csv' => [
 | 
				
			||||||
 | 
					            'text/csv',
 | 
				
			||||||
 | 
					            'text/x-comma-separated-values',
 | 
				
			||||||
 | 
					            'text/comma-separated-values',
 | 
				
			||||||
 | 
					            'application/vnd.ms-excel',
 | 
				
			||||||
 | 
					            'application/x-csv',
 | 
				
			||||||
 | 
					            'text/x-csv',
 | 
				
			||||||
 | 
					            'application/csv',
 | 
				
			||||||
 | 
					            'application/excel',
 | 
				
			||||||
 | 
					            'application/vnd.msexcel',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'bin' => [
 | 
				
			||||||
 | 
					            'application/macbinary',
 | 
				
			||||||
 | 
					            'application/mac-binary',
 | 
				
			||||||
 | 
					            'application/octet-stream',
 | 
				
			||||||
 | 
					            'application/x-binary',
 | 
				
			||||||
 | 
					            'application/x-macbinary',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'dms' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'lha' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'lzh' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'exe' => [
 | 
				
			||||||
 | 
					            'application/octet-stream',
 | 
				
			||||||
 | 
					            'application/x-msdownload',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'class' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'psd'   => [
 | 
				
			||||||
 | 
					            'application/x-photoshop',
 | 
				
			||||||
 | 
					            'image/vnd.adobe.photoshop',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'so'  => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'sea' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'dll' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'oda' => 'application/oda',
 | 
				
			||||||
 | 
					        'pdf' => [
 | 
				
			||||||
 | 
					            'application/pdf',
 | 
				
			||||||
 | 
					            'application/force-download',
 | 
				
			||||||
 | 
					            'application/x-download',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'ai' => [
 | 
				
			||||||
 | 
					            'application/pdf',
 | 
				
			||||||
 | 
					            'application/postscript',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'eps'  => 'application/postscript',
 | 
				
			||||||
 | 
					        'ps'   => 'application/postscript',
 | 
				
			||||||
 | 
					        'smi'  => 'application/smil',
 | 
				
			||||||
 | 
					        'smil' => 'application/smil',
 | 
				
			||||||
 | 
					        'mif'  => 'application/vnd.mif',
 | 
				
			||||||
 | 
					        'xls'  => [
 | 
				
			||||||
 | 
					            'application/vnd.ms-excel',
 | 
				
			||||||
 | 
					            'application/msexcel',
 | 
				
			||||||
 | 
					            'application/x-msexcel',
 | 
				
			||||||
 | 
					            'application/x-ms-excel',
 | 
				
			||||||
 | 
					            'application/x-excel',
 | 
				
			||||||
 | 
					            'application/x-dos_ms_excel',
 | 
				
			||||||
 | 
					            'application/xls',
 | 
				
			||||||
 | 
					            'application/x-xls',
 | 
				
			||||||
 | 
					            'application/excel',
 | 
				
			||||||
 | 
					            'application/download',
 | 
				
			||||||
 | 
					            'application/vnd.ms-office',
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'ppt' => [
 | 
				
			||||||
 | 
					            'application/vnd.ms-powerpoint',
 | 
				
			||||||
 | 
					            'application/powerpoint',
 | 
				
			||||||
 | 
					            'application/vnd.ms-office',
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'pptx' => [
 | 
				
			||||||
 | 
					            'application/vnd.openxmlformats-officedocument.presentationml.presentation',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'wbxml' => 'application/wbxml',
 | 
				
			||||||
 | 
					        'wmlc'  => 'application/wmlc',
 | 
				
			||||||
 | 
					        'dcr'   => 'application/x-director',
 | 
				
			||||||
 | 
					        'dir'   => 'application/x-director',
 | 
				
			||||||
 | 
					        'dxr'   => 'application/x-director',
 | 
				
			||||||
 | 
					        'dvi'   => 'application/x-dvi',
 | 
				
			||||||
 | 
					        'gtar'  => 'application/x-gtar',
 | 
				
			||||||
 | 
					        'gz'    => 'application/x-gzip',
 | 
				
			||||||
 | 
					        'gzip'  => 'application/x-gzip',
 | 
				
			||||||
 | 
					        'php'   => [
 | 
				
			||||||
 | 
					            'application/x-php',
 | 
				
			||||||
 | 
					            'application/x-httpd-php',
 | 
				
			||||||
 | 
					            'application/php',
 | 
				
			||||||
 | 
					            'text/php',
 | 
				
			||||||
 | 
					            'text/x-php',
 | 
				
			||||||
 | 
					            'application/x-httpd-php-source',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'php4'  => 'application/x-httpd-php',
 | 
				
			||||||
 | 
					        'php3'  => 'application/x-httpd-php',
 | 
				
			||||||
 | 
					        'phtml' => 'application/x-httpd-php',
 | 
				
			||||||
 | 
					        'phps'  => 'application/x-httpd-php-source',
 | 
				
			||||||
 | 
					        'js'    => [
 | 
				
			||||||
 | 
					            'application/x-javascript',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'swf' => 'application/x-shockwave-flash',
 | 
				
			||||||
 | 
					        'sit' => 'application/x-stuffit',
 | 
				
			||||||
 | 
					        'tar' => 'application/x-tar',
 | 
				
			||||||
 | 
					        'tgz' => [
 | 
				
			||||||
 | 
					            'application/x-tar',
 | 
				
			||||||
 | 
					            'application/x-gzip-compressed',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'z'     => 'application/x-compress',
 | 
				
			||||||
 | 
					        'xhtml' => 'application/xhtml+xml',
 | 
				
			||||||
 | 
					        'xht'   => 'application/xhtml+xml',
 | 
				
			||||||
 | 
					        'zip'   => [
 | 
				
			||||||
 | 
					            'application/x-zip',
 | 
				
			||||||
 | 
					            'application/zip',
 | 
				
			||||||
 | 
					            'application/x-zip-compressed',
 | 
				
			||||||
 | 
					            'application/s-compressed',
 | 
				
			||||||
 | 
					            'multipart/x-zip',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'rar' => [
 | 
				
			||||||
 | 
					            'application/vnd.rar',
 | 
				
			||||||
 | 
					            'application/x-rar',
 | 
				
			||||||
 | 
					            'application/rar',
 | 
				
			||||||
 | 
					            'application/x-rar-compressed',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'mid'  => 'audio/midi',
 | 
				
			||||||
 | 
					        'midi' => 'audio/midi',
 | 
				
			||||||
 | 
					        'mpga' => 'audio/mpeg',
 | 
				
			||||||
 | 
					        'mp2'  => 'audio/mpeg',
 | 
				
			||||||
 | 
					        'mp3'  => [
 | 
				
			||||||
 | 
					            'audio/mpeg',
 | 
				
			||||||
 | 
					            'audio/mpg',
 | 
				
			||||||
 | 
					            'audio/mpeg3',
 | 
				
			||||||
 | 
					            'audio/mp3',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'aif' => [
 | 
				
			||||||
 | 
					            'audio/x-aiff',
 | 
				
			||||||
 | 
					            'audio/aiff',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'aiff' => [
 | 
				
			||||||
 | 
					            'audio/x-aiff',
 | 
				
			||||||
 | 
					            'audio/aiff',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'aifc' => 'audio/x-aiff',
 | 
				
			||||||
 | 
					        'ram'  => 'audio/x-pn-realaudio',
 | 
				
			||||||
 | 
					        'rm'   => 'audio/x-pn-realaudio',
 | 
				
			||||||
 | 
					        'rpm'  => 'audio/x-pn-realaudio-plugin',
 | 
				
			||||||
 | 
					        'ra'   => 'audio/x-realaudio',
 | 
				
			||||||
 | 
					        'rv'   => 'video/vnd.rn-realvideo',
 | 
				
			||||||
 | 
					        'wav'  => [
 | 
				
			||||||
 | 
					            'audio/x-wav',
 | 
				
			||||||
 | 
					            'audio/wave',
 | 
				
			||||||
 | 
					            'audio/wav',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'bmp' => [
 | 
				
			||||||
 | 
					            'image/bmp',
 | 
				
			||||||
 | 
					            'image/x-bmp',
 | 
				
			||||||
 | 
					            'image/x-bitmap',
 | 
				
			||||||
 | 
					            'image/x-xbitmap',
 | 
				
			||||||
 | 
					            'image/x-win-bitmap',
 | 
				
			||||||
 | 
					            'image/x-windows-bmp',
 | 
				
			||||||
 | 
					            'image/ms-bmp',
 | 
				
			||||||
 | 
					            'image/x-ms-bmp',
 | 
				
			||||||
 | 
					            'application/bmp',
 | 
				
			||||||
 | 
					            'application/x-bmp',
 | 
				
			||||||
 | 
					            'application/x-win-bitmap',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'gif' => 'image/gif',
 | 
				
			||||||
 | 
					        'jpg' => [
 | 
				
			||||||
 | 
					            'image/jpeg',
 | 
				
			||||||
 | 
					            'image/pjpeg',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jpeg' => [
 | 
				
			||||||
 | 
					            'image/jpeg',
 | 
				
			||||||
 | 
					            'image/pjpeg',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jpe' => [
 | 
				
			||||||
 | 
					            'image/jpeg',
 | 
				
			||||||
 | 
					            'image/pjpeg',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jp2' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'j2k' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jpf' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jpg2' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jpx' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jpm' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'mj2' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'mjp2' => [
 | 
				
			||||||
 | 
					            'image/jp2',
 | 
				
			||||||
 | 
					            'video/mj2',
 | 
				
			||||||
 | 
					            'image/jpx',
 | 
				
			||||||
 | 
					            'image/jpm',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'png' => [
 | 
				
			||||||
 | 
					            'image/png',
 | 
				
			||||||
 | 
					            'image/x-png',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'webp' => 'image/webp',
 | 
				
			||||||
 | 
					        'tif'  => 'image/tiff',
 | 
				
			||||||
 | 
					        'tiff' => 'image/tiff',
 | 
				
			||||||
 | 
					        'css'  => [
 | 
				
			||||||
 | 
					            'text/css',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'html' => [
 | 
				
			||||||
 | 
					            'text/html',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'htm' => [
 | 
				
			||||||
 | 
					            'text/html',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'shtml' => [
 | 
				
			||||||
 | 
					            'text/html',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'txt'  => 'text/plain',
 | 
				
			||||||
 | 
					        'text' => 'text/plain',
 | 
				
			||||||
 | 
					        'log'  => [
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					            'text/x-log',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'rtx' => 'text/richtext',
 | 
				
			||||||
 | 
					        'rtf' => 'text/rtf',
 | 
				
			||||||
 | 
					        'xml' => [
 | 
				
			||||||
 | 
					            'application/xml',
 | 
				
			||||||
 | 
					            'text/xml',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'xsl' => [
 | 
				
			||||||
 | 
					            'application/xml',
 | 
				
			||||||
 | 
					            'text/xsl',
 | 
				
			||||||
 | 
					            'text/xml',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'mpeg' => 'video/mpeg',
 | 
				
			||||||
 | 
					        'mpg'  => 'video/mpeg',
 | 
				
			||||||
 | 
					        'mpe'  => 'video/mpeg',
 | 
				
			||||||
 | 
					        'qt'   => 'video/quicktime',
 | 
				
			||||||
 | 
					        'mov'  => 'video/quicktime',
 | 
				
			||||||
 | 
					        'avi'  => [
 | 
				
			||||||
 | 
					            'video/x-msvideo',
 | 
				
			||||||
 | 
					            'video/msvideo',
 | 
				
			||||||
 | 
					            'video/avi',
 | 
				
			||||||
 | 
					            'application/x-troff-msvideo',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'movie' => 'video/x-sgi-movie',
 | 
				
			||||||
 | 
					        'doc'   => [
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					            'application/vnd.ms-office',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'docx' => [
 | 
				
			||||||
 | 
					            'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 | 
				
			||||||
 | 
					            'application/zip',
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					            'application/x-zip',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'dot' => [
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					            'application/vnd.ms-office',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'dotx' => [
 | 
				
			||||||
 | 
					            'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
 | 
				
			||||||
 | 
					            'application/zip',
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'xlsx' => [
 | 
				
			||||||
 | 
					            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
 | 
				
			||||||
 | 
					            'application/zip',
 | 
				
			||||||
 | 
					            'application/vnd.ms-excel',
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					            'application/x-zip',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
 | 
				
			||||||
 | 
					        'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',
 | 
				
			||||||
 | 
					        'word' => [
 | 
				
			||||||
 | 
					            'application/msword',
 | 
				
			||||||
 | 
					            'application/octet-stream',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'xl'   => 'application/excel',
 | 
				
			||||||
 | 
					        'eml'  => 'message/rfc822',
 | 
				
			||||||
 | 
					        'json' => [
 | 
				
			||||||
 | 
					            'application/json',
 | 
				
			||||||
 | 
					            'text/json',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'pem' => [
 | 
				
			||||||
 | 
					            'application/x-x509-user-cert',
 | 
				
			||||||
 | 
					            'application/x-pem-file',
 | 
				
			||||||
 | 
					            'application/octet-stream',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'p10' => [
 | 
				
			||||||
 | 
					            'application/x-pkcs10',
 | 
				
			||||||
 | 
					            'application/pkcs10',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'p12' => 'application/x-pkcs12',
 | 
				
			||||||
 | 
					        'p7a' => 'application/x-pkcs7-signature',
 | 
				
			||||||
 | 
					        'p7c' => [
 | 
				
			||||||
 | 
					            'application/pkcs7-mime',
 | 
				
			||||||
 | 
					            'application/x-pkcs7-mime',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'p7m' => [
 | 
				
			||||||
 | 
					            'application/pkcs7-mime',
 | 
				
			||||||
 | 
					            'application/x-pkcs7-mime',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'p7r' => 'application/x-pkcs7-certreqresp',
 | 
				
			||||||
 | 
					        'p7s' => 'application/pkcs7-signature',
 | 
				
			||||||
 | 
					        'crt' => [
 | 
				
			||||||
 | 
					            'application/x-x509-ca-cert',
 | 
				
			||||||
 | 
					            'application/x-x509-user-cert',
 | 
				
			||||||
 | 
					            'application/pkix-cert',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'crl' => [
 | 
				
			||||||
 | 
					            'application/pkix-crl',
 | 
				
			||||||
 | 
					            'application/pkcs-crl',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'der' => 'application/x-x509-ca-cert',
 | 
				
			||||||
 | 
					        'kdb' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'pgp' => 'application/pgp',
 | 
				
			||||||
 | 
					        'gpg' => 'application/gpg-keys',
 | 
				
			||||||
 | 
					        'sst' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'csr' => 'application/octet-stream',
 | 
				
			||||||
 | 
					        'rsa' => 'application/x-pkcs7',
 | 
				
			||||||
 | 
					        'cer' => [
 | 
				
			||||||
 | 
					            'application/pkix-cert',
 | 
				
			||||||
 | 
					            'application/x-x509-ca-cert',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        '3g2' => 'video/3gpp2',
 | 
				
			||||||
 | 
					        '3gp' => [
 | 
				
			||||||
 | 
					            'video/3gp',
 | 
				
			||||||
 | 
					            'video/3gpp',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'mp4' => 'video/mp4',
 | 
				
			||||||
 | 
					        'm4a' => 'audio/x-m4a',
 | 
				
			||||||
 | 
					        'f4v' => [
 | 
				
			||||||
 | 
					            'video/mp4',
 | 
				
			||||||
 | 
					            'video/x-f4v',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'flv'  => 'video/x-flv',
 | 
				
			||||||
 | 
					        'webm' => 'video/webm',
 | 
				
			||||||
 | 
					        'aac'  => 'audio/x-acc',
 | 
				
			||||||
 | 
					        'm4u'  => 'application/vnd.mpegurl',
 | 
				
			||||||
 | 
					        'm3u'  => 'text/plain',
 | 
				
			||||||
 | 
					        'xspf' => 'application/xspf+xml',
 | 
				
			||||||
 | 
					        'vlc'  => 'application/videolan',
 | 
				
			||||||
 | 
					        'wmv'  => [
 | 
				
			||||||
 | 
					            'video/x-ms-wmv',
 | 
				
			||||||
 | 
					            'video/x-ms-asf',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'au'   => 'audio/x-au',
 | 
				
			||||||
 | 
					        'ac3'  => 'audio/ac3',
 | 
				
			||||||
 | 
					        'flac' => 'audio/x-flac',
 | 
				
			||||||
 | 
					        'ogg'  => [
 | 
				
			||||||
 | 
					            'audio/ogg',
 | 
				
			||||||
 | 
					            'video/ogg',
 | 
				
			||||||
 | 
					            'application/ogg',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'kmz' => [
 | 
				
			||||||
 | 
					            'application/vnd.google-earth.kmz',
 | 
				
			||||||
 | 
					            'application/zip',
 | 
				
			||||||
 | 
					            'application/x-zip',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'kml' => [
 | 
				
			||||||
 | 
					            'application/vnd.google-earth.kml+xml',
 | 
				
			||||||
 | 
					            'application/xml',
 | 
				
			||||||
 | 
					            'text/xml',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'ics'  => 'text/calendar',
 | 
				
			||||||
 | 
					        'ical' => 'text/calendar',
 | 
				
			||||||
 | 
					        'zsh'  => 'text/x-scriptzsh',
 | 
				
			||||||
 | 
					        '7zip' => [
 | 
				
			||||||
 | 
					            'application/x-compressed',
 | 
				
			||||||
 | 
					            'application/x-zip-compressed',
 | 
				
			||||||
 | 
					            'application/zip',
 | 
				
			||||||
 | 
					            'multipart/x-zip',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'cdr' => [
 | 
				
			||||||
 | 
					            'application/cdr',
 | 
				
			||||||
 | 
					            'application/coreldraw',
 | 
				
			||||||
 | 
					            'application/x-cdr',
 | 
				
			||||||
 | 
					            'application/x-coreldraw',
 | 
				
			||||||
 | 
					            'image/cdr',
 | 
				
			||||||
 | 
					            'image/x-cdr',
 | 
				
			||||||
 | 
					            'zz-application/zz-winassoc-cdr',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'wma' => [
 | 
				
			||||||
 | 
					            'audio/x-ms-wma',
 | 
				
			||||||
 | 
					            'video/x-ms-asf',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'jar' => [
 | 
				
			||||||
 | 
					            'application/java-archive',
 | 
				
			||||||
 | 
					            'application/x-java-application',
 | 
				
			||||||
 | 
					            'application/x-jar',
 | 
				
			||||||
 | 
					            'application/x-compressed',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'svg' => [
 | 
				
			||||||
 | 
					            'image/svg+xml',
 | 
				
			||||||
 | 
					            'image/svg',
 | 
				
			||||||
 | 
					            'application/xml',
 | 
				
			||||||
 | 
					            'text/xml',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'vcf' => 'text/x-vcard',
 | 
				
			||||||
 | 
					        'srt' => [
 | 
				
			||||||
 | 
					            'text/srt',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'vtt' => [
 | 
				
			||||||
 | 
					            'text/vtt',
 | 
				
			||||||
 | 
					            'text/plain',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'ico' => [
 | 
				
			||||||
 | 
					            'image/x-icon',
 | 
				
			||||||
 | 
					            'image/x-ico',
 | 
				
			||||||
 | 
					            'image/vnd.microsoft.icon',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        'stl' => [
 | 
				
			||||||
 | 
					            'application/sla',
 | 
				
			||||||
 | 
					            'application/vnd.ms-pki.stl',
 | 
				
			||||||
 | 
					            'application/x-navistyle',
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Attempts to determine the best mime type for the given file extension.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return string|null The mime type found, or none if unable to determine.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function guessTypeFromExtension(string $extension)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $extension = trim(strtolower($extension), '. ');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (! array_key_exists($extension, static::$mimes)) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return is_array(static::$mimes[$extension]) ? static::$mimes[$extension][0] : static::$mimes[$extension];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Attempts to determine the best file extension for a given mime type.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string|null $proposedExtension - default extension (in case there is more than one with the same mime type)
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return string|null The extension determined, or null if unable to match.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static function guessExtensionFromType(string $type, ?string $proposedExtension = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $type = trim(strtolower($type), '. ');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $proposedExtension = trim(strtolower($proposedExtension ?? ''));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (
 | 
				
			||||||
 | 
					            $proposedExtension !== ''
 | 
				
			||||||
 | 
					            && array_key_exists($proposedExtension, static::$mimes)
 | 
				
			||||||
 | 
					            && in_array($type, (array) static::$mimes[$proposedExtension], true)
 | 
				
			||||||
 | 
					        ) {
 | 
				
			||||||
 | 
					            // The detected mime type matches with the proposed extension.
 | 
				
			||||||
 | 
					            return $proposedExtension;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Reverse check the mime type list if no extension was proposed.
 | 
				
			||||||
 | 
					        // This search is order sensitive!
 | 
				
			||||||
 | 
					        foreach (static::$mimes as $ext => $types) {
 | 
				
			||||||
 | 
					            if (in_array($type, (array) $types, true)) {
 | 
				
			||||||
 | 
					                return $ext;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										53
									
								
								app/Config/Modules.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								app/Config/Modules.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Modules\Modules as BaseModules;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Modules extends BaseModules
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Enable Auto-Discovery?
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If true, then auto-discovery will happen across all elements listed in
 | 
				
			||||||
 | 
					     * $aliases below. If false, no auto-discovery will happen at all,
 | 
				
			||||||
 | 
					     * giving a slight performance boost.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $enabled = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Enable Auto-Discovery Within Composer Packages?
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If true, then auto-discovery will happen across all namespaces loaded
 | 
				
			||||||
 | 
					     * by Composer, as well as the namespaces configured locally.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $discoverInComposer = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Auto-Discovery Rules
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Aliases list of all discovery classes that will be active and used during
 | 
				
			||||||
 | 
					     * the current application request.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If it is not listed, only the base application elements will be used.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $aliases = [
 | 
				
			||||||
 | 
					        'events',
 | 
				
			||||||
 | 
					        'filters',
 | 
				
			||||||
 | 
					        'registrars',
 | 
				
			||||||
 | 
					        'routes',
 | 
				
			||||||
 | 
					        'services',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										39
									
								
								app/Config/Pager.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								app/Config/Pager.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Pager extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Templates
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Pagination links are rendered out using views to configure their
 | 
				
			||||||
 | 
					     * appearance. This array contains aliases and the view names to
 | 
				
			||||||
 | 
					     * use when rendering the links.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Within each view, the Pager object will be available as $pager,
 | 
				
			||||||
 | 
					     * and the desired group as $pagerGroup;
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $templates = [
 | 
				
			||||||
 | 
					        'default_full'   => 'CodeIgniter\Pager\Views\default_full',
 | 
				
			||||||
 | 
					        'default_simple' => 'CodeIgniter\Pager\Views\default_simple',
 | 
				
			||||||
 | 
					        'default_head'   => 'CodeIgniter\Pager\Views\default_head',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Items Per Page
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The default number of results shown in a single page.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $perPage = 20;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										85
									
								
								app/Config/Paths.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								app/Config/Paths.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Paths
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Holds the paths that are used by the system to
 | 
				
			||||||
 | 
					 * locate the main directories, app, system, etc.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Modifying these allows you to restructure your application,
 | 
				
			||||||
 | 
					 * share a system folder between multiple applications, and more.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * All paths are relative to the project's root folder.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Paths
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     * SYSTEM FOLDER NAME
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This must contain the name of your "system" folder. Include
 | 
				
			||||||
 | 
					     * the path if the folder is not in the same directory as this file.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $systemDirectory = __DIR__ . '/../../vendor/codeigniter4/framework/system';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     * APPLICATION FOLDER NAME
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If you want this front controller to use a different "app"
 | 
				
			||||||
 | 
					     * folder than the default one you can set its name here. The folder
 | 
				
			||||||
 | 
					     * can also be renamed or relocated anywhere on your server. If
 | 
				
			||||||
 | 
					     * you do, use a full server path.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @see http://codeigniter.com/user_guide/general/managing_apps.html
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $appDirectory = __DIR__ . '/..';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     * WRITABLE DIRECTORY NAME
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This variable must contain the name of your "writable" directory.
 | 
				
			||||||
 | 
					     * The writable directory allows you to group all directories that
 | 
				
			||||||
 | 
					     * need write permission to a single place that can be tucked away
 | 
				
			||||||
 | 
					     * for maximum security, keeping it out of the app and/or
 | 
				
			||||||
 | 
					     * system directories.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $writableDirectory = __DIR__ . '/../../writable';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     * TESTS DIRECTORY NAME
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This variable must contain the name of your "tests" directory.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $testsDirectory = __DIR__ . '/../../tests';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     * VIEW DIRECTORY NAME
 | 
				
			||||||
 | 
					     * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * This variable must contain the name of the directory that
 | 
				
			||||||
 | 
					     * contains the view files used by your application. By
 | 
				
			||||||
 | 
					     * default this is in `app/Views`. This value
 | 
				
			||||||
 | 
					     * is used when no value is provided to `Services::renderer()`.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $viewDirectory = __DIR__ . '/../Views';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								app/Config/Publisher.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								app/Config/Publisher.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\Publisher as BasePublisher;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Publisher Configuration
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Defines basic security restrictions for the Publisher class
 | 
				
			||||||
 | 
					 * to prevent abuse by injecting malicious files into a project.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Publisher extends BasePublisher
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * A list of allowed destinations with a (pseudo-)regex
 | 
				
			||||||
 | 
					     * of allowed files for each destination.
 | 
				
			||||||
 | 
					     * Attempts to publish to directories not in this list will
 | 
				
			||||||
 | 
					     * result in a PublisherException. Files that do no fit the
 | 
				
			||||||
 | 
					     * pattern will cause copy/merge to fail.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string,string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $restrictions = [
 | 
				
			||||||
 | 
					        ROOTPATH => '*',
 | 
				
			||||||
 | 
					        FCPATH   => '#\.(s?css|js|map|html?|xml|json|webmanifest|ttf|eot|woff2?|gif|jpe?g|tiff?|png|webp|bmp|ico|svg)$#i',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										67
									
								
								app/Config/Routes.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								app/Config/Routes.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Create a new instance of our RouteCollection class.
 | 
				
			||||||
 | 
					$routes = Services::routes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Load the system's routing file first, so that the app and ENVIRONMENT
 | 
				
			||||||
 | 
					// can override as needed.
 | 
				
			||||||
 | 
					if (is_file(SYSTEMPATH . 'Config/Routes.php')) {
 | 
				
			||||||
 | 
					    require SYSTEMPATH . 'Config/Routes.php';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Router Setup
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					$routes->setDefaultNamespace('App\Controllers');
 | 
				
			||||||
 | 
					$routes->setDefaultController('Home');
 | 
				
			||||||
 | 
					$routes->setDefaultMethod('index');
 | 
				
			||||||
 | 
					$routes->setTranslateURIDashes(false);
 | 
				
			||||||
 | 
					$routes->set404Override();
 | 
				
			||||||
 | 
					// The Auto Routing (Legacy) is very dangerous. It is easy to create vulnerable apps
 | 
				
			||||||
 | 
					// where controller filters or CSRF protection are bypassed.
 | 
				
			||||||
 | 
					// If you don't want to define all routes, please use the Auto Routing (Improved).
 | 
				
			||||||
 | 
					// Set `$autoRoutesImproved` to true in `app/Config/Feature.php` and set the following to true.
 | 
				
			||||||
 | 
					// $routes->setAutoRoute(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Route Definitions
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We get a performance increase by specifying the default
 | 
				
			||||||
 | 
					// route since we don't have to scan directories.
 | 
				
			||||||
 | 
					$routes->get('/', 'Home::index');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Authentication Routes
 | 
				
			||||||
 | 
					$routes->get('/login', 'Auth\\LoginController::showLoginForm');
 | 
				
			||||||
 | 
					$routes->post('/login', 'Auth\\LoginController::login');
 | 
				
			||||||
 | 
					$routes->post('/logout', 'Auth\\LoginController::logout');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Registration Routes
 | 
				
			||||||
 | 
					$routes->get('/register', 'Auth\\RegisterController::showRegistrationForm');
 | 
				
			||||||
 | 
					$routes->post('/register', 'Auth\\RegisterController::register');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Routes for authorized users
 | 
				
			||||||
 | 
					$routes->get('/profile', 'Auth\\ProfileController::index',['filter' => 'authGuard']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Additional Routing
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * There will often be times that you need additional routing and you
 | 
				
			||||||
 | 
					 * need it to be able to override any defaults in this file. Environment
 | 
				
			||||||
 | 
					 * based routes is one such time. require() additional route files here
 | 
				
			||||||
 | 
					 * to make that happen.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You will have access to the $routes object within that file without
 | 
				
			||||||
 | 
					 * needing to reload it.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					if (is_file(APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php')) {
 | 
				
			||||||
 | 
					    require APPPATH . 'Config/' . ENVIRONMENT . '/Routes.php';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										117
									
								
								app/Config/Security.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								app/Config/Security.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,117 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Security extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Protection Method
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Protection Method for Cross Site Request Forgery protection.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string 'cookie' or 'session'
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $csrfProtection = 'cookie';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Token Randomization
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Randomize the CSRF Token for added security.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $tokenRandomize = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Token Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Token name for Cross Site Request Forgery protection.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $tokenName = 'csrf_test_name';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Header Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Header name for Cross Site Request Forgery protection.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $headerName = 'X-CSRF-TOKEN';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Cookie Name
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Cookie name for Cross Site Request Forgery protection.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $cookieName = 'csrf_cookie_name';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Expires
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Expiration time for Cross Site Request Forgery protection cookie.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Defaults to two hours (in seconds).
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $expires = 7200;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Regenerate
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Regenerate CSRF Token on every submission.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $regenerate = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * CSRF Redirect
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Redirect to previous page with error on failure.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $redirect = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * 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
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @deprecated `Config\Cookie` $samesite property is used.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $samesite = 'Lax';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										32
									
								
								app/Config/Services.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								app/Config/Services.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Services Configuration file.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Services are simply other classes/libraries that the system uses
 | 
				
			||||||
 | 
					 * to do its job. This is used by CodeIgniter to allow the core of the
 | 
				
			||||||
 | 
					 * framework to be swapped out easily without affecting the usage within
 | 
				
			||||||
 | 
					 * the rest of your application.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file holds any application-specific services, or service overrides
 | 
				
			||||||
 | 
					 * that you might need. An example has been included with the general
 | 
				
			||||||
 | 
					 * method format you should use for your service methods. For more examples,
 | 
				
			||||||
 | 
					 * see the core Services file at system/Config/Services.php.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Services extends BaseService
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /*
 | 
				
			||||||
 | 
					     * public static function example($getShared = true)
 | 
				
			||||||
 | 
					     * {
 | 
				
			||||||
 | 
					     *     if ($getShared) {
 | 
				
			||||||
 | 
					     *         return static::getSharedInstance('example');
 | 
				
			||||||
 | 
					     *     }
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     *     return new \CodeIgniter\Example();
 | 
				
			||||||
 | 
					     * }
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										99
									
								
								app/Config/Toolbar.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								app/Config/Toolbar.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Database;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Events;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Files;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Logs;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Routes;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Timers;
 | 
				
			||||||
 | 
					use CodeIgniter\Debug\Toolbar\Collectors\Views;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Debug Toolbar
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The Debug Toolbar provides a way to see information about the performance
 | 
				
			||||||
 | 
					 * and state of your application during that page display. By default it will
 | 
				
			||||||
 | 
					 * NOT be displayed under production environments, and will only display if
 | 
				
			||||||
 | 
					 * `CI_DEBUG` is true, since if it's not, there's not much to display anyway.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class Toolbar extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Toolbar Collectors
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * List of toolbar collectors that will be called when Debug Toolbar
 | 
				
			||||||
 | 
					     * fires up and collects data from.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $collectors = [
 | 
				
			||||||
 | 
					        Timers::class,
 | 
				
			||||||
 | 
					        Database::class,
 | 
				
			||||||
 | 
					        Logs::class,
 | 
				
			||||||
 | 
					        Views::class,
 | 
				
			||||||
 | 
					        // \CodeIgniter\Debug\Toolbar\Collectors\Cache::class,
 | 
				
			||||||
 | 
					        Files::class,
 | 
				
			||||||
 | 
					        Routes::class,
 | 
				
			||||||
 | 
					        Events::class,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Collect Var Data
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If set to false var data from the views will not be colleted. Usefull to
 | 
				
			||||||
 | 
					     * avoid high memory usage when there are lots of data passed to the view.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $collectVarData = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Max History
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * `$maxHistory` sets a limit on the number of past requests that are stored,
 | 
				
			||||||
 | 
					     * helping to conserve file space used to store them. You can set it to
 | 
				
			||||||
 | 
					     * 0 (zero) to not have any history stored, or -1 for unlimited history.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $maxHistory = 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Toolbar Views Path
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The full path to the the views that are used by the toolbar.
 | 
				
			||||||
 | 
					     * This MUST have a trailing slash.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $viewsPath = SYSTEMPATH . 'Debug/Toolbar/Views/';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Max Queries
 | 
				
			||||||
 | 
					     * --------------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * If the Database Collector is enabled, it will log every query that the
 | 
				
			||||||
 | 
					     * the system generates so they can be displayed on the toolbar's timeline
 | 
				
			||||||
 | 
					     * and in the query log. This can lead to memory issues in some instances
 | 
				
			||||||
 | 
					     * with hundreds of queries.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * `$maxQueries` defines the maximum amount of queries that will be stored.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var int
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $maxQueries = 100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										252
									
								
								app/Config/UserAgents.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								app/Config/UserAgents.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,252 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * User Agents
 | 
				
			||||||
 | 
					 * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This file contains four arrays of user agent data. It is used by the
 | 
				
			||||||
 | 
					 * User Agent Class to help identify browser, platform, robot, and
 | 
				
			||||||
 | 
					 * mobile device data. The array keys are used to identify the device
 | 
				
			||||||
 | 
					 * and the array values are used to set the actual name of the item.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class UserAgents extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * OS Platforms
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $platforms = [
 | 
				
			||||||
 | 
					        'windows nt 10.0' => 'Windows 10',
 | 
				
			||||||
 | 
					        'windows nt 6.3'  => 'Windows 8.1',
 | 
				
			||||||
 | 
					        'windows nt 6.2'  => 'Windows 8',
 | 
				
			||||||
 | 
					        'windows nt 6.1'  => 'Windows 7',
 | 
				
			||||||
 | 
					        'windows nt 6.0'  => 'Windows Vista',
 | 
				
			||||||
 | 
					        'windows nt 5.2'  => 'Windows 2003',
 | 
				
			||||||
 | 
					        'windows nt 5.1'  => 'Windows XP',
 | 
				
			||||||
 | 
					        'windows nt 5.0'  => 'Windows 2000',
 | 
				
			||||||
 | 
					        'windows nt 4.0'  => 'Windows NT 4.0',
 | 
				
			||||||
 | 
					        'winnt4.0'        => 'Windows NT 4.0',
 | 
				
			||||||
 | 
					        'winnt 4.0'       => 'Windows NT',
 | 
				
			||||||
 | 
					        'winnt'           => 'Windows NT',
 | 
				
			||||||
 | 
					        'windows 98'      => 'Windows 98',
 | 
				
			||||||
 | 
					        'win98'           => 'Windows 98',
 | 
				
			||||||
 | 
					        'windows 95'      => 'Windows 95',
 | 
				
			||||||
 | 
					        'win95'           => 'Windows 95',
 | 
				
			||||||
 | 
					        'windows phone'   => 'Windows Phone',
 | 
				
			||||||
 | 
					        'windows'         => 'Unknown Windows OS',
 | 
				
			||||||
 | 
					        'android'         => 'Android',
 | 
				
			||||||
 | 
					        'blackberry'      => 'BlackBerry',
 | 
				
			||||||
 | 
					        'iphone'          => 'iOS',
 | 
				
			||||||
 | 
					        'ipad'            => 'iOS',
 | 
				
			||||||
 | 
					        'ipod'            => 'iOS',
 | 
				
			||||||
 | 
					        'os x'            => 'Mac OS X',
 | 
				
			||||||
 | 
					        'ppc mac'         => 'Power PC Mac',
 | 
				
			||||||
 | 
					        'freebsd'         => 'FreeBSD',
 | 
				
			||||||
 | 
					        'ppc'             => 'Macintosh',
 | 
				
			||||||
 | 
					        'linux'           => 'Linux',
 | 
				
			||||||
 | 
					        'debian'          => 'Debian',
 | 
				
			||||||
 | 
					        'sunos'           => 'Sun Solaris',
 | 
				
			||||||
 | 
					        'beos'            => 'BeOS',
 | 
				
			||||||
 | 
					        'apachebench'     => 'ApacheBench',
 | 
				
			||||||
 | 
					        'aix'             => 'AIX',
 | 
				
			||||||
 | 
					        'irix'            => 'Irix',
 | 
				
			||||||
 | 
					        'osf'             => 'DEC OSF',
 | 
				
			||||||
 | 
					        'hp-ux'           => 'HP-UX',
 | 
				
			||||||
 | 
					        'netbsd'          => 'NetBSD',
 | 
				
			||||||
 | 
					        'bsdi'            => 'BSDi',
 | 
				
			||||||
 | 
					        'openbsd'         => 'OpenBSD',
 | 
				
			||||||
 | 
					        'gnu'             => 'GNU/Linux',
 | 
				
			||||||
 | 
					        'unix'            => 'Unknown Unix OS',
 | 
				
			||||||
 | 
					        'symbian'         => 'Symbian OS',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Browsers
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * The order of this array should NOT be changed. Many browsers return
 | 
				
			||||||
 | 
					     * multiple browser types so we want to identify the subtype first.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $browsers = [
 | 
				
			||||||
 | 
					        'OPR'    => 'Opera',
 | 
				
			||||||
 | 
					        'Flock'  => 'Flock',
 | 
				
			||||||
 | 
					        'Edge'   => 'Spartan',
 | 
				
			||||||
 | 
					        'Edg'    => 'Edge',
 | 
				
			||||||
 | 
					        'Chrome' => 'Chrome',
 | 
				
			||||||
 | 
					        // Opera 10+ always reports Opera/9.80 and appends Version/<real version> to the user agent string
 | 
				
			||||||
 | 
					        'Opera.*?Version'   => 'Opera',
 | 
				
			||||||
 | 
					        'Opera'             => 'Opera',
 | 
				
			||||||
 | 
					        'MSIE'              => 'Internet Explorer',
 | 
				
			||||||
 | 
					        'Internet Explorer' => 'Internet Explorer',
 | 
				
			||||||
 | 
					        'Trident.* rv'      => 'Internet Explorer',
 | 
				
			||||||
 | 
					        'Shiira'            => 'Shiira',
 | 
				
			||||||
 | 
					        'Firefox'           => 'Firefox',
 | 
				
			||||||
 | 
					        'Chimera'           => 'Chimera',
 | 
				
			||||||
 | 
					        'Phoenix'           => 'Phoenix',
 | 
				
			||||||
 | 
					        'Firebird'          => 'Firebird',
 | 
				
			||||||
 | 
					        'Camino'            => 'Camino',
 | 
				
			||||||
 | 
					        'Netscape'          => 'Netscape',
 | 
				
			||||||
 | 
					        'OmniWeb'           => 'OmniWeb',
 | 
				
			||||||
 | 
					        'Safari'            => 'Safari',
 | 
				
			||||||
 | 
					        'Mozilla'           => 'Mozilla',
 | 
				
			||||||
 | 
					        'Konqueror'         => 'Konqueror',
 | 
				
			||||||
 | 
					        'icab'              => 'iCab',
 | 
				
			||||||
 | 
					        'Lynx'              => 'Lynx',
 | 
				
			||||||
 | 
					        'Links'             => 'Links',
 | 
				
			||||||
 | 
					        'hotjava'           => 'HotJava',
 | 
				
			||||||
 | 
					        'amaya'             => 'Amaya',
 | 
				
			||||||
 | 
					        'IBrowse'           => 'IBrowse',
 | 
				
			||||||
 | 
					        'Maxthon'           => 'Maxthon',
 | 
				
			||||||
 | 
					        'Ubuntu'            => 'Ubuntu Web Browser',
 | 
				
			||||||
 | 
					        'Vivaldi'           => 'Vivaldi',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Mobiles
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $mobiles = [
 | 
				
			||||||
 | 
					        // legacy array, old values commented out
 | 
				
			||||||
 | 
					        'mobileexplorer' => 'Mobile Explorer',
 | 
				
			||||||
 | 
					        // 'openwave'             => 'Open Wave',
 | 
				
			||||||
 | 
					        // 'opera mini'           => 'Opera Mini',
 | 
				
			||||||
 | 
					        // 'operamini'            => 'Opera Mini',
 | 
				
			||||||
 | 
					        // 'elaine'               => 'Palm',
 | 
				
			||||||
 | 
					        'palmsource' => 'Palm',
 | 
				
			||||||
 | 
					        // 'digital paths'        => 'Palm',
 | 
				
			||||||
 | 
					        // 'avantgo'              => 'Avantgo',
 | 
				
			||||||
 | 
					        // 'xiino'                => 'Xiino',
 | 
				
			||||||
 | 
					        'palmscape' => 'Palmscape',
 | 
				
			||||||
 | 
					        // 'nokia'                => 'Nokia',
 | 
				
			||||||
 | 
					        // 'ericsson'             => 'Ericsson',
 | 
				
			||||||
 | 
					        // 'blackberry'           => 'BlackBerry',
 | 
				
			||||||
 | 
					        // 'motorola'             => 'Motorola'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Phones and Manufacturers
 | 
				
			||||||
 | 
					        'motorola'             => 'Motorola',
 | 
				
			||||||
 | 
					        'nokia'                => 'Nokia',
 | 
				
			||||||
 | 
					        'palm'                 => 'Palm',
 | 
				
			||||||
 | 
					        'iphone'               => 'Apple iPhone',
 | 
				
			||||||
 | 
					        'ipad'                 => 'iPad',
 | 
				
			||||||
 | 
					        'ipod'                 => 'Apple iPod Touch',
 | 
				
			||||||
 | 
					        'sony'                 => 'Sony Ericsson',
 | 
				
			||||||
 | 
					        'ericsson'             => 'Sony Ericsson',
 | 
				
			||||||
 | 
					        'blackberry'           => 'BlackBerry',
 | 
				
			||||||
 | 
					        'cocoon'               => 'O2 Cocoon',
 | 
				
			||||||
 | 
					        'blazer'               => 'Treo',
 | 
				
			||||||
 | 
					        'lg'                   => 'LG',
 | 
				
			||||||
 | 
					        'amoi'                 => 'Amoi',
 | 
				
			||||||
 | 
					        'xda'                  => 'XDA',
 | 
				
			||||||
 | 
					        'mda'                  => 'MDA',
 | 
				
			||||||
 | 
					        'vario'                => 'Vario',
 | 
				
			||||||
 | 
					        'htc'                  => 'HTC',
 | 
				
			||||||
 | 
					        'samsung'              => 'Samsung',
 | 
				
			||||||
 | 
					        'sharp'                => 'Sharp',
 | 
				
			||||||
 | 
					        'sie-'                 => 'Siemens',
 | 
				
			||||||
 | 
					        'alcatel'              => 'Alcatel',
 | 
				
			||||||
 | 
					        'benq'                 => 'BenQ',
 | 
				
			||||||
 | 
					        'ipaq'                 => 'HP iPaq',
 | 
				
			||||||
 | 
					        'mot-'                 => 'Motorola',
 | 
				
			||||||
 | 
					        'playstation portable' => 'PlayStation Portable',
 | 
				
			||||||
 | 
					        'playstation 3'        => 'PlayStation 3',
 | 
				
			||||||
 | 
					        'playstation vita'     => 'PlayStation Vita',
 | 
				
			||||||
 | 
					        'hiptop'               => 'Danger Hiptop',
 | 
				
			||||||
 | 
					        'nec-'                 => 'NEC',
 | 
				
			||||||
 | 
					        'panasonic'            => 'Panasonic',
 | 
				
			||||||
 | 
					        'philips'              => 'Philips',
 | 
				
			||||||
 | 
					        'sagem'                => 'Sagem',
 | 
				
			||||||
 | 
					        'sanyo'                => 'Sanyo',
 | 
				
			||||||
 | 
					        'spv'                  => 'SPV',
 | 
				
			||||||
 | 
					        'zte'                  => 'ZTE',
 | 
				
			||||||
 | 
					        'sendo'                => 'Sendo',
 | 
				
			||||||
 | 
					        'nintendo dsi'         => 'Nintendo DSi',
 | 
				
			||||||
 | 
					        'nintendo ds'          => 'Nintendo DS',
 | 
				
			||||||
 | 
					        'nintendo 3ds'         => 'Nintendo 3DS',
 | 
				
			||||||
 | 
					        'wii'                  => 'Nintendo Wii',
 | 
				
			||||||
 | 
					        'open web'             => 'Open Web',
 | 
				
			||||||
 | 
					        'openweb'              => 'OpenWeb',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Operating Systems
 | 
				
			||||||
 | 
					        'android'    => 'Android',
 | 
				
			||||||
 | 
					        'symbian'    => 'Symbian',
 | 
				
			||||||
 | 
					        'SymbianOS'  => 'SymbianOS',
 | 
				
			||||||
 | 
					        'elaine'     => 'Palm',
 | 
				
			||||||
 | 
					        'series60'   => 'Symbian S60',
 | 
				
			||||||
 | 
					        'windows ce' => 'Windows CE',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Browsers
 | 
				
			||||||
 | 
					        'obigo'         => 'Obigo',
 | 
				
			||||||
 | 
					        'netfront'      => 'Netfront Browser',
 | 
				
			||||||
 | 
					        'openwave'      => 'Openwave Browser',
 | 
				
			||||||
 | 
					        'mobilexplorer' => 'Mobile Explorer',
 | 
				
			||||||
 | 
					        'operamini'     => 'Opera Mini',
 | 
				
			||||||
 | 
					        'opera mini'    => 'Opera Mini',
 | 
				
			||||||
 | 
					        'opera mobi'    => 'Opera Mobile',
 | 
				
			||||||
 | 
					        'fennec'        => 'Firefox Mobile',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Other
 | 
				
			||||||
 | 
					        'digital paths' => 'Digital Paths',
 | 
				
			||||||
 | 
					        'avantgo'       => 'AvantGo',
 | 
				
			||||||
 | 
					        'xiino'         => 'Xiino',
 | 
				
			||||||
 | 
					        'novarra'       => 'Novarra Transcoder',
 | 
				
			||||||
 | 
					        'vodafone'      => 'Vodafone',
 | 
				
			||||||
 | 
					        'docomo'        => 'NTT DoCoMo',
 | 
				
			||||||
 | 
					        'o2'            => 'O2',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Fallback
 | 
				
			||||||
 | 
					        'mobile'     => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'wireless'   => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'j2me'       => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'midp'       => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'cldc'       => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'up.link'    => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'up.browser' => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'smartphone' => 'Generic Mobile',
 | 
				
			||||||
 | 
					        'cellphone'  => 'Generic Mobile',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     * Robots
 | 
				
			||||||
 | 
					     * -------------------------------------------------------------------
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * There are hundred of bots but these are the most common.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $robots = [
 | 
				
			||||||
 | 
					        'googlebot'            => 'Googlebot',
 | 
				
			||||||
 | 
					        'msnbot'               => 'MSNBot',
 | 
				
			||||||
 | 
					        'baiduspider'          => 'Baiduspider',
 | 
				
			||||||
 | 
					        'bingbot'              => 'Bing',
 | 
				
			||||||
 | 
					        'slurp'                => 'Inktomi Slurp',
 | 
				
			||||||
 | 
					        'yahoo'                => 'Yahoo',
 | 
				
			||||||
 | 
					        'ask jeeves'           => 'Ask Jeeves',
 | 
				
			||||||
 | 
					        'fastcrawler'          => 'FastCrawler',
 | 
				
			||||||
 | 
					        'infoseek'             => 'InfoSeek Robot 1.0',
 | 
				
			||||||
 | 
					        'lycos'                => 'Lycos',
 | 
				
			||||||
 | 
					        'yandex'               => 'YandexBot',
 | 
				
			||||||
 | 
					        'mediapartners-google' => 'MediaPartners Google',
 | 
				
			||||||
 | 
					        'CRAZYWEBCRAWLER'      => 'Crazy Webcrawler',
 | 
				
			||||||
 | 
					        'adsbot-google'        => 'AdsBot Google',
 | 
				
			||||||
 | 
					        'feedfetcher-google'   => 'Feedfetcher Google',
 | 
				
			||||||
 | 
					        'curious george'       => 'Curious George',
 | 
				
			||||||
 | 
					        'ia_archiver'          => 'Alexa Crawler',
 | 
				
			||||||
 | 
					        'MJ12bot'              => 'Majestic-12',
 | 
				
			||||||
 | 
					        'Uptimebot'            => 'Uptimebot',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										44
									
								
								app/Config/Validation.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								app/Config/Validation.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\BaseConfig;
 | 
				
			||||||
 | 
					use CodeIgniter\Validation\CreditCardRules;
 | 
				
			||||||
 | 
					use CodeIgniter\Validation\FileRules;
 | 
				
			||||||
 | 
					use CodeIgniter\Validation\FormatRules;
 | 
				
			||||||
 | 
					use CodeIgniter\Validation\Rules;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Validation extends BaseConfig
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // --------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // Setup
 | 
				
			||||||
 | 
					    // --------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Stores the classes that contain the
 | 
				
			||||||
 | 
					     * rules that are available.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var string[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $ruleSets = [
 | 
				
			||||||
 | 
					        Rules::class,
 | 
				
			||||||
 | 
					        FormatRules::class,
 | 
				
			||||||
 | 
					        FileRules::class,
 | 
				
			||||||
 | 
					        CreditCardRules::class,
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Specifies the views that are used to display the
 | 
				
			||||||
 | 
					     * errors.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array<string, string>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $templates = [
 | 
				
			||||||
 | 
					        'list'   => 'CodeIgniter\Validation\Views\list',
 | 
				
			||||||
 | 
					        'single' => 'CodeIgniter\Validation\Views\single',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // --------------------------------------------------------------------
 | 
				
			||||||
 | 
					    // Rules
 | 
				
			||||||
 | 
					    // --------------------------------------------------------------------
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								app/Config/View.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								app/Config/View.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Config\View as BaseView;
 | 
				
			||||||
 | 
					use CodeIgniter\View\ViewDecoratorInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class View extends BaseView
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * When false, the view method will clear the data between each
 | 
				
			||||||
 | 
					     * call. This keeps your data safe and ensures there is no accidental
 | 
				
			||||||
 | 
					     * leaking between calls, so you would need to explicitly pass the data
 | 
				
			||||||
 | 
					     * to each view. You might prefer to have the data stick around between
 | 
				
			||||||
 | 
					     * calls so that it is available to all views. If that is the case,
 | 
				
			||||||
 | 
					     * set $saveData to true.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var bool
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $saveData = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Parser Filters map a filter name with any PHP callable. When the
 | 
				
			||||||
 | 
					     * Parser prepares a variable for display, it will chain it
 | 
				
			||||||
 | 
					     * through the filters in the order defined, inserting any parameters.
 | 
				
			||||||
 | 
					     * To prevent potential abuse, all filters MUST be defined here
 | 
				
			||||||
 | 
					     * in order for them to be available for use within the Parser.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * Examples:
 | 
				
			||||||
 | 
					     *  { title|esc(js) }
 | 
				
			||||||
 | 
					     *  { created_on|date(Y-m-d)|esc(attr) }
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $filters = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Parser Plugins provide a way to extend the functionality provided
 | 
				
			||||||
 | 
					     * by the core Parser by creating aliases that will be replaced with
 | 
				
			||||||
 | 
					     * any callable. Can be single or tag pair.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public $plugins = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * View Decorators are class methods that will be run in sequence to
 | 
				
			||||||
 | 
					     * have a chance to alter the generated output just prior to caching
 | 
				
			||||||
 | 
					     * the results.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * All classes must implement CodeIgniter\View\ViewDecoratorInterface
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var class-string<ViewDecoratorInterface>[]
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public array $decorators = [];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										47
									
								
								app/Controllers/Auth/LoginController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								app/Controllers/Auth/LoginController.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Controllers\Auth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Controllers\BaseController;
 | 
				
			||||||
 | 
					use App\Models\UserModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LoginController extends BaseController
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function showLoginForm()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        helper(['form']);
 | 
				
			||||||
 | 
					        echo view('auth/login');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function login()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $email = $this->request->getVar('email');
 | 
				
			||||||
 | 
					        $password = $this->request->getVar('password');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user = new UserModel();
 | 
				
			||||||
 | 
					        $data = $user->where('email', $email)->first();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($data) {
 | 
				
			||||||
 | 
					            $pass = $data['password'];
 | 
				
			||||||
 | 
					            $authenticatePassword = password_verify($password, $pass);
 | 
				
			||||||
 | 
					            if ($authenticatePassword) {
 | 
				
			||||||
 | 
					                $authSession = new SessionConroller();
 | 
				
			||||||
 | 
					                $authSession->authorised($data);
 | 
				
			||||||
 | 
					                return redirect()->route('/');
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                $session->setFlashdata('msg', 'Password is incorrect.');
 | 
				
			||||||
 | 
					                return redirect()->back()->withInput();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            $session->setFlashdata('msg', 'Email does not exist.');
 | 
				
			||||||
 | 
					            return redirect()->back()->withInput();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function logout()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $authSession = new SessionConroller();
 | 
				
			||||||
 | 
					        $authSession->unauthorised();
 | 
				
			||||||
 | 
					        return redirect()->route('/');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										13
									
								
								app/Controllers/Auth/ProfileController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								app/Controllers/Auth/ProfileController.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Controllers\Auth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Controllers\BaseController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ProfileController extends BaseController
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function index()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        echo view('auth/profile');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										45
									
								
								app/Controllers/Auth/RegisterController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								app/Controllers/Auth/RegisterController.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Controllers\Auth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Controllers\BaseController;
 | 
				
			||||||
 | 
					use App\Models\UserModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class RegisterController extends BaseController
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function showRegistrationForm()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        helper(['form']);
 | 
				
			||||||
 | 
					        $data = [];
 | 
				
			||||||
 | 
					        echo view('auth/register', $data);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function register()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        helper(['form']);
 | 
				
			||||||
 | 
					        $rules = [
 | 
				
			||||||
 | 
					            'name'          => 'required|min_length[2]|max_length[50]',
 | 
				
			||||||
 | 
					            'email'         => 'required|min_length[4]|max_length[100]|valid_email|is_unique[users.email]',
 | 
				
			||||||
 | 
					            'password'      => 'required|min_length[4]|max_length[50]',
 | 
				
			||||||
 | 
					            'confirmpassword'  => 'matches[password]'
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->validate($rules)) {
 | 
				
			||||||
 | 
					            $user = new userModel();
 | 
				
			||||||
 | 
					            $data = [
 | 
				
			||||||
 | 
					                'name'     => $this->request->getVar('name'),
 | 
				
			||||||
 | 
					                'email'    => $this->request->getVar('email'),
 | 
				
			||||||
 | 
					                'password' => password_hash($this->request->getVar('password'), PASSWORD_DEFAULT)
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $user->save($data);
 | 
				
			||||||
 | 
					            $authSession = new SessionConroller();
 | 
				
			||||||
 | 
					            $authSession->authorised($data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return redirect()->to('/');
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            $data['validation'] = $this->validator;
 | 
				
			||||||
 | 
					            echo view('auth/register', $data);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										28
									
								
								app/Controllers/Auth/SessionConroller.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								app/Controllers/Auth/SessionConroller.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Controllers\Auth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Controllers\BaseController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SessionConroller extends BaseController
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function authorised($data)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $session = session();
 | 
				
			||||||
 | 
					        $authData = [
 | 
				
			||||||
 | 
					            'name' => $data['name'],
 | 
				
			||||||
 | 
					            'email' => $data['email'],
 | 
				
			||||||
 | 
					            'isLoggedIn' => true
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $session->set($authData);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function unauthorised()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $session = session();
 | 
				
			||||||
 | 
					        $authData = ['isLoggedIn' => false];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $session->set($authData);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								app/Controllers/BaseController.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								app/Controllers/BaseController.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Controller;
 | 
				
			||||||
 | 
					use CodeIgniter\HTTP\CLIRequest;
 | 
				
			||||||
 | 
					use CodeIgniter\HTTP\IncomingRequest;
 | 
				
			||||||
 | 
					use CodeIgniter\HTTP\RequestInterface;
 | 
				
			||||||
 | 
					use CodeIgniter\HTTP\ResponseInterface;
 | 
				
			||||||
 | 
					use Psr\Log\LoggerInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class BaseController
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * BaseController provides a convenient place for loading components
 | 
				
			||||||
 | 
					 * and performing functions that are needed by all your controllers.
 | 
				
			||||||
 | 
					 * Extend this class in any new controllers:
 | 
				
			||||||
 | 
					 *     class Home extends BaseController
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * For security be sure to declare any new methods as protected or private.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					abstract class BaseController extends Controller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Instance of the main Request object.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var CLIRequest|IncomingRequest
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected $request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * An array of helpers to be loaded automatically upon
 | 
				
			||||||
 | 
					     * class instantiation. These helpers will be available
 | 
				
			||||||
 | 
					     * to all other controllers that extend BaseController.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @var array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected $helpers = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Do Not Edit This Line
 | 
				
			||||||
 | 
					        parent::initController($request, $response, $logger);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Preload any models, libraries, etc, here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // E.g.: $this->session = \Config\Services::session();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										19
									
								
								app/Controllers/Home.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								app/Controllers/Home.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Home extends BaseController
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function index()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $session = session();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $data = [
 | 
				
			||||||
 | 
					            'name' => $session->get('name'),
 | 
				
			||||||
 | 
					            'email' => $session->get('email'),
 | 
				
			||||||
 | 
					            'authorised' => $session->get('isLoggedIn'),
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return view('home', $data);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										0
									
								
								app/Database/Migrations/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Database/Migrations/.gitkeep
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Database\Migrations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Database\Migration;
 | 
				
			||||||
 | 
					use CodeIgniter\Database\RawSql;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class CreateUserTable extends Migration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function up()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->forge->addField([
 | 
				
			||||||
 | 
					            'id' => [
 | 
				
			||||||
 | 
					                'type'           => 'INT',
 | 
				
			||||||
 | 
					                'constraint'     => 5,
 | 
				
			||||||
 | 
					                'unsigned'       => true,
 | 
				
			||||||
 | 
					                'auto_increment' => true,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'name' => [
 | 
				
			||||||
 | 
					                'type'       => 'VARCHAR',
 | 
				
			||||||
 | 
					                'constraint' => '150',
 | 
				
			||||||
 | 
					                'unique'     => true,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'email' => [
 | 
				
			||||||
 | 
					                'type'       => 'VARCHAR',
 | 
				
			||||||
 | 
					                'constraint' => '150',
 | 
				
			||||||
 | 
					                'unique'     => true,
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'password' => [
 | 
				
			||||||
 | 
					                'type'       => 'VARCHAR',
 | 
				
			||||||
 | 
					                'constraint' => '150',
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            'created_at' => [
 | 
				
			||||||
 | 
					                'type'    => 'TIMESTAMP',
 | 
				
			||||||
 | 
					                'default' => new RawSql('CURRENT_TIMESTAMP'),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->forge->addPrimaryKey('id');
 | 
				
			||||||
 | 
					        $this->forge->addUniqueKey('name');
 | 
				
			||||||
 | 
					        $this->forge->addUniqueKey('email');
 | 
				
			||||||
 | 
					        $this->forge->createTable('users');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function down()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->forge->dropTable('users');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										0
									
								
								app/Database/Seeds/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Database/Seeds/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								app/Filters/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Filters/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										49
									
								
								app/Filters/AuthGuard.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								app/Filters/AuthGuard.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Filters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Filters\FilterInterface;
 | 
				
			||||||
 | 
					use CodeIgniter\HTTP\RequestInterface;
 | 
				
			||||||
 | 
					use CodeIgniter\HTTP\ResponseInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AuthGuard implements FilterInterface
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Do whatever processing this filter needs to do.
 | 
				
			||||||
 | 
					     * By default it should not return anything during
 | 
				
			||||||
 | 
					     * normal execution. However, when an abnormal state
 | 
				
			||||||
 | 
					     * is found, it should return an instance of
 | 
				
			||||||
 | 
					     * CodeIgniter\HTTP\Response. If it does, script
 | 
				
			||||||
 | 
					     * execution will end and that Response will be
 | 
				
			||||||
 | 
					     * sent back to the client, allowing for error pages,
 | 
				
			||||||
 | 
					     * redirects, etc.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param RequestInterface $request
 | 
				
			||||||
 | 
					     * @param array|null       $arguments
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return mixed
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function before(RequestInterface $request, $arguments = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (!session()->get('isLoggedIn')) {
 | 
				
			||||||
 | 
					            return redirect()->to('/login');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Allows After filters to inspect and modify the response
 | 
				
			||||||
 | 
					     * object as needed. This method does not allow any way
 | 
				
			||||||
 | 
					     * to stop execution of other after filters, short of
 | 
				
			||||||
 | 
					     * throwing an Exception or Error.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param RequestInterface  $request
 | 
				
			||||||
 | 
					     * @param ResponseInterface $response
 | 
				
			||||||
 | 
					     * @param array|null        $arguments
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return mixed
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        //
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										0
									
								
								app/Helpers/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Helpers/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								app/Language/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Language/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										4
									
								
								app/Language/en/Validation.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								app/Language/en/Validation.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// override core en language system validation or define your own en language validation message
 | 
				
			||||||
 | 
					return [];
 | 
				
			||||||
							
								
								
									
										0
									
								
								app/Libraries/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Libraries/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								app/Models/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/Models/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										47
									
								
								app/Models/UserModel.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								app/Models/UserModel.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Model;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserModel extends Model
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected $DBGroup          = 'default';
 | 
				
			||||||
 | 
					    protected $table            = 'users';
 | 
				
			||||||
 | 
					    protected $primaryKey       = 'id';
 | 
				
			||||||
 | 
					    protected $useAutoIncrement = true;
 | 
				
			||||||
 | 
					    protected $insertID         = 0;
 | 
				
			||||||
 | 
					    protected $returnType       = 'array';
 | 
				
			||||||
 | 
					    protected $useSoftDeletes   = false;
 | 
				
			||||||
 | 
					    protected $protectFields    = true;
 | 
				
			||||||
 | 
					    protected $allowedFields    = [
 | 
				
			||||||
 | 
					        'name',
 | 
				
			||||||
 | 
					        'email',
 | 
				
			||||||
 | 
					        'password',
 | 
				
			||||||
 | 
					        'created_at'
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Dates
 | 
				
			||||||
 | 
					    protected $useTimestamps = false;
 | 
				
			||||||
 | 
					    protected $dateFormat    = 'datetime';
 | 
				
			||||||
 | 
					    protected $createdField  = 'created_at';
 | 
				
			||||||
 | 
					    protected $updatedField  = 'updated_at';
 | 
				
			||||||
 | 
					    protected $deletedField  = 'deleted_at';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Validation
 | 
				
			||||||
 | 
					    protected $validationRules      = [];
 | 
				
			||||||
 | 
					    protected $validationMessages   = [];
 | 
				
			||||||
 | 
					    protected $skipValidation       = false;
 | 
				
			||||||
 | 
					    protected $cleanValidationRules = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Callbacks
 | 
				
			||||||
 | 
					    protected $allowCallbacks = true;
 | 
				
			||||||
 | 
					    protected $beforeInsert   = [];
 | 
				
			||||||
 | 
					    protected $afterInsert    = [];
 | 
				
			||||||
 | 
					    protected $beforeUpdate   = [];
 | 
				
			||||||
 | 
					    protected $afterUpdate    = [];
 | 
				
			||||||
 | 
					    protected $beforeFind     = [];
 | 
				
			||||||
 | 
					    protected $afterFind      = [];
 | 
				
			||||||
 | 
					    protected $beforeDelete   = [];
 | 
				
			||||||
 | 
					    protected $afterDelete    = [];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										0
									
								
								app/ThirdParty/.gitkeep
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/ThirdParty/.gitkeep
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										44
									
								
								app/Views/auth/login.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								app/Views/auth/login.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					<?= $this->extend('layouts/default') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->section('content') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="columns is-mobile is-centered">
 | 
				
			||||||
 | 
					    <div class="column is-narrow">
 | 
				
			||||||
 | 
					        <form class="box" action="<?= url_to('login') ?>" method="post">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <h3 class="has-text-centered">Login Form</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					                <label class="label">Email</label>
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <input class="input" type="text" name="email" placeholder="Email"
 | 
				
			||||||
 | 
					                        value="<?= old('email') ?>">
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					                <label class="label">Password</label>
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <input class="input" type="password" name="password" placeholder="Password"
 | 
				
			||||||
 | 
					                        value="<?= old('password') ?>">
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field is-grouped">
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <button class="button is-link">Sign in</button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <?php if(session()->getFlashdata('msg')):?>
 | 
				
			||||||
 | 
					            <div class="notification is-danger">
 | 
				
			||||||
 | 
					                <?= session()->getFlashdata('msg') ?>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <?php endif;?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->endSection() ?>
 | 
				
			||||||
							
								
								
									
										17
									
								
								app/Views/auth/profile.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								app/Views/auth/profile.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					<?= $this->extend('layouts/default') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->section('content') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="columns is-mobile is-centered">
 | 
				
			||||||
 | 
					    <div class="column is-narrow box">
 | 
				
			||||||
 | 
					        <h2>Profile</h2>
 | 
				
			||||||
 | 
					        <p>
 | 
				
			||||||
 | 
					            <?= esc(session()->get('name')) ?>
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					        <p>
 | 
				
			||||||
 | 
					            <?= esc(session()->get('email')) ?>
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->endSection() ?>
 | 
				
			||||||
							
								
								
									
										60
									
								
								app/Views/auth/register.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								app/Views/auth/register.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
				
			|||||||
 | 
					<?= $this->extend('layouts/default') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->section('content') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="columns is-mobile is-centered">
 | 
				
			||||||
 | 
					    <div class="column is-narrow">
 | 
				
			||||||
 | 
					        <form class="box" action="<?= url_to('register') ?>" method="post">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <h3 class="has-text-centered">Register User</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					                <label class="label">Name</label>
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <input class="input" type="text" name="name" placeholder="Name"
 | 
				
			||||||
 | 
					                        value="<?= set_value('name') ?>"
 | 
				
			||||||
 | 
					                        autofocus>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					                <label class="label">Email</label>
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <input class="input" type="text" name="email" placeholder="Email"
 | 
				
			||||||
 | 
					                        value="<?= set_value('email') ?>">
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					                <label class="label">Password</label>
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <input class="input" type="password" name="password" placeholder="Password">
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					                <label class="label">Password</label>
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <input class="input" type="password" name="confirmpassword" placeholder="Confirm Password">
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field is-grouped">
 | 
				
			||||||
 | 
					                <div class="control">
 | 
				
			||||||
 | 
					                    <button class="button is-link">Sign Up</button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <?php if(isset($validation)):?>
 | 
				
			||||||
 | 
					        <div class="notification is-danger">
 | 
				
			||||||
 | 
					            <?= $validation->listErrors() ?>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <?php endif;?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->endSection() ?>
 | 
				
			||||||
							
								
								
									
										7
									
								
								app/Views/errors/cli/error_404.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								app/Views/errors/cli/error_404.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\CLI\CLI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CLI::error('ERROR: ' . $code);
 | 
				
			||||||
 | 
					CLI::write($message);
 | 
				
			||||||
 | 
					CLI::newLine();
 | 
				
			||||||
							
								
								
									
										65
									
								
								app/Views/errors/cli/error_exception.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								app/Views/errors/cli/error_exception.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\CLI\CLI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// The main Exception
 | 
				
			||||||
 | 
					CLI::newLine();
 | 
				
			||||||
 | 
					CLI::write('[' . get_class($exception) . ']', 'light_gray', 'red');
 | 
				
			||||||
 | 
					CLI::newLine();
 | 
				
			||||||
 | 
					CLI::write($message);
 | 
				
			||||||
 | 
					CLI::newLine();
 | 
				
			||||||
 | 
					CLI::write('at ' . CLI::color(clean_path($exception->getFile()) . ':' . $exception->getLine(), 'green'));
 | 
				
			||||||
 | 
					CLI::newLine();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// The backtrace
 | 
				
			||||||
 | 
					if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) {
 | 
				
			||||||
 | 
					    $backtraces = $exception->getTrace();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($backtraces) {
 | 
				
			||||||
 | 
					        CLI::write('Backtrace:', 'green');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach ($backtraces as $i => $error) {
 | 
				
			||||||
 | 
					        $padFile  = '    '; // 4 spaces
 | 
				
			||||||
 | 
					        $padClass = '       '; // 7 spaces
 | 
				
			||||||
 | 
					        $c        = str_pad($i + 1, 3, ' ', STR_PAD_LEFT);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (isset($error['file'])) {
 | 
				
			||||||
 | 
					            $filepath = clean_path($error['file']) . ':' . $error['line'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            CLI::write($c . $padFile . CLI::color($filepath, 'yellow'));
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            CLI::write($c . $padFile . CLI::color('[internal function]', 'yellow'));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $function = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (isset($error['class'])) {
 | 
				
			||||||
 | 
					            $type = ($error['type'] === '->') ? '()' . $error['type'] : $error['type'];
 | 
				
			||||||
 | 
					            $function .= $padClass . $error['class'] . $type . $error['function'];
 | 
				
			||||||
 | 
					        } elseif (! isset($error['class']) && isset($error['function'])) {
 | 
				
			||||||
 | 
					            $function .= $padClass . $error['function'];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $args = implode(', ', array_map(static function ($value) {
 | 
				
			||||||
 | 
					            switch (true) {
 | 
				
			||||||
 | 
					                case is_object($value):
 | 
				
			||||||
 | 
					                    return 'Object(' . get_class($value) . ')';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case is_array($value):
 | 
				
			||||||
 | 
					                    return count($value) ? '[...]' : '[]';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                case $value === null:
 | 
				
			||||||
 | 
					                    return 'null'; // return the lowercased version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return var_export($value, true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }, array_values($error['args'] ?? [])));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $function .= '(' . $args . ')';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        CLI::write($function);
 | 
				
			||||||
 | 
					        CLI::newLine();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										5
									
								
								app/Views/errors/cli/production.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								app/Views/errors/cli/production.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// On the CLI, we still want errors in productions
 | 
				
			||||||
 | 
					// so just use the exception template.
 | 
				
			||||||
 | 
					include __DIR__ . '/error_exception.php';
 | 
				
			||||||
							
								
								
									
										197
									
								
								app/Views/errors/html/debug.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										197
									
								
								app/Views/errors/html/debug.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,197 @@
 | 
				
			|||||||
 | 
					:root {
 | 
				
			||||||
 | 
					    --main-bg-color: #fff;
 | 
				
			||||||
 | 
					    --main-text-color: #555;
 | 
				
			||||||
 | 
					    --dark-text-color: #222;
 | 
				
			||||||
 | 
					    --light-text-color: #c7c7c7;
 | 
				
			||||||
 | 
					    --brand-primary-color: #E06E3F;
 | 
				
			||||||
 | 
					    --light-bg-color: #ededee;
 | 
				
			||||||
 | 
					    --dark-bg-color: #404040;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    background: var(--main-bg-color);
 | 
				
			||||||
 | 
					    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
 | 
				
			||||||
 | 
					    color: var(--main-text-color);
 | 
				
			||||||
 | 
					    font-weight: 300;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					h1 {
 | 
				
			||||||
 | 
					    font-weight: lighter;
 | 
				
			||||||
 | 
					    letter-spacing: 0.8;
 | 
				
			||||||
 | 
					    font-size: 3rem;
 | 
				
			||||||
 | 
					    color: var(--dark-text-color);
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					h1.headline {
 | 
				
			||||||
 | 
					    margin-top: 20%;
 | 
				
			||||||
 | 
					    font-size: 5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.text-center {
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					p.lead {
 | 
				
			||||||
 | 
					    font-size: 1.6rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.container {
 | 
				
			||||||
 | 
					    max-width: 75rem;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    padding: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header {
 | 
				
			||||||
 | 
					    background: var(--light-bg-color);
 | 
				
			||||||
 | 
					    color: var(--dark-text-color);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header .container {
 | 
				
			||||||
 | 
					    padding: 1rem 1.75rem 1.75rem 1.75rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header h1 {
 | 
				
			||||||
 | 
					    font-size: 2.5rem;
 | 
				
			||||||
 | 
					    font-weight: 500;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header p {
 | 
				
			||||||
 | 
					    font-size: 1.2rem;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    line-height: 2.5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header a {
 | 
				
			||||||
 | 
					    color: var(--brand-primary-color);
 | 
				
			||||||
 | 
					    margin-left: 2rem;
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header:hover a {
 | 
				
			||||||
 | 
					    display: inline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.footer {
 | 
				
			||||||
 | 
					    background: var(--dark-bg-color);
 | 
				
			||||||
 | 
					    color: var(--light-text-color);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.footer .container {
 | 
				
			||||||
 | 
					    border-top: 1px solid #e7e7e7;
 | 
				
			||||||
 | 
					    margin-top: 1rem;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.source {
 | 
				
			||||||
 | 
					    background: #343434;
 | 
				
			||||||
 | 
					    color: var(--light-text-color);
 | 
				
			||||||
 | 
					    padding: 0.5em 1em;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
 | 
				
			||||||
 | 
					    font-size: 0.85rem;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    overflow-x: scroll;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.source span.line {
 | 
				
			||||||
 | 
					    line-height: 1.4;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.source span.line .number {
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.source .line .highlight {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    background: var(--dark-text-color);
 | 
				
			||||||
 | 
					    color: var(--light-text-color);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.source span.highlight .number {
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.tabs {
 | 
				
			||||||
 | 
					    list-style: none;
 | 
				
			||||||
 | 
					    list-style-position: inside;
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					    padding: 0;
 | 
				
			||||||
 | 
					    margin-bottom: -1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.tabs li {
 | 
				
			||||||
 | 
					    display: inline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.tabs a:link,
 | 
				
			||||||
 | 
					.tabs a:visited {
 | 
				
			||||||
 | 
					    padding: 0rem 1rem;
 | 
				
			||||||
 | 
					    line-height: 2.7;
 | 
				
			||||||
 | 
					    text-decoration: none;
 | 
				
			||||||
 | 
					    color: var(--dark-text-color);
 | 
				
			||||||
 | 
					    background: var(--light-bg-color);
 | 
				
			||||||
 | 
					    border: 1px solid rgba(0,0,0,0.15);
 | 
				
			||||||
 | 
					    border-bottom: 0;
 | 
				
			||||||
 | 
					    border-top-left-radius: 5px;
 | 
				
			||||||
 | 
					    border-top-right-radius: 5px;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.tabs a:hover {
 | 
				
			||||||
 | 
					    background: var(--light-bg-color);
 | 
				
			||||||
 | 
					    border-color: rgba(0,0,0,0.15);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.tabs a.active {
 | 
				
			||||||
 | 
					    background: var(--main-bg-color);
 | 
				
			||||||
 | 
					    color: var(--main-text-color);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.tab-content {
 | 
				
			||||||
 | 
					    background: var(--main-bg-color);
 | 
				
			||||||
 | 
					    border: 1px solid rgba(0,0,0,0.15);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.content {
 | 
				
			||||||
 | 
					    padding: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.hide {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.alert {
 | 
				
			||||||
 | 
					    margin-top: 2rem;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    line-height: 3.0;
 | 
				
			||||||
 | 
					    background: #d9edf7;
 | 
				
			||||||
 | 
					    border: 1px solid #bcdff1;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    color: #31708f;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					ul, ol {
 | 
				
			||||||
 | 
					    line-height: 1.8;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					th {
 | 
				
			||||||
 | 
					    text-align: left;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid #e7e7e7;
 | 
				
			||||||
 | 
					    padding-bottom: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					td {
 | 
				
			||||||
 | 
					    padding: 0.2rem 0.5rem 0.2rem 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					tr:hover td {
 | 
				
			||||||
 | 
					    background: #f1f1f1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					td pre {
 | 
				
			||||||
 | 
					    white-space: pre-wrap;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.trace a {
 | 
				
			||||||
 | 
					    color: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.trace table {
 | 
				
			||||||
 | 
					    width: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.trace tr td:first-child {
 | 
				
			||||||
 | 
					    min-width: 5em;
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.trace td {
 | 
				
			||||||
 | 
					    background: var(--light-bg-color);
 | 
				
			||||||
 | 
					    padding: 0 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.trace td pre {
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.args {
 | 
				
			||||||
 | 
					    display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										116
									
								
								app/Views/errors/html/debug.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								app/Views/errors/html/debug.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					var tabLinks    = new Array();
 | 
				
			||||||
 | 
					var contentDivs = new Array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function init()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // Grab the tab links and content divs from the page
 | 
				
			||||||
 | 
					    var tabListItems = document.getElementById('tabs').childNodes;
 | 
				
			||||||
 | 
					    console.log(tabListItems);
 | 
				
			||||||
 | 
					    for (var i = 0; i < tabListItems.length; i ++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (tabListItems[i].nodeName == "LI")
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var tabLink     = getFirstChildWithTagName(tabListItems[i], 'A');
 | 
				
			||||||
 | 
					            var id          = getHash(tabLink.getAttribute('href'));
 | 
				
			||||||
 | 
					            tabLinks[id]    = tabLink;
 | 
				
			||||||
 | 
					            contentDivs[id] = document.getElementById(id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Assign onclick events to the tab links, and
 | 
				
			||||||
 | 
					    // highlight the first tab
 | 
				
			||||||
 | 
					    var i = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (var id in tabLinks)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        tabLinks[id].onclick = showTab;
 | 
				
			||||||
 | 
					        tabLinks[id].onfocus = function () {
 | 
				
			||||||
 | 
					            this.blur()
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        if (i == 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            tabLinks[id].className = 'active';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        i ++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Hide all content divs except the first
 | 
				
			||||||
 | 
					    var i = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (var id in contentDivs)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (i != 0)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            console.log(contentDivs[id]);
 | 
				
			||||||
 | 
					            contentDivs[id].className = 'content hide';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        i ++;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function showTab()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    var selectedId = getHash(this.getAttribute('href'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Highlight the selected tab, and dim all others.
 | 
				
			||||||
 | 
					    // Also show the selected content div, and hide all others.
 | 
				
			||||||
 | 
					    for (var id in contentDivs)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (id == selectedId)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            tabLinks[id].className    = 'active';
 | 
				
			||||||
 | 
					            contentDivs[id].className = 'content';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            tabLinks[id].className    = '';
 | 
				
			||||||
 | 
					            contentDivs[id].className = 'content hide';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Stop the browser following the link
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getFirstChildWithTagName(element, tagName)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    for (var i = 0; i < element.childNodes.length; i ++)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (element.childNodes[i].nodeName == tagName)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return element.childNodes[i];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getHash(url)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    var hashPos = url.lastIndexOf('#');
 | 
				
			||||||
 | 
					    return url.substring(hashPos + 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function toggle(elem)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    elem = document.getElementById(elem);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (elem.style && elem.style['display'])
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // Only works with the "style" attr
 | 
				
			||||||
 | 
					        var disp = elem.style['display'];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (elem.currentStyle)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // For MSIE, naturally
 | 
				
			||||||
 | 
					        var disp = elem.currentStyle['display'];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else if (window.getComputedStyle)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        // For most other browsers
 | 
				
			||||||
 | 
					        var disp = document.defaultView.getComputedStyle(elem, null).getPropertyValue('display');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Toggle the state of the "display" style
 | 
				
			||||||
 | 
					    elem.style.display = disp == 'block' ? 'none' : 'block';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										84
									
								
								app/Views/errors/html/error_404.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								app/Views/errors/html/error_404.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>404 Page Not Found</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <style>
 | 
				
			||||||
 | 
					        div.logo {
 | 
				
			||||||
 | 
					            height: 200px;
 | 
				
			||||||
 | 
					            width: 155px;
 | 
				
			||||||
 | 
					            display: inline-block;
 | 
				
			||||||
 | 
					            opacity: 0.08;
 | 
				
			||||||
 | 
					            position: absolute;
 | 
				
			||||||
 | 
					            top: 2rem;
 | 
				
			||||||
 | 
					            left: 50%;
 | 
				
			||||||
 | 
					            margin-left: -73px;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        body {
 | 
				
			||||||
 | 
					            height: 100%;
 | 
				
			||||||
 | 
					            background: #fafafa;
 | 
				
			||||||
 | 
					            font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
 | 
				
			||||||
 | 
					            color: #777;
 | 
				
			||||||
 | 
					            font-weight: 300;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        h1 {
 | 
				
			||||||
 | 
					            font-weight: lighter;
 | 
				
			||||||
 | 
					            letter-spacing: normal;
 | 
				
			||||||
 | 
					            font-size: 3rem;
 | 
				
			||||||
 | 
					            margin-top: 0;
 | 
				
			||||||
 | 
					            margin-bottom: 0;
 | 
				
			||||||
 | 
					            color: #222;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .wrap {
 | 
				
			||||||
 | 
					            max-width: 1024px;
 | 
				
			||||||
 | 
					            margin: 5rem auto;
 | 
				
			||||||
 | 
					            padding: 2rem;
 | 
				
			||||||
 | 
					            background: #fff;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            border: 1px solid #efefef;
 | 
				
			||||||
 | 
					            border-radius: 0.5rem;
 | 
				
			||||||
 | 
					            position: relative;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        pre {
 | 
				
			||||||
 | 
					            white-space: normal;
 | 
				
			||||||
 | 
					            margin-top: 1.5rem;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        code {
 | 
				
			||||||
 | 
					            background: #fafafa;
 | 
				
			||||||
 | 
					            border: 1px solid #efefef;
 | 
				
			||||||
 | 
					            padding: 0.5rem 1rem;
 | 
				
			||||||
 | 
					            border-radius: 5px;
 | 
				
			||||||
 | 
					            display: block;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        p {
 | 
				
			||||||
 | 
					            margin-top: 1.5rem;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .footer {
 | 
				
			||||||
 | 
					            margin-top: 2rem;
 | 
				
			||||||
 | 
					            border-top: 1px solid #efefef;
 | 
				
			||||||
 | 
					            padding: 1em 2em 0 2em;
 | 
				
			||||||
 | 
					            font-size: 85%;
 | 
				
			||||||
 | 
					            color: #999;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        a:active,
 | 
				
			||||||
 | 
					        a:link,
 | 
				
			||||||
 | 
					        a:visited {
 | 
				
			||||||
 | 
					            color: #dd4814;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					    <div class="wrap">
 | 
				
			||||||
 | 
					        <h1>404 - File Not Found</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <p>
 | 
				
			||||||
 | 
					            <?php if (ENVIRONMENT !== 'production') : ?>
 | 
				
			||||||
 | 
					                <?= nl2br(esc($message)) ?>
 | 
				
			||||||
 | 
					            <?php else : ?>
 | 
				
			||||||
 | 
					                Sorry! Cannot seem to find the page you were looking for.
 | 
				
			||||||
 | 
					            <?php endif ?>
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										397
									
								
								app/Views/errors/html/error_exception.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										397
									
								
								app/Views/errors/html/error_exception.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,397 @@
 | 
				
			|||||||
 | 
					<?php $error_id = uniqid('error', true); ?>
 | 
				
			||||||
 | 
					<!doctype html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
 | 
					    <meta name="robots" content="noindex">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <title><?= esc($title) ?></title>
 | 
				
			||||||
 | 
					    <style type="text/css">
 | 
				
			||||||
 | 
					        <?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
 | 
				
			||||||
 | 
					    </style>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script type="text/javascript">
 | 
				
			||||||
 | 
					        <?= file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.js') ?>
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body onload="init()">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Header -->
 | 
				
			||||||
 | 
					    <div class="header">
 | 
				
			||||||
 | 
					        <div class="container">
 | 
				
			||||||
 | 
					            <h1><?= esc($title), esc($exception->getCode() ? ' #' . $exception->getCode() : '') ?></h1>
 | 
				
			||||||
 | 
					            <p>
 | 
				
			||||||
 | 
					                <?= nl2br(esc($exception->getMessage())) ?>
 | 
				
			||||||
 | 
					                <a href="https://www.duckduckgo.com/?q=<?= urlencode($title . ' ' . preg_replace('#\'.*\'|".*"#Us', '', $exception->getMessage())) ?>"
 | 
				
			||||||
 | 
					                   rel="noreferrer" target="_blank">search →</a>
 | 
				
			||||||
 | 
					            </p>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Source -->
 | 
				
			||||||
 | 
					    <div class="container">
 | 
				
			||||||
 | 
					        <p><b><?= esc(clean_path($file)) ?></b> at line <b><?= esc($line) ?></b></p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <?php if (is_file($file)) : ?>
 | 
				
			||||||
 | 
					            <div class="source">
 | 
				
			||||||
 | 
					                <?= static::highlightFile($file, $line, 15); ?>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        <?php endif; ?>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="container">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <ul class="tabs" id="tabs">
 | 
				
			||||||
 | 
					            <li><a href="#backtrace">Backtrace</a></li>
 | 
				
			||||||
 | 
					            <li><a href="#server">Server</a></li>
 | 
				
			||||||
 | 
					            <li><a href="#request">Request</a></li>
 | 
				
			||||||
 | 
					            <li><a href="#response">Response</a></li>
 | 
				
			||||||
 | 
					            <li><a href="#files">Files</a></li>
 | 
				
			||||||
 | 
					            <li><a href="#memory">Memory</a></li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div class="tab-content">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Backtrace -->
 | 
				
			||||||
 | 
					            <div class="content" id="backtrace">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <ol class="trace">
 | 
				
			||||||
 | 
					                <?php foreach ($trace as $index => $row) : ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <li>
 | 
				
			||||||
 | 
					                        <p>
 | 
				
			||||||
 | 
					                            <!-- Trace info -->
 | 
				
			||||||
 | 
					                            <?php if (isset($row['file']) && is_file($row['file'])) :?>
 | 
				
			||||||
 | 
					                                <?php
 | 
				
			||||||
 | 
					                                if (isset($row['function']) && in_array($row['function'], ['include', 'include_once', 'require', 'require_once'], true)) {
 | 
				
			||||||
 | 
					                                    echo esc($row['function'] . ' ' . clean_path($row['file']));
 | 
				
			||||||
 | 
					                                } else {
 | 
				
			||||||
 | 
					                                    echo esc(clean_path($row['file']) . ' : ' . $row['line']);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                                ?>
 | 
				
			||||||
 | 
					                            <?php else: ?>
 | 
				
			||||||
 | 
					                                {PHP internal code}
 | 
				
			||||||
 | 
					                            <?php endif; ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            <!-- Class/Method -->
 | 
				
			||||||
 | 
					                            <?php if (isset($row['class'])) : ?>
 | 
				
			||||||
 | 
					                                  —  <?= esc($row['class'] . $row['type'] . $row['function']) ?>
 | 
				
			||||||
 | 
					                                <?php if (! empty($row['args'])) : ?>
 | 
				
			||||||
 | 
					                                    <?php $args_id = $error_id . 'args' . $index ?>
 | 
				
			||||||
 | 
					                                    ( <a href="#" onclick="return toggle('<?= esc($args_id, 'attr') ?>');">arguments</a> )
 | 
				
			||||||
 | 
					                                    <div class="args" id="<?= esc($args_id, 'attr') ?>">
 | 
				
			||||||
 | 
					                                        <table cellspacing="0">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                        <?php
 | 
				
			||||||
 | 
					                                        $params = null;
 | 
				
			||||||
 | 
					                                        // Reflection by name is not available for closure function
 | 
				
			||||||
 | 
					                                        if (substr($row['function'], -1) !== '}') {
 | 
				
			||||||
 | 
					                                            $mirror = isset($row['class']) ? new \ReflectionMethod($row['class'], $row['function']) : new \ReflectionFunction($row['function']);
 | 
				
			||||||
 | 
					                                            $params = $mirror->getParameters();
 | 
				
			||||||
 | 
					                                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                        foreach ($row['args'] as $key => $value) : ?>
 | 
				
			||||||
 | 
					                                            <tr>
 | 
				
			||||||
 | 
					                                                <td><code><?= esc(isset($params[$key]) ? '$' . $params[$key]->name : "#{$key}") ?></code></td>
 | 
				
			||||||
 | 
					                                                <td><pre><?= esc(print_r($value, true)) ?></pre></td>
 | 
				
			||||||
 | 
					                                            </tr>
 | 
				
			||||||
 | 
					                                        <?php endforeach ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                        </table>
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                <?php else : ?>
 | 
				
			||||||
 | 
					                                    ()
 | 
				
			||||||
 | 
					                                <?php endif; ?>
 | 
				
			||||||
 | 
					                            <?php endif; ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            <?php if (! isset($row['class']) && isset($row['function'])) : ?>
 | 
				
			||||||
 | 
					                                  —      <?= esc($row['function']) ?>()
 | 
				
			||||||
 | 
					                            <?php endif; ?>
 | 
				
			||||||
 | 
					                        </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        <!-- Source? -->
 | 
				
			||||||
 | 
					                        <?php if (isset($row['file']) && is_file($row['file']) && isset($row['class'])) : ?>
 | 
				
			||||||
 | 
					                            <div class="source">
 | 
				
			||||||
 | 
					                                <?= static::highlightFile($row['file'], $row['line']) ?>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        <?php endif; ?>
 | 
				
			||||||
 | 
					                    </li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php endforeach; ?>
 | 
				
			||||||
 | 
					                </ol>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Server -->
 | 
				
			||||||
 | 
					            <div class="content" id="server">
 | 
				
			||||||
 | 
					                <?php foreach (['_SERVER', '_SESSION'] as $var) : ?>
 | 
				
			||||||
 | 
					                    <?php
 | 
				
			||||||
 | 
					                    if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					                    } ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <h3>$<?= esc($var) ?></h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <table>
 | 
				
			||||||
 | 
					                        <thead>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <th>Key</th>
 | 
				
			||||||
 | 
					                                <th>Value</th>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        </thead>
 | 
				
			||||||
 | 
					                        <tbody>
 | 
				
			||||||
 | 
					                        <?php foreach ($GLOBALS[$var] as $key => $value) : ?>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <td><?= esc($key) ?></td>
 | 
				
			||||||
 | 
					                                <td>
 | 
				
			||||||
 | 
					                                    <?php if (is_string($value)) : ?>
 | 
				
			||||||
 | 
					                                        <?= esc($value) ?>
 | 
				
			||||||
 | 
					                                    <?php else: ?>
 | 
				
			||||||
 | 
					                                        <pre><?= esc(print_r($value, true)) ?></pre>
 | 
				
			||||||
 | 
					                                    <?php endif; ?>
 | 
				
			||||||
 | 
					                                </td>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        <?php endforeach; ?>
 | 
				
			||||||
 | 
					                        </tbody>
 | 
				
			||||||
 | 
					                    </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php endforeach ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <!-- Constants -->
 | 
				
			||||||
 | 
					                <?php $constants = get_defined_constants(true); ?>
 | 
				
			||||||
 | 
					                <?php if (! empty($constants['user'])) : ?>
 | 
				
			||||||
 | 
					                    <h3>Constants</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <table>
 | 
				
			||||||
 | 
					                        <thead>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <th>Key</th>
 | 
				
			||||||
 | 
					                                <th>Value</th>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        </thead>
 | 
				
			||||||
 | 
					                        <tbody>
 | 
				
			||||||
 | 
					                        <?php foreach ($constants['user'] as $key => $value) : ?>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <td><?= esc($key) ?></td>
 | 
				
			||||||
 | 
					                                <td>
 | 
				
			||||||
 | 
					                                    <?php if (is_string($value)) : ?>
 | 
				
			||||||
 | 
					                                        <?= esc($value) ?>
 | 
				
			||||||
 | 
					                                    <?php else: ?>
 | 
				
			||||||
 | 
					                                        <pre><?= esc(print_r($value, true)) ?></pre>
 | 
				
			||||||
 | 
					                                    <?php endif; ?>
 | 
				
			||||||
 | 
					                                </td>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        <?php endforeach; ?>
 | 
				
			||||||
 | 
					                        </tbody>
 | 
				
			||||||
 | 
					                    </table>
 | 
				
			||||||
 | 
					                <?php endif; ?>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Request -->
 | 
				
			||||||
 | 
					            <div class="content" id="request">
 | 
				
			||||||
 | 
					                <?php $request = \Config\Services::request(); ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <table>
 | 
				
			||||||
 | 
					                    <tbody>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td style="width: 10em">Path</td>
 | 
				
			||||||
 | 
					                            <td><?= esc($request->getUri()) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>HTTP Method</td>
 | 
				
			||||||
 | 
					                            <td><?= esc(strtoupper($request->getMethod())) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>IP Address</td>
 | 
				
			||||||
 | 
					                            <td><?= esc($request->getIPAddress()) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td style="width: 10em">Is AJAX Request?</td>
 | 
				
			||||||
 | 
					                            <td><?= $request->isAJAX() ? 'yes' : 'no' ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>Is CLI Request?</td>
 | 
				
			||||||
 | 
					                            <td><?= $request->isCLI() ? 'yes' : 'no' ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>Is Secure Request?</td>
 | 
				
			||||||
 | 
					                            <td><?= $request->isSecure() ? 'yes' : 'no' ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>User Agent</td>
 | 
				
			||||||
 | 
					                            <td><?= esc($request->getUserAgent()->getAgentString()) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    </tbody>
 | 
				
			||||||
 | 
					                </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php $empty = true; ?>
 | 
				
			||||||
 | 
					                <?php foreach (['_GET', '_POST', '_COOKIE'] as $var) : ?>
 | 
				
			||||||
 | 
					                    <?php
 | 
				
			||||||
 | 
					                    if (empty($GLOBALS[$var]) || ! is_array($GLOBALS[$var])) {
 | 
				
			||||||
 | 
					                        continue;
 | 
				
			||||||
 | 
					                    } ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <?php $empty = false; ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <h3>$<?= esc($var) ?></h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <table style="width: 100%">
 | 
				
			||||||
 | 
					                        <thead>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <th>Key</th>
 | 
				
			||||||
 | 
					                                <th>Value</th>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        </thead>
 | 
				
			||||||
 | 
					                        <tbody>
 | 
				
			||||||
 | 
					                        <?php foreach ($GLOBALS[$var] as $key => $value) : ?>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <td><?= esc($key) ?></td>
 | 
				
			||||||
 | 
					                                <td>
 | 
				
			||||||
 | 
					                                    <?php if (is_string($value)) : ?>
 | 
				
			||||||
 | 
					                                        <?= esc($value) ?>
 | 
				
			||||||
 | 
					                                    <?php else: ?>
 | 
				
			||||||
 | 
					                                        <pre><?= esc(print_r($value, true)) ?></pre>
 | 
				
			||||||
 | 
					                                    <?php endif; ?>
 | 
				
			||||||
 | 
					                                </td>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        <?php endforeach; ?>
 | 
				
			||||||
 | 
					                        </tbody>
 | 
				
			||||||
 | 
					                    </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php endforeach ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php if ($empty) : ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <div class="alert">
 | 
				
			||||||
 | 
					                        No $_GET, $_POST, or $_COOKIE Information to show.
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php endif; ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php $headers = $request->headers(); ?>
 | 
				
			||||||
 | 
					                <?php if (! empty($headers)) : ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <h3>Headers</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <table>
 | 
				
			||||||
 | 
					                        <thead>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <th>Header</th>
 | 
				
			||||||
 | 
					                                <th>Value</th>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        </thead>
 | 
				
			||||||
 | 
					                        <tbody>
 | 
				
			||||||
 | 
					                        <?php foreach ($headers as $value) : ?>
 | 
				
			||||||
 | 
					                            <?php
 | 
				
			||||||
 | 
					                            if (empty($value)) {
 | 
				
			||||||
 | 
					                                continue;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            if (! is_array($value)) {
 | 
				
			||||||
 | 
					                                $value = [$value];
 | 
				
			||||||
 | 
					                            } ?>
 | 
				
			||||||
 | 
					                            <?php foreach ($value as $h) : ?>
 | 
				
			||||||
 | 
					                                <tr>
 | 
				
			||||||
 | 
					                                    <td><?= esc($h->getName(), 'html') ?></td>
 | 
				
			||||||
 | 
					                                    <td><?= esc($h->getValueLine(), 'html') ?></td>
 | 
				
			||||||
 | 
					                                </tr>
 | 
				
			||||||
 | 
					                            <?php endforeach; ?>
 | 
				
			||||||
 | 
					                        <?php endforeach; ?>
 | 
				
			||||||
 | 
					                        </tbody>
 | 
				
			||||||
 | 
					                    </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php endif; ?>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Response -->
 | 
				
			||||||
 | 
					            <?php
 | 
				
			||||||
 | 
					                $response = \Config\Services::response();
 | 
				
			||||||
 | 
					                $response->setStatusCode(http_response_code());
 | 
				
			||||||
 | 
					            ?>
 | 
				
			||||||
 | 
					            <div class="content" id="response">
 | 
				
			||||||
 | 
					                <table>
 | 
				
			||||||
 | 
					                    <tr>
 | 
				
			||||||
 | 
					                        <td style="width: 15em">Response Status</td>
 | 
				
			||||||
 | 
					                        <td><?= esc($response->getStatusCode() . ' - ' . $response->getReasonPhrase()) ?></td>
 | 
				
			||||||
 | 
					                    </tr>
 | 
				
			||||||
 | 
					                </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php $headers = $response->headers(); ?>
 | 
				
			||||||
 | 
					                <?php if (! empty($headers)) : ?>
 | 
				
			||||||
 | 
					                    <?php natsort($headers) ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <h3>Headers</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <table>
 | 
				
			||||||
 | 
					                        <thead>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <th>Header</th>
 | 
				
			||||||
 | 
					                                <th>Value</th>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        </thead>
 | 
				
			||||||
 | 
					                        <tbody>
 | 
				
			||||||
 | 
					                        <?php foreach ($headers as $name => $value) : ?>
 | 
				
			||||||
 | 
					                            <tr>
 | 
				
			||||||
 | 
					                                <td><?= esc($name, 'html') ?></td>
 | 
				
			||||||
 | 
					                                <td><?= esc($response->getHeaderLine($name), 'html') ?></td>
 | 
				
			||||||
 | 
					                            </tr>
 | 
				
			||||||
 | 
					                        <?php endforeach; ?>
 | 
				
			||||||
 | 
					                        </tbody>
 | 
				
			||||||
 | 
					                    </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <?php endif; ?>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Files -->
 | 
				
			||||||
 | 
					            <div class="content" id="files">
 | 
				
			||||||
 | 
					                <?php $files = get_included_files(); ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <ol>
 | 
				
			||||||
 | 
					                <?php foreach ($files as $file) :?>
 | 
				
			||||||
 | 
					                    <li><?= esc(clean_path($file)) ?></li>
 | 
				
			||||||
 | 
					                <?php endforeach ?>
 | 
				
			||||||
 | 
					                </ol>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Memory -->
 | 
				
			||||||
 | 
					            <div class="content" id="memory">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <table>
 | 
				
			||||||
 | 
					                    <tbody>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>Memory Usage</td>
 | 
				
			||||||
 | 
					                            <td><?= esc(static::describeMemory(memory_get_usage(true))) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td style="width: 12em">Peak Memory Usage:</td>
 | 
				
			||||||
 | 
					                            <td><?= esc(static::describeMemory(memory_get_peak_usage(true))) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr>
 | 
				
			||||||
 | 
					                            <td>Memory Limit:</td>
 | 
				
			||||||
 | 
					                            <td><?= esc(ini_get('memory_limit')) ?></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                    </tbody>
 | 
				
			||||||
 | 
					                </table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </div>  <!-- /tab-content -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div> <!-- /container -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="footer">
 | 
				
			||||||
 | 
					        <div class="container">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <p>
 | 
				
			||||||
 | 
					                Displayed at <?= esc(date('H:i:sa')) ?> —
 | 
				
			||||||
 | 
					                PHP: <?= esc(PHP_VERSION) ?>  —
 | 
				
			||||||
 | 
					                CodeIgniter: <?= esc(\CodeIgniter\CodeIgniter::CI_VERSION) ?>
 | 
				
			||||||
 | 
					            </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										25
									
								
								app/Views/errors/html/production.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								app/Views/errors/html/production.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					<!doctype html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
 | 
					    <meta name="robots" content="noindex">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <title>Whoops!</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <style type="text/css">
 | 
				
			||||||
 | 
					        <?= preg_replace('#[\r\n\t ]+#', ' ', file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'debug.css')) ?>
 | 
				
			||||||
 | 
					    </style>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="container text-center">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <h1 class="headline">Whoops!</h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <p class="lead">We seem to have hit a snag. Please try again later...</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										21
									
								
								app/Views/home.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								app/Views/home.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<?= $this->extend('layouts/default') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->section('content') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="has-text-centered">
 | 
				
			||||||
 | 
					    <?php if ($authorised): ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h3>
 | 
				
			||||||
 | 
					        Wellcome <?= esc($name) ?>
 | 
				
			||||||
 | 
					        (<?= esc($email) ?>) to ci4-auth
 | 
				
			||||||
 | 
					    </h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <?php else : ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <h3>Feel free to try ci4-auth</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <?php endif ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<?= $this->endSection() ?>
 | 
				
			||||||
							
								
								
									
										74
									
								
								app/Views/layouts/default.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								app/Views/layouts/default.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <title>Welcome to ci4-auth</title>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
 | 
					    <meta name="description" content="Example of simple auth in CodeIgniter 4 ">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
				
			||||||
 | 
					    <link rel="shortcut icon" type="image/png" href="/favicon.ico" />
 | 
				
			||||||
 | 
					    <link href="/css/app.css" rel="stylesheet">
 | 
				
			||||||
 | 
					    <?= $this->renderSection('head') ?>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <section class="section">
 | 
				
			||||||
 | 
					        <nav class="navbar is-fixed-top" role="navigation" aria-label="main navigation">
 | 
				
			||||||
 | 
					            <div class="navbar-brand">
 | 
				
			||||||
 | 
					                <a class="navbar-item" href="https://codeigniter.com">
 | 
				
			||||||
 | 
					                    <img src="/img/ci4.png">
 | 
				
			||||||
 | 
					                </a>
 | 
				
			||||||
 | 
					                <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false"
 | 
				
			||||||
 | 
					                    data-target="navbarBasic">
 | 
				
			||||||
 | 
					                    <span aria-hidden="true"></span>
 | 
				
			||||||
 | 
					                    <span aria-hidden="true"></span>
 | 
				
			||||||
 | 
					                    <span aria-hidden="true"></span>
 | 
				
			||||||
 | 
					                </a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div id="navbarBasic" class="navbar-menu">
 | 
				
			||||||
 | 
					                <div class="navbar-start">
 | 
				
			||||||
 | 
					                    <a class="navbar-item" href="<?= base_url() ?>">
 | 
				
			||||||
 | 
					                        Home
 | 
				
			||||||
 | 
					                    </a>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <a class="navbar-item" href="/profile">
 | 
				
			||||||
 | 
					                        Profile
 | 
				
			||||||
 | 
					                    </a>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <div class="navbar-end">
 | 
				
			||||||
 | 
					                    <div class="navbar-item">
 | 
				
			||||||
 | 
					                        <div class="buttons">
 | 
				
			||||||
 | 
					                            <?php if (session()->get('isLoggedIn')): ?>
 | 
				
			||||||
 | 
					                            <a class="button is-light" onclick="event.preventDefault();document.getElementById('logout-form').submit();">
 | 
				
			||||||
 | 
					                                Sign out
 | 
				
			||||||
 | 
					                            </a>
 | 
				
			||||||
 | 
					                            <form id="logout-form" action="/logout" method="POST">
 | 
				
			||||||
 | 
					                            </form>
 | 
				
			||||||
 | 
					                            <?php else : ?>
 | 
				
			||||||
 | 
					                            <a class="button is-primary" href="/register">
 | 
				
			||||||
 | 
					                                <strong>Sign up</strong>
 | 
				
			||||||
 | 
					                            </a>
 | 
				
			||||||
 | 
					                            <a class="button is-light" href="/login">
 | 
				
			||||||
 | 
					                                Sign in
 | 
				
			||||||
 | 
					                            </a>
 | 
				
			||||||
 | 
					                            <?php endif ?>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </nav>
 | 
				
			||||||
 | 
					    </section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="content">
 | 
				
			||||||
 | 
					        <?= $this->renderSection('content') ?>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="/js/app.js"></script>
 | 
				
			||||||
 | 
					    <?= $this->renderSection('javascript') ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										11
									
								
								app/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								app/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <title>403 Forbidden</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>Directory access is forbidden.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										125
									
								
								builds
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										125
									
								
								builds
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,125 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env php
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					define('LATEST_RELEASE', '^4.0');
 | 
				
			||||||
 | 
					define('GITHUB_URL', 'https://github.com/codeigniter4/codeigniter4');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Stability Toggle
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Use this script to toggle the CodeIgniter dependency between the
 | 
				
			||||||
 | 
					 * latest stable release and the most recent development update.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Usage: php builds [release|development]
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Determine the requested stability
 | 
				
			||||||
 | 
					if (empty($argv[1]) || ! in_array($argv[1], ['release', 'development'], true)) {
 | 
				
			||||||
 | 
					    echo 'Usage: php builds [release|development]' . PHP_EOL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    exit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$dev = $argv[1] === 'development';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$modified = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Locate each file and update it for the requested stability
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$file = __DIR__ . DIRECTORY_SEPARATOR . 'composer.json';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (is_file($file)) {
 | 
				
			||||||
 | 
					    $contents = file_get_contents($file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ((string) $contents !== '') {
 | 
				
			||||||
 | 
					        $array = json_decode($contents, true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (is_array($array)) {
 | 
				
			||||||
 | 
					            if ($dev) {
 | 
				
			||||||
 | 
					                $array['minimum-stability'] = 'dev';
 | 
				
			||||||
 | 
					                $array['prefer-stable']     = true;
 | 
				
			||||||
 | 
					                $array['repositories'] ??= [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $found = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                foreach ($array['repositories'] as $repository) {
 | 
				
			||||||
 | 
					                    if ($repository['url'] === GITHUB_URL) {
 | 
				
			||||||
 | 
					                        $found = true;
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (! $found) {
 | 
				
			||||||
 | 
					                    $array['repositories'][] = [
 | 
				
			||||||
 | 
					                        'type' => 'vcs',
 | 
				
			||||||
 | 
					                        'url'  => GITHUB_URL,
 | 
				
			||||||
 | 
					                    ];
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $array['require']['codeigniter4/codeigniter4'] = 'dev-develop';
 | 
				
			||||||
 | 
					                unset($array['require']['codeigniter4/framework']);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                unset($array['minimum-stability']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (isset($array['repositories'])) {
 | 
				
			||||||
 | 
					                    foreach ($array['repositories'] as $i => $repository) {
 | 
				
			||||||
 | 
					                        if ($repository['url'] === GITHUB_URL) {
 | 
				
			||||||
 | 
					                            unset($array['repositories'][$i]);
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (empty($array['repositories'])) {
 | 
				
			||||||
 | 
					                        unset($array['repositories']);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $array['require']['codeigniter4/framework'] = LATEST_RELEASE;
 | 
				
			||||||
 | 
					                unset($array['require']['codeigniter4/codeigniter4']);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            file_put_contents($file, json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            $modified[] = $file;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            echo 'Warning: Unable to decode composer.json! Skipping...' . PHP_EOL;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        echo 'Warning: Unable to read composer.json! Skipping...' . PHP_EOL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$files = [
 | 
				
			||||||
 | 
					    __DIR__ . DIRECTORY_SEPARATOR . 'app/Config/Paths.php',
 | 
				
			||||||
 | 
					    __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml.dist',
 | 
				
			||||||
 | 
					    __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml',
 | 
				
			||||||
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach ($files as $file) {
 | 
				
			||||||
 | 
					    if (is_file($file)) {
 | 
				
			||||||
 | 
					        $contents = file_get_contents($file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($dev) {
 | 
				
			||||||
 | 
					            $contents = str_replace('vendor/codeigniter4/framework', 'vendor/codeigniter4/codeigniter4', $contents);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            $contents = str_replace('vendor/codeigniter4/codeigniter4', 'vendor/codeigniter4/framework', $contents);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        file_put_contents($file, $contents);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $modified[] = $file;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($modified === []) {
 | 
				
			||||||
 | 
					    echo 'No files modified.' . PHP_EOL;
 | 
				
			||||||
 | 
					} else {
 | 
				
			||||||
 | 
					    echo 'The following files were modified:' . PHP_EOL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    foreach ($modified as $file) {
 | 
				
			||||||
 | 
					        echo " * {$file}" . PHP_EOL;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo 'Run `composer update` to sync changes with your vendor folder.' . PHP_EOL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										27
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								composer.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "name": "codeigniter4/appstarter",
 | 
				
			||||||
 | 
					    "type": "project",
 | 
				
			||||||
 | 
					    "description": "CodeIgniter4 starter app",
 | 
				
			||||||
 | 
					    "homepage": "https://codeigniter.com",
 | 
				
			||||||
 | 
					    "license": "MIT",
 | 
				
			||||||
 | 
					    "require": {
 | 
				
			||||||
 | 
					        "php": "^7.4 || ^8.0",
 | 
				
			||||||
 | 
					        "codeigniter4/framework": "^4.0"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "suggest": {
 | 
				
			||||||
 | 
					        "ext-fileinfo": "Improves mime type detection for files"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "autoload": {
 | 
				
			||||||
 | 
					        "exclude-from-classmap": [
 | 
				
			||||||
 | 
					            "**/Database/Migrations/**"
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "scripts": {
 | 
				
			||||||
 | 
					        "test": "phpunit"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "support": {
 | 
				
			||||||
 | 
					        "forum": "http://forum.codeigniter.com/",
 | 
				
			||||||
 | 
					        "source": "https://github.com/codeigniter4/CodeIgniter4",
 | 
				
			||||||
 | 
					        "slack": "https://codeigniterchat.slack.com"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										140
									
								
								env
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								env
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,140 @@
 | 
				
			|||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Example Environment Configuration file
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file can be used as a starting point for your own
 | 
				
			||||||
 | 
					# custom .env files, and contains most of the possible settings
 | 
				
			||||||
 | 
					# available in a default install.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# By default, all of the settings are commented out. If you want
 | 
				
			||||||
 | 
					# to override the setting, you must un-comment it by removing the '#'
 | 
				
			||||||
 | 
					# at the beginning of the line.
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# ENVIRONMENT
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# CI_ENVIRONMENT = production
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# APP
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# app.baseURL = ''
 | 
				
			||||||
 | 
					# If you have trouble with `.`, you could also use `_`.
 | 
				
			||||||
 | 
					# app_baseURL = ''
 | 
				
			||||||
 | 
					# app.forceGlobalSecureRequests = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# app.sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler'
 | 
				
			||||||
 | 
					# app.sessionCookieName = 'ci_session'
 | 
				
			||||||
 | 
					# app.sessionExpiration = 7200
 | 
				
			||||||
 | 
					# app.sessionSavePath = null
 | 
				
			||||||
 | 
					# app.sessionMatchIP = false
 | 
				
			||||||
 | 
					# app.sessionTimeToUpdate = 300
 | 
				
			||||||
 | 
					# app.sessionRegenerateDestroy = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# app.CSPEnabled = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# DATABASE
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# database.default.hostname = localhost
 | 
				
			||||||
 | 
					# database.default.database = ci4
 | 
				
			||||||
 | 
					# database.default.username = root
 | 
				
			||||||
 | 
					# database.default.password = root
 | 
				
			||||||
 | 
					# database.default.DBDriver = MySQLi
 | 
				
			||||||
 | 
					# database.default.DBPrefix =
 | 
				
			||||||
 | 
					# database.default.port = 3306
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# database.tests.hostname = localhost
 | 
				
			||||||
 | 
					# database.tests.database = ci4_test
 | 
				
			||||||
 | 
					# database.tests.username = root
 | 
				
			||||||
 | 
					# database.tests.password = root
 | 
				
			||||||
 | 
					# database.tests.DBDriver = MySQLi
 | 
				
			||||||
 | 
					# database.tests.DBPrefix =
 | 
				
			||||||
 | 
					# database.tests.port = 3306
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# CONTENT SECURITY POLICY
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# contentsecuritypolicy.reportOnly = false
 | 
				
			||||||
 | 
					# contentsecuritypolicy.defaultSrc = 'none'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.scriptSrc = 'self'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.styleSrc = 'self'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.imageSrc = 'self'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.baseURI = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.childSrc = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.connectSrc = 'self'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.fontSrc = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.formAction = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.frameAncestors = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.frameSrc = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.mediaSrc = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.objectSrc = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.pluginTypes = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.reportURI = null
 | 
				
			||||||
 | 
					# contentsecuritypolicy.sandbox = false
 | 
				
			||||||
 | 
					# contentsecuritypolicy.upgradeInsecureRequests = false
 | 
				
			||||||
 | 
					# contentsecuritypolicy.styleNonceTag = '{csp-style-nonce}'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.scriptNonceTag = '{csp-script-nonce}'
 | 
				
			||||||
 | 
					# contentsecuritypolicy.autoNonce = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# COOKIE
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# cookie.prefix = ''
 | 
				
			||||||
 | 
					# cookie.expires = 0
 | 
				
			||||||
 | 
					# cookie.path = '/'
 | 
				
			||||||
 | 
					# cookie.domain = ''
 | 
				
			||||||
 | 
					# cookie.secure = false
 | 
				
			||||||
 | 
					# cookie.httponly = false
 | 
				
			||||||
 | 
					# cookie.samesite = 'Lax'
 | 
				
			||||||
 | 
					# cookie.raw = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# ENCRYPTION
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# encryption.key =
 | 
				
			||||||
 | 
					# encryption.driver = OpenSSL
 | 
				
			||||||
 | 
					# encryption.blockSize = 16
 | 
				
			||||||
 | 
					# encryption.digest = SHA512
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# HONEYPOT
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# honeypot.hidden = 'true'
 | 
				
			||||||
 | 
					# honeypot.label = 'Fill This Field'
 | 
				
			||||||
 | 
					# honeypot.name = 'honeypot'
 | 
				
			||||||
 | 
					# honeypot.template = '<label>{label}</label><input type="text" name="{name}" value=""/>'
 | 
				
			||||||
 | 
					# honeypot.container = '<div style="display:none">{template}</div>'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# SECURITY
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# security.csrfProtection = 'cookie'
 | 
				
			||||||
 | 
					# security.tokenRandomize = false
 | 
				
			||||||
 | 
					# security.tokenName = 'csrf_token_name'
 | 
				
			||||||
 | 
					# security.headerName = 'X-CSRF-TOKEN'
 | 
				
			||||||
 | 
					# security.cookieName = 'csrf_cookie_name'
 | 
				
			||||||
 | 
					# security.expires = 7200
 | 
				
			||||||
 | 
					# security.regenerate = true
 | 
				
			||||||
 | 
					# security.redirect = true
 | 
				
			||||||
 | 
					# security.samesite = 'Lax'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# LOGGER
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# logger.threshold = 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					# CURLRequest
 | 
				
			||||||
 | 
					#--------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# curlrequest.shareOptions = true
 | 
				
			||||||
							
								
								
									
										57
									
								
								phpunit.xml.dist
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								phpunit.xml.dist
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
				
			||||||
 | 
					        bootstrap="vendor/codeigniter4/framework/system/Test/bootstrap.php"
 | 
				
			||||||
 | 
					        backupGlobals="false"
 | 
				
			||||||
 | 
					        colors="true"
 | 
				
			||||||
 | 
					        convertErrorsToExceptions="true"
 | 
				
			||||||
 | 
					        convertNoticesToExceptions="true"
 | 
				
			||||||
 | 
					        convertWarningsToExceptions="true"
 | 
				
			||||||
 | 
					        stopOnError="false"
 | 
				
			||||||
 | 
					        stopOnFailure="false"
 | 
				
			||||||
 | 
					        stopOnIncomplete="false"
 | 
				
			||||||
 | 
					        stopOnSkipped="false"
 | 
				
			||||||
 | 
					        xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd">
 | 
				
			||||||
 | 
					    <coverage includeUncoveredFiles="true" processUncoveredFiles="true">
 | 
				
			||||||
 | 
					        <include>
 | 
				
			||||||
 | 
					            <directory suffix=".php">./app</directory>
 | 
				
			||||||
 | 
					        </include>
 | 
				
			||||||
 | 
					        <exclude>
 | 
				
			||||||
 | 
					            <directory suffix=".php">./app/Views</directory>
 | 
				
			||||||
 | 
					            <file>./app/Config/Routes.php</file>
 | 
				
			||||||
 | 
					        </exclude>
 | 
				
			||||||
 | 
					        <report>
 | 
				
			||||||
 | 
					            <clover outputFile="build/logs/clover.xml"/>
 | 
				
			||||||
 | 
					            <html outputDirectory="build/logs/html"/>
 | 
				
			||||||
 | 
					            <php outputFile="build/logs/coverage.serialized"/>
 | 
				
			||||||
 | 
					            <text outputFile="php://stdout" showUncoveredFiles="false"/>
 | 
				
			||||||
 | 
					        </report>
 | 
				
			||||||
 | 
					    </coverage>
 | 
				
			||||||
 | 
					    <testsuites>
 | 
				
			||||||
 | 
					        <testsuite name="App">
 | 
				
			||||||
 | 
					            <directory>./tests</directory>
 | 
				
			||||||
 | 
					        </testsuite>
 | 
				
			||||||
 | 
					    </testsuites>
 | 
				
			||||||
 | 
					    <logging>
 | 
				
			||||||
 | 
					        <testdoxHtml outputFile="build/logs/testdox.html"/>
 | 
				
			||||||
 | 
					        <testdoxText outputFile="build/logs/testdox.txt"/>
 | 
				
			||||||
 | 
					        <junit outputFile="build/logs/logfile.xml"/>
 | 
				
			||||||
 | 
					    </logging>
 | 
				
			||||||
 | 
					    <php>
 | 
				
			||||||
 | 
					        <server name="app.baseURL" value="http://example.com/"/>
 | 
				
			||||||
 | 
					        <!-- Directory containing phpunit.xml -->
 | 
				
			||||||
 | 
					        <const name="HOMEPATH" value="./"/>
 | 
				
			||||||
 | 
					        <!-- Directory containing the Paths config file -->
 | 
				
			||||||
 | 
					        <const name="CONFIGPATH" value="./app/Config/"/>
 | 
				
			||||||
 | 
					        <!-- Directory containing the front controller (index.php) -->
 | 
				
			||||||
 | 
					        <const name="PUBLICPATH" value="./public/"/>
 | 
				
			||||||
 | 
					        <!-- Database configuration -->
 | 
				
			||||||
 | 
					        <!-- Uncomment to provide your own database for testing
 | 
				
			||||||
 | 
					        <env name="database.tests.hostname" value="localhost"/>
 | 
				
			||||||
 | 
					        <env name="database.tests.database" value="tests"/>
 | 
				
			||||||
 | 
					        <env name="database.tests.username" value="tests_user"/>
 | 
				
			||||||
 | 
					        <env name="database.tests.password" value=""/>
 | 
				
			||||||
 | 
					        <env name="database.tests.DBDriver" value="MySQLi"/>
 | 
				
			||||||
 | 
					        <env name="database.tests.DBPrefix" value="tests_"/>
 | 
				
			||||||
 | 
					        -->
 | 
				
			||||||
 | 
					    </php>
 | 
				
			||||||
 | 
					</phpunit>
 | 
				
			||||||
							
								
								
									
										112
									
								
								preload.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								preload.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,112 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This file is part of CodeIgniter 4 framework.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * (c) CodeIgniter Foundation <admin@codeigniter.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * For the full copyright and license information, please view
 | 
				
			||||||
 | 
					 * the LICENSE file that was distributed with this source code.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Sample file for Preloading
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * See https://www.php.net/manual/en/opcache.preloading.php
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * How to Use:
 | 
				
			||||||
 | 
					 *   1. Set preload::$paths.
 | 
				
			||||||
 | 
					 *   2. Set opcache.preload in php.ini.
 | 
				
			||||||
 | 
					 *     php.ini:
 | 
				
			||||||
 | 
					 *     opcache.preload=/path/to/preload.php
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Load the paths config file
 | 
				
			||||||
 | 
					require __DIR__ . '/app/Config/Paths.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Path to the front controller
 | 
				
			||||||
 | 
					define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * See https://www.php.net/manual/en/function.str-contains.php#126277
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					if (! function_exists('str_contains')) {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Polyfill of str_contains()
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    function str_contains(string $haystack, string $needle): bool
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return empty($needle) || strpos($haystack, $needle) !== false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class preload
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @var array Paths to preload.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private array $paths = [
 | 
				
			||||||
 | 
					        [
 | 
				
			||||||
 | 
					            'include' => __DIR__ . '/vendor/codeigniter4/framework/system',
 | 
				
			||||||
 | 
					            'exclude' => [
 | 
				
			||||||
 | 
					                // Not needed if you don't use them.
 | 
				
			||||||
 | 
					                '/system/Database/OCI8/',
 | 
				
			||||||
 | 
					                '/system/Database/Postgre/',
 | 
				
			||||||
 | 
					                '/system/Database/SQLSRV/',
 | 
				
			||||||
 | 
					                // Not needed.
 | 
				
			||||||
 | 
					                '/system/Database/Seeder.php',
 | 
				
			||||||
 | 
					                '/system/Test/',
 | 
				
			||||||
 | 
					                '/system/Language/',
 | 
				
			||||||
 | 
					                '/system/CLI/',
 | 
				
			||||||
 | 
					                '/system/Commands/',
 | 
				
			||||||
 | 
					                '/system/Publisher/',
 | 
				
			||||||
 | 
					                '/system/ComposerScripts.php',
 | 
				
			||||||
 | 
					                '/Views/',
 | 
				
			||||||
 | 
					                // Errors occur.
 | 
				
			||||||
 | 
					                '/system/Config/Routes.php',
 | 
				
			||||||
 | 
					                '/system/ThirdParty/',
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function __construct()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->loadAutoloader();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private function loadAutoloader()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $paths = new Config\Paths();
 | 
				
			||||||
 | 
					        require rtrim($paths->systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Load PHP files.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function load()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        foreach ($this->paths as $path) {
 | 
				
			||||||
 | 
					            $directory = new RecursiveDirectoryIterator($path['include']);
 | 
				
			||||||
 | 
					            $fullTree  = new RecursiveIteratorIterator($directory);
 | 
				
			||||||
 | 
					            $phpFiles  = new RegexIterator(
 | 
				
			||||||
 | 
					                $fullTree,
 | 
				
			||||||
 | 
					                '/.+((?<!Test)+\.php$)/i',
 | 
				
			||||||
 | 
					                RecursiveRegexIterator::GET_MATCH
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach ($phpFiles as $key => $file) {
 | 
				
			||||||
 | 
					                foreach ($path['exclude'] as $exclude) {
 | 
				
			||||||
 | 
					                    if (str_contains($file[0], $exclude)) {
 | 
				
			||||||
 | 
					                        continue 2;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                require_once $file[0];
 | 
				
			||||||
 | 
					                echo 'Loaded: ' . $file[0] . "\n";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(new preload())->load();
 | 
				
			||||||
							
								
								
									
										49
									
								
								public/.htaccess
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								public/.htaccess
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					# Disable directory browsing
 | 
				
			||||||
 | 
					Options All -Indexes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ----------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Rewrite engine
 | 
				
			||||||
 | 
					# ----------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Turning on the rewrite engine is necessary for the following rules and features.
 | 
				
			||||||
 | 
					# FollowSymLinks must be enabled for this to work.
 | 
				
			||||||
 | 
					<IfModule mod_rewrite.c>
 | 
				
			||||||
 | 
						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}]
 | 
				
			||||||
 | 
					</IfModule>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<IfModule !mod_rewrite.c>
 | 
				
			||||||
 | 
						# 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
 | 
				
			||||||
 | 
					</IfModule>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Disable server signature start
 | 
				
			||||||
 | 
						ServerSignature Off
 | 
				
			||||||
 | 
					# Disable server signature end
 | 
				
			||||||
							
								
								
									
										1
									
								
								public/css/app.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/css/app.css
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					@import url('/css/bulma.min.css');
 | 
				
			||||||
							
								
								
									
										1
									
								
								public/css/bulma.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								public/css/bulma.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 5.3 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								public/img/ci4.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/img/ci4.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 8.1 KiB  | 
							
								
								
									
										67
									
								
								public/index.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								public/index.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,67 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Check PHP version.
 | 
				
			||||||
 | 
					$minPhpVersion = '7.4'; // If you update this, don't forget to update `spark`.
 | 
				
			||||||
 | 
					if (version_compare(PHP_VERSION, $minPhpVersion, '<')) {
 | 
				
			||||||
 | 
					    $message = sprintf(
 | 
				
			||||||
 | 
					        'Your PHP version must be %s or higher to run CodeIgniter. Current version: %s',
 | 
				
			||||||
 | 
					        $minPhpVersion,
 | 
				
			||||||
 | 
					        PHP_VERSION
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    exit($message);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Path to the front controller (this file)
 | 
				
			||||||
 | 
					define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Ensure the current directory is pointing to the front controller's directory
 | 
				
			||||||
 | 
					chdir(FCPATH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * BOOTSTRAP THE APPLICATION
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * This process sets up the path constants, loads and registers
 | 
				
			||||||
 | 
					 * our autoloader, along with Composer's, loads our constants
 | 
				
			||||||
 | 
					 * and fires up an environment-specific bootstrapping.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Load our paths config file
 | 
				
			||||||
 | 
					// This is the line that might need to be changed, depending on your folder structure.
 | 
				
			||||||
 | 
					require FCPATH . '../app/Config/Paths.php';
 | 
				
			||||||
 | 
					// ^^^ Change this line if you move your application folder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$paths = new Config\Paths();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Location of the framework bootstrap file.
 | 
				
			||||||
 | 
					require rtrim($paths->systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Load environment settings from .env files into $_SERVER and $_ENV
 | 
				
			||||||
 | 
					require_once SYSTEMPATH . 'Config/DotEnv.php';
 | 
				
			||||||
 | 
					(new CodeIgniter\Config\DotEnv(ROOTPATH))->load();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * GRAB OUR CODEIGNITER INSTANCE
 | 
				
			||||||
 | 
					 * ---------------------------------------------------------------
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The CodeIgniter class contains the core functionality to make
 | 
				
			||||||
 | 
					 * the application run, and does all of the dirty work to get
 | 
				
			||||||
 | 
					 * the pieces all working together.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$app = Config\Services::codeigniter();
 | 
				
			||||||
 | 
					$app->initialize();
 | 
				
			||||||
 | 
					$context = is_cli() ? 'php-cli' : 'web';
 | 
				
			||||||
 | 
					$app->setContext($context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * LAUNCH THE APPLICATION
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * Now that everything is setup, it's time to actually fire
 | 
				
			||||||
 | 
					 * up the engines and make this app do its thang.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$app->run();
 | 
				
			||||||
							
								
								
									
										38
									
								
								public/js/app.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								public/js/app.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					/* Bluma toggles the class is-active on both the navbar-burger
 | 
				
			||||||
 | 
					   and the targeted navbar-menu, in Vanilla Javascript.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Get all "navbar-burger" elements
 | 
				
			||||||
 | 
					    const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    // Add a click event on each of them
 | 
				
			||||||
 | 
					    $navbarBurgers.forEach(el => {
 | 
				
			||||||
 | 
					      el.addEventListener('click', () => {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					        // Get the target from the "data-target" attribute
 | 
				
			||||||
 | 
					        const target = el.dataset.target;
 | 
				
			||||||
 | 
					        const $target = document.getElementById(target);
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					        // Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
 | 
				
			||||||
 | 
					        el.classList.toggle('is-active');
 | 
				
			||||||
 | 
					        $target.classList.toggle('is-active');
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  /* Bluma close
 | 
				
			||||||
 | 
					     notification button.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					  document.addEventListener('DOMContentLoaded', () => {
 | 
				
			||||||
 | 
					    (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {
 | 
				
			||||||
 | 
					      const $notification = $delete.parentNode;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					      $delete.addEventListener('click', () => {
 | 
				
			||||||
 | 
					        $notification.parentNode.removeChild($notification);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
							
								
								
									
										2
									
								
								public/robots.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								public/robots.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					User-agent: *
 | 
				
			||||||
 | 
					Disallow: 
 | 
				
			||||||
							
								
								
									
										102
									
								
								spark
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										102
									
								
								spark
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,102 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env php
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This file is part of CodeIgniter 4 framework.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * (c) CodeIgniter Foundation <admin@codeigniter.com>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * For the full copyright and license information, please view
 | 
				
			||||||
 | 
					 * the LICENSE file that was distributed with this source code.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * CodeIgniter command-line tools
 | 
				
			||||||
 | 
					 * --------------------------------------------------------------------
 | 
				
			||||||
 | 
					 * The main entry point into the CLI system and allows you to run
 | 
				
			||||||
 | 
					 * commands and perform maintenance on your application.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Because CodeIgniter can handle CLI requests as just another web request
 | 
				
			||||||
 | 
					 * this class mainly acts as a passthru to the framework itself.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Refuse to run when called from php-cgi
 | 
				
			||||||
 | 
					if (strpos(PHP_SAPI, 'cgi') === 0) {
 | 
				
			||||||
 | 
					    exit("The cli tool is not supported when running php-cgi. It needs php-cli to function!\n\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Check PHP version.
 | 
				
			||||||
 | 
					$minPhpVersion = '7.4'; // If you update this, don't forget to update `public/index.php`.
 | 
				
			||||||
 | 
					if (version_compare(PHP_VERSION, $minPhpVersion, '<')) {
 | 
				
			||||||
 | 
					    $message = sprintf(
 | 
				
			||||||
 | 
					        'Your PHP version must be %s or higher to run CodeIgniter. Current version: %s',
 | 
				
			||||||
 | 
					        $minPhpVersion,
 | 
				
			||||||
 | 
					        PHP_VERSION
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    exit($message);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// We want errors to be shown when using it from the CLI.
 | 
				
			||||||
 | 
					error_reporting(-1);
 | 
				
			||||||
 | 
					ini_set('display_errors', '1');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @var bool
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @deprecated No longer in use. `CodeIgniter` has `$context` property.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					define('SPARKED', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Path to the front controller
 | 
				
			||||||
 | 
					define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Ensure the current directory is pointing to the front controller's directory
 | 
				
			||||||
 | 
					chdir(FCPATH);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * BOOTSTRAP THE APPLICATION
 | 
				
			||||||
 | 
					 *---------------------------------------------------------------
 | 
				
			||||||
 | 
					 * This process sets up the path constants, loads and registers
 | 
				
			||||||
 | 
					 * our autoloader, along with Composer's, loads our constants
 | 
				
			||||||
 | 
					 * and fires up an environment-specific bootstrapping.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Load our paths config file
 | 
				
			||||||
 | 
					// This is the line that might need to be changed, depending on your folder structure.
 | 
				
			||||||
 | 
					require FCPATH . '../app/Config/Paths.php';
 | 
				
			||||||
 | 
					// ^^^ Change this line if you move your application folder
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$paths = new Config\Paths();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Location of the framework bootstrap file.
 | 
				
			||||||
 | 
					require rtrim($paths->systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Load environment settings from .env files into $_SERVER and $_ENV
 | 
				
			||||||
 | 
					require_once SYSTEMPATH . 'Config/DotEnv.php';
 | 
				
			||||||
 | 
					(new CodeIgniter\Config\DotEnv(ROOTPATH))->load();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Grab our CodeIgniter
 | 
				
			||||||
 | 
					$app = Config\Services::codeigniter();
 | 
				
			||||||
 | 
					$app->initialize();
 | 
				
			||||||
 | 
					$app->setContext('spark');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Grab our Console
 | 
				
			||||||
 | 
					$console = new CodeIgniter\CLI\Console($app);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Show basic information before we do anything else.
 | 
				
			||||||
 | 
					if (is_int($suppress = array_search('--no-header', $_SERVER['argv'], true))) {
 | 
				
			||||||
 | 
					    unset($_SERVER['argv'][$suppress]); // @codeCoverageIgnore
 | 
				
			||||||
 | 
					    $suppress = true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$console->showHeader($suppress);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// fire off the command in the main framework.
 | 
				
			||||||
 | 
					$response = $console->run();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($response->getStatusCode() >= 300) {
 | 
				
			||||||
 | 
					    exit($response->getStatusCode());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										122
									
								
								tests/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								tests/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,122 @@
 | 
				
			|||||||
 | 
					# Running Application Tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is the quick-start to CodeIgniter testing. Its intent is to describe what
 | 
				
			||||||
 | 
					it takes to set up your application and get it ready to run unit tests.
 | 
				
			||||||
 | 
					It is not intended to be a full description of the test features that you can
 | 
				
			||||||
 | 
					use to test your application. Those details can be found in the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Resources
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [CodeIgniter 4 User Guide on Testing](https://codeigniter4.github.io/userguide/testing/index.html)
 | 
				
			||||||
 | 
					* [PHPUnit docs](https://phpunit.de/documentation.html)
 | 
				
			||||||
 | 
					* [Any tutorials on Unit testing in CI4?](https://forum.codeigniter.com/showthread.php?tid=81830)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Requirements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is recommended to use the latest version of PHPUnit. At the time of this
 | 
				
			||||||
 | 
					writing we are running version 9.x. Support for this has been built into the
 | 
				
			||||||
 | 
					**composer.json** file that ships with CodeIgniter and can easily be installed
 | 
				
			||||||
 | 
					via [Composer](https://getcomposer.org/) if you don't already have it installed globally.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					> composer install
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If running under macOS or Linux, you can create a symbolic link to make running tests a touch nicer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					> ln -s ./vendor/bin/phpunit ./phpunit
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You also need to install [XDebug](https://xdebug.org/docs/install) in order
 | 
				
			||||||
 | 
					for code coverage to be calculated successfully. After installing `XDebug`, you must add `xdebug.mode=coverage` in the **php.ini** file to enable code coverage.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setting Up
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A number of the tests use a running database.
 | 
				
			||||||
 | 
					In order to set up the database edit the details for the `tests` group in
 | 
				
			||||||
 | 
					**app/Config/Database.php** or **phpunit.xml**.
 | 
				
			||||||
 | 
					Make sure that you provide a database engine that is currently running on your machine.
 | 
				
			||||||
 | 
					More details on a test database setup are in the
 | 
				
			||||||
 | 
					[Testing Your Database](https://codeigniter4.github.io/userguide/testing/database.html) section of the documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Running the tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The entire test suite can be run by simply typing one command-line command from the main directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					> ./phpunit
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using Windows, use the following command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					> vendor\bin\phpunit
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can limit tests to those within a single test directory by specifying the
 | 
				
			||||||
 | 
					directory name after phpunit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					> ./phpunit app/Models
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Generating Code Coverage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To generate coverage information, including HTML reports you can view in your browser,
 | 
				
			||||||
 | 
					you can use the following command:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```console
 | 
				
			||||||
 | 
					> ./phpunit --colors --coverage-text=tests/coverage.txt --coverage-html=tests/coverage/ -d memory_limit=1024m
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This runs all of the tests again collecting information about how many lines,
 | 
				
			||||||
 | 
					functions, and files are tested. It also reports the percentage of the code that is covered by tests.
 | 
				
			||||||
 | 
					It is collected in two formats: a simple text file that provides an overview as well
 | 
				
			||||||
 | 
					as a comprehensive collection of HTML files that show the status of every line of code in the project.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The text file can be found at **tests/coverage.txt**.
 | 
				
			||||||
 | 
					The HTML files can be viewed by opening **tests/coverage/index.html** in your favorite browser.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## PHPUnit XML Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The repository has a ``phpunit.xml.dist`` file in the project root that's used for
 | 
				
			||||||
 | 
					PHPUnit configuration. This is used to provide a default configuration if you
 | 
				
			||||||
 | 
					do not have your own configuration file in the project root.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The normal practice would be to copy ``phpunit.xml.dist`` to ``phpunit.xml``
 | 
				
			||||||
 | 
					(which is git ignored), and to tailor it as you see fit.
 | 
				
			||||||
 | 
					For instance, you might wish to exclude database tests, or automatically generate
 | 
				
			||||||
 | 
					HTML code coverage reports.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Test Cases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Every test needs a *test case*, or class that your tests extend. CodeIgniter 4
 | 
				
			||||||
 | 
					provides a few that you may use directly:
 | 
				
			||||||
 | 
					* `CodeIgniter\Test\CIUnitTestCase` - for basic tests with no other service needs
 | 
				
			||||||
 | 
					* `CodeIgniter\Test\DatabaseTestTrait` - for tests that need database access
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Most of the time you will want to write your own test cases to hold functions and services
 | 
				
			||||||
 | 
					common to your test suites.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Creating Tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All tests go in the **tests/** directory. Each test file is a class that extends a
 | 
				
			||||||
 | 
					**Test Case** (see above) and contains methods for the individual tests. These method
 | 
				
			||||||
 | 
					names must start with the word "test" and should have descriptive names for precisely what
 | 
				
			||||||
 | 
					they are testing:
 | 
				
			||||||
 | 
					`testUserCanModifyFile()` `testOutputColorMatchesInput()` `testIsLoggedInFailsWithInvalidUser()`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Writing tests is an art, and there are many resources available to help learn how.
 | 
				
			||||||
 | 
					Review the links above and always pay attention to your code coverage.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Database Tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tests can include migrating, seeding, and testing against a mock or live<sup>1</sup> database.
 | 
				
			||||||
 | 
					Be sure to modify the test case (or create your own) to point to your seed and migrations
 | 
				
			||||||
 | 
					and include any additional steps to be run before tests in the `setUp()` method.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<sup>1</sup> Note: If you are using database tests that require a live database connection
 | 
				
			||||||
 | 
					you will need to rename **phpunit.xml.dist** to **phpunit.xml**, uncomment the database
 | 
				
			||||||
 | 
					configuration lines and add your connection details. Prevent **phpunit.xml** from being
 | 
				
			||||||
 | 
					tracked in your repo by adding it to **.gitignore**.
 | 
				
			||||||
@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests\Support\Database\Migrations;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Database\Migration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExampleMigration extends Migration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected $DBGroup = 'tests';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function up()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->forge->addField('id');
 | 
				
			||||||
 | 
					        $this->forge->addField([
 | 
				
			||||||
 | 
					            'name'       => ['type' => 'varchar', 'constraint' => 31],
 | 
				
			||||||
 | 
					            'uid'        => ['type' => 'varchar', 'constraint' => 31],
 | 
				
			||||||
 | 
					            'class'      => ['type' => 'varchar', 'constraint' => 63],
 | 
				
			||||||
 | 
					            'icon'       => ['type' => 'varchar', 'constraint' => 31],
 | 
				
			||||||
 | 
					            'summary'    => ['type' => 'varchar', 'constraint' => 255],
 | 
				
			||||||
 | 
					            'created_at' => ['type' => 'datetime', 'null' => true],
 | 
				
			||||||
 | 
					            'updated_at' => ['type' => 'datetime', 'null' => true],
 | 
				
			||||||
 | 
					            'deleted_at' => ['type' => 'datetime', 'null' => true],
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->forge->addKey('name');
 | 
				
			||||||
 | 
					        $this->forge->addKey('uid');
 | 
				
			||||||
 | 
					        $this->forge->addKey(['deleted_at', 'id']);
 | 
				
			||||||
 | 
					        $this->forge->addKey('created_at');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->forge->createTable('factories');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function down()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->forge->dropTable('factories');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										41
									
								
								tests/_support/Database/Seeds/ExampleSeeder.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								tests/_support/Database/Seeds/ExampleSeeder.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests\Support\Database\Seeds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Database\Seeder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExampleSeeder extends Seeder
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function run()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $factories = [
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                'name'    => 'Test Factory',
 | 
				
			||||||
 | 
					                'uid'     => 'test001',
 | 
				
			||||||
 | 
					                'class'   => 'Factories\Tests\NewFactory',
 | 
				
			||||||
 | 
					                'icon'    => 'fas fa-puzzle-piece',
 | 
				
			||||||
 | 
					                'summary' => 'Longer sample text for testing',
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                'name'    => 'Widget Factory',
 | 
				
			||||||
 | 
					                'uid'     => 'widget',
 | 
				
			||||||
 | 
					                'class'   => 'Factories\Tests\WidgetPlant',
 | 
				
			||||||
 | 
					                'icon'    => 'fas fa-puzzle-piece',
 | 
				
			||||||
 | 
					                'summary' => 'Create widgets in your factory',
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            [
 | 
				
			||||||
 | 
					                'name'    => 'Evil Factory',
 | 
				
			||||||
 | 
					                'uid'     => 'evil-maker',
 | 
				
			||||||
 | 
					                'class'   => 'Factories\Evil\MyFactory',
 | 
				
			||||||
 | 
					                'icon'    => 'fas fa-book-dead',
 | 
				
			||||||
 | 
					                'summary' => 'Abandon all hope, ye who enter here',
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $builder = $this->db->table('factories');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        foreach ($factories as $factory) {
 | 
				
			||||||
 | 
					            $builder->insert($factory);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										17
									
								
								tests/_support/Libraries/ConfigReader.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								tests/_support/Libraries/ConfigReader.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests\Support\Libraries;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class ConfigReader
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * An extension of BaseConfig that prevents the constructor from
 | 
				
			||||||
 | 
					 * loading external values. Used to read actual local values from
 | 
				
			||||||
 | 
					 * a config file.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class ConfigReader extends \Config\App
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function __construct()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								tests/_support/Models/ExampleModel.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								tests/_support/Models/ExampleModel.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Tests\Support\Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Model;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExampleModel extends Model
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected $table          = 'factories';
 | 
				
			||||||
 | 
					    protected $primaryKey     = 'id';
 | 
				
			||||||
 | 
					    protected $returnType     = 'object';
 | 
				
			||||||
 | 
					    protected $useSoftDeletes = false;
 | 
				
			||||||
 | 
					    protected $allowedFields  = [
 | 
				
			||||||
 | 
					        'name',
 | 
				
			||||||
 | 
					        'uid',
 | 
				
			||||||
 | 
					        'class',
 | 
				
			||||||
 | 
					        'icon',
 | 
				
			||||||
 | 
					        'summary',
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    protected $useTimestamps      = true;
 | 
				
			||||||
 | 
					    protected $validationRules    = [];
 | 
				
			||||||
 | 
					    protected $validationMessages = [];
 | 
				
			||||||
 | 
					    protected $skipValidation     = false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										45
									
								
								tests/database/ExampleDatabaseTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								tests/database/ExampleDatabaseTest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Test\CIUnitTestCase;
 | 
				
			||||||
 | 
					use CodeIgniter\Test\DatabaseTestTrait;
 | 
				
			||||||
 | 
					use Tests\Support\Database\Seeds\ExampleSeeder;
 | 
				
			||||||
 | 
					use Tests\Support\Models\ExampleModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @internal
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					final class ExampleDatabaseTest extends CIUnitTestCase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    use DatabaseTestTrait;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected $seed = ExampleSeeder::class;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testModelFindAll()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $model = new ExampleModel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Get every row created by ExampleSeeder
 | 
				
			||||||
 | 
					        $objects = $model->findAll();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Make sure the count is as expected
 | 
				
			||||||
 | 
					        $this->assertCount(3, $objects);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testSoftDeleteLeavesRow()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $model = new ExampleModel();
 | 
				
			||||||
 | 
					        $this->setPrivateProperty($model, 'useSoftDeletes', true);
 | 
				
			||||||
 | 
					        $this->setPrivateProperty($model, 'tempUseSoftDeletes', true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $object = $model->first();
 | 
				
			||||||
 | 
					        $model->delete($object->id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // The model should no longer find it
 | 
				
			||||||
 | 
					        $this->assertNull($model->find($object->id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // ... but it should still be in the database
 | 
				
			||||||
 | 
					        $result = $model->builder()->where('id', $object->id)->get()->getResult();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertCount(1, $result);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								tests/session/ExampleSessionTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								tests/session/ExampleSessionTest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Test\CIUnitTestCase;
 | 
				
			||||||
 | 
					use Config\Services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @internal
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					final class ExampleSessionTest extends CIUnitTestCase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function testSessionSimple()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $session = Services::session();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $session->set('logged_in', 123);
 | 
				
			||||||
 | 
					        $this->assertSame(123, $session->get('logged_in'));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										50
									
								
								tests/unit/HealthTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								tests/unit/HealthTest.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use CodeIgniter\Test\CIUnitTestCase;
 | 
				
			||||||
 | 
					use Config\App;
 | 
				
			||||||
 | 
					use Config\Services;
 | 
				
			||||||
 | 
					use Tests\Support\Libraries\ConfigReader;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @internal
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					final class HealthTest extends CIUnitTestCase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public function testIsDefinedAppPath()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->assertTrue(defined('APPPATH'));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testBaseUrlHasBeenSet()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $validation = Services::validation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $env = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check the baseURL in .env
 | 
				
			||||||
 | 
					        if (is_file(HOMEPATH . '.env')) {
 | 
				
			||||||
 | 
					            $env = preg_grep('/^app\.baseURL = ./', file(HOMEPATH . '.env')) !== false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($env) {
 | 
				
			||||||
 | 
					            // BaseURL in .env is a valid URL?
 | 
				
			||||||
 | 
					            // phpunit.xml.dist sets app.baseURL in $_SERVER
 | 
				
			||||||
 | 
					            // So if you set app.baseURL in .env, it takes precedence
 | 
				
			||||||
 | 
					            $config = new App();
 | 
				
			||||||
 | 
					            $this->assertTrue(
 | 
				
			||||||
 | 
					                $validation->check($config->baseURL, 'valid_url'),
 | 
				
			||||||
 | 
					                'baseURL "' . $config->baseURL . '" in .env is not valid URL'
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Get the baseURL in app/Config/App.php
 | 
				
			||||||
 | 
					        // You can't use Config\App, because phpunit.xml.dist sets app.baseURL
 | 
				
			||||||
 | 
					        $reader = new ConfigReader();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // BaseURL in app/Config/App.php is a valid URL?
 | 
				
			||||||
 | 
					        $this->assertTrue(
 | 
				
			||||||
 | 
					            $validation->check($reader->baseURL, 'valid_url'),
 | 
				
			||||||
 | 
					            'baseURL "' . $reader->baseURL . '" in app/Config/App.php is not valid URL'
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								writable/.htaccess
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								writable/.htaccess
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					<IfModule authz_core_module>
 | 
				
			||||||
 | 
					    Require all denied
 | 
				
			||||||
 | 
					</IfModule>
 | 
				
			||||||
 | 
					<IfModule !authz_core_module>
 | 
				
			||||||
 | 
					    Deny from all
 | 
				
			||||||
 | 
					</IfModule>
 | 
				
			||||||
							
								
								
									
										11
									
								
								writable/cache/index.html
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								writable/cache/index.html
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
						<title>403 Forbidden</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>Directory access is forbidden.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										11
									
								
								writable/logs/index.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								writable/logs/index.html
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
						<title>403 Forbidden</title>
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<p>Directory access is forbidden.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user