Merge branch 'main' into joeykimsey-com

This commit is contained in:
Joey Kimsey
2025-01-14 14:13:07 -05:00
203 changed files with 5333 additions and 3375 deletions

View File

@ -41,7 +41,8 @@ use TheTempusProject\Models\Routes as RoutesModel;
class TheTempusProject extends Bedrock {
const MAIN_MENU_NAME = 'topNavLeft';
const ADMIN_MENU_NAME = 'adminMenu';
const FOOTER_MENU_NAME = 'footerMenu';
const CONTACT_FOOTER_MENU_NAME = 'contactFooterMenu';
const INFO_FOOTER_MENU_NAME = 'infoFooterMenu';
public static $plugins = [];
public static $activeGroup;
public static $activePerms;
@ -55,7 +56,20 @@ class TheTempusProject extends Bedrock {
public static $isAdmin = false;
public static $isMod = false;
private $initialized = false;
public $footer_links = [
public $contact_footer_links = [];
public $info_footer_links = [
[
'text' => 'FAQs',
'url' => '{ROOT_URL}home/faq',
],
[
'text' => 'About',
'url' => '{ROOT_URL}home/about',
],
[
'text' => 'Privacy Policy',
'url' => '{ROOT_URL}home/privacy',
],
[
'text' => 'Terms of Service',
'url' => '{ROOT_URL}home/terms',
@ -63,7 +77,7 @@ class TheTempusProject extends Bedrock {
];
public $admin_links = [
[
'text' => '<i class="fa fa-fw fa-home"></i> Home',
'text' => '<i class="fa fa-fw fa-home"></i> Dashboard',
'url' => '{ROOT_URL}admin/index',
],
[
@ -75,15 +89,19 @@ class TheTempusProject extends Bedrock {
'url' => '{ROOT_URL}admin/users',
],
[
'text' => '<i class="fa fa-fw fa-group"></i> Groups',
'text' => '<i class="fa fa-fw fa-user-group"></i> Groups',
'url' => '{ROOT_URL}admin/groups',
],
[
'text' => '<i class="fa fa-fw fa-reply-all"></i> Contact',
'url' => '{ROOT_URL}admin/contact',
'text' => '<i class="fa fa-fw fa-phone"></i> Contact',
'url' => '{ROOT_URL}admin/SendMail',
],
[
'text' => '<i class="fa fa-fw fa-arrows-v"></i> Modules',
'text' => '<i class="fa fa-fw fa-shield-halved"></i> Tokens',
'url' => '{ROOT_URL}admin/tokens',
],
[
'text' => '<i class="fa fa-fw fa-arrow-down"></i> Modules',
'url' => [
[
'text' => '<i class="fa fa-fw fa-database"></i> Plugins',
@ -96,7 +114,7 @@ class TheTempusProject extends Bedrock {
],
],
[
'text' => '<i class="fa fa-fw fa-arrows-v"></i> Logs',
'text' => '<i class="fa fa-fw fa-arrow-down"></i> Logs',
'url' => [
[
'text' => '<i class="fa fa-fw fa-file"></i> Logs',
@ -257,6 +275,11 @@ class TheTempusProject extends Bedrock {
"pretty" => "Site Logo (Used mostly in emails)",
"default" => "images/logo.png"
],
"logoLarge" => [
"type" => "file",
"pretty" => "Large Site Logo (Used mostly when sharing images on social media)",
"default" => "images/logoLarge.jpg"
],
"name" => [
"type" => "text",
"pretty" => "Site Name",
@ -276,6 +299,27 @@ class TheTempusProject extends Bedrock {
"type" => "text",
"pretty" => "Maximum Login Attempts per hour",
"default" => 5
],
"loginTimer" => [
"type" => "text",
"pretty" => "Maximum Login session length. (in seconds)",
"default" => 604800 // 60 * 60 * 24 * 7
]
],
"uploads" => [
"images" => [
"type"=> "radio",
"pretty"=> "Upload Images Enabled",
"default"=> true,
"protected"=> true,
"value"=> true,
],
"maxImageSize"=> [
"type" => "text",
"pretty" => "Maximum size for image uploads",
"default" => 500000,
"protected" => true,
"value" => 500000,
]
],
"database" => [
@ -324,6 +368,8 @@ class TheTempusProject extends Bedrock {
]
];
public static $userCPlinks = [];
/**
* The constructor takes care of everything that we will need before
* finally calling appload to instantiate the appropriate controller/method.
@ -370,6 +416,25 @@ class TheTempusProject extends Bedrock {
}
}
// load the damn usercp menu n a retarded fashion
self::$userCPlinks[] = (object) [
"url" => "{ROOT_URL}usercp",
"name" => "Profile"
];
self::$userCPlinks[] = (object) [
"url" => "{ROOT_URL}usercp/settings",
"name" => "Settings"
];
self::$userCPlinks[] = (object) [
"url" => "{ROOT_URL}usercp/email",
"name" => "Change Email"
];
self::$userCPlinks[] = (object) [
"url" => "{ROOT_URL}usercp/password",
"name" => "Change Password"
];
Components::set( 'SITE_URL', Routes::getAddress() );
Components::set( 'DEBUG_EMAIL', DEBUG_EMAIL );
Debug::gend();
}
@ -387,8 +452,7 @@ class TheTempusProject extends Bedrock {
self::$activePrefs = $user->getDefaultPreferences(); // PREFERENCES_JSON
if (
!$sessions->checkSession( Session::get( 'SessionID' ) ) &&
!$sessions->checkCookie( Cookie::get( 'RememberToken' ), true ) &&
!$sessions->checkToken( self::getBearerToken(), true )
!$sessions->checkCookie( Cookie::get( 'RememberToken' ), true )
) {
Debug::info( 'Sessions->authenticate - Could not authenticate cookie or session' );
return false;
@ -444,6 +508,13 @@ class TheTempusProject extends Bedrock {
'enabled' => true,
'example' => '{LOGGEDIN}Only visible to users who are logged-in{LOGGEDIN}',
];
$this->filters[] = [
'name' => 'notloggedin',
'find' => '#{NOTLOGGEDIN}(.*?){/NOTLOGGEDIN}#is',
'replace' => ( self::$isLoggedIn ? '' : '$1' ),
'enabled' => true,
'example' => '{NOTLOGGEDIN}Only visible to users who are logged-in{NOTLOGGEDIN}',
];
$this->filters[] = [
'name' => 'dtc',
'find' => '#{DTC(.*?)}(.*?){/DTC}#is',
@ -460,8 +531,11 @@ class TheTempusProject extends Bedrock {
}
public function loadLinks() {
foreach ( $this->footer_links as $key => $link ) {
Navigation::addLink( self::FOOTER_MENU_NAME, $link );
foreach ( $this->contact_footer_links as $key => $link ) {
Navigation::addLink( self::CONTACT_FOOTER_MENU_NAME, $link );
}
foreach ( $this->info_footer_links as $key => $link ) {
Navigation::addLink( self::INFO_FOOTER_MENU_NAME, $link );
}
foreach ( $this->main_links as $key => $link ) {
Navigation::addLink( self::MAIN_MENU_NAME, $link );
@ -473,8 +547,8 @@ class TheTempusProject extends Bedrock {
public function load( $url = '' ) {
$routes = new RoutesModel;
if (empty($url)) {
$url = trim(Input::get('url'), '/');
if ( empty( $url ) ) {
$url = trim( Input::get( 'url' ), '/' );
$url = str_ireplace( '.php', '', $url );
}
$route = $routes->findByOriginalUrl($url);
@ -515,45 +589,6 @@ class TheTempusProject extends Bedrock {
echo '</div>';
}
public static function verifyApiRequest() {
$token = self::getBearerToken();
if ( empty( $token ) ) {
return false;
}
$user = new User;
$result = $user->findByToken( $token );
return $result;
}
private static function getAuthorizationHeader(){
$headers = null;
if ( isset( $_SERVER['Authorization'] ) ) {
$headers = trim( $_SERVER["Authorization"] );
} elseif ( isset( $_SERVER['HTTP_AUTHORIZATION'] ) ) {
$headers = trim( $_SERVER["HTTP_AUTHORIZATION"] );
} elseif ( function_exists( 'apache_request_headers' ) ) {
$requestHeaders = apache_request_headers();
$requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
if ( isset( $requestHeaders['Authorization'] ) ) {
$headers = trim( $requestHeaders['Authorization'] );
}
}
return $headers;
}
/**
* get access token from header
* */
private static function getBearerToken() {
$headers = self::getAuthorizationHeader();
// HEADER: Get the access token from the header
if ( ! empty( $headers ) ) {
if ( preg_match( '/Bearer\s(\S+)/', $headers, $matches ) ) {
return $matches[1];
}
}
return null;
}
/**
* Echos useful information about the installation.
*