Replaced Moment with Carbon #84
9 changed files with 224 additions and 70 deletions
|
@ -26,6 +26,10 @@ class DashController extends Controller
|
||||||
$this->sort = $sortingService;
|
$this->sort = $sortingService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---
|
||||||
|
// GET
|
||||||
|
//---
|
||||||
|
|
||||||
public function init($second, $third, $fourth)
|
public function init($second, $third, $fourth)
|
||||||
{
|
{
|
||||||
switch ($second) {
|
switch ($second) {
|
||||||
|
@ -52,18 +56,6 @@ class DashController extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function login()
|
|
||||||
{
|
|
||||||
if ($this->member::status()) {
|
|
||||||
return redirect('dashboard');
|
|
||||||
} else {
|
|
||||||
return view('back.login', [
|
|
||||||
"status" => $this->member::status(),
|
|
||||||
"title" => "Hi!"
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function start()
|
public function start()
|
||||||
{
|
{
|
||||||
$result = [];
|
$result = [];
|
||||||
|
@ -119,6 +111,30 @@ class DashController extends Controller
|
||||||
return view('back.settings', $this->sort->settings());
|
return view('back.settings', $this->sort->settings());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//---
|
||||||
|
// POST
|
||||||
|
//---
|
||||||
|
|
||||||
|
//---
|
||||||
|
// PUT
|
||||||
|
//---
|
||||||
|
|
||||||
|
//---
|
||||||
|
// AUTH
|
||||||
|
//---
|
||||||
|
|
||||||
|
public function login()
|
||||||
|
{
|
||||||
|
if ($this->member::status()) {
|
||||||
|
return redirect('dashboard');
|
||||||
|
} else {
|
||||||
|
return view('back.login', [
|
||||||
|
"status" => $this->member::status(),
|
||||||
|
"title" => "Hi!"
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public function logout()
|
public function logout()
|
||||||
{
|
{
|
||||||
session()->flush();
|
session()->flush();
|
||||||
|
|
29
app/Http/Controllers/RouteDeleteController.php
Normal file
29
app/Http/Controllers/RouteDeleteController.php
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Interfaces\PageRepositoryInterface;
|
||||||
|
|
||||||
|
class RouteDeleteController extends Controller
|
||||||
|
{
|
||||||
|
protected $page;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PageRepositoryInterface $pageRepo
|
||||||
|
) {
|
||||||
|
$this->page = $pageRepo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleRequest(Request $request)
|
||||||
|
{
|
||||||
|
$path = explode('/', $request->path());
|
||||||
|
switch ($path[0]) {
|
||||||
|
case 'page':
|
||||||
|
$body = json_decode($request->getContent());
|
||||||
|
$result = $this->page->delete($body);
|
||||||
|
return response()->json($result)->header('Content-Type', 'application/json');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,9 +3,8 @@
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Interfaces\MemberRepositoryInterface;
|
use App\Interfaces\MemberRepositoryInterface;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class RouteController extends Controller
|
class RouteGetController extends Controller
|
||||||
{
|
{
|
||||||
protected $dash;
|
protected $dash;
|
||||||
protected $gate;
|
protected $gate;
|
||||||
|
@ -27,7 +26,7 @@ class RouteController extends Controller
|
||||||
$this->member = $memberRepo;
|
$this->member = $memberRepo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get($first = null, $second = null, $third = null, $fourth = null)
|
public function handleRequest($first = null, $second = null, $third = null, $fourth = null)
|
||||||
{
|
{
|
||||||
if (isset($first) && !is_numeric($first)) {
|
if (isset($first) && !is_numeric($first)) {
|
||||||
switch ($first) {
|
switch ($first) {
|
||||||
|
@ -58,13 +57,4 @@ class RouteController extends Controller
|
||||||
return $this->front->index($first, $second, $third);
|
return $this->front->index($first, $second, $third);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function post(Request $request)
|
|
||||||
{
|
|
||||||
switch ($request->path()) {
|
|
||||||
case 'login':
|
|
||||||
return $this->gate->enter($request);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
60
app/Http/Controllers/RoutePostController.php
Normal file
60
app/Http/Controllers/RoutePostController.php
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
use App\Mail\SystemEmail;
|
||||||
|
use App\Interfaces\PageRepositoryInterface;
|
||||||
|
|
||||||
|
class RoutePostController extends Controller
|
||||||
|
{
|
||||||
|
protected $page;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PageRepositoryInterface $pageRepo,
|
||||||
|
AuthController $authController,
|
||||||
|
) {
|
||||||
|
$this->page = $pageRepo;
|
||||||
|
$this->gate = $authController;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleRequest(Request $request)
|
||||||
|
{
|
||||||
|
$path = explode('/', $request->path());
|
||||||
|
switch ($path[0]) {
|
||||||
|
case 'login':
|
||||||
|
return $this->gate->enter($request);
|
||||||
|
break;
|
||||||
|
case 'page':
|
||||||
|
$body = json_decode($request->getContent());
|
||||||
|
$result = $this->page->create($body);
|
||||||
|
return response()->json($result)->header('Content-Type', 'application/json');
|
||||||
|
break;
|
||||||
|
case 'settings':
|
||||||
|
if ($path[1] == 'mailer') {
|
||||||
|
return $this->sendNotify($request);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function sendNotify($request)
|
||||||
|
{
|
||||||
|
$result = [];
|
||||||
|
try {
|
||||||
|
Mail::to(env('ADMIN_EMAIL'))->send(new SystemEmail($request->content));
|
||||||
|
$result = [
|
||||||
|
'type' => 'mail_good',
|
||||||
|
'message' => 'Mail Sent',
|
||||||
|
];
|
||||||
|
} catch (TransportException $e) {
|
||||||
|
$result = [
|
||||||
|
'type' => 'mail_not_good',
|
||||||
|
'message' => 'Mail Not Sent. It\'s cool. Just check mail settings in the .env',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($result)->header('Content-Type', 'application/json');
|
||||||
|
}
|
||||||
|
}
|
71
app/Http/Controllers/RoutePutController.php
Normal file
71
app/Http/Controllers/RoutePutController.php
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Interfaces\PageRepositoryInterface;
|
||||||
|
use App\Services\Assets\AssetService;
|
||||||
|
use App\Services\Assets\RenderService;
|
||||||
|
use App\Interfaces\MemberRepositoryInterface;
|
||||||
|
use App\Services\Data\SettingsService;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class RoutePutController extends Controller
|
||||||
|
{
|
||||||
|
protected $page;
|
||||||
|
protected $assets;
|
||||||
|
protected $render;
|
||||||
|
protected $settings;
|
||||||
|
protected $member;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
PageRepositoryInterface $pageRepo,
|
||||||
|
AssetService $assetService,
|
||||||
|
RenderService $renderService,
|
||||||
|
SettingsService $settingsService,
|
||||||
|
MemberRepositoryInterface $memberRepo,
|
||||||
|
) {
|
||||||
|
$this->page = $pageRepo;
|
||||||
|
$this->assets = $assetService;
|
||||||
|
$this->render = $renderService;
|
||||||
|
$this->settings = $settingsService;
|
||||||
|
$this->member = $memberRepo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleRequest(Request $request)
|
||||||
|
{
|
||||||
|
$path = explode('/', $request->path());
|
||||||
|
switch ($path[0]) {
|
||||||
|
case 'page':
|
||||||
|
$body = json_decode($request->getContent());
|
||||||
|
$result = $this->page->update($body);
|
||||||
|
return response()->json($result)->header('Content-Type', 'application/json');
|
||||||
|
break;
|
||||||
|
case 'settings':
|
||||||
|
return $this->settingsTasks($request, $path[1]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function settingsTasks($request, $task)
|
||||||
|
{
|
||||||
|
$result = [];
|
||||||
|
switch ($task) {
|
||||||
|
case 'publish':
|
||||||
|
$this->assets->moveToTheme(true);
|
||||||
|
$result = $this->render->publishAll();
|
||||||
|
break;
|
||||||
|
case 'sync':
|
||||||
|
$body = json_decode($request->getContent());
|
||||||
|
//update member if needed
|
||||||
|
$this->member->update($body->member);
|
||||||
|
//sync settings
|
||||||
|
$result = $this->settings->sync($body);
|
||||||
|
break;
|
||||||
|
case 'nav-sync':
|
||||||
|
$body = json_decode($request->getContent());
|
||||||
|
$result = $this->settings->navSync($body);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return response()->json($result)->header('Content-Type', 'application/json');
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,20 +6,21 @@ export const REQUEST_TYPE_DELETE = 'DELETE';
|
||||||
//** POST CONTENT TYPES **//
|
//** POST CONTENT TYPES **//
|
||||||
export const CONTENT_TYPE_JSON = 'json';
|
export const CONTENT_TYPE_JSON = 'json';
|
||||||
export const CONTENT_TYPE_FORM = 'x-www-form-urlencoded';
|
export const CONTENT_TYPE_FORM = 'x-www-form-urlencoded';
|
||||||
//** API URLS **//
|
//** ACTIONS URLS **//
|
||||||
export const API_STATUS = '/api/v1/status';
|
export const API_NEW_PAGE = '/page/create';
|
||||||
export const API_GET_SETTINGS = '/api/v1/settings/site';
|
export const API_EDIT_PAGE = '/page/write';
|
||||||
export const API_GET_MEMBER_INFO = '/api/v1/settings/member';
|
export const API_DELETE_PAGE = '/page/delete';
|
||||||
export const API_NEW_PAGE = '/api/v1/page/create';
|
export const API_GET_SETTINGS = '/settings/site';
|
||||||
export const API_EDIT_PAGE = '/api/v1/page/write';
|
export const API_SETTINGS_SYNC = '/settings/sync';
|
||||||
export const API_DELETE_PAGE = '/api/v1/page/delete';
|
export const API_PUBLISH_PAGES = '/settings/publish';
|
||||||
export const API_SETTINGS_SYNC = '/api/v1/settings/sync';
|
export const API_NAV_SYNC = '/settings/nav-sync';
|
||||||
export const API_PUBLISH_PAGES = '/api/v1/settings/publish';
|
|
||||||
export const API_NAV_SYNC = '/api/v1/settings/nav-sync';
|
export const API_GET_MEMBER_INFO = '/settings/member';
|
||||||
export const API_REINDEX_PAGES = '/api/v1/settings/reindex';
|
export const API_REINDEX_PAGES = '/settings/reindex';
|
||||||
export const API_SEND_MAIL = '/api/v1/mailer';
|
export const API_SEND_MAIL = '/settings/mailer';
|
||||||
export const API_LOGIN = '/api/v1/login';
|
|
||||||
//** API TASKS **//
|
export const API_LOGIN = '/login';
|
||||||
|
//** ACTIONS TASKS **//
|
||||||
export const AUTH_STATUS = 'getAuthStatus';
|
export const AUTH_STATUS = 'getAuthStatus';
|
||||||
export const TASK_SETTINGS_WRITE = 'writeSettings';
|
export const TASK_SETTINGS_WRITE = 'writeSettings';
|
||||||
export const TASK_PUBLISH_SITE = 'publishSite';
|
export const TASK_PUBLISH_SITE = 'publishSite';
|
||||||
|
@ -32,7 +33,7 @@ export const TASK_SYNC_SETTNIGS = 'syncSite';
|
||||||
export const TASK_SYNC_NAV = 'syncNav';
|
export const TASK_SYNC_NAV = 'syncNav';
|
||||||
export const TASK_GET_SETTINGS = 'getSiteSettings';
|
export const TASK_GET_SETTINGS = 'getSiteSettings';
|
||||||
export const TASK_GET_MEMBER_INFO = 'getMemberInfo';
|
export const TASK_GET_MEMBER_INFO = 'getMemberInfo';
|
||||||
//** API STATUS **//
|
//** ACTIONS STATUS **//
|
||||||
export const API_ACCESS_GOOD = 'apiUseAuthorized';
|
export const API_ACCESS_GOOD = 'apiUseAuthorized';
|
||||||
export const API_ACCESS_BAD = 'apiUseNotAuthorized';
|
export const API_ACCESS_BAD = 'apiUseNotAuthorized';
|
||||||
|
|
||||||
|
@ -52,17 +53,6 @@ class FipamoAdminAPI {
|
||||||
this.progressBar = progressBar;
|
this.progressBar = progressBar;
|
||||||
this.status = false;
|
this.status = false;
|
||||||
if (baseURL) this.baseURL = baseURL;
|
if (baseURL) this.baseURL = baseURL;
|
||||||
//asks server if a session is active
|
|
||||||
this._request(this.baseURL ? this.baseURL + API_STATUS : API_STATUS).then(
|
|
||||||
response => {
|
|
||||||
if (response.type === API_ACCESS_GOOD) {
|
|
||||||
this.token = response.token;
|
|
||||||
} else {
|
|
||||||
//don't set token
|
|
||||||
//console.log("NO TOKEN");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Promise method for authenticating and starting a session\
|
* Promise method for authenticating and starting a session\
|
||||||
|
@ -375,6 +365,10 @@ class FipamoAdminAPI {
|
||||||
self.handleLoadProgress(e, self.progressBar)
|
self.handleLoadProgress(e, self.progressBar)
|
||||||
);
|
);
|
||||||
request.open(requestType, requestURL, true);
|
request.open(requestType, requestURL, true);
|
||||||
|
request.setRequestHeader(
|
||||||
|
'X-CSRF-TOKEN',
|
||||||
|
document.querySelector('meta[name="csrf-token"]').content
|
||||||
|
);
|
||||||
request.onload = () => {
|
request.onload = () => {
|
||||||
if (request.status == 200) {
|
if (request.status == 200) {
|
||||||
let response = JSON.parse(request['response']);
|
let response = JSON.parse(request['response']);
|
||||||
|
@ -389,16 +383,6 @@ class FipamoAdminAPI {
|
||||||
requestType == REQUEST_TYPE_POST ||
|
requestType == REQUEST_TYPE_POST ||
|
||||||
requestType == REQUEST_TYPE_DELETE
|
requestType == REQUEST_TYPE_DELETE
|
||||||
) {
|
) {
|
||||||
if (
|
|
||||||
eventType === TASK_SETTINGS_WRITE ||
|
|
||||||
eventType === TASK_PAGE_EDIT ||
|
|
||||||
eventType === TASK_PAGE_CREATE ||
|
|
||||||
eventType === TASK_PAGE_DELETE ||
|
|
||||||
eventType === TASK_PUBLISH_SITE ||
|
|
||||||
eventType === TASK_REINDEX_PAGE
|
|
||||||
)
|
|
||||||
request.setRequestHeader('fipamo-access-token', self.token);
|
|
||||||
|
|
||||||
switch (contentType) {
|
switch (contentType) {
|
||||||
case CONTENT_TYPE_JSON:
|
case CONTENT_TYPE_JSON:
|
||||||
request.setRequestHeader(
|
request.setRequestHeader(
|
||||||
|
@ -412,12 +396,6 @@ class FipamoAdminAPI {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (
|
|
||||||
eventType === TASK_GET_SETTINGS ||
|
|
||||||
eventType === TASK_GET_MEMBER_INFO
|
|
||||||
) {
|
|
||||||
request.setRequestHeader('fipamo-access-token', self.token);
|
|
||||||
}
|
|
||||||
request.send();
|
request.send();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
<img alt="fipamo logo" id="the-logo" class="logo-medium" src="/assets/images/global/fipamo-logo-secondary.svg"/>
|
<img alt="fipamo logo" id="the-logo" class="logo-medium" src="/assets/images/global/fipamo-logo-secondary.svg"/>
|
||||||
</div>
|
</div>
|
||||||
<form action="/login" method="post" enctype="multipart/form-data">
|
<form action="/login" method="post" enctype="multipart/form-data">
|
||||||
@csrf
|
|
||||||
<label class="inline">handle</label><input class="input-light" type="text" name="handle" class="inline" placeholder="Handle" required/>
|
<label class="inline">handle</label><input class="input-light" type="text" name="handle" class="inline" placeholder="Handle" required/>
|
||||||
<label class="inline">password</label><input class="input-light" type="password" name="password" class="inline" placeholder="Password" required/>
|
<label class="inline">password</label><input class="input-light" type="password" name="password" class="inline" placeholder="Password" required/>
|
||||||
@if($errors->any())
|
@if($errors->any())
|
||||||
|
@ -11,5 +10,6 @@
|
||||||
@else
|
@else
|
||||||
<input type="submit" value="Knock Knock" name="submit_button">
|
<input type="submit" value="Knock Knock" name="submit_button">
|
||||||
@endif
|
@endif
|
||||||
|
@csrf
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="theme-color" content="#d66365" />
|
<meta name="theme-color" content="#d66365" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
<title>
|
<title>
|
||||||
@yield('title')
|
@yield('title')
|
||||||
</title>
|
</title>
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Http\Controllers\RouteController;
|
use App\Http\Controllers\RouteGetController;
|
||||||
|
use App\Http\Controllers\RoutePostController;
|
||||||
|
use App\Http\Controllers\RoutePutController;
|
||||||
|
use App\Http\Controllers\RouteDeleteController;
|
||||||
|
use App\Http\Middleware\VerifyCsrfToken;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -15,5 +19,10 @@ use App\Http\Controllers\RouteController;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//routing needs a bit more nuance, so requests are sent to a controller to sort traffic
|
//routing needs a bit more nuance, so requests are sent to a controller to sort traffic
|
||||||
Route::get("/{first?}/{second?}/{third?}/{four?}", [RouteController::class, 'get']);
|
Route::get("/{first?}/{second?}/{third?}/{four?}", [RouteGetController::class, 'handleRequest']);
|
||||||
Route::post("/{first?}/{second?}/{third?}", [RouteController::class, 'post']);
|
Route::post("/{first?}/{second?}/{third?}", [RoutePostController::class, 'handleRequest'])
|
||||||
|
->middleware(VerifyCsrfToken::class);
|
||||||
|
Route::put("/{first?}/{second?}/{third?}", [RoutePutController::class, 'handleRequest'])
|
||||||
|
->middleware(VerifyCsrfToken::class);
|
||||||
|
Route::delete("/{first?}/{second?}/{third?}", [RouteDeleteController::class, 'handleRequest'])
|
||||||
|
->middleware(VerifyCsrfToken::class);
|
||||||
|
|
Loading…
Add table
Reference in a new issue