//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 "header";
|
||||||
@import "footer";
|
@import "footer";
|
||||||
@import "permissions";
|
@import "permissions";
|
||||||
|
@import "confirm";
|
||||||
|
|
||||||
// Main page styling
|
// Main page styling
|
||||||
@import "home";
|
@import "home";
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
namespace Misuzu;
|
namespace Misuzu;
|
||||||
|
|
||||||
use Misuzu\Http\HttpServerRequestMessage;
|
use Misuzu\Http\HttpServerRequestMessage;
|
||||||
|
use Misuzu\Http\Filters\Filter;
|
||||||
use Misuzu\Http\Handlers\Handler;
|
use Misuzu\Http\Handlers\Handler;
|
||||||
use Misuzu\Http\Routing\Router;
|
use Misuzu\Http\Routing\Router;
|
||||||
use Misuzu\Http\Routing\Route;
|
use Misuzu\Http\Routing\Route;
|
||||||
|
@ -20,6 +21,9 @@ $router->addRoutes(
|
||||||
Route::get('/info', Handler::call('index@InfoHandler')),
|
Route::get('/info', Handler::call('index@InfoHandler')),
|
||||||
Route::get('/info/([A-Za-z0-9_/]+)', true, Handler::call('page@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
|
// Sock Chat
|
||||||
Route::create(['GET', 'POST'], '/_sockchat.php', Handler::call('phpFile@SockChatHandler')),
|
Route::create(['GET', 'POST'], '/_sockchat.php', Handler::call('phpFile@SockChatHandler')),
|
||||||
Route::get('/_sockchat/emotes', Handler::call('emotes@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