//moving computers
This commit is contained in:
parent
227349a4d9
commit
c7f06979b2
10 changed files with 130 additions and 0 deletions
18
assets/less/confirm.less
Normal file
18
assets/less/confirm.less
Normal file
|
@ -0,0 +1,18 @@
|
|||
.confirm {
|
||||
max-width: 400px;
|
||||
margin: 0 auto;
|
||||
|
||||
&__message {
|
||||
padding: 2px 5px;
|
||||
}
|
||||
|
||||
&__buttons {
|
||||
display: flex;
|
||||
padding: 5px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
&__button {
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
|
@ -161,6 +161,7 @@ html {
|
|||
@import "header";
|
||||
@import "footer";
|
||||
@import "permissions";
|
||||
@import "confirm";
|
||||
|
||||
// Main page styling
|
||||
@import "home";
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
namespace Misuzu;
|
||||
|
||||
use Misuzu\Http\HttpServerRequestMessage;
|
||||
use Misuzu\Http\Filters\Filter;
|
||||
use Misuzu\Http\Handlers\Handler;
|
||||
use Misuzu\Http\Routing\Router;
|
||||
use Misuzu\Http\Routing\Route;
|
||||
|
@ -20,6 +21,9 @@ $router->addRoutes(
|
|||
Route::get('/info', Handler::call('index@InfoHandler')),
|
||||
Route::get('/info/([A-Za-z0-9_/]+)', true, Handler::call('page@InfoHandler')),
|
||||
|
||||
// Forum
|
||||
Route::create(['GET', 'POST'], '/forum/mark-as-read', Handler::call('markAsRead@ForumHandler')),
|
||||
|
||||
// Sock Chat
|
||||
Route::create(['GET', 'POST'], '/_sockchat.php', Handler::call('phpFile@SockChatHandler')),
|
||||
Route::get('/_sockchat/emotes', Handler::call('emotes@SockChatHandler')),
|
||||
|
|
15
src/Http/Filters/EnforceLoggedInFilter.php
Normal file
15
src/Http/Filters/EnforceLoggedInFilter.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
namespace Misuzu\Http\Filters;
|
||||
|
||||
use Misuzu\Http\HttpResponseMessage;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class EnforceLoggedInFilter implements FilterInterface {
|
||||
public function process(ServerRequestInterface $request): ?ResponseInterface {
|
||||
if(!user_session_active())
|
||||
return new HttpResponseMessage(403);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
15
src/Http/Filters/EnforceLoggedOutFilter.php
Normal file
15
src/Http/Filters/EnforceLoggedOutFilter.php
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?php
|
||||
namespace Misuzu\Http\Filters;
|
||||
|
||||
use Misuzu\Http\HttpResponseMessage;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class EnforceLoggedOutFilter implements FilterInterface {
|
||||
public function process(ServerRequestInterface $request): ?ResponseInterface {
|
||||
if(user_session_active())
|
||||
return new HttpResponseMessage(404);
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
9
src/Http/Filters/Filter.php
Normal file
9
src/Http/Filters/Filter.php
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
namespace Misuzu\Http\Filters;
|
||||
|
||||
final class Filter {
|
||||
public static function call(string $name): array {
|
||||
[$funcName, $className] = explode('@', $name, 2);
|
||||
return [__NAMESPACE__ . '\\' . $className, $funcName];
|
||||
}
|
||||
}
|
9
src/Http/Filters/FilterInterface.php
Normal file
9
src/Http/Filters/FilterInterface.php
Normal file
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
namespace Misuzu\Http\Filters;
|
||||
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
interface FilterInterface {
|
||||
public function process(ServerRequestInterface $request): ?ResponseInterface;
|
||||
}
|
20
src/Http/Filters/ValidateCsrfFilter.php
Normal file
20
src/Http/Filters/ValidateCsrfFilter.php
Normal file
|
@ -0,0 +1,20 @@
|
|||
<?php
|
||||
namespace Hanyuu\Filters;
|
||||
|
||||
use Misuzu\CSRF;
|
||||
use Misuzu\Http\HttpResponseMessage;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
class ValidateCsrfFilter implements FilterInterface {
|
||||
public function process(ServerRequestInterface $request): ?ResponseInterface {
|
||||
if($request->getMethod() !== 'GET' && $request->getMethod() !== 'DELETE') {
|
||||
$token = $request->getBodyParam('_csrf');
|
||||
|
||||
if(empty($token) || !CSRF::validate($token))
|
||||
return new HttpResponseMessage(400);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
17
src/Http/Handlers/ForumHandler.php
Normal file
17
src/Http/Handlers/ForumHandler.php
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
namespace Misuzu\Http\Handlers;
|
||||
|
||||
final class ForumHandler extends Handler {
|
||||
public function markAsRead(Response $response, Request $request) {
|
||||
|
||||
if($request->getMethod() === 'GET') {
|
||||
$response->setTemplate('confirm', [
|
||||
'message' => 'Are you sure you want to mark the entire forum as read?',
|
||||
'return' => url('forum-index'),
|
||||
]);
|
||||
return;
|
||||
}
|
||||
|
||||
return 'now POSTing';
|
||||
}
|
||||
}
|
22
templates/confirm.twig
Normal file
22
templates/confirm.twig
Normal file
|
@ -0,0 +1,22 @@
|
|||
{% extends 'master.twig' %}
|
||||
{% from 'macros.twig' import container_title %}
|
||||
{% from '_layout/input.twig' import input_csrf %}
|
||||
|
||||
{% set title = title|default('Confirm your action') %}
|
||||
|
||||
{% block content %}
|
||||
<form action="{{ action|default('') }}" method="{{ method|default('post') }}" class="container confirm">
|
||||
{{ container_title('<i class="' ~ class|default('fas fa-exclamation-circle') ~ ' fa-fw"></i> ' ~ title) }}
|
||||
{{ input_csrf() }}
|
||||
{% for name, value in params|default([]) %}
|
||||
<input type="hidden" name="{{ name }}" value="{{ value }}">
|
||||
{% endfor %}
|
||||
<div class="confirm__message">
|
||||
{{ message|default('Are you sure you w') }}
|
||||
</div>
|
||||
<div class="confirm__buttons">
|
||||
<button class="input__button confirm__button">Yes</button>
|
||||
<a href="{{ return|default('/') }}" class="input__button confirm__button">No</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
Loading…
Add table
Reference in a new issue