Added authentication handler

This commit is contained in:
Zi Xing 2022-02-13 16:32:21 -05:00
parent 8685dbd15a
commit 00224c03ac
46 changed files with 552 additions and 505 deletions

View File

@ -11,9 +11,9 @@
"auto_detect_preference": true,
"localizations": {}
},
"favicon": null,
"favicon": "favicon/favicon.ico",
"localization_enabled": true,
"debugging_mode": false,
"debugging_mode": true,
"framework_signature": true,
"application_signature": true,
"security_headers": false,
@ -21,11 +21,17 @@
"firewall_deny": [],
"headers": {}
},
"runtime_scripts": [],
"runtime_scripts": [
{"event": "pre_page_load", "script": "runtime_scripts/coa_sniffles.dyn"},
{"event": "pre_page_load", "script": "runtime_scripts/check_auth.dyn"}
],
"web_assets": [
{"type": "ppm", "name": "primary_assets", "source": "net.intellivoid.dore_template==latest", "path": "assets"}
{"type": "ppm", "name": "primary_assets", "source": "net.intellivoid.dore_template==latest", "path": "assets"},
{"type": "local", "name": "logos", "source": "logos", "path": "logos"}
],
"router": [
{"method": ["GET"], "path": "", "page": "index", "params": []}
{"method": ["GET"], "path": "", "page": "index", "params": []},
{"method": ["GET"], "path": "logout", "page": "logout", "params": []},
{"method": ["GET"], "path": "dashboard", "page": "dashboard", "params": []}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square70x70logo src="/mstile-70x70.png?v=12j91ed2j91"/>
<square150x150logo src="/mstile-150x150.png?v=12j91ed2j91"/>
<square310x310logo src="/mstile-310x310.png?v=12j91ed2j91"/>
<wide310x150logo src="/mstile-310x150.png?v=12j91ed2j91"/>
<TileColor>#465a65</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

After

Width:  |  Height:  |  Size: 793 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/favicon/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,32 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="840.000000pt" height="840.000000pt" viewBox="0 0 840.000000 840.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,840.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1469 7436 c-2 -2 -22 -6 -44 -9 -45 -6 -68 -14 -140 -48 -54 -25
-52 -24 -109 -71 -112 -94 -174 -197 -204 -343 -8 -41 -9 -5513 0 -5550 12
-54 41 -129 59 -157 11 -14 19 -29 19 -32 0 -10 34 -50 94 -109 83 -81 223
-147 321 -149 6 0 18 -4 27 -9 10 -5 18 -6 18 -2 0 5 26 8 58 9 31 0 75 4 97
8 48 9 190 75 225 105 65 55 2784 2759 2811 2796 23 32 66 126 80 175 42 155
20 308 -63 448 -33 56 -264 289 -1581 1595 -282 279 -672 667 -867 861 -195
194 -380 369 -411 390 -84 55 -185 87 -294 92 -50 2 -94 2 -96 0z"/>
<path d="M4865 6693 c-114 -19 -195 -57 -269 -127 -31 -29 -56 -56 -56 -60 0
-4 -9 -21 -21 -37 -11 -16 -17 -29 -13 -29 4 0 0 -8 -8 -17 -8 -10 -16 -25
-16 -33 0 -8 -5 -31 -10 -52 -8 -30 -13 -111 -13 -208 0 -8 0 -114 0 -235 l1
-220 44 -45 c24 -25 220 -218 436 -430 746 -733 750 -737 778 -799 39 -82 50
-134 46 -214 -4 -88 -2 -80 -45 -189 -7 -16 -15 -28 -19 -28 -4 0 -11 -9 -16
-20 -12 -25 -86 -100 -504 -510 -664 -653 -720 -709 -721 -733 -4 -154 0 -604
6 -638 14 -80 86 -213 132 -242 6 -4 18 -13 25 -20 25 -25 106 -67 159 -84 53
-16 197 -21 219 -8 6 3 23 9 37 11 40 7 122 54 167 94 21 19 147 142 280 273
772 760 985 969 1239 1220 155 153 352 347 437 431 189 186 205 204 243 286
27 58 30 75 31 160 0 112 -5 132 -46 214 -33 66 -17 50 -892 911 -235 231
-550 541 -699 688 -150 147 -347 341 -438 431 -162 160 -212 201 -274 223 -16
6 -39 14 -50 19 -38 14 -132 23 -170 17z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,54 @@
{
"name": "Services",
"short_name": "Services",
"icons": [
{
"src": "/android-chrome-36x36.png?v=12j91ed2j91",
"sizes": "36x36",
"type": "image/png"
},
{
"src": "/android-chrome-48x48.png?v=12j91ed2j91",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "/android-chrome-72x72.png?v=12j91ed2j91",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "/android-chrome-96x96.png?v=12j91ed2j91",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "/android-chrome-144x144.png?v=12j91ed2j91",
"sizes": "144x144",
"type": "image/png"
},
{
"src": "/android-chrome-192x192.png?v=12j91ed2j91",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-256x256.png?v=12j91ed2j91",
"sizes": "256x256",
"type": "image/png"
},
{
"src": "/android-chrome-384x384.png?v=12j91ed2j91",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png?v=12j91ed2j91",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

5
src/logos/black-full.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

5
src/logos/black.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

4
src/logos/mobile.svg Normal file
View File

@ -0,0 +1,4 @@
<svg width="81" height="105" viewBox="0 0 81 105" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M45.9179 47.4111C48.7322 50.2052 48.729 54.7385 45.9109 57.5364L12.3068 90.8995C10.243 92.9485 7.14064 93.5629 4.44704 92.4568C1.75301 91.3503 -0.00217449 88.7409 2.02191e-06 85.8453C0.00747763 75.1187 0.0173155 60.7958 0.026777 47.021L0.0459536 19.1646C0.0483879 16.2688 1.80676 13.6574 4.50228 12.5472C7.1978 11.437 10.2987 12.0475 12.36 14.094L45.9179 47.4111Z" fill="#465A65"/>
<path d="M79.358 56.3776C81.5453 54.2234 81.5477 50.7333 79.3634 48.582L53.3186 22.9308C51.7188 21.3551 49.3121 20.8851 47.22 21.7399C45.128 22.5947 43.7633 24.6052 43.7614 26.8347L43.7563 34.0946L58.4661 48.582C60.6503 50.7333 60.6479 54.2234 58.4606 56.3776L43.7308 70.8849L43.7257 78.173C43.724 80.4023 45.0863 82.4113 47.1771 83.2632C49.2677 84.1148 51.6755 83.6417 53.2772 82.0642L79.358 56.3776Z" fill="#607D8B"/>
</svg>

After

Width:  |  Height:  |  Size: 916 B

5
src/logos/white-full.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

5
src/logos/white.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.5 KiB

View File

@ -19,6 +19,12 @@
"version": "latest",
"source": "default@github/intellivoid/Dore-Template",
"required": true
},
{
"package": "net.intellivoid.coa_sniffle",
"version": "latest",
"source": "default@github/intellivoid/COASniffle",
"required": true
}
],
"configuration": {
@ -30,6 +36,28 @@
},
"components": [],
"files": [
"favicon/favicon-16x16.png",
"favicon/apple-touch-icon.png",
"favicon/android-chrome-192x192.png",
"favicon/mstile-310x310.png",
"favicon/favicon-194x194.png",
"favicon/mstile-70x70.png",
"favicon/android-chrome-96x96.png",
"favicon/mstile-150x150.png",
"favicon/mstile-144x144.png",
"favicon/android-chrome-384x384.png",
"favicon/android-chrome-48x48.png",
"favicon/site.webmanifest",
"favicon/safari-pinned-tab.svg",
"favicon/android-chrome-36x36.png",
"favicon/android-chrome-72x72.png",
"favicon/browserconfig.xml",
"favicon/android-chrome-512x512.png",
"favicon/android-chrome-256x256.png",
"favicon/favicon.ico",
"favicon/android-chrome-144x144.png",
"favicon/mstile-310x150.png",
"favicon/favicon-32x32.png",
"sections/menu.dyn",
"sections/frontend_navbar.dyn",
"sections/footer.dyn",
@ -38,15 +66,30 @@
"sections/header.dyn",
"sections/frontend_header.dyn",
"sections/javascript.dyn",
"sections/favicon.dyn",
"sections/navbar.dyn",
"sections/frontend_footer.dyn",
"sections/frontend_mobile_menu.dyn",
"sections/frontend_javascript.dyn",
"package.json",
"languages/en.json",
"pages/logout/contents.dyn",
"pages/index/contents.dyn",
"pages/index/scripts/callbacks.dyn",
"pages/vcaptcha/main/contents.dyn",
"pages/dashboard/contents.dyn",
"logos/white-full.svg",
"logos/black-full.svg",
"logos/white.svg",
"logos/black.svg",
"logos/mobile.svg",
"scripts/authenticate_coa.dyn",
"scripts/require_auth.dyn",
"scripts/alert.dyn",
"runtime_scripts/coasniffle.json",
"runtime_scripts/coa_sniffles.dyn",
"runtime_scripts/template_settings.dyn",
"runtime_scripts/check_auth.dyn",
"configuration.json"
]
}

View File

@ -1,8 +1,13 @@
<?php
\DynamicalWeb\Html::importScript('require_auth');
require_authentication('index');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Intellivoid Service Dashboard</title>
<title>Intellivoid Services - Dashboard</title>
<?PHP \DynamicalWeb\Html::importSection('header'); ?>
</head>
@ -13,19 +18,8 @@
<div class="container-fluid">
<div class="row">
<div class="col-12">
<h1>Blank Page</h1>
<nav class="breadcrumb-container d-none d-sm-block d-lg-inline-block" aria-label="breadcrumb">
<ol class="breadcrumb pt-0">
<li class="breadcrumb-item">
<a href="#">Home</a>
</li>
<li class="breadcrumb-item">
<a href="#">Library</a>
</li>
<li class="breadcrumb-item active" aria-current="page">Data</li>
</ol>
</nav>
<div class="separator mb-5"></div>
<h1>Intellivoid Services</h1>
</div>
</div>
</div>

View File

@ -1,3 +1,20 @@
<?php
use DynamicalWeb\DynamicalWeb;
use DynamicalWeb\Html;
if(WEB_ACCOUNT_AUTHENTICATED)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('dashboard');
$RequestHandler->execute();
}
Html::importScript('authenticate_coa');
Html::importScript('alert');
?>
<!DOCTYPE html>
<html lang="en">
@ -9,19 +26,30 @@
<body class="show-spinner no-footer">
<div class="landing-page">
<?PHP \DynamicalWeb\Html::importSection('frontend_mobile_menu'); ?>
<div class="main-container">
<?PHP \DynamicalWeb\Html::importSection('frontend_main_menu'); ?>
<div class="content-container" id="home">
<div class="section home">
<div class="container">
<?PHP
if(isset($_GET['callback']))
{
?>
<div class="row home-row mb-0 d-block">
<?PHP HTML::importScript('callbacks'); ?>
</div>
<?PHP
}
?>
<div class="row home-row">
<div class="col-12 d-block d-md-none">
<a target="_blank" href="#">
<img alt="mobile hero" class="mobile-hero" src="/assets/img/landing-page/home-hero-mobile.png" />
</a>
</div>
<div class="col-12 col-xl-4 col-lg-5 col-md-6">
<div class="home-text">
<div class="display-1">INTERNET OF THINGS</div>
@ -33,7 +61,7 @@
strive to provide fully functional services to help protect webmasters from
bad actors and make the development progress a little easier.
</p>
<a class="btn btn-secondary btn-xl mr-2 mb-2" target="_blank" href="#">
<a class="btn btn-secondary btn-xl mr-2 mb-2" target="_blank" href="<?PHP \DynamicalWeb\DynamicalWeb::printRoute('dashboard'); ?>">
Dashboard
<i class="simple-icon-arrow-right"></i>
</a>

View File

@ -0,0 +1,38 @@
<?php
use COASniffle\Utilities\ErrorResolver;
if(isset($_GET['callback']))
{
switch((int)$_GET['callback'])
{
case 100:
render_alert('There was an unexpected error while trying to process your request', 'danger', 'alert-circle');
break;
case 101:
render_alert('Intellivoid Accounts returned a response that was not understood by the server', 'warning', 'alert-circle');
break;
case 102:
$ErrorCode = 0;
if(isset($_GET['coa_error']))
{
$ErrorCode = (int)$_GET['coa_error'];
}
$ErrorMessage = ErrorResolver::resolve_error_code($ErrorCode);
render_alert(str_ireplace('%s', $ErrorMessage, 'There was an error while trying to process your authentication: %s'), 'warning', 'alert-circle');
break;
case 103:
render_alert('Intellivoid Accounts cannot be reached at this time', 'warning', 'alert-circle');
break;
case 104:
render_alert('The authentication method that was used isn\'t supported by this server', 'danger', 'alert-circle');
break;
}
}

View File

@ -0,0 +1,28 @@
<?php
use DynamicalWeb\Cookies;
use DynamicalWeb\DynamicalWeb;
if(WEB_ACCOUNT_AUTHENTICATED == false)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index');
$RequestHandler->execute();
}
$Cookie = Cookies::getCookieStorage('services_session');
$Cookie->Data['cache_refresh'] = 0;
$Cookie->Data['authenticated'] = false;
$Cookie->Data['account_pubid'] = null;
$Cookie->Data['account_id'] = null;
$Cookie->Data['account_email'] = null;
$Cookie->Data['account_username'] = null;
Cookies::updateCookieStorage($Cookie);
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index');
$RequestHandler->execute();

View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Intellivoid Services - vCaptcha</title>
<?PHP \DynamicalWeb\Html::importSection('header'); ?>
</head>
<body id="app-container" class="menu-default show-spinner">
<?PHP \DynamicalWeb\Html::importSection('navbar'); ?>
<?PHP \DynamicalWeb\Html::importSection('menu'); ?>
<main>
<div class="container-fluid">
<div class="row">
<div class="col-12">
<h1>Intellivoid Services</h1>
</div>
</div>
</div>
</main>
<?PHP \DynamicalWeb\Html::importSection('footer'); ?>
<?PHP \DynamicalWeb\Html::importSection('javascript'); ?>
</body>
</html>

View File

@ -0,0 +1,36 @@
<?php
use DynamicalWeb\Cookies;
use DynamicalWeb\Exceptions\CookieStorageNotFoundException;
use DynamicalWeb\Objects\Cookie;
try
{
// Get the cookie storage
$CookieStorage = Cookies::getCookieStorage('services_session');
}
catch(CookieStorageNotFoundException $e)
{
// If not found, create it.
$Cookie = new Cookie('services_session');
$Cookie->ExpiryTime = time() + 86400;
$CookieStorage = Cookies::createCookieStorage($Cookie, false);
$CookieStorage->Data = array(
'authenticated' => false,
'account_pubid' => null,
'account_id' => null,
'account_username' => null,
'access_token' => null,
'cache' => array(),
'cache_refresh' => 0
);
Cookies::updateCookieStorage($CookieStorage);
}
Cookies::updateCookieStorage($CookieStorage);
define('WEB_ACCOUNT_AUTHENTICATED', $CookieStorage->Data['authenticated']);
define('WEB_ACCOUNT_PUBID', $CookieStorage->Data['account_pubid']);
define('WEB_ACCOUNT_ID', $CookieStorage->Data['account_id']);
define('WEB_ACCOUNT_USERNAME', $CookieStorage->Data['account_username']);
define('WEB_ACCESS_TOKEN', $CookieStorage->Data['access_token']);

View File

@ -0,0 +1,21 @@
<?php
use COASniffle\Abstracts\ApplicationType;
use COASniffle\COASniffle;
use DynamicalWeb\DynamicalWeb;
/**
* This script defines the COA Application and registers the constructed objects into
* DynamicalWeb Memory Objects, this is a runtime script that is executed before anything
*/
$COASniffle = new COASniffle();
$ApplicationConfiguration = json_decode(file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'coasniffle.json'), true);
$COASniffle->defineApplication(
$ApplicationConfiguration['PUBLIC_APPLICATION_ID'],
$ApplicationConfiguration['SECRET_KEY'],
ApplicationType::Redirect
);
DynamicalWeb::setMemoryObject('coasniffle', $COASniffle);
DynamicalWeb::setMemoryObject('application_configuration', $ApplicationConfiguration);

View File

@ -0,0 +1,5 @@
{
"PUBLIC_APPLICATION_ID": "APP7d8c9c0de83197d9a0be5026770f6dd6e585b78664f9d5d70e476b6fe41aeb8c19071ba3",
"SECRET_KEY": "4f7ffe81537bf7877d586eb99887c3578ee87eebac6bd696b0b19b83b06fa44553f71de1",
"APPLICATION_INTERNAL_ID": 892
}

18
src/scripts/alert.dyn Normal file
View File

@ -0,0 +1,18 @@
<?php
if(function_exists('render_alert') == false)
{
/**
* Renders an alert
*
* @param string $text
* @param string $type
* @return void
*/
function render_alert(string $text, string $type)
{
print("<div class=\"alert alert-$type\" role=\"alert\">");
\DynamicalWeb\Html::print($text);
print("</div>");
}
}

View File

@ -0,0 +1,95 @@
<?php
use COASniffle\COASniffle;
use COASniffle\Exceptions\BadResponseException;
use COASniffle\Exceptions\CoaAuthenticationException;
use COASniffle\Exceptions\RequestFailedException;
use COASniffle\Exceptions\UnsupportedAuthMethodException;
use DynamicalWeb\Cookies;
use DynamicalWeb\DynamicalWeb;
if(WEB_ACCOUNT_AUTHENTICATED == false)
{
if(isset($_GET['access_token']))
{
process_coa_authentication();
}
}
function process_coa_authentication()
{
/** @var COASniffle $COASniffle */
$COASniffle = DynamicalWeb::getMemoryObject('coasniffle');
try
{
$UserInformation = $COASniffle->getCOA()->getUser($_GET['access_token']);
}
catch (BadResponseException $e)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index', ['callback' => '101']);
$RequestHandler->execute();
}
catch (CoaAuthenticationException $e)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index', ['callback' => '102', 'coa_error' => (string)$e->getCode()]);
$RequestHandler->execute();
}
catch (RequestFailedException $e)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index', ['callback' => '103']);
$RequestHandler->execute();
}
catch (UnsupportedAuthMethodException $e)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index', ['callback' => '104']);
$RequestHandler->execute();
}
catch(Exception $e)
{
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('index', ['callback' => '100']);
$RequestHandler->execute();
}
$Cookie = Cookies::getCookieStorage('services_session');
$Cookie->Data['authenticated'] = true;
$Cookie->Data['account_pubid'] = $UserInformation->PublicID;
$Cookie->Data['account_id'] = $UserInformation->Tag;
$Cookie->Data['account_username'] = $UserInformation->Username;
$Cookie->Data['access_token'] = $_GET['access_token'];
// Force refresh cache
if(isset($Cookie->Data['cache_refresh']) == true)
{
$Cookie->Data['cache_refresh'] = 0;
}
Cookies::updateCookieStorage($Cookie);
$Redirect = "None";
if(isset($_GET['redirect']))
{
$Redirect = $_GET['redirect'];
}
switch($Redirect)
{
default:
case 'dashboard':
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = DynamicalWeb::getRoute('dashboard');
$RequestHandler->execute();
break;
}
}

View File

@ -0,0 +1,26 @@
<?php
use COASniffle\COASniffle;
use DynamicalWeb\DynamicalWeb;
use DynamicalWeb\Html;
function require_authentication(string $redirect_to='index', array $params=array())
{
if(WEB_ACCOUNT_AUTHENTICATED == false)
{
Html::importScript('authenticate_coa');
$params['redirect'] = $redirect_to;
/** @var COASniffle $COASniffle */
$COASniffle = DynamicalWeb::getMemoryObject('coasniffle');
$Protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';
$RedirectURL = $Protocol . $_SERVER['HTTP_HOST'] . DynamicalWeb::getRoute('index', $params);
$AuthenticationURL = $COASniffle->getCOA()->getAuthenticationURL($RedirectURL);
$RequestHandler = DynamicalWeb::activeRequestHandler();
$RequestHandler->Redirect = true;
$RequestHandler->RedirectLocation = $AuthenticationURL;
$RequestHandler->execute();
}
}

14
src/sections/favicon.dyn Normal file
View File

@ -0,0 +1,14 @@
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png?v=12j91ed2j91">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png?v=12j91ed2j91">
<link rel="icon" type="image/png" sizes="194x194" href="/favicon/favicon-194x194.png?v=12j91ed2j91">
<link rel="icon" type="image/png" sizes="192x192" href="/favicon/android-chrome-192x192.png?v=12j91ed2j91">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png?v=12j91ed2j91">
<link rel="manifest" href="/favicon/site.webmanifest?v=12j91ed2j91">
<link rel="mask-icon" href="/favicon/safari-pinned-tab.svg?v=12j91ed2j91" color="#465a65">
<link rel="shortcut icon" href="/favicon/favicon.ico?v=12j91ed2j91">
<meta name="apple-mobile-web-app-title" content="Services">
<meta name="application-name" content="Services">
<meta name="msapplication-TileColor" content="#465a65">
<meta name="msapplication-TileImage" content="/favicon/mstile-144x144.png?v=12j91ed2j91">
<meta name="msapplication-config" content="/favicon/browserconfig.xml?v=12j91ed2j91">
<meta name="theme-color" content="#ffffff">

View File

@ -6,7 +6,7 @@
</div>
<div class="col-12 text-center footer-content">
<a href="#home" class="scrollTo">
<img class="footer-logo" alt="footer logo" src="/assets/logos/white-full.svg" />
<img class="footer-logo" alt="footer logo" src="/logos/white-full.svg" />
</a>
</div>
</div>

View File

@ -10,5 +10,5 @@
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/vendor/owl.carousel.min.css'); ?>"/>
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/vendor/bootstrap-stars.css'); ?>"/>
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/vendor/video-js.css'); ?>"/>
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/dore.light.bluenavy.min.css'); ?>"/>
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/main.css'); ?>"/>
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/dore.light.bluenavy.css'); ?>"/>
<link rel="stylesheet" href="<?PHP DynamicalWeb::printAssetRoute('primary_assets', '/css/main.css'); ?>"/>

View File

@ -1,8 +1,8 @@
<li class="nav-item">
<a href="#" class="scrollTo">Intellivoid</a>
<a href="https://intellivoid.net/" class="scrollTo">Intellivoid</a>
</li>
<li class="nav-item">
<a href="#" class="scrollTo">Documentation</a>
<a href="https://docs.intellivoid.net/" class="scrollTo">Documentation</a>
</li>
<li class="nav-item">
<a href="#" class="scrollTo">Terms</a>
@ -11,6 +11,5 @@
<a href="#" class="scrollTo">Privacy</a>
</li>
<li class="nav-item pl-4">
<a class="btn btn-outline-semi-light btn-sm pr-4 pl-4" target="_top"
href="https://1.envato.market/5kAb">Login/Register</a>
<a class="btn btn-outline-semi-light btn-sm pr-4 pl-4" target="_top" href="<?PHP \DynamicalWeb\DynamicalWeb::printRoute('dashboard'); ?>">Login/Register</a>
</li>

View File

@ -9,483 +9,15 @@
</li>
<li>
<a href="#">
<i class="iconsminds-pulse"></i> Secondary
</a>
</li>
</ul>
</div>
</div>
<div class="sub-menu">
<div class="scroll">
<ul class="list-unstyled" data-link="dashboard">
<li>
<a href="Dashboard.Default.html">
<i class="simple-icon-rocket"></i> <span class="d-inline-block">Default</span>
<i class="iconsminds-security-check"></i> vCaptcha
</a>
</li>
<li>
<a href="Dashboard.Analytics.html">
<i class="simple-icon-pie-chart"></i> <span class="d-inline-block">Analytics</span>
</a>
</li>
<li>
<a href="Dashboard.Ecommerce.html">
<i class="simple-icon-basket-loaded"></i> <span class="d-inline-block">Ecommerce</span>
</a>
</li>
<li>
<a href="Dashboard.Content.html">
<i class="simple-icon-doc"></i> <span class="d-inline-block">Content</span>
<a href="#">
<i class="iconsminds-power-cable"></i> Webhook Proxy
</a>
</li>
</ul>
<ul class="list-unstyled" data-link="layouts" id="layouts">
<li>
<a href="#" data-toggle="collapse" data-target="#collapseAuthorization" aria-expanded="true"
aria-controls="collapseAuthorization" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Authorization</span>
</a>
<div id="collapseAuthorization" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Pages.Auth.Login.html">
<i class="simple-icon-user-following"></i> <span
class="d-inline-block">Login</span>
</a>
</li>
<li>
<a href="Pages.Auth.Register.html">
<i class="simple-icon-user-follow"></i> <span
class="d-inline-block">Register</span>
</a>
</li>
<li>
<a href="Pages.Auth.ForgotPassword.html">
<i class="simple-icon-user-unfollow"></i> <span class="d-inline-block">Forgot
Password</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseProduct" aria-expanded="true"
aria-controls="collapseProduct" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Product</span>
</a>
<div id="collapseProduct" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Pages.Product.List.html">
<i class="simple-icon-credit-card"></i> <span class="d-inline-block">Data
List</span>
</a>
</li>
<li>
<a href="Pages.Product.Thumbs.html">
<i class="simple-icon-list"></i> <span class="d-inline-block">Thumb
List</span>
</a>
</li>
<li>
<a href="Pages.Product.Images.html">
<i class="simple-icon-grid"></i> <span class="d-inline-block">Image
List</span>
</a>
</li>
<li>
<a href="Pages.Product.Detail.html">
<i class="simple-icon-book-open"></i> <span class="d-inline-block">Detail</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseProfile" aria-expanded="true"
aria-controls="collapseProfile" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Profile</span>
</a>
<div id="collapseProfile" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Pages.Profile.Social.html">
<i class="simple-icon-share"></i> <span class="d-inline-block">Social</span>
</a>
</li>
<li>
<a href="Pages.Profile.Portfolio.html">
<i class="simple-icon-link"></i> <span class="d-inline-block">Portfolio</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseBlog" aria-expanded="true"
aria-controls="collapseBlog" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Blog</span>
</a>
<div id="collapseBlog" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Pages.Blog.html">
<i class="simple-icon-list"></i> <span class="d-inline-block">List</span>
</a>
</li>
<li>
<a href="Pages.Blog.Detail.html">
<i class="simple-icon-book-open"></i> <span class="d-inline-block">Detail</span>
</a>
</li>
<li>
<a href="Pages.Blog.Detail.Alt.html">
<i class="simple-icon-picture"></i> <span class="d-inline-block">Detail
Alt</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseMisc" aria-expanded="true"
aria-controls="collapseMisc" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Miscellaneous</span>
</a>
<div id="collapseMisc" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Pages.Misc.Coming.Soon.html">
<i class="simple-icon-hourglass"></i> <span class="d-inline-block">Coming
Soon</span>
</a>
</li>
<li>
<a href="Pages.Misc.Error.html">
<i class="simple-icon-exclamation"></i> <span
class="d-inline-block">Error</span>
</a>
</li>
<li>
<a href="Pages.Misc.Faq.html">
<i class="simple-icon-question"></i> <span class="d-inline-block">Faq</span>
</a>
</li>
<li>
<a href="Pages.Misc.Invoice.html">
<i class="simple-icon-bag"></i> <span class="d-inline-block">Invoice</span>
</a>
</li>
<li>
<a href="Pages.Misc.Knowledge.Base.html">
<i class="simple-icon-graduation"></i> <span class="d-inline-block">Knowledge
Base</span>
</a>
</li>
<li>
<a href="Pages.Misc.Mailing.html">
<i class="simple-icon-envelope-open"></i> <span
class="d-inline-block">Mailing</span>
</a>
</li>
<li>
<a href="Pages.Misc.Pricing.html">
<i class="simple-icon-diamond"></i> <span class="d-inline-block">Pricing</span>
</a>
</li>
<li>
<a href="Pages.Misc.Search.html">
<i class="simple-icon-magnifier"></i> <span class="d-inline-block">Search</span>
</a>
</li>
</ul>
</div>
</li>
</ul>
<ul class="list-unstyled" data-link="applications">
<li>
<a href="Apps.MediaLibrary.html">
<i class="simple-icon-picture"></i> <span class="d-inline-block">Library</span>
</a>
</li>
<li>
<a href="Apps.Todo.List.html">
<i class="simple-icon-check"></i> <span class="d-inline-block">Todo</span>
</a>
</li>
<li>
<a href="Apps.Survey.List.html">
<i class="simple-icon-calculator"></i> <span class="d-inline-block">Survey</span>
</a>
</li>
<li>
<a href="Apps.Chat.html">
<i class="simple-icon-bubbles"></i> <span class="d-inline-block">Chat</span>
</a>
</li>
</ul>
<ul class="list-unstyled" data-link="ui">
<li>
<a href="#" data-toggle="collapse" data-target="#collapseForms" aria-expanded="true"
aria-controls="collapseForms" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Forms</span>
</a>
<div id="collapseForms" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Ui.Forms.Components.html">
<i class="simple-icon-event"></i> <span class="d-inline-block">Components</span>
</a>
</li>
<li>
<a href="Ui.Forms.Layouts.html">
<i class="simple-icon-doc"></i> <span class="d-inline-block">Layouts</span>
</a>
</li>
<li>
<a href="Ui.Forms.Validation.html">
<i class="simple-icon-check"></i> <span class="d-inline-block">Validation</span>
</a>
</li>
<li>
<a href="Ui.Forms.Wizard.html">
<i class="simple-icon-magic-wand"></i> <span
class="d-inline-block">Wizard</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseDataTables" aria-expanded="true"
aria-controls="collapseDataTables" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Datatables</span>
</a>
<div id="collapseDataTables" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Ui.Datatables.Rows.html">
<i class="simple-icon-screen-desktop"></i> <span class="d-inline-block">Full
Page UI</span>
</a>
</li>
<li>
<a href="Ui.Datatables.Scroll.html">
<i class="simple-icon-mouse"></i> <span class="d-inline-block">Scrollable</span>
</a>
</li>
<li>
<a href="Ui.Datatables.Pagination.html">
<i class="simple-icon-notebook"></i> <span
class="d-inline-block">Pagination</span>
</a>
</li>
<li>
<a href="Ui.Datatables.Default.html">
<i class="simple-icon-grid"></i> <span class="d-inline-block">Default</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseComponents" aria-expanded="true"
aria-controls="collapseComponents" class="rotate-arrow-icon opacity-50">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Components</span>
</a>
<div id="collapseComponents" class="collapse show">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Ui.Components.Alerts.html">
<i class="simple-icon-bell"></i> <span class="d-inline-block">Alerts</span>
</a>
</li>
<li>
<a href="Ui.Components.Badges.html">
<i class="simple-icon-badge"></i> <span class="d-inline-block">Badges</span>
</a>
</li>
<li>
<a href="Ui.Components.Buttons.html">
<i class="simple-icon-control-play"></i> <span
class="d-inline-block">Buttons</span>
</a>
</li>
<li>
<a href="Ui.Components.Cards.html">
<i class="simple-icon-layers"></i> <span class="d-inline-block">Cards</span>
</a>
</li>
<li>
<a href="Ui.Components.Carousel.html">
<i class="simple-icon-picture"></i> <span class="d-inline-block">Carousel</span>
</a>
</li>
<li>
<a href="Ui.Components.Charts.html">
<i class="simple-icon-chart"></i> <span class="d-inline-block">Charts</span>
</a>
</li>
<li>
<a href="Ui.Components.Collapse.html">
<i class="simple-icon-arrow-up"></i> <span
class="d-inline-block">Collapse</span>
</a>
</li>
<li>
<a href="Ui.Components.Dropdowns.html">
<i class="simple-icon-arrow-down"></i> <span
class="d-inline-block">Dropdowns</span>
</a>
</li>
<li>
<a href="Ui.Components.Editors.html">
<i class="simple-icon-book-open"></i> <span
class="d-inline-block">Editors</span>
</a>
</li>
<li>
<a href="Ui.Components.Icons.html">
<i class="simple-icon-star"></i> <span class="d-inline-block">Icons</span>
</a>
</li>
<li>
<a href="Ui.Components.InputGroups.html">
<i class="simple-icon-note"></i> <span class="d-inline-block">Input
Groups</span>
</a>
</li>
<li>
<a href="Ui.Components.Jumbotron.html">
<i class="simple-icon-screen-desktop"></i> <span
class="d-inline-block">Jumbotron</span>
</a>
</li>
<li>
<a href="Ui.Components.Modal.html">
<i class="simple-icon-docs"></i> <span class="d-inline-block">Modal</span>
</a>
</li>
<li>
<a href="Ui.Components.Navigation.html">
<i class="simple-icon-cursor"></i> <span
class="d-inline-block">Navigation</span>
</a>
</li>
<li>
<a href="Ui.Components.PopoverandTooltip.html">
<i class="simple-icon-pin"></i> <span class="d-inline-block">Popover &
Tooltip</span>
</a>
</li>
<li>
<a href="Ui.Components.Sortable.html">
<i class="simple-icon-shuffle"></i> <span class="d-inline-block">Sortable</span>
</a>
</li>
<li>
<a href="Ui.Components.Tables.html">
<i class="simple-icon-grid"></i> <span class="d-inline-block">Tables</span>
</a>
</li>
</ul>
</div>
</li>
</ul>
<ul class="list-unstyled" data-link="menu" id="menuTypes">
<li>
<a href="#" data-toggle="collapse" data-target="#collapseMenuTypes" aria-expanded="true"
aria-controls="collapseMenuTypes" class="rotate-arrow-icon">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Menu Types</span>
</a>
<div id="collapseMenuTypes" class="collapse show" data-parent="#menuTypes">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="Menu.Default.html">
<i class="simple-icon-control-pause"></i> <span
class="d-inline-block">Default</span>
</a>
</li>
<li>
<a href="Menu.Subhidden.html">
<i class="simple-icon-arrow-left mi-subhidden"></i> <span
class="d-inline-block">Subhidden</span>
</a>
</li>
<li>
<a href="Menu.Hidden.html">
<i class="simple-icon-control-start mi-hidden"></i> <span
class="d-inline-block">Hidden</span>
</a>
</li>
<li>
<a href="Menu.Mainhidden.html">
<i class="simple-icon-control-rewind mi-hidden"></i> <span
class="d-inline-block">Mainhidden</span>
</a>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseMenuLevel" aria-expanded="true"
aria-controls="collapseMenuLevel" class="rotate-arrow-icon collapsed">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Menu Levels</span>
</a>
<div id="collapseMenuLevel" class="collapse" data-parent="#menuTypes">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="#">
<i class="simple-icon-layers"></i> <span class="d-inline-block">Sub
Level</span>
</a>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseMenuLevel2"
aria-expanded="true" aria-controls="collapseMenuLevel2"
class="rotate-arrow-icon collapsed">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Another
Level</span>
</a>
<div id="collapseMenuLevel2" class="collapse">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="#">
<i class="simple-icon-layers"></i> <span class="d-inline-block">Sub
Level</span>
</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li>
<a href="#" data-toggle="collapse" data-target="#collapseMenuDetached" aria-expanded="true"
aria-controls="collapseMenuDetached" class="rotate-arrow-icon collapsed">
<i class="simple-icon-arrow-down"></i> <span class="d-inline-block">Detached</span>
</a>
<div id="collapseMenuDetached" class="collapse">
<ul class="list-unstyled inner-level-menu">
<li>
<a href="#">
<i class="simple-icon-layers"></i> <span class="d-inline-block">Sub
Level</span>
</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</div>
</div>

View File

@ -1,6 +1,10 @@
<?php
use COASniffle\Abstracts\AvatarResourceName;
use COASniffle\Handlers\COA;
use DynamicalWeb\Html;
?>
<nav class="navbar fixed-top">
<div class="d-flex align-items-center navbar-left">
<a href="#" class="menu-button d-none d-md-block">
<svg class="main" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9 17">
<rect x="0.48" y="0.5" width="7" height="1" />
@ -13,7 +17,6 @@
<rect x="1.56" y="15.5" width="16" height="1" />
</svg>
</a>
<a href="#" class="menu-button-mobile d-xs-block d-sm-block d-md-none">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26 17">
<rect x="0.5" y="0.5" width="25" height="1" />
@ -21,17 +24,15 @@
<rect x="0.5" y="15.5" width="25" height="1" />
</svg>
</a>
</div>
<a class="navbar-logo" href="#">
<span class="logo d-none d-xs-block"></span>
<span class="logo-mobile d-block d-xs-none"></span>
</a>
<div class="navbar-right">
<div class="header-icons d-inline-block align-middle">
<div class="d-none d-md-inline-block align-text-bottom mr-3">
<div class="custom-switch custom-switch-primary-inverse custom-switch-small pl-1"
@ -45,8 +46,24 @@
<i class="simple-icon-size-fullscreen"></i>
<i class="simple-icon-size-actual"></i>
</button>
</div>
<div class="user d-inline-block">
<button class="btn btn-empty p-0" type="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">
<span class="name"><?PHP \DynamicalWeb\Html::print(WEB_ACCOUNT_USERNAME) ?></span>
<span>
<img alt="Profile Picture" src="<?PHP HTML::print(COA::getAvatarUrl(AvatarResourceName::Normal, WEB_ACCOUNT_PUBID), false); ?>" />
</span>
</button>
<div class="dropdown-menu dropdown-menu-right mt-3">
<a class="dropdown-item" href="https://accounts.intellivoid.net/">Account</a>
<a class="dropdown-item" href="#">Features</a>
<a class="dropdown-item" href="#">History</a>
<a class="dropdown-item" href="#">Support</a>
<a class="dropdown-item" href="<?PHP \DynamicalWeb\DynamicalWeb::printRoute('logout'); ?>">Sign out</a>
</div>
</div>
</div>
</nav>