Add disappointment.

This commit is contained in:
flash 2018-01-28 04:32:28 +01:00
parent 64f30b0cbb
commit 27f5836e07
9 changed files with 19 additions and 226 deletions

View file

@ -6,7 +6,6 @@ use Misuzu\Controllers\UserController;
return [ return [
Route::get('/', 'index', HomeController::class), Route::get('/', 'index', HomeController::class),
Route::get('/is_ready', 'isReady', HomeController::class),
Route::get('/auth/login', 'login', AuthController::class), Route::get('/auth/login', 'login', AuthController::class),
Route::post('/auth/login', 'login', AuthController::class), Route::post('/auth/login', 'login', AuthController::class),

View file

@ -97,7 +97,6 @@ class Application extends ApplicationBase
$twig->addFilter('json_decode'); $twig->addFilter('json_decode');
$twig->addFilter('byte_symbol'); $twig->addFilter('byte_symbol');
$twig->addFunction('flashii_is_ready');
$twig->addFunction('byte_symbol'); $twig->addFunction('byte_symbol');
$twig->addFunction('session_id'); $twig->addFunction('session_id');
$twig->addFunction('config', [$this->config, 'get']); $twig->addFunction('config', [$this->config, 'get']);

View file

@ -61,17 +61,24 @@ class AuthController extends Controller
public function register() public function register()
{ {
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$app = Application::getInstance(); $app = Application::getInstance();
$allowed_to_reg = $app->config->get('Testing', 'public_registration', 'bool', false)
|| in_array(
IP::remote(),
explode(' ', $app->config->get('Testing', 'allow_ip_registration', 'string', '127.0.0.1 ::1'))
);
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$twig = $app->templating; $twig = $app->templating;
$twig->vars([ $twig->vars([
'has_registrations' => $this->hasRegistrations(), 'has_registrations' => $this->hasRegistrations(),
'allowed_to_register' => $allowed_to_reg,
]); ]);
return $twig->render('auth.register'); return $twig->render('auth.register');
} }
if (!flashii_is_ready()) { if (!$allowed_to_reg) {
return [ return [
'error' => "Nice try, but you'll have to wait a little longer. I appreciate your excitement though!" 'error' => "Nice try, but you'll have to wait a little longer. I appreciate your excitement though!"
]; ];

View file

@ -13,9 +13,4 @@ class HomeController extends Controller
return $twig->render('home.landing'); return $twig->render('home.landing');
} }
public function isReady(): string
{
return flashii_is_ready() ? 'yes' : 'no';
}
} }

View file

@ -62,12 +62,6 @@ function byte_symbol($bytes, $decimal = false)
return sprintf("%.2f %s%sB", $bytes, $symbol, $symbol !== '' && !$decimal ? 'i' : ''); return sprintf("%.2f %s%sB", $bytes, $symbol, $symbol !== '' && !$decimal ? 'i' : '');
} }
function flashii_is_ready()
{
$ipAddr = \Misuzu\Net\IP::remote();
return in_array($ipAddr, ['83.85.244.163', '127.0.0.1', '::1']) || time() > 1517443200;
}
function get_country_code(string $ipAddr, string $fallback = 'XX'): string function get_country_code(string $ipAddr, string $fallback = 'XX'): string
{ {
if (function_exists("geoip_country_code_by_name")) { if (function_exists("geoip_country_code_by_name")) {

View file

@ -9,11 +9,7 @@
{% block content %} {% block content %}
<div class="platform form" id="auth-form"> <div class="platform form" id="auth-form">
<div> <div>
{% if flashii_is_ready() %}
<a href="/auth/register"><button class="button" type="button">Click here if you don't have an account yet</button></a> <a href="/auth/register"><button class="button" type="button">Click here if you don't have an account yet</button></a>
{% else %}
<p style="padding: .2em">You can't create an account yet, but you may log in if you have one already!</p>
{% endif %}
</div> </div>
<div> <div>
<input class="form__text" type="text" name="username" placeholder="Username"> <input class="form__text" type="text" name="username" placeholder="Username">

View file

@ -6,7 +6,7 @@
<h1 style="align-self: center; text-align: left; flex-grow: 1; padding-left: 2em"> <h1 style="align-self: center; text-align: left; flex-grow: 1; padding-left: 2em">
{% if has_registrations %} {% if has_registrations %}
Your IP address already has an account! Your IP address already has an account!
{% elseif not flashii_is_ready() %} {% elseif not allowed_to_register %}
You'll have to wait a little longer! You'll have to wait a little longer!
{% else %} {% else %}
Welcome, thanks for dropping by! Welcome, thanks for dropping by!
@ -19,9 +19,9 @@
<div class="platform" style="text-align: left;"> <div class="platform" style="text-align: left;">
<p>As a temporary security measure we only allow one account per IP address, this will definitely be changed in the future but for now; sorry for the possible inconvenience!</p> <p>As a temporary security measure we only allow one account per IP address, this will definitely be changed in the future but for now; sorry for the possible inconvenience!</p>
</div> </div>
{% elseif not flashii_is_ready() %} {% elseif not allowed_to_register %}
<div class="platform" style="text-align: left;"> <div class="platform" style="text-align: left;">
<p>You'll be able to register once the countdown on the landing page runs out!</p> <p>You'll be able to register once the site enter public beta!</p>
</div> </div>
{% else %} {% else %}
<div class="platform form" id="auth-form"> <div class="platform form" id="auth-form">

View file

@ -1,212 +1,14 @@
{% extends '@nova/home/master.twig' %} {% extends '@nova/home/master.twig' %}
{% set banner_classes = 'banner--insane landing__banner' %} {% set banner_classes = 'banner--insane landing__banner' %}
{% set banner = 'https://static.flash.moe/images/banner-clouds.png' %}
{% block banner_content %} {% block banner_content %}
<div id="countdown"></div> <h1 style="align-self: center; text-align: left; flex-grow: 1; padding-left: 2em">Well, this is embarrassing...</h1>
<style>
#countdown {
width: 100%;
height: 100%;
}
.countdown-container {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
transition: transform .5s;
}
.countdown-digit {
background: url('https://static.flash.moe/images/countdown-sprite.png');
width: 68px;
height: 80px;
display: inline-block;
z-index: 1;
position: relative;
transition: background-position-y .2s;
}
.countdown-digit[data-digit="0"] { background-position: 0px 0px; }
.countdown-digit[data-digit="1"] { background-position: 0px -86px; }
.countdown-digit[data-digit="2"] { background-position: 0px -172px; }
.countdown-digit[data-digit="3"] { background-position: 0px -259px; }
.countdown-digit[data-digit="4"] { background-position: 0px -345px; }
.countdown-digit[data-digit="5"] { background-position: 0px -432px; }
.countdown-digit[data-digit="6"] { background-position: 0px -518px; }
.countdown-digit[data-digit="7"] { background-position: 0px -604px; }
.countdown-digit[data-digit="8"] { background-position: 0px -691px; }
.countdown-digit[data-digit="9"] { background-position: 0px -777px; }
.countdown-digit[data-digit=";"] { transition: background-position-y 0s; background-position: -56px 0px; }
.countdown-digit[data-digit=":"] { transition: background-position-y 0s; background-position: -56px -86px; }
.countdown-digit[data-digit=","] { transition: background-position-y 0s; background-position: -56px -172px; }
.countdown-digit[data-digit="."] { transition: background-position-y 0s; background-position: -56px -259px; }
.countdown-digit[data-digit="+"] { transition: background-position-y 0s; background-position: -56px -345px; }
.countdown-digit[data-digit="-"] { transition: background-position-y 0s; background-position: -56px -432px; }
.countdown-digit[data-digit=" "] { transition: background-position-y 0s; background-position: -56px -518px; }
</style>
<script>
var countdownTarget,
countdownDigits = [],
countdownContainer,
countdownInterval,
countdownFlashingTicks = 0,
countdownLastString = '',
countdownFinish,
countdownIgnoreHidden = false,
continueChecking = true,
checkClient = null,
checkTimeout;
function countdownSetup(container, target, finish) {
countdownFinish = finish || null;
countdownContainer = container;
countdownTarget = target.getTime();
countdownResize(10);
countdownInterval = setInterval(function () { countdownUpdate(countdownIgnoreHidden); }, 100);
countdownUpdate(countdownIgnoreHidden);
}
function countdownStop() {
clearInterval(countdownInterval);
countdownResize(0);
countdownTarget = 0;
countdownContainer.parentNode.removeChild(countdownContainer);
countdownFinish = null;
}
function countdownResize(num) {
if (num == countdownDigits.length)
return;
if (num < countdownDigits.length) {
num = countdownDigits.length - num;
for (var i = 0; i < num; i++)
countdownContainer.removeChild(countdownDigits.pop());
return;
}
if (num > countdownDigits.length) {
num = num - countdownDigits.length;
for (var i = 0; i < num; i++) {
var elem = document.createElement('div');
elem.className = 'countdown-digit';
elem.setAttribute('data-digit', i);
countdownDigits.push(elem);
countdownContainer.appendChild(elem);
}
return;
}
}
function countdownUpdate(ignoreHidden) {
if (!ignoreHidden && document.hidden)
return;
var now = Date.now();
if (countdownTarget < now) {
if ((typeof countdownFinish) === 'function') {
countdownFinish.call();
countdownFinish = null;
}
countdownWrite(++countdownFlashingTicks % 10 < 5 ? '00:00:00' : '00 00 00');
return;
}
var milliseconds = now - countdownTarget;
var days = Math.ceil(milliseconds / 86400000);
milliseconds -= days * 86400000;
var hours = Math.ceil(milliseconds / 3600000);
milliseconds -= hours * 3600000;
var minutes = Math.ceil(milliseconds / 60000);
milliseconds -= minutes * 60000;
var seconds = Math.ceil(milliseconds / 1000);
milliseconds -= seconds * 1000;
var cdString = '';
if (days < 0)
cdString += Math.abs(days) + ' ';
if (days < 0 || hours < 0)
cdString += Math.abs(hours) + ':';
if (days < 0 || hours < 0 || minutes < 0)
cdString += Math.abs(minutes).toString().padStart(2, '0') + ':';
cdString += Math.abs(seconds).toString().padStart(2, '0');
countdownWrite(cdString);
if (days >= 0 && hours >= 0 && minutes >= 0 && seconds <= 0) {
var scale = 1;
if (seconds < 0)
scale += 4 * Math.pow((60 + seconds) / 60, 2);
countdownContainer.style.transform = 'scale(' + scale + ')';
}
}
function countdownWrite(str) {
if ((typeof str) !== 'string')
str = str.toString();
countdownLastString = str;
countdownResize(str.length);
for (var i = 0; i < str.length; i++)
countdownDigits[i].setAttribute('data-digit', str[i]);
}
function checkIfFlashiiReady(continuous) {
continueChecking = !(!continuous);
if (checkClient === null) {
checkClient = new XMLHttpRequest();
checkClient.addEventListener('readystatechange', function () {
if (checkClient.readyState === 4 && checkClient.responseText !== 'no')
location.reload(true);
});
}
checkClient.open('GET', '/is_ready?' + Date.now(), true);
checkClient.send();
if (continueChecking)
checkTimeout = setTimeout(function () { checkIfFlashiiReady(continueChecking); }, 1000);
}
window.addEventListener("load", function () {
var container = document.createElement('div');
container.className = 'countdown-container';
document.getElementById('countdown').appendChild(container);
countdownSetup(container, new Date("Mon, 2 01 2018 1:00:00 +0100"), function () {
checkIfFlashiiReady(true);
});
});
</script>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="platform" style="text-align: left;"> <div class="platform" style="text-align: left;">
<p>So I have to be honest, when the timer runs out you shouldn't expect a fully functional site. A chat, registration, login and a basic session system will most likely be at most in place though. On the positive side of things you get to see the site evolve, so yay!!</p> <p>Long story short, almost nothing is ready and going live now (or within the next week) will just lead to greater disappointment. I set up a <a href="https://twitter.com/flashiinet" class="container__footer-link" target="_blank" rel="noreferrer noopener">Twitter</a> again on which I'll eventually inform when the site goes in public beta.</p>
<p>In any case I hope you all will enjoy what I have in store going forward. I've also decided to push launch back to the 1st or February because I'll need the time.</p> <p>I offer my sincerest apologies for not being able to live up to the hype I've created (twice, even) but understand that this decision will make for a less rushed end product and less coping with hurried code in the future.</p>
<p>Lastly I'd like to add that none of the designs are final, most of this I put together ages ago as an eventual redesign for the old site, since then I haven't done much aside from the work in the last month.</p>
</div> </div>
{% endblock %} {% endblock %}

View file

@ -41,12 +41,13 @@
<a href="https://flash.moe" class="container__footer-link">flash.moe 2013-{{ ''|date('Y') }}</a> | <a href="https://flash.moe" class="container__footer-link">flash.moe 2013-{{ ''|date('Y') }}</a> |
<a href="https://github.com/flashwave/misuzu/tree/{{ git_branch() }}" class="container__footer-link">{{ git_branch() }}</a>#<a href="https://github.com/flashwave/misuzu/commit/{{ git_hash(true) }}" class="container__footer-link">{{ git_hash() }}</a> <a href="https://github.com/flashwave/misuzu/tree/{{ git_branch() }}" class="container__footer-link">{{ git_branch() }}</a>#<a href="https://github.com/flashwave/misuzu/commit/{{ git_hash(true) }}" class="container__footer-link">{{ git_hash() }}</a>
</div> </div>
{#<div class="container__footer-links"> <div class="container__footer-links">
<a href="#" class="container__footer-link">Terms of Service</a> <a href="#" class="container__footer-link">Terms of Service</a>
<a href="#" class="container__footer-link">Rules</a> <a href="#" class="container__footer-link">Rules</a>
<a href="#" class="container__footer-link">Contact</a> <a href="#" class="container__footer-link">Contact</a>
<a href="#" class="container__footer-link">Status</a> <a href="#" class="container__footer-link">Status</a>
</div>#} <a href="https://twitter.com/flashiinet" class="container__footer-link" target="_blank" rel="noreferrer noopener">@flashiinet</a>
</div>
</div> </div>
</div> </div>
</body> </body>