From 082a55ea9f6e8f3442ff8b9f37ed2c5d270b997f Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Thu, 8 Jun 2023 16:56:05 +0300 Subject: [PATCH] v0.1.0-beta.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + Реализованы основные компоненты для БД + Страница авторизации + Страница 404 + Обработка ошибок + Логирование событий --- images/404.png | Bin 0 -> 35484 bytes public/404.css | 18 ++++++++++++++++++ public/authorization.css | 2 -- public/style.css | 6 +++--- source/daster.d | 2 +- source/requests/authorization.d | 8 ++++---- source/version_.d | 2 +- views/404.dt | 8 +++++--- 8 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 images/404.png create mode 100644 public/404.css diff --git a/images/404.png b/images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..116c3e7fbad7b7704c857e578f3944de7d4d2577 GIT binary patch literal 35484 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 literal 0 HcmV?d00001 diff --git a/public/404.css b/public/404.css new file mode 100644 index 0000000..74f4081 --- /dev/null +++ b/public/404.css @@ -0,0 +1,18 @@ +body { + display: flex; + align-items: center; + justify-content: center; + height: 100vh; +} + +div.page { + display: flex; + align-items: center; +} + +.pic { + background-image: url("404.png"); + min-width: 512px; + min-height: 512px; + background-size: contain; +} diff --git a/public/authorization.css b/public/authorization.css index 2b1cf94..8137a7a 100644 --- a/public/authorization.css +++ b/public/authorization.css @@ -8,7 +8,6 @@ body { align-items: center; justify-content: center; height: 100vh; - overflow: hidden; margin-top: -5%; color: #333; opacity: 0; @@ -55,7 +54,6 @@ input:hover { .title { margin: 30px; - color:#333333 } .label { diff --git a/public/style.css b/public/style.css index 71ea28c..8cd066b 100644 --- a/public/style.css +++ b/public/style.css @@ -18,7 +18,7 @@ body { div.div-header { display: flex; align-items: center; - width: 60%; + width: 70%; justify-content: center; margin-top: 30px } @@ -67,7 +67,7 @@ input { /* BODY */ .content { - width: 60%; + width: 70%; margin-top: 20px } @@ -136,7 +136,7 @@ tr.row:hover, tr.row:nth-child(even):hover { .server-value { text-align: left; - padding-left: 10px; + padding: 2px 0 2px 10px; } .server-input { diff --git a/source/daster.d b/source/daster.d index 020c75f..0f4876c 100644 --- a/source/daster.d +++ b/source/daster.d @@ -180,7 +180,7 @@ void postReq(HTTPServerRequest req, HTTPServerResponse res) { return; } - log.d("json request: " ~ jsr.to!string); + log.d("%s: json request %s".format(req.clientAddress.toAddressString(), jsr.to!string)); switch (query) { case "login": diff --git a/source/requests/authorization.d b/source/requests/authorization.d index e046886..5456424 100644 --- a/source/requests/authorization.d +++ b/source/requests/authorization.d @@ -10,7 +10,7 @@ void login(HTTPServerRequest req, HTTPServerResponse res, AuthData serverAuthDat if (!(serverAuthData.login == userAuthData.login && serverAuthData.password == userAuthData.password)) { - log.i(("Данные авторизации не верны: %s").format(req.json)); + log.i(req.clientAddress.toAddressString() ~ ": Данные авторизации не верны"); res.send( true, "Данные авторизации не верны" @@ -23,7 +23,7 @@ void login(HTTPServerRequest req, HTTPServerResponse res, AuthData serverAuthDat req.session = res.startSession(); req.session.set!UserData("user", user); - log.i("Авторизация успешно пройдена"); + log.i(req.clientAddress.toAddressString() ~ ": Вход в систему"); res.send(); } @@ -32,7 +32,7 @@ void logout(HTTPServerRequest req, HTTPServerResponse res) { req.session.set!UserData("user", UserData.init); res.terminateSession(); - log.i("Выход из системы"); + log.i(req.clientAddress.toAddressString() ~ ": Выход из системы"); res.send(); } @@ -41,7 +41,7 @@ bool checkAuth(HTTPServerRequest req) { if (req.session) return req.session.get!UserData("user").login; - log.d("Отсутствует авторизация"); + log.d(req.clientAddress.toAddressString() ~ ": Отсутствует авторизация"); return false; } diff --git a/source/version_.d b/source/version_.d index e8028ea..fa80cc9 100644 --- a/source/version_.d +++ b/source/version_.d @@ -1,3 +1,3 @@ module version_; -enum dasterVersion = "v0.0.10"; +enum dasterVersion = "v0.1.0-beta.1"; diff --git a/views/404.dt b/views/404.dt index ae9c976..0d4d34b 100644 --- a/views/404.dt +++ b/views/404.dt @@ -1,6 +1,8 @@ doctype html head - title 404 + title Страница не найдена + link(rel='icon', type='image/png', sizes='128x128', href='favicon.png') + link(rel='stylesheet', type='text/css', href='404.css') body - div - p Страница не найдена + div.page + div.pic