From 58b4ffe3aff89c890eb526c603886ce31c305cca Mon Sep 17 00:00:00 2001 From: Joey Kimsey Date: Tue, 14 Jan 2025 05:09:01 -0500 Subject: [PATCH] prod setup --- app/controllers/api/auth.php | 2 + app/controllers/api/login.php | 2 + app/controllers/api/users.php | 8 ++ app/controllers/bedrock.php | 47 ++++++++++ app/controllers/canary.php | 47 ++++++++++ app/controllers/hermes.php | 47 ++++++++++ app/controllers/home.php | 14 ++- app/controllers/houdini.php | 47 ++++++++++ app/views/about.html | 9 +- app/views/changes/bedrock.html | 9 ++ app/views/changes/canary.html | 9 ++ app/views/changes/hermes.html | 9 ++ app/views/changes/houdini.html | 9 ++ app/views/deps/bedrock.html | 27 ++++++ app/views/deps/canary.html | 27 ++++++ app/views/deps/hermes.html | 27 ++++++ app/views/deps/houdini.html | 27 ++++++ app/views/deps/index.html | 47 ++++++++++ app/views/landing.html | 145 +++++++++++++++++++++++++++++++ app/views/start.html | 23 +++++ bin/tempus_project.php | 8 ++ images/bedrock.jpg | Bin 0 -> 7995 bytes images/canary.jpg | Bin 0 -> 8435 bytes images/hermes.jpg | Bin 0 -> 12058 bytes images/houdini.jpg | Bin 0 -> 10581 bytes server/nginx.conf | 25 ++++++ server/setup.md | 119 +++++++++++++++++++++++++ server/thetempusproject.com.conf | 44 ++++------ server/ttp.conf | 29 +++++-- 29 files changed, 772 insertions(+), 35 deletions(-) create mode 100644 app/controllers/bedrock.php create mode 100644 app/controllers/canary.php create mode 100644 app/controllers/hermes.php create mode 100644 app/controllers/houdini.php create mode 100644 app/views/changes/bedrock.html create mode 100644 app/views/changes/canary.html create mode 100644 app/views/changes/hermes.html create mode 100644 app/views/changes/houdini.html create mode 100644 app/views/deps/bedrock.html create mode 100644 app/views/deps/canary.html create mode 100644 app/views/deps/hermes.html create mode 100644 app/views/deps/houdini.html create mode 100644 app/views/deps/index.html create mode 100644 app/views/landing.html create mode 100644 app/views/start.html create mode 100644 images/bedrock.jpg create mode 100644 images/canary.jpg create mode 100644 images/hermes.jpg create mode 100644 images/houdini.jpg create mode 100644 server/nginx.conf create mode 100644 server/setup.md diff --git a/app/controllers/api/auth.php b/app/controllers/api/auth.php index a0de860..b5dbc57 100644 --- a/app/controllers/api/auth.php +++ b/app/controllers/api/auth.php @@ -24,6 +24,7 @@ class Auth extends ApiController { self::$tokens = new Token; } +/** public function refresh() { $token = self::$tokens->refresh( self::$authToken->ID ); if ( empty( $token ) ) { @@ -35,4 +36,5 @@ class Auth extends ApiController { } Views::view( 'api.response', ['response' => json_encode( [ $responseType => $response ], true )]); } + */ } \ No newline at end of file diff --git a/app/controllers/api/login.php b/app/controllers/api/login.php index 74536eb..31b79e5 100644 --- a/app/controllers/api/login.php +++ b/app/controllers/api/login.php @@ -31,6 +31,7 @@ class Login extends ApiController { Template::addHeader( 'Content-Type: application/json; charset=utf-8' ); } +/** public function index() { if ( ! Forms::check( 'apiLogin' ) ) { $responseType = 'error'; @@ -47,4 +48,5 @@ class Login extends ApiController { $token = self::$tokens->findOrCreateUserToken( $user->ID, true ); return Views::view( 'api.response', ['response' => json_encode( [ $responseType => $token ], true )]); } + */ } \ No newline at end of file diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index 44168f9..8f06841 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -23,6 +23,13 @@ class Users extends ApiController { self::$user = new User; } + /** + * This is actually just for testing. It can provide attack information in the way of user count if not disabled. + * + * @param [type] $id + * @return void + */ +/** public function find( $id = null ) { $user = self::$user->get( $id ); if ( ! $user ) { @@ -34,4 +41,5 @@ class Users extends ApiController { } Views::view( 'api.response', ['response' => json_encode( [ $responseType => $response ], true )]); } + */ } \ No newline at end of file diff --git a/app/controllers/bedrock.php b/app/controllers/bedrock.php new file mode 100644 index 0000000..ca142af --- /dev/null +++ b/app/controllers/bedrock.php @@ -0,0 +1,47 @@ + + * @link https://TheTempusProject.com + * @license https://opensource.org/licenses/MIT [MIT LICENSE] + */ +namespace TheTempusProject\Controllers; + +use TheTempusProject\Hermes\Functions\Redirect; +use TheTempusProject\Bedrock\Functions\Session; +use TheTempusProject\Bedrock\Functions\Check; +use TheTempusProject\Bedrock\Functions\Input; +use TheTempusProject\Hermes\Functions\Route as Routes; +use TheTempusProject\Houdini\Classes\Issues; +use TheTempusProject\Houdini\Classes\Views; +use TheTempusProject\Houdini\Classes\Components; +use TheTempusProject\Houdini\Classes\Template; +use TheTempusProject\Classes\Controller; +use TheTempusProject\Classes\Forms; +use TheTempusProject\TheTempusProject as App; + +class Bedrock extends Controller { + public function index() { + self::$title = '{SITENAME} - Bedrock'; + self::$pageDescription = 'Bedrock is a dependency of {SITENAME} that provides many components used to manipulate database data and many helper functions vital for running the entire application.'; + Views::view( 'deps.bedrock' ); + } + + public function packagist() { + Redirect::external( 'https://packagist.org/packages/thetempusproject/bedrock' ); + } + + public function git() { + Redirect::external( 'https://git.thetempusproject.com/the-tempus-project/bedrock' ); + } + + public function changes() { + self::$title = '{SITENAME} - Bedrock Changes'; + self::$pageDescription = 'Bedrock is a dependency of {SITENAME} and this pages lists the most recent changes with some details on those changes.'; + Views::view( 'changes.bedrock' ); + } +} diff --git a/app/controllers/canary.php b/app/controllers/canary.php new file mode 100644 index 0000000..e93700e --- /dev/null +++ b/app/controllers/canary.php @@ -0,0 +1,47 @@ + + * @link https://TheTempusProject.com + * @license https://opensource.org/licenses/MIT [MIT LICENSE] + */ +namespace TheTempusProject\Controllers; + +use TheTempusProject\Hermes\Functions\Redirect; +use TheTempusProject\Bedrock\Functions\Session; +use TheTempusProject\Bedrock\Functions\Check; +use TheTempusProject\Bedrock\Functions\Input; +use TheTempusProject\Hermes\Functions\Route as Routes; +use TheTempusProject\Houdini\Classes\Issues; +use TheTempusProject\Houdini\Classes\Views; +use TheTempusProject\Houdini\Classes\Components; +use TheTempusProject\Houdini\Classes\Template; +use TheTempusProject\Classes\Controller; +use TheTempusProject\Classes\Forms; +use TheTempusProject\TheTempusProject as App; + +class Canary extends Controller { + public function index() { + self::$title = '{SITENAME} - Canary'; + self::$pageDescription = 'Canary is a dependency of {SITENAME} that both records and reports logs from various PHP applications.'; + Views::view( 'deps.canary' ); + } + + public function packagist() { + Redirect::external( 'https://packagist.org/packages/thetempusproject/canary' ); + } + + public function git() { + Redirect::external( 'https://git.thetempusproject.com/the-tempus-project/canary' ); + } + + public function changes() { + self::$title = '{SITENAME} - Canary Changes'; + self::$pageDescription = 'Canary is a dependency of {SITENAME} and this pages lists the most recent changes with some details on those changes.'; + Views::view( 'changes.canary' ); + } +} diff --git a/app/controllers/hermes.php b/app/controllers/hermes.php new file mode 100644 index 0000000..bea348d --- /dev/null +++ b/app/controllers/hermes.php @@ -0,0 +1,47 @@ + + * @link https://TheTempusProject.com + * @license https://opensource.org/licenses/MIT [MIT LICENSE] + */ +namespace TheTempusProject\Controllers; + +use TheTempusProject\Hermes\Functions\Redirect; +use TheTempusProject\Bedrock\Functions\Session; +use TheTempusProject\Bedrock\Functions\Check; +use TheTempusProject\Bedrock\Functions\Input; +use TheTempusProject\Hermes\Functions\Route as Routes; +use TheTempusProject\Houdini\Classes\Issues; +use TheTempusProject\Houdini\Classes\Views; +use TheTempusProject\Houdini\Classes\Components; +use TheTempusProject\Houdini\Classes\Template; +use TheTempusProject\Classes\Controller; +use TheTempusProject\Classes\Forms; +use TheTempusProject\TheTempusProject as App; + +class Hermes extends Controller { + public function index() { + self::$title = '{SITENAME} - Hermes'; + self::$pageDescription = 'Hermes is a dependency of {SITENAME} that provides many common helper functions for navigating url components and file systems; designed to work seamlessly regardless of architecture.'; + Views::view( 'deps.hermes' ); + } + + public function packagist() { + Redirect::external( 'https://packagist.org/packages/thetempusproject/hermes' ); + } + + public function git() { + Redirect::external( 'https://git.thetempusproject.com/the-tempus-project/hermes' ); + } + + public function changes() { + self::$title = '{SITENAME} - Hermes Changes'; + self::$pageDescription = 'Hermes is a dependency of {SITENAME} and this pages lists the most recent changes with some details on those changes.'; + Views::view( 'changes.hermes' ); + } +} diff --git a/app/controllers/home.php b/app/controllers/home.php index fe71cbc..7629389 100644 --- a/app/controllers/home.php +++ b/app/controllers/home.php @@ -28,7 +28,7 @@ class Home extends Controller { public function index() { self::$title = '{SITENAME}'; self::$pageDescription = '{SITENAME} is here to provide you a better, faster, and easier - way to create and manage your own web applications.'; - Views::view( 'index' ); + Views::view( 'landing' ); } public function login() { @@ -113,4 +113,16 @@ class Home extends Controller { self::$pageDescription = 'Many times, we aren\'t the first to ask why or how something works. Here you will find a list of {SITENAME} commonly asked questions and our best answers.' ; Views::view( 'faq' ); } + + public function libraries() { + self::$title = 'Libraries - {SITENAME}'; + self::$pageDescription = '{SITENAME} depends on several very important libraries, some of which are developed exclusively to support the project. Here you can find a list with more information.' ; + Views::view( 'deps.index' ); + } + + public function getstarted() { + self::$title = 'Get Started - {SITENAME}'; + self::$pageDescription = '{SITENAME} is a great tool to bring your ideas to reality. On this page, you can find out how to get started today.' ; + Views::view( 'start' ); + } } diff --git a/app/controllers/houdini.php b/app/controllers/houdini.php new file mode 100644 index 0000000..c2dd3ba --- /dev/null +++ b/app/controllers/houdini.php @@ -0,0 +1,47 @@ + + * @link https://TheTempusProject.com + * @license https://opensource.org/licenses/MIT [MIT LICENSE] + */ +namespace TheTempusProject\Controllers; + +use TheTempusProject\Hermes\Functions\Redirect; +use TheTempusProject\Bedrock\Functions\Session; +use TheTempusProject\Bedrock\Functions\Check; +use TheTempusProject\Bedrock\Functions\Input; +use TheTempusProject\Hermes\Functions\Route as Routes; +use TheTempusProject\Houdini\Classes\Issues; +use TheTempusProject\Houdini\Classes\Views; +use TheTempusProject\Houdini\Classes\Components; +use TheTempusProject\Houdini\Classes\Template; +use TheTempusProject\Classes\Controller; +use TheTempusProject\Classes\Forms; +use TheTempusProject\TheTempusProject as App; + +class Houdini extends Controller { + public function index() { + self::$title = '{SITENAME} - Houdini'; + self::$pageDescription = 'Houdini is a dependency of {SITENAME} that allows for the creation and manipulation of objects used in html page creation.'; + Views::view( 'deps.houdini' ); + } + + public function packagist() { + Redirect::external( 'https://packagist.org/packages/thetempusproject/houdini' ); + } + + public function git() { + Redirect::external( 'https://git.thetempusproject.com/the-tempus-project/houdini' ); + } + + public function changes() { + self::$title = '{SITENAME} - Houdini Changes'; + self::$pageDescription = 'Houdini is a dependency of {SITENAME} and this pages lists the most recent changes with some details on those changes.'; + Views::view( 'changes.houdini' ); + } +} diff --git a/app/views/about.html b/app/views/about.html index 9604f08..e7df8d8 100644 --- a/app/views/about.html +++ b/app/views/about.html @@ -1,7 +1,14 @@

Welcome to {SITENAME}

- {SITENAME} was built out of a need to create and manage my own web applications. + {SITENAME} was built out of a need to create and manage web applications. + At the time, I had used wordpress but I didn't want or even need any of the blog functionality. + No matter what plugins you add, no matter how you customize layout, wordpress is still a blog at its core. + There is nothing inherently wrong with a blog, but when you start from a blog, everything is a post, or a plugin. + Under the hood, wordpress is going to run how wordpress wants, as a web interface for accessing text records. +

+

+ The Tempus Project was always intended to be a web application, not a blog.

Right now, this entire system was built and managed by myself. As stated, I have used my own version of this for years, but translating it to a publicly available product is not a 1-to-1 job. There may be bugs or issues encountered while you use the product. I can't guarantee a fix for every need in every case immediately, but I do actively keep track of bugs and work hard to ensure everyone has a great experience using the app. diff --git a/app/views/changes/bedrock.html b/app/views/changes/bedrock.html new file mode 100644 index 0000000..8e1df1c --- /dev/null +++ b/app/views/changes/bedrock.html @@ -0,0 +1,9 @@ +

+

Bedrock Changes

+

+ Here you can find a simple list of the important changes made to the Bedrock library. +

+

+ Not all changes may be addressed individually on this page. +

+
\ No newline at end of file diff --git a/app/views/changes/canary.html b/app/views/changes/canary.html new file mode 100644 index 0000000..4ae2151 --- /dev/null +++ b/app/views/changes/canary.html @@ -0,0 +1,9 @@ +
+

Canary Changes

+

+ Here you can find a simple list of the important changes made to the Canary library. +

+

+ Not all changes may be addressed individually on this page. +

+
\ No newline at end of file diff --git a/app/views/changes/hermes.html b/app/views/changes/hermes.html new file mode 100644 index 0000000..b49f868 --- /dev/null +++ b/app/views/changes/hermes.html @@ -0,0 +1,9 @@ +
+

Hermes Changes

+

+ Here you can find a simple list of the important changes made to the Hermes library. +

+

+ Not all changes may be addressed individually on this page. +

+
\ No newline at end of file diff --git a/app/views/changes/houdini.html b/app/views/changes/houdini.html new file mode 100644 index 0000000..c6e4d7b --- /dev/null +++ b/app/views/changes/houdini.html @@ -0,0 +1,9 @@ +
+

Houdini Changes

+

+ Here you can find a simple list of the important changes made to the Houdini library. +

+

+ Not all changes may be addressed individually on this page. +

+
\ No newline at end of file diff --git a/app/views/deps/bedrock.html b/app/views/deps/bedrock.html new file mode 100644 index 0000000..3d63af2 --- /dev/null +++ b/app/views/deps/bedrock.html @@ -0,0 +1,27 @@ +
+
+
+
+ Bootstrap Themes +
+
+

Bedrock

+

+ Bedrock, as the name may suggest, is the core functionality the project is built on. + From Basic text checks to the core functionality behind models and controllers, bedrock handles it all. +

+ +
+
+
+

+ For a list of recent changes, please check here. +

+
\ No newline at end of file diff --git a/app/views/deps/canary.html b/app/views/deps/canary.html new file mode 100644 index 0000000..98b6031 --- /dev/null +++ b/app/views/deps/canary.html @@ -0,0 +1,27 @@ +
+
+
+
+ Bootstrap Themes +
+
+

Canary

+

+ Canary is a library that allows {SITENAME} to add logs during execution. + The resulting logs can be printed to the browser console in real-time, saved to a log file, or even used on-page for debugging. +

+ +
+
+
+

+ For a list of recent changes, please check here. +

+
\ No newline at end of file diff --git a/app/views/deps/hermes.html b/app/views/deps/hermes.html new file mode 100644 index 0000000..291d6b0 --- /dev/null +++ b/app/views/deps/hermes.html @@ -0,0 +1,27 @@ +
+
+
+
+ Bootstrap Themes +
+
+

Hermes

+

+ Hermes is a simple library that provides a small set of commonly used helper functions. + These functions primarily help with navigating the url or file systems in a consistent way across several libraries and projects. +

+ +
+
+
+

+ For a list of recent changes, please check here. +

+
\ No newline at end of file diff --git a/app/views/deps/houdini.html b/app/views/deps/houdini.html new file mode 100644 index 0000000..6596db8 --- /dev/null +++ b/app/views/deps/houdini.html @@ -0,0 +1,27 @@ +
+
+
+
+ Bootstrap Themes +
+
+

Houdini

+

+ Houdini is where the front-end magic happens and it serves as the primary front-end html generator. + It handles the storage and applications of frontend components, all the views, templates, and several other critical features of the front-end. +

+ +
+
+
+

+ For a list of recent changes, please check here. +

+
\ No newline at end of file diff --git a/app/views/deps/index.html b/app/views/deps/index.html new file mode 100644 index 0000000..a0ca9f7 --- /dev/null +++ b/app/views/deps/index.html @@ -0,0 +1,47 @@ +
+

{SITENAME} Libraries

+

+ {SITENAME} uses a number of libraries developed in conjunction with the main project. Here you can find a list of these libraries with more information on each. +

+
+ +
\ No newline at end of file diff --git a/app/views/landing.html b/app/views/landing.html new file mode 100644 index 0000000..7c24c3f --- /dev/null +++ b/app/views/landing.html @@ -0,0 +1,145 @@ +
+ +

The Tempus Project

+
+

+ {SITENAME} allows you to quickly develop, design, and customize responsive mobile-first web applications. +

+
+ +
+ +
+

+ Utilizing our in-house libraries, {SITENAME} provides a very basic PHP web application utilizing the MVC (Model View Controller) pattern, paired with Bootstrap for a robust front-end experience. {SITENAME} can be deployed on most server architecture in seconds and can be installed and customized within minutes. Paired with Bootstrap, the world's most popular front-end open source toolkit, you have a great platform to build just about anything. +

+
+ +
+ +
+

Includes many systems right oout of the box

+
+
+
+ +
+
+

User Management

+

From new user registrations to forgotten password recovery and everything in-between, the included authentication and authorization controls can handle all your needs and include groups with highly customizable permissions systems.

+
+
+
+
+ +
+
+

Administration

+

+ Everything from your sitename and timezone to notifications and emails are a breeze with the included Admin panel. Out of the box you will have direct control over most of your application and you can easily expand or add new controls as you need. +

+
+
+
+
+ +
+
+

Plugins

+

+ One of the best features of {SITENAME} is the plugin functionality. Much of the system has been modeled to work as self-contained applications that work together. Many of the features available here are plugins aty their core. +

+
+
+
+
+ +
+ +
+

Plugins

+
+
+ +
+

Blog

+

Whether its the companies transparency or your own need to share, our blog plugin makes it simple.

+
+
+
+ +
+

Bug Reports

+

An unfortunate reality iis that every application has bugs, never leave your users without the ability to report them to you.

+
+
+
+ +
+

Comments

+

Allowing users the opportunity to share feedback is crucial. Our comments plugin not only integrates with the blog, but many other plugins to enable users to comment on any content you want.

+
+
+
+ +
+

Contact

+

A contact form is another simple but essential tool for your business or website.

+
+
+
+ +
+

Resume

+

Whether you're looking for a new gig or just want an easy way for others to see your work, our resume plugin might be the key.

+
+
+
+ +
+

Subscribe

+

Building your list should always be a part of your application and services and it made as simple as can be with this plugin.

+
+
+
+ +
+

WIP (Work in Progress)

+

A light-weight and simple plugin that allows you to keep a running list of works in progress to share with site visitors..

+
+
+
+ +
+

Memberships / Payments

+

Our membership plugin integrates with Stripe to allow incredibly simple membership setup and can be easily expanded to sell any of your products.

+
+
+
+
+ +
+ +

Light / Dark Modes

+
+
+
+

When you stick with the light

+

everything looks great.

+
+
+
+
+
+
+

But when you go to the dark side

+

everything is just a bit better.

+
+
+
+
+
+
\ No newline at end of file diff --git a/app/views/start.html b/app/views/start.html new file mode 100644 index 0000000..f96a12d --- /dev/null +++ b/app/views/start.html @@ -0,0 +1,23 @@ +
+

Getting Started with {SITENAME}

+

+ {SITENAME} has been open source for many years now. The hopes and intentions for it were always to give others a leg-up to get started building web-apps like i wish i had as a kid. + There were so many tutorials and ideas, expansions and plans for the project. + Unfortunately no person is given unlimited time to accomplish their dreams and over the years the idea for a huge repository for learning and education has taken a back seat. +

+

+ At this time, the best recommendation available is to contact us for more information. + The site here is actively maintained so feel free to utilize any of our available resources for contact. + In addition to the site here, you can contact the lead developer (me) directly through JoeyKimsey.com. +

+

+ Right now, this entire system was built and managed by myself. As stated, I have used my own version of this for years, but translating it to a publicly available product is not a 1-to-1 job. There may be bugs or issues encountered while you use the product. I can't guarantee a fix for every need in every case immediately, but I do actively keep track of bugs and work hard to ensure everyone has a great experience using the app. +

+

+ If you encounter any bugs, feel free to report them here. Likewise, there are forms for feedback, reviews, suggestions, and a general contact form. Thanks for taking the time to check out the product! +

+
+ {loggedin}Report a Bug{/loggedin} + Contact Us +
+
\ No newline at end of file diff --git a/bin/tempus_project.php b/bin/tempus_project.php index 1184cc9..4fe4803 100644 --- a/bin/tempus_project.php +++ b/bin/tempus_project.php @@ -140,6 +140,14 @@ class TheTempusProject extends Bedrock { 'text' => 'Home', 'url' => '{ROOT_URL}home/index', ], + [ + 'text' => 'Libraries', + 'url' => '{ROOT_URL}home/libraries', + ], + [ + 'text' => 'Get Started', + 'url' => '{ROOT_URL}home/getstarted', + ], [ 'text' => 'Admin', 'url' => '{ROOT_URL}admin/index', diff --git a/images/bedrock.jpg b/images/bedrock.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10179d6cb4dc3d758084a87ea1fb50d9726a4c06 GIT binary patch literal 7995 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 + + + + + + +mkdir /etc/nginx/sites-available/old/ +sudo mv /etc/nginx/sites-available/* /etc/nginx/sites-available/old/ +sudo touch /etc/nginx/sites-available/thetempusproject.com.conf + + + + + +sudo rm -rf /etc/nginx/sites-enabled/* +sudo ln -s /etc/nginx/sites-available/thetempusproject.com.conf /etc/nginx/sites-enabled/thetempusproject.com.conf +sudo systemctl restart nginx.service + + + + + +cd ~ +curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php + +HASH=`curl -sS https://composer.github.io/installer.sig` + +php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" + + +sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer + + + + + + + + +cd /var/www/ +composer create-project thetempusproject/thetempusproject thetempusproject.com + + +sudo ln -s /etc/nginx/sites-available/black-airplane /etc/nginx/sites-enabled/ + + + + + + + + + + + +1Ag5calIO8xXwS + + + +mysql + + +CREATE USER 'ttp'@'localhost' IDENTIFIED BY '1Ag5calIO8xXwS'; +GRANT ALL PRIVILEGES ON * . * TO 'ttp'@'localhost'; + +FLUSH PRIVILEGES; +CREATE DATABASE ttp; \ No newline at end of file diff --git a/server/thetempusproject.com.conf b/server/thetempusproject.com.conf index a047471..8af76c6 100644 --- a/server/thetempusproject.com.conf +++ b/server/thetempusproject.com.conf @@ -1,36 +1,24 @@ -# upstream to abstract backend connection(s) for php -upstream php { - server unix:/run/php/php8.1-fpm.sock; +upstream php { + server unix:/run/php/php8.2-fpm.sock; } -server { - listen 80; - listen [::]:80; - server_name thetempusproject.com; - include snippets/well-known; - return 301 https://$host$request_uri; -} -server { - listen 443 ssl http2 default_server; - listen [::]:443 ssl http2 default_server; - server_name thetempusproject.com; - include snippets/ssl-params.conf; - root /var/www/thetempusproject.com; - index index.php; - # max php upload size - client_max_body_size 100M; - - # disable direcory indexing - autoindex off; +server { + listen 80 default_server; + index index.php; + server_name thetempusproject.com; + root /var/www/thetempusproject.com; + charset utf-8; + sendfile off; + client_max_body_size 100m; # custom TTP code include snippets/ttp.conf; - + location ~* \.php$ { - fastcgi_pass php; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_intercept_errors on; + fastcgi_pass php; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_intercept_errors on; } } \ No newline at end of file diff --git a/server/ttp.conf b/server/ttp.conf index e60d201..134ba22 100644 --- a/server/ttp.conf +++ b/server/ttp.conf @@ -6,8 +6,6 @@ error_log /var/log/nginx/error.log; index index.php; -charset utf-8; - error_page 404 /index.php; ssl_certificate /etc/nginx/ssl/thetempusproject.com.pem; @@ -17,7 +15,7 @@ location = /favicon.ico { log_not_found off; access_log off; } - + location = /robots.txt { allow all; log_not_found off; @@ -40,7 +38,7 @@ location ~ /\. { deny all; } -location ~* \.(?:js|css|png|jpg|gif|ico|woff|ttf|woff2)$ { +location ~* \.(?:js|css|png|jpg|gif|ico|woff|tff|woff2|min.css.map)$ { access_log off; log_not_found off; } @@ -69,6 +67,27 @@ location /errors/ { try_files $uri /index.php?error=$uri; } +location /api/ { + # Handle CORS for all requests + if ($request_method = 'POST') { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; + add_header 'Access-Control-Allow-Headers' 'Authorization, DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range' always; + add_header 'Access-Control-Expose-Headers' 'Content-Length, Content-Range' always; + } + # Handle preflight requests + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*' always; + add_header 'Access-Control-Allow-Headers' 'Authorization, DNT, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Range' always; + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8' always; + return 204; # Return no content for preflight + } + + rewrite ^/(.+)$ /index.php?url=$1&$args; +} + location / { rewrite ^/(.+)$ /index.php?url=$1&$args; -} \ No newline at end of file +} +