mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-12 02:25:41 +00:00
Deploying to gh-pages from @ 2b10aa5d40 🚀
This commit is contained in:
@@ -106,7 +106,7 @@
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">Password</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">use</span> <span class="ident">argon2_creds::Config</span>;
|
||||
<span class="kw">use</span> <span class="ident">sqlx::Error::RowNotFound</span>;
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">match</span> <span class="ident">rec</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) => {
|
||||
<span class="kw">if</span> <span class="ident">Config::verify</span>(<span class="kw-2">&</span><span class="ident">s</span>.<span class="ident">password</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">password</span>)<span class="question-mark">?</span> {
|
||||
<span class="ident">runners::delete_user</span>(<span class="kw-2">&</span><span class="ident">username</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="ident">id</span>.<span class="ident">forget</span>();
|
||||
@@ -130,8 +130,8 @@
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::WrongPassword</span>)
|
||||
}
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_user</span>(<span class="ident">name</span>: <span class="kw-2">&</span><span class="ident">str</span>, <span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_user</span>(<span class="ident">name</span>: <span class="kw-2">&</span><span class="ident">str</span>, <span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="macro">sqlx::query!</span>(<span class="string">"DELETE FROM mcaptcha_users WHERE name = ($1)"</span>, <span class="ident">name</span>,)
|
||||
.<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
||||
.<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">email_exists</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">AccountCheckPayload</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE email = $1)"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">val</span>,
|
||||
@@ -155,7 +155,7 @@
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">Email</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="ident">data</span>.<span class="ident">creds</span>.<span class="ident">email</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">email</span>)<span class="question-mark">?</span>;
|
||||
@@ -170,7 +170,7 @@
|
||||
.<span class="kw">await</span>;
|
||||
<span class="kw">if</span> <span class="ident">res</span>.<span class="ident">is_err</span>() {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) <span class="op">=</span> <span class="ident">res</span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="op">&&</span> <span class="ident">err</span>.<span class="ident">message</span>().<span class="ident">contains</span>(<span class="string">"mcaptcha_users_email_key"</span>)
|
||||
{
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::EmailTaken</span>);
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Account</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Account</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Account</span> {
|
||||
<span class="kw">let</span> <span class="ident">get_secret</span> <span class="op">=</span> <span class="string">"/api/v1/account/secret/get"</span>;
|
||||
<span class="kw">let</span> <span class="ident">update_secret</span> <span class="op">=</span> <span class="string">"/api/v1/account/secret/update"</span>;
|
||||
<span class="kw">let</span> <span class="ident">delete</span> <span class="op">=</span> <span class="string">"/api/v1/account/delete"</span>;
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">ChangePasswordReqest</span><span class="op">></span> <span class="kw">for</span> <span class="ident">UpdatePassword</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">s</span>: <span class="ident">ChangePasswordReqest</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">s</span>: <span class="ident">ChangePasswordReqest</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">UpdatePassword</span> {
|
||||
<span class="ident">new_password</span>: <span class="ident">s</span>.<span class="ident">new_password</span>,
|
||||
<span class="ident">confirm_new_password</span>: <span class="ident">s</span>.<span class="ident">confirm_new_password</span>,
|
||||
@@ -255,7 +255,7 @@
|
||||
<span class="ident">user</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">update</span>: <span class="ident">UpdatePassword</span>,
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">Data</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">update</span>.<span class="ident">new_password</span> <span class="op">!</span><span class="op">=</span> <span class="ident">update</span>.<span class="ident">confirm_new_password</span> {
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::PasswordsDontMatch</span>);
|
||||
}
|
||||
@@ -282,7 +282,7 @@
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">ChangePasswordReqest</span><span class="op">></span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">payload</span>.<span class="ident">new_password</span> <span class="op">!</span><span class="op">=</span> <span class="ident">payload</span>.<span class="ident">confirm_new_password</span> {
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::PasswordsDontMatch</span>);
|
||||
}
|
||||
@@ -298,7 +298,7 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">match</span> <span class="ident">rec</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) => {
|
||||
<span class="kw">if</span> <span class="ident">Config::verify</span>(<span class="kw-2">&</span><span class="ident">s</span>.<span class="ident">password</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">password</span>)<span class="question-mark">?</span> {
|
||||
<span class="kw">let</span> <span class="ident">update</span>: <span class="ident">UpdatePassword</span> <span class="op">=</span> <span class="ident">payload</span>.<span class="ident">into_inner</span>().<span class="ident">into</span>();
|
||||
<span class="ident">update_password_runner</span>(<span class="kw-2">&</span><span class="ident">username</span>, <span class="ident">update</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
@@ -307,8 +307,8 @@
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::WrongPassword</span>)
|
||||
}
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.account.get_secret"</span>,
|
||||
<span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>
|
||||
)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_secret</span>(<span class="ident">id</span>: <span class="ident">Identity</span>, <span class="ident">data</span>: <span class="ident">AppData</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_secret</span>(<span class="ident">id</span>: <span class="ident">Identity</span>, <span class="ident">data</span>: <span class="ident">AppData</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">secret</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
@@ -144,7 +144,7 @@
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">update_user_secret</span>(
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">secret</span>;
|
||||
@@ -162,7 +162,7 @@
|
||||
<span class="kw">if</span> <span class="ident">res</span>.<span class="ident">is_ok</span>() {
|
||||
<span class="kw">break</span>;
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) <span class="op">=</span> <span class="ident">res</span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="op">&&</span> <span class="ident">err</span>.<span class="ident">message</span>().<span class="ident">contains</span>(<span class="string">"mcaptcha_users_secret_key"</span>)
|
||||
{
|
||||
<span class="kw">continue</span>;
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">username_exists</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">AccountCheckPayload</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">runners::username_exists</span>(<span class="kw-2">&</span><span class="ident">payload</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">resp</span>))
|
||||
}
|
||||
@@ -149,7 +149,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">username_exists</span>(
|
||||
<span class="ident">payload</span>: <span class="kw-2">&</span><span class="ident">AccountCheckPayload</span>,
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">AccountCheckResp</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">AccountCheckResp</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE name = $1)"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">val</span>,
|
||||
@@ -183,7 +183,7 @@
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">Username</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">processed_uname</span> <span class="op">=</span> <span class="ident">data</span>.<span class="ident">creds</span>.<span class="ident">username</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">username</span>)<span class="question-mark">?</span>;
|
||||
@@ -199,7 +199,7 @@
|
||||
|
||||
<span class="kw">if</span> <span class="ident">res</span>.<span class="ident">is_err</span>() {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) <span class="op">=</span> <span class="ident">res</span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="op">&&</span> <span class="ident">err</span>.<span class="ident">message</span>().<span class="ident">contains</span>(<span class="string">"mcaptcha_users_name_key"</span>)
|
||||
{
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameTaken</span>);
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Auth</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Auth</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Auth</span> {
|
||||
<span class="kw">let</span> <span class="ident">login</span> <span class="op">=</span> <span class="string">"/api/v1/signin"</span>;
|
||||
<span class="kw">let</span> <span class="ident">logout</span> <span class="op">=</span> <span class="string">"/logout"</span>;
|
||||
<span class="kw">let</span> <span class="ident">register</span> <span class="op">=</span> <span class="string">"/api/v1/signup"</span>;
|
||||
@@ -304,7 +304,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// returns Ok(()) when everything checks out and the user is authenticated. Erros otherwise</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">login_runner</span>(<span class="ident">payload</span>: <span class="ident">Login</span>, <span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">login_runner</span>(<span class="ident">payload</span>: <span class="ident">Login</span>, <span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">String</span><span class="op">></span> {
|
||||
<span class="kw">use</span> <span class="ident">argon2_creds::Config</span>;
|
||||
<span class="kw">use</span> <span class="ident">sqlx::Error::RowNotFound</span>;
|
||||
|
||||
@@ -332,13 +332,13 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">match</span> <span class="ident">email_fut</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) => {
|
||||
<span class="ident">verify</span>(<span class="kw-2">&</span><span class="ident">s</span>.<span class="ident">password</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">password</span>)<span class="question-mark">?</span>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>.<span class="ident">name</span>)
|
||||
}
|
||||
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
}
|
||||
} <span class="kw">else</span> {
|
||||
<span class="kw">let</span> <span class="ident">username_fut</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
@@ -350,12 +350,12 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">match</span> <span class="ident">username_fut</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">s</span>) => {
|
||||
<span class="ident">verify</span>(<span class="kw-2">&</span><span class="ident">s</span>.<span class="ident">password</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">password</span>)<span class="question-mark">?</span>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">payload</span>.<span class="ident">login</span>)
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::AccountNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -363,7 +363,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">register_runner</span>(
|
||||
<span class="ident">payload</span>: <span class="kw-2">&</span><span class="ident">Register</span>,
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="op">!</span><span class="ident"><span class="kw">crate</span>::SETTINGS</span>.<span class="ident">allow_registration</span> {
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::ClosedForRegistration</span>);
|
||||
}
|
||||
@@ -408,7 +408,7 @@
|
||||
<span class="kw">if</span> <span class="ident">res</span>.<span class="ident">is_ok</span>() {
|
||||
<span class="kw">break</span>;
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) <span class="op">=</span> <span class="ident">res</span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">let</span> <span class="ident">msg</span> <span class="op">=</span> <span class="ident">err</span>.<span class="ident">message</span>();
|
||||
<span class="kw">if</span> <span class="ident">msg</span>.<span class="ident">contains</span>(<span class="string">"mcaptcha_users_name_key"</span>) {
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameTaken</span>);
|
||||
@@ -437,7 +437,7 @@
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">register</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">runners::Register</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="ident">runners::register_runner</span>(<span class="kw-2">&</span><span class="ident">payload</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>())
|
||||
}
|
||||
@@ -447,14 +447,14 @@
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">runners::Login</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">runners::login_runner</span>(<span class="ident">payload</span>.<span class="ident">into_inner</span>(), <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="ident">id</span>.<span class="ident">remember</span>(<span class="ident">username</span>);
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>())
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.auth.logout"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">signout</span>(<span class="ident">id</span>: <span class="ident">Identity</span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">signout</span>(<span class="ident">id</span>: <span class="ident">Identity</span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">if</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">is_some</span>() {
|
||||
<span class="ident">id</span>.<span class="ident">forget</span>();
|
||||
}
|
||||
|
||||
@@ -373,7 +373,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">MCaptcha</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">MCaptcha</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">MCaptcha</span> {
|
||||
<span class="ident">MCaptcha</span> {
|
||||
<span class="ident">update_key</span>: <span class="string">"/api/v1/mcaptcha/update/key"</span>,
|
||||
<span class="ident">delete</span>: <span class="string">"/api/v1/mcaptcha/delete"</span>,
|
||||
@@ -407,7 +407,7 @@
|
||||
<span class="ident">description</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="kw-2">&</span><span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">MCaptchaDetails</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">MCaptchaDetails</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">key</span>;
|
||||
|
||||
@@ -429,8 +429,8 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">match</span> <span class="ident">res</span> {
|
||||
<span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) => {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>))
|
||||
<span class="op">&&</span> <span class="ident">err</span>.<span class="ident">message</span>().<span class="ident">contains</span>(<span class="string">"mcaptcha_config_key_key"</span>)
|
||||
{
|
||||
<span class="kw">continue</span>;
|
||||
@@ -438,9 +438,9 @@
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>).<span class="ident">into</span>());
|
||||
}
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">into</span>()),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">into</span>()),
|
||||
|
||||
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) => {
|
||||
<span class="ident">resp</span> <span class="op">=</span> <span class="ident">MCaptchaDetails</span> {
|
||||
<span class="ident">key</span>,
|
||||
<span class="ident">name</span>: <span class="ident">description</span>.<span class="ident">to_owned</span>(),
|
||||
@@ -460,7 +460,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">MCaptchaDetails</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">key</span>;
|
||||
|
||||
@@ -470,7 +470,7 @@
|
||||
<span class="kw">if</span> <span class="ident">res</span>.<span class="ident">is_ok</span>() {
|
||||
<span class="kw">break</span>;
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>)) <span class="op">=</span> <span class="ident">res</span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">continue</span>;
|
||||
} <span class="kw">else</span> {
|
||||
<span class="kw">return</span> <span class="prelude-val">Err</span>(<span class="ident">sqlx::Error::Database</span>(<span class="ident">err</span>).<span class="ident">into</span>());
|
||||
@@ -499,7 +499,7 @@
|
||||
<span class="ident">old_key</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">username</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">sqlx::Error</span><span class="op">></span> {
|
||||
) -> <span class="prelude-ty">Result</span><span class="op"><</span>(), <span class="ident">sqlx::Error</span><span class="op">></span> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_config SET key = $1
|
||||
WHERE key = $2 AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = $3)"</span>,
|
||||
@@ -526,7 +526,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">DeleteCaptcha</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">use</span> <span class="ident">argon2_creds::Config</span>;
|
||||
<span class="kw">use</span> <span class="ident">sqlx::Error::RowNotFound</span>;
|
||||
|
||||
@@ -546,7 +546,7 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">match</span> <span class="ident">rec</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">rec</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">rec</span>) => {
|
||||
<span class="kw">if</span> <span class="ident">Config::verify</span>(<span class="kw-2">&</span><span class="ident">rec</span>.<span class="ident">password</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">password</span>)<span class="question-mark">?</span> {
|
||||
<span class="kw">let</span> <span class="ident">payload</span> <span class="op">=</span> <span class="ident">payload</span>.<span class="ident">into_inner</span>();
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
@@ -579,8 +579,8 @@
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::WrongPassword</span>)
|
||||
}
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameNotFound</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="kw">_</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::InternalServerError</span>),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -597,7 +597,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">StatsPayload</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="ident">stats</span> <span class="op">=</span> <span class="ident">Stats::new</span>(<span class="kw-2">&</span><span class="ident">username</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>, <span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">stats</span> <span class="op">=</span> <span class="ident">StatsUnixTimestamp::from_stats</span>(<span class="kw-2">&</span><span class="ident">stats</span>);
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
<span class="kw">pub</span> <span class="ident">get</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>,
|
||||
}
|
||||
<span class="kw">impl</span> <span class="ident">Duration</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Duration</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Duration</span> {
|
||||
<span class="ident">Duration</span> {
|
||||
<span class="ident">update</span>: <span class="string">"/api/v1/mcaptcha/domain/token/duration/update"</span>,
|
||||
<span class="ident">get</span>: <span class="string">"/api/v1/mcaptcha/domain/token/duration/get"</span>,
|
||||
@@ -231,7 +231,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">UpdateDuration</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">if</span> <span class="ident">payload</span>.<span class="ident">duration</span> <span class="op">></span> <span class="number">0</span> {
|
||||
@@ -272,7 +272,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">MCaptchaDetails</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">duration</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Levels</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Levels</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Levels</span> {
|
||||
<span class="kw">let</span> <span class="ident">add</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/add"</span>;
|
||||
<span class="kw">let</span> <span class="ident">update</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/update"</span>;
|
||||
<span class="kw">let</span> <span class="ident">get</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/get"</span>;
|
||||
@@ -422,7 +422,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">AddLevels</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">defense</span> <span class="op">=</span> <span class="ident">DefenseBuilder::default</span>();
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
@@ -483,7 +483,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">UpdateLevels</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">defense</span> <span class="op">=</span> <span class="ident">DefenseBuilder::default</span>();
|
||||
|
||||
@@ -567,7 +567,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">MCaptchaDetails</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="ident">get_levels_util</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>, <span class="kw-2">&</span><span class="ident">username</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
@@ -590,7 +590,7 @@
|
||||
<span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">username</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">I32Levels</span><span class="op">></span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">I32Levels</span><span class="op">></span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">I32Levels</span>,
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">duration</span>;
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">levels</span>;
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_random</span>(<span class="ident">len</span>: <span class="ident">usize</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_random</span>(<span class="ident">len</span>: <span class="ident">usize</span>) -> <span class="ident">String</span> {
|
||||
<span class="kw">use</span> <span class="ident">std::iter</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident">rand</span>::{<span class="ident">distributions::Alphanumeric</span>, <span class="ident">rngs::ThreadRng</span>, <span class="ident">thread_rng</span>, <span class="ident">Rng</span>};
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Meta</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="self">Self</span> {
|
||||
<span class="ident">build_details</span>: <span class="string">"/api/v1/meta/build"</span>,
|
||||
<span class="ident">health</span>: <span class="string">"/api/v1/meta/health"</span>,
|
||||
@@ -198,7 +198,7 @@
|
||||
|
||||
<span class="doccomment">/// emmits build details of the bninary</span>
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.meta.build_details"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">build_details</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">build_details</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">let</span> <span class="ident">build</span> <span class="op">=</span> <span class="ident">BuildDetails</span> {
|
||||
<span class="ident">version</span>: <span class="ident">VERSION</span>,
|
||||
<span class="ident">git_commit_hash</span>: <span class="ident">GIT_COMMIT_HASH</span>,
|
||||
@@ -215,14 +215,14 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Health</span> {
|
||||
<span class="kw">fn</span> <span class="ident">is_redis</span>(<span class="ident">redis</span>: <span class="kw-2">&</span><span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">bool</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">bool</span> {
|
||||
<span class="kw">fn</span> <span class="ident">is_redis</span>(<span class="ident">redis</span>: <span class="kw-2">&</span><span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">bool</span><span class="op">></span>) -> <span class="ident">bool</span> {
|
||||
<span class="ident">redis</span>.<span class="ident">is_none</span>()
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// checks all components of the system</span>
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.meta.health"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">health</span>(<span class="ident">data</span>: <span class="ident">AppData</span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">health</span>(<span class="ident">data</span>: <span class="ident">AppData</span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">use</span> <span class="ident">sqlx::Connection</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">resp_builder</span> <span class="op">=</span> <span class="ident">HealthBuilder::default</span>();
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">AddNotification</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">sender</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span> <span class="kw">for</span> <span class="ident">NotificationResp</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">n</span>: <span class="ident">Notification</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">n</span>: <span class="ident">Notification</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">NotificationResp</span> {
|
||||
<span class="ident">name</span>: <span class="ident">n</span>.<span class="ident">name</span>.<span class="ident">unwrap</span>(),
|
||||
<span class="ident">heading</span>: <span class="ident">n</span>.<span class="ident">heading</span>.<span class="ident">unwrap</span>(),
|
||||
@@ -225,7 +225,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_notification</span>(
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">receiver</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_notification</span>(
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
<span class="ident">receiver</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span><span class="op">></span> {
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
<span class="kw">let</span> <span class="ident">notifications</span> <span class="op">=</span> <span class="macro">sqlx::query_file_as!</span>(
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">MarkReadReq</span><span class="op">></span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">receiver</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Notifications</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Notifications</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Notifications</span> {
|
||||
<span class="ident">Notifications</span> {
|
||||
<span class="ident">add</span>: <span class="string">"/api/v1/notifications/add"</span>,
|
||||
<span class="ident">mark_read</span>: <span class="string">"/api/v1/notifications/read"</span>,
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_config</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">GetConfigPayload</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>,
|
||||
@@ -243,13 +243,13 @@
|
||||
}
|
||||
<span class="kw">let</span> <span class="ident">payload</span> <span class="op">=</span> <span class="ident">payload</span>.<span class="ident">into_inner</span>();
|
||||
<span class="kw">match</span> <span class="ident">res</span>.<span class="ident">exists</span> {
|
||||
<span class="prelude-val">Some</span>(<span class="bool-val">true</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Some</span>(<span class="bool-val">true</span>) => {
|
||||
<span class="kw">match</span> <span class="ident">data</span>.<span class="ident">captcha</span>.<span class="ident">get_pow</span>(<span class="ident">payload</span>.<span class="ident">key</span>.<span class="ident">clone</span>()).<span class="kw">await</span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(<span class="ident">config</span>)) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="prelude-val">Some</span>(<span class="ident">config</span>)) => {
|
||||
<span class="ident">record_fetch</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>, <span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>).<span class="kw">await</span>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">config</span>))
|
||||
}
|
||||
<span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>) => {
|
||||
<span class="ident">init_mcaptcha</span>(<span class="kw-2">&</span><span class="ident">data</span>, <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">config</span> <span class="op">=</span> <span class="ident">data</span>
|
||||
.<span class="ident">captcha</span>
|
||||
@@ -261,19 +261,19 @@
|
||||
<span class="ident">record_fetch</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">key</span>, <span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>).<span class="kw">await</span>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">config</span>))
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">into</span>()),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="prelude-val">Err</span>(<span class="ident">e</span>.<span class="ident">into</span>()),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="prelude-val">Some</span>(<span class="bool-val">false</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::TokenNotFound</span>),
|
||||
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ServiceError::TokenNotFound</span>),
|
||||
<span class="prelude-val">Some</span>(<span class="bool-val">false</span>) => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::TokenNotFound</span>),
|
||||
<span class="prelude-val">None</span> => <span class="prelude-val">Err</span>(<span class="ident">ServiceError::TokenNotFound</span>),
|
||||
}
|
||||
}
|
||||
<span class="doccomment">/// Call this when [MCaptcha][libmcaptcha::MCaptcha] is not in master.</span>
|
||||
<span class="doccomment">///</span>
|
||||
<span class="doccomment">/// This fn gets mcaptcha config from database, builds [Defense][libmcaptcha::Defense],</span>
|
||||
<span class="doccomment">/// creates [MCaptcha][libmcaptcha::MCaptcha] and adds it to [Master][libmcaptcha::Defense]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">init_mcaptcha</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>, <span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">init_mcaptcha</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>, <span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="comment">// get levels</span>
|
||||
<span class="kw">let</span> <span class="ident">levels_fut</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">I32Levels</span>,
|
||||
|
||||
@@ -148,9 +148,9 @@
|
||||
}
|
||||
|
||||
<span class="macro">macro_rules!</span> <span class="ident">rm_scope</span> {
|
||||
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span>) <span class="op">=</span><span class="op">></span> {
|
||||
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span>) => {
|
||||
<span class="doccomment">/// remove scope for $name route</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="kw-2">&</span><span class="ident">str</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="kw-2">&</span><span class="ident">str</span> {
|
||||
<span class="self">self</span>.<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>
|
||||
<span class="comment">//.strip_prefix(&self.scope[..self.scope.len() - 1])</span>
|
||||
.<span class="ident">strip_prefix</span>(<span class="self">self</span>.<span class="ident">scope</span>)
|
||||
@@ -160,7 +160,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">PoW</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="comment">// date: 2021-11-29 16:31</span>
|
||||
<span class="comment">// commit: 6eb75d7</span>
|
||||
<span class="comment">// route 404s when scope contained trailing slash</span>
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">verify_pow</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">Work</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">payload</span>.<span class="ident">key</span>.<span class="ident">clone</span>();
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">data</span>.<span class="ident">captcha</span>.<span class="ident">verify_pow</span>(<span class="ident">payload</span>.<span class="ident">into_inner</span>()).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="ident">record_solve</span>(<span class="kw-2">&</span><span class="ident">key</span>, <span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>).<span class="kw">await</span>;
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">validate_captcha_token</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">VerifyCaptchaResult</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">payload</span>.<span class="ident">key</span>.<span class="ident">clone</span>();
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">data</span>
|
||||
.<span class="ident">captcha</span>
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Routes</span> {
|
||||
<span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Routes</span> {
|
||||
<span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Routes</span> {
|
||||
<span class="ident">Routes</span> {
|
||||
<span class="ident">auth</span>: <span class="ident">Auth::new</span>(),
|
||||
<span class="ident">account</span>: <span class="ident">Account::new</span>(),
|
||||
|
||||
@@ -267,11 +267,11 @@
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::SETTINGS</span>;
|
||||
|
||||
<span class="macro">macro_rules!</span> <span class="ident">enum_system_actor</span> {
|
||||
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span>, <span class="macro-nonterminal">$</span><span class="kw">type</span>:<span class="macro-nonterminal">ident</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">msg</span>: <span class="macro-nonterminal">$</span><span class="kw">type</span>) <span class="op">-</span><span class="op">></span> <span class="macro-nonterminal">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span>, <span class="macro-nonterminal">$</span><span class="kw">type</span>:<span class="macro-nonterminal">ident</span>) => {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">msg</span>: <span class="macro-nonterminal">$</span><span class="kw">type</span>) -> <span class="macro-nonterminal">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">match</span> <span class="self">self</span> {
|
||||
<span class="ident"><span class="self">Self</span>::Embedded</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> <span class="ident">val</span>.<span class="ident">master</span>.<span class="ident">send</span>(<span class="ident">msg</span>).<span class="kw">await</span><span class="question-mark">?</span>.<span class="kw">await</span><span class="question-mark">?</span><span class="question-mark">?</span>,
|
||||
<span class="ident"><span class="self">Self</span>::Redis</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> <span class="ident">val</span>.<span class="ident">master</span>.<span class="ident">send</span>(<span class="ident">msg</span>).<span class="kw">await</span><span class="question-mark">?</span>.<span class="kw">await</span><span class="question-mark">?</span><span class="question-mark">?</span>,
|
||||
<span class="ident"><span class="self">Self</span>::Embedded</span>(<span class="ident">val</span>) => <span class="ident">val</span>.<span class="ident">master</span>.<span class="ident">send</span>(<span class="ident">msg</span>).<span class="kw">await</span><span class="question-mark">?</span>.<span class="kw">await</span><span class="question-mark">?</span><span class="question-mark">?</span>,
|
||||
<span class="ident"><span class="self">Self</span>::Redis</span>(<span class="ident">val</span>) => <span class="ident">val</span>.<span class="ident">master</span>.<span class="ident">send</span>(<span class="ident">msg</span>).<span class="kw">await</span><span class="question-mark">?</span>.<span class="kw">await</span><span class="question-mark">?</span><span class="question-mark">?</span>,
|
||||
};
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
@@ -279,11 +279,11 @@
|
||||
}
|
||||
|
||||
<span class="macro">macro_rules!</span> <span class="ident">enum_system_wrapper</span> {
|
||||
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span>, <span class="macro-nonterminal">$</span><span class="kw">type</span>:<span class="macro-nonterminal">ty</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">return_type</span>:<span class="ident">ty</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">msg</span>: <span class="macro-nonterminal">$</span><span class="kw">type</span>) <span class="op">-</span><span class="op">></span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">return_type</span> {
|
||||
(<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>:<span class="ident">ident</span>, <span class="macro-nonterminal">$</span><span class="kw">type</span>:<span class="macro-nonterminal">ty</span>, <span class="macro-nonterminal">$</span><span class="macro-nonterminal">return_type</span>:<span class="ident">ty</span>) => {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">msg</span>: <span class="macro-nonterminal">$</span><span class="kw">type</span>) -> <span class="macro-nonterminal">$</span><span class="macro-nonterminal">return_type</span> {
|
||||
<span class="kw">match</span> <span class="self">self</span> {
|
||||
<span class="ident"><span class="self">Self</span>::Embedded</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> <span class="ident">val</span>.<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="ident">msg</span>).<span class="kw">await</span>,
|
||||
<span class="ident"><span class="self">Self</span>::Redis</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> <span class="ident">val</span>.<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="ident">msg</span>).<span class="kw">await</span>,
|
||||
<span class="ident"><span class="self">Self</span>::Embedded</span>(<span class="ident">val</span>) => <span class="ident">val</span>.<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="ident">msg</span>).<span class="kw">await</span>,
|
||||
<span class="ident"><span class="self">Self</span>::Redis</span>(<span class="ident">val</span>) => <span class="ident">val</span>.<span class="macro-nonterminal">$</span><span class="macro-nonterminal">name</span>(<span class="ident">msg</span>).<span class="kw">await</span>,
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -323,7 +323,7 @@
|
||||
<span class="comment">// utility function to remove captcha</span>
|
||||
<span class="macro">enum_system_actor!</span>(<span class="ident">remove</span>, <span class="ident">RemoveCaptcha</span>);
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">new_system</span><span class="op"><</span><span class="ident">A</span>: <span class="ident">Save</span>, <span class="ident">B</span>: <span class="ident">MasterTrait</span><span class="op">></span>(<span class="ident">m</span>: <span class="ident">Addr</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>, <span class="ident">c</span>: <span class="ident">Addr</span><span class="op"><</span><span class="ident">A</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">System</span><span class="op"><</span><span class="ident">A</span>, <span class="ident">B</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">new_system</span><span class="op"><</span><span class="ident">A</span>: <span class="ident">Save</span>, <span class="ident">B</span>: <span class="ident">MasterTrait</span><span class="op">></span>(<span class="ident">m</span>: <span class="ident">Addr</span><span class="op"><</span><span class="ident">B</span><span class="op">></span>, <span class="ident">c</span>: <span class="ident">Addr</span><span class="op"><</span><span class="ident">A</span><span class="op">></span>) -> <span class="ident">System</span><span class="op"><</span><span class="ident">A</span>, <span class="ident">B</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">pow</span> <span class="op">=</span> <span class="ident">PoWConfigBuilder::default</span>()
|
||||
.<span class="ident">salt</span>(<span class="ident">SETTINGS</span>.<span class="ident">pow</span>.<span class="ident">salt</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">build</span>()
|
||||
@@ -334,9 +334,9 @@
|
||||
|
||||
<span class="comment">// read settings, if Redis is configured then produce a Redis mCaptcha cache</span>
|
||||
<span class="comment">// based SystemGroup</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="kw">match</span> <span class="kw-2">&</span><span class="ident">SETTINGS</span>.<span class="ident">redis</span> {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">val</span>) => {
|
||||
<span class="kw">let</span> <span class="ident">master</span> <span class="op">=</span> <span class="ident">RedisMaster::new</span>(<span class="ident">RedisConfig::Single</span>(<span class="ident">val</span>.<span class="ident">url</span>.<span class="ident">clone</span>()))
|
||||
.<span class="kw">await</span>
|
||||
.<span class="ident">unwrap</span>()
|
||||
@@ -349,7 +349,7 @@
|
||||
|
||||
<span class="ident">SystemGroup::Redis</span>(<span class="ident">captcha</span>)
|
||||
}
|
||||
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">None</span> => {
|
||||
<span class="kw">let</span> <span class="ident">master</span> <span class="op">=</span> <span class="ident">EmbeddedMaster::new</span>(<span class="ident">SETTINGS</span>.<span class="ident">pow</span>.<span class="ident">gc</span>).<span class="ident">start</span>();
|
||||
<span class="kw">let</span> <span class="ident">cache</span> <span class="op">=</span> <span class="ident">HashCache::default</span>().<span class="ident">start</span>();
|
||||
<span class="kw">let</span> <span class="ident">captcha</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::new_system</span>(<span class="ident">master</span>, <span class="ident">cache</span>);
|
||||
@@ -373,7 +373,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Data</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_creds</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Config</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_creds</span>() -> <span class="ident">Config</span> {
|
||||
<span class="ident">ConfigBuilder::default</span>()
|
||||
.<span class="ident">username_case_mapped</span>(<span class="bool-val">true</span>)
|
||||
.<span class="ident">profanity</span>(<span class="bool-val">true</span>)
|
||||
@@ -384,7 +384,7 @@
|
||||
}
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="doccomment">/// create new instance of app data</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Arc</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Arc</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">creds</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::get_creds</span>();
|
||||
<span class="kw">let</span> <span class="ident">c</span> <span class="op">=</span> <span class="ident">creds</span>.<span class="ident">clone</span>();
|
||||
|
||||
@@ -413,7 +413,7 @@
|
||||
<span class="ident">Arc::new</span>(<span class="ident">data</span>)
|
||||
}
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">get_mailer</span>() <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Mailer</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">get_mailer</span>() -> <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Mailer</span><span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">smtp</span>) <span class="op">=</span> <span class="ident">SETTINGS</span>.<span class="ident">smtp</span>.<span class="ident">as_ref</span>() {
|
||||
<span class="kw">let</span> <span class="ident">creds</span> <span class="op">=</span>
|
||||
<span class="ident">Credentials::new</span>(<span class="ident">smtp</span>.<span class="ident">username</span>.<span class="ident">to_string</span>(), <span class="ident">smtp</span>.<span class="ident">password</span>.<span class="ident">to_string</span>()); <span class="comment">// "smtp_username".to_string(), "smtp_password".to_string());</span>
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Debug</span> <span class="kw">for</span> <span class="ident">Date</span> {
|
||||
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">std::fmt::Formatter</span><span class="op"><</span><span class="lifetime">'_</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="ident">std::fmt::Result</span> {
|
||||
<span class="kw">fn</span> <span class="ident">fmt</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">f</span>: <span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">std::fmt::Formatter</span><span class="op"><</span><span class="lifetime">'_</span><span class="op">></span>) -> <span class="ident">std::fmt::Result</span> {
|
||||
<span class="ident">f</span>.<span class="ident">debug_struct</span>(<span class="string">"Date"</span>)
|
||||
.<span class="ident">field</span>(<span class="string">"time"</span>, <span class="kw-2">&</span><span class="self">self</span>.<span class="ident">print_date</span>())
|
||||
.<span class="ident">finish</span>()
|
||||
@@ -146,7 +146,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">WEEK</span>: <span class="ident">i64</span> <span class="op">=</span> <span class="ident">DAY</span> <span class="op">*</span> <span class="number">7</span>;
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Date</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">format</span>(<span class="ident">date</span>: <span class="kw-2">&</span><span class="ident">OffsetDateTime</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">format</span>(<span class="ident">date</span>: <span class="kw-2">&</span><span class="ident">OffsetDateTime</span>) -> <span class="ident">String</span> {
|
||||
<span class="kw">let</span> <span class="ident">timestamp</span> <span class="op">=</span> <span class="ident">date</span>.<span class="ident">unix_timestamp</span>();
|
||||
<span class="kw">let</span> <span class="ident">now</span> <span class="op">=</span> <span class="ident">OffsetDateTime::now_utc</span>().<span class="ident">unix_timestamp</span>();
|
||||
|
||||
@@ -166,12 +166,12 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// print relative time from date</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">print_date</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">print_date</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">String</span> {
|
||||
<span class="ident"><span class="self">Self</span>::format</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">time</span>)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// print date</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">date</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">date</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">String</span> {
|
||||
<span class="self">self</span>.<span class="ident">time</span>.<span class="ident">format</span>(<span class="string">"%F %r %z"</span>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">DEMO_PASSWORD</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"password"</span>;
|
||||
|
||||
<span class="doccomment">/// register demo user runner</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">register_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">register_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">user_exists_payload</span> <span class="op">=</span> <span class="ident">AccountCheckPayload</span> {
|
||||
<span class="ident">val</span>: <span class="ident">DEMO_USER</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
@@ -192,21 +192,21 @@
|
||||
|
||||
<span class="macro">log::info!</span>(<span class="string">"Registering demo user"</span>);
|
||||
<span class="kw">match</span> <span class="ident">register_runner</span>(<span class="kw-2">&</span><span class="ident">register_payload</span>, <span class="ident">data</span>).<span class="kw">await</span> {
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameTaken</span>) <span class="op">|</span> <span class="prelude-val">Ok</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Ok</span>(()),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">e</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError::UsernameTaken</span>) <span class="op">|</span> <span class="prelude-val">Ok</span>(<span class="kw">_</span>) => <span class="prelude-val">Ok</span>(()),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="prelude-val">Err</span>(<span class="ident">e</span>),
|
||||
}
|
||||
} <span class="kw">else</span> {
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_demo_user</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="macro">log::info!</span>(<span class="string">"Deleting demo user"</span>);
|
||||
<span class="ident">delete_user</span>(<span class="ident">DEMO_USER</span>, <span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">run</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">duration</span>: <span class="ident">Duration</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">run</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">duration</span>: <span class="ident">Duration</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="ident">register_demo_user</span>(<span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="kw">async</span> <span class="kw">move</span> {
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Docs</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">Docs</span> {
|
||||
<span class="ident">home</span>: <span class="string">"/docs/"</span>,
|
||||
<span class="ident">spec</span>: <span class="string">"/docs/openapi.yaml"</span>,
|
||||
@@ -183,12 +183,12 @@
|
||||
<span class="attribute">#[<span class="ident">folder</span> <span class="op">=</span> <span class="string">"static/openapi/"</span>]</span>
|
||||
<span class="kw">struct</span> <span class="ident">Asset</span>;
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">handle_embedded_file</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">handle_embedded_file</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">str</span>) -> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">match</span> <span class="ident">Asset::get</span>(<span class="ident">path</span>) {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">content</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">content</span>) => {
|
||||
<span class="kw">let</span> <span class="ident">body</span>: <span class="ident">Body</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">content</span>.<span class="ident">data</span> {
|
||||
<span class="ident">Cow::Borrowed</span>(<span class="ident">bytes</span>) <span class="op">=</span><span class="op">></span> <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Owned</span>(<span class="ident">bytes</span>) <span class="op">=</span><span class="op">></span> <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Borrowed</span>(<span class="ident">bytes</span>) => <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Owned</span>(<span class="ident">bytes</span>) => <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">insert_header</span>(<span class="ident">header::CacheControl</span>(<span class="macro">vec!</span>[
|
||||
@@ -197,25 +197,25 @@
|
||||
.<span class="ident">content_type</span>(<span class="ident">from_path</span>(<span class="ident">path</span>).<span class="ident">first_or_octet_stream</span>().<span class="ident">as_ref</span>())
|
||||
.<span class="ident">body</span>(<span class="ident">body</span>)
|
||||
}
|
||||
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::NotFound</span>().<span class="ident">body</span>(<span class="string">"404 Not Found"</span>),
|
||||
<span class="prelude-val">None</span> => <span class="ident">HttpResponse::NotFound</span>().<span class="ident">body</span>(<span class="string">"404 Not Found"</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"DOCS.assets"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">dist</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">dist</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="ident">handle_embedded_file</span>(<span class="kw-2">&</span><span class="ident">path</span>)
|
||||
}
|
||||
<span class="kw">const</span> <span class="ident">OPEN_API_SPEC</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="macro">include_str!</span>(<span class="string">"../docs/openapi/dist/openapi.yaml"</span>);
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"DOCS.spec"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">spec</span>() <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">spec</span>() -> <span class="ident">HttpResponse</span> {
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/yaml"</span>)
|
||||
.<span class="ident">body</span>(<span class="ident">OPEN_API_SPEC</span>)
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"&DOCS.home[0..DOCS.home.len() -1]"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">index</span>() <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">index</span>() -> <span class="ident">HttpResponse</span> {
|
||||
<span class="ident">handle_embedded_file</span>(<span class="string">"index.html"</span>)
|
||||
}
|
||||
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> <span class="ident">IndexPage</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">verification_link</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">verification_link</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>) -> <span class="self">Self</span> {
|
||||
<span class="self">Self</span> { <span class="ident">verification_link</span> }
|
||||
}
|
||||
}
|
||||
@@ -173,7 +173,7 @@
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">Data</span>,
|
||||
<span class="ident">to</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">verification_link</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">smtp</span>) <span class="op">=</span> <span class="ident">SETTINGS</span>.<span class="ident">smtp</span>.<span class="ident">as_ref</span>() {
|
||||
<span class="kw">let</span> <span class="ident">from</span> <span class="op">=</span> <span class="macro">format!</span>(<span class="string">"mCaptcha Admin <{}>"</span>, <span class="ident">smtp</span>.<span class="ident">from</span>);
|
||||
<span class="kw">let</span> <span class="ident">reply_to</span> <span class="op">=</span> <span class="macro">format!</span>(<span class="string">"mCaptcha Admin <{}>"</span>, <span class="ident">smtp</span>.<span class="ident">reply</span>);
|
||||
|
||||
@@ -350,8 +350,8 @@
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">SmtpErrorWrapper</span>(<span class="ident">SmtpError</span>);
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">std::cmp::PartialEq</span> <span class="kw">for</span> <span class="ident">SmtpErrorWrapper</span> {
|
||||
<span class="kw">fn</span> <span class="ident">eq</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">other</span>: <span class="kw-2">&</span><span class="self">Self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">bool</span> {
|
||||
<span class="self">self</span>.<span class="number">0</span>.<span class="ident">status</span>() <span class="op">=</span><span class="op">=</span> <span class="ident">other</span>.<span class="number">0</span>.<span class="ident">status</span>()
|
||||
<span class="kw">fn</span> <span class="ident">eq</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">other</span>: <span class="kw-2">&</span><span class="self">Self</span>) -> <span class="ident">bool</span> {
|
||||
<span class="self">self</span>.<span class="number">0</span>.<span class="ident">status</span>() <span class="op">==</span> <span class="ident">other</span>.<span class="number">0</span>.<span class="ident">status</span>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -428,7 +428,7 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">HttpResponse</span> {
|
||||
<span class="ident">HttpResponseBuilder::new</span>(<span class="self">self</span>.<span class="ident">status_code</span>())
|
||||
.<span class="ident">append_header</span>((<span class="ident">header::CONTENT_TYPE</span>, <span class="string">"application/json; charset=UTF-8"</span>))
|
||||
.<span class="ident">body</span>(
|
||||
@@ -441,37 +441,37 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">status_code</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">StatusCode</span> {
|
||||
<span class="kw">fn</span> <span class="ident">status_code</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">StatusCode</span> {
|
||||
<span class="kw">match</span> <span class="self">self</span> {
|
||||
<span class="ident">ServiceError::ClosedForRegistration</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::FORBIDDEN</span>,
|
||||
<span class="ident">ServiceError::InternalServerError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="ident">ServiceError::NotAnEmail</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::NotAUrl</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::WrongPassword</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::UNAUTHORIZED</span>,
|
||||
<span class="ident">ServiceError::UsernameNotFound</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::NOT_FOUND</span>,
|
||||
<span class="ident">ServiceError::AccountNotFound</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::NOT_FOUND</span>,
|
||||
<span class="ident">ServiceError::ClosedForRegistration</span> => <span class="ident">StatusCode::FORBIDDEN</span>,
|
||||
<span class="ident">ServiceError::InternalServerError</span> => <span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="ident">ServiceError::NotAnEmail</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::NotAUrl</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::WrongPassword</span> => <span class="ident">StatusCode::UNAUTHORIZED</span>,
|
||||
<span class="ident">ServiceError::UsernameNotFound</span> => <span class="ident">StatusCode::NOT_FOUND</span>,
|
||||
<span class="ident">ServiceError::AccountNotFound</span> => <span class="ident">StatusCode::NOT_FOUND</span>,
|
||||
|
||||
<span class="ident">ServiceError::ProfainityError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::BlacklistError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::UsernameCaseMappedError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::ProfainityError</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::BlacklistError</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::UsernameCaseMappedError</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
|
||||
<span class="ident">ServiceError::PasswordTooShort</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::PasswordTooLong</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::PasswordsDontMatch</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::PasswordTooShort</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::PasswordTooLong</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::PasswordsDontMatch</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
|
||||
<span class="ident">ServiceError::UsernameTaken</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::EmailTaken</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::UsernameTaken</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError::EmailTaken</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
|
||||
<span class="ident">ServiceError::TokenNotFound</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::NOT_FOUND</span>,
|
||||
<span class="ident">ServiceError::CaptchaError</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="ident">ServiceError::TokenNotFound</span> => <span class="ident">StatusCode::NOT_FOUND</span>,
|
||||
<span class="ident">ServiceError::CaptchaError</span>(<span class="ident">e</span>) => {
|
||||
<span class="macro">log::error!</span>(<span class="string">"{}"</span>, <span class="ident">e</span>);
|
||||
<span class="kw">match</span> <span class="ident">e</span> {
|
||||
<span class="ident">CaptchaError::MailboxError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
<span class="ident">CaptchaError::MailboxError</span> => <span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="kw">_</span> => <span class="ident">StatusCode::BAD_REQUEST</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="ident">ServiceError::UnableToSendEmail</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="ident">ServiceError::UnableToSendEmail</span>(<span class="ident">e</span>) => {
|
||||
<span class="macro">log::error!</span>(<span class="string">"{}"</span>, <span class="ident">e</span>.<span class="number">0</span>);
|
||||
<span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>
|
||||
}
|
||||
@@ -481,36 +481,36 @@
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">CredsError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">CredsError</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">CredsError</span>) -> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">match</span> <span class="ident">e</span> {
|
||||
<span class="ident">CredsError::UsernameCaseMappedError</span> <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::UsernameCaseMappedError</span>,
|
||||
<span class="ident">CredsError::ProfainityError</span> <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::ProfainityError</span>,
|
||||
<span class="ident">CredsError::BlacklistError</span> <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::BlacklistError</span>,
|
||||
<span class="ident">CredsError::NotAnEmail</span> <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::NotAnEmail</span>,
|
||||
<span class="ident">CredsError::Argon2Error</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::InternalServerError</span>,
|
||||
<span class="ident">CredsError::PasswordTooLong</span> <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::PasswordTooLong</span>,
|
||||
<span class="ident">CredsError::PasswordTooShort</span> <span class="op">=</span><span class="op">></span> <span class="ident">ServiceError::PasswordTooShort</span>,
|
||||
<span class="ident">CredsError::UsernameCaseMappedError</span> => <span class="ident">ServiceError::UsernameCaseMappedError</span>,
|
||||
<span class="ident">CredsError::ProfainityError</span> => <span class="ident">ServiceError::ProfainityError</span>,
|
||||
<span class="ident">CredsError::BlacklistError</span> => <span class="ident">ServiceError::BlacklistError</span>,
|
||||
<span class="ident">CredsError::NotAnEmail</span> => <span class="ident">ServiceError::NotAnEmail</span>,
|
||||
<span class="ident">CredsError::Argon2Error</span>(<span class="kw">_</span>) => <span class="ident">ServiceError::InternalServerError</span>,
|
||||
<span class="ident">CredsError::PasswordTooLong</span> => <span class="ident">ServiceError::PasswordTooLong</span>,
|
||||
<span class="ident">CredsError::PasswordTooShort</span> => <span class="ident">ServiceError::PasswordTooShort</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">ValidationErrors</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="kw">_</span>: <span class="ident">ValidationErrors</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="kw">_</span>: <span class="ident">ValidationErrors</span>) -> <span class="ident">ServiceError</span> {
|
||||
<span class="ident">ServiceError::NotAnEmail</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">ParseError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="kw">_</span>: <span class="ident">ParseError</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="kw">_</span>: <span class="ident">ParseError</span>) -> <span class="ident">ServiceError</span> {
|
||||
<span class="ident">ServiceError::NotAUrl</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">CaptchaError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">CaptchaError</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">CaptchaError</span>) -> <span class="ident">ServiceError</span> {
|
||||
<span class="ident">ServiceError::CaptchaError</span>(<span class="ident">e</span>)
|
||||
}
|
||||
}
|
||||
@@ -518,11 +518,11 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">sqlx::Error</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">sqlx::Error</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">sqlx::Error</span>) -> <span class="self">Self</span> {
|
||||
<span class="kw">use</span> <span class="ident">sqlx::error::Error</span>;
|
||||
<span class="kw">use</span> <span class="ident">std::borrow::Cow</span>;
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">Error::Database</span>(<span class="ident">err</span>) <span class="op">=</span> <span class="ident">e</span> {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">=</span><span class="op">=</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">if</span> <span class="ident">err</span>.<span class="ident">code</span>() <span class="op">==</span> <span class="prelude-val">Some</span>(<span class="ident">Cow::from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">return</span> <span class="ident">ServiceError::UsernameTaken</span>;
|
||||
}
|
||||
}
|
||||
@@ -533,7 +533,7 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">SmtpError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">SmtpError</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">SmtpError</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">ServiceError::UnableToSendEmail</span>(<span class="ident">SmtpErrorWrapper</span>(<span class="ident">e</span>))
|
||||
}
|
||||
}
|
||||
@@ -541,7 +541,7 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">RecvError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">RecvError</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">RecvError</span>) -> <span class="self">Self</span> {
|
||||
<span class="macro">log::error!</span>(<span class="string">"{:?}"</span>, <span class="ident">e</span>);
|
||||
<span class="ident">ServiceError::InternalServerError</span>
|
||||
}
|
||||
@@ -550,7 +550,7 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">MailboxError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">ServiceError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">MailboxError</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">MailboxError</span>) -> <span class="self">Self</span> {
|
||||
<span class="macro">log::error!</span>(<span class="string">"{:?}"</span>, <span class="ident">e</span>);
|
||||
<span class="ident">ServiceError::InternalServerError</span>
|
||||
}
|
||||
@@ -572,7 +572,7 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">sqlx::Error</span><span class="op">></span> <span class="kw">for</span> <span class="ident">PageError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="kw">_</span>: <span class="ident">sqlx::Error</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="kw">_</span>: <span class="ident">sqlx::Error</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">PageError::InternalServerError</span>
|
||||
}
|
||||
}
|
||||
@@ -580,29 +580,29 @@
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">ServiceError</span><span class="op">></span> <span class="kw">for</span> <span class="ident">PageError</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">ServiceError</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">e</span>: <span class="ident">ServiceError</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">PageError::ServiceError</span>(<span class="ident">e</span>)
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">ResponseError</span> <span class="kw">for</span> <span class="ident">PageError</span> {
|
||||
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">fn</span> <span class="ident">error_response</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::PAGES</span>;
|
||||
<span class="kw">match</span> <span class="self">self</span>.<span class="ident">status_code</span>() {
|
||||
<span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::Found</span>()
|
||||
<span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span> => <span class="ident">HttpResponse::Found</span>()
|
||||
.<span class="ident">append_header</span>((<span class="ident">header::LOCATION</span>, <span class="ident">PAGES</span>.<span class="ident">errors</span>.<span class="ident">internal_server_error</span>))
|
||||
.<span class="ident">finish</span>(),
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::Found</span>()
|
||||
<span class="kw">_</span> => <span class="ident">HttpResponse::Found</span>()
|
||||
.<span class="ident">append_header</span>((<span class="ident">header::LOCATION</span>, <span class="ident">PAGES</span>.<span class="ident">errors</span>.<span class="ident">unknown_error</span>))
|
||||
.<span class="ident">finish</span>(),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">status_code</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">StatusCode</span> {
|
||||
<span class="kw">fn</span> <span class="ident">status_code</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">StatusCode</span> {
|
||||
<span class="kw">match</span> <span class="self">self</span> {
|
||||
<span class="ident">PageError::InternalServerError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="ident">PageError::ServiceError</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="ident">e</span>.<span class="ident">status_code</span>(),
|
||||
<span class="ident">PageError::InternalServerError</span> => <span class="ident">StatusCode::INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="ident">PageError::ServiceError</span>(<span class="ident">e</span>) => <span class="ident">e</span>.<span class="ident">status_code</span>(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="attribute">#[<span class="ident">actix_web::main</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() <span class="op">-</span><span class="op">></span> <span class="ident">std::io::Result</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">main</span>() -> <span class="ident">std::io::Result</span><span class="op"><</span>()<span class="op">></span> {
|
||||
<span class="kw">use</span> <span class="ident">std::time::Duration</span>;
|
||||
|
||||
<span class="ident">env::set_var</span>(<span class="string">"RUST_LOG"</span>, <span class="string">"info"</span>);
|
||||
@@ -325,7 +325,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_json_err</span>() <span class="op">-</span><span class="op">></span> <span class="ident">JsonConfig</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_json_err</span>() -> <span class="ident">JsonConfig</span> {
|
||||
<span class="ident">JsonConfig::default</span>().<span class="ident">error_handler</span>(<span class="op">|</span><span class="ident">err</span>, <span class="kw">_</span><span class="op">|</span> {
|
||||
<span class="comment">//debug!("JSON deserialization error: {:?}", &err);</span>
|
||||
<span class="ident">InternalError::new</span>(<span class="ident">err</span>, <span class="ident">StatusCode::BAD_REQUEST</span>).<span class="ident">into</span>()
|
||||
@@ -333,7 +333,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_identity_service</span>() <span class="op">-</span><span class="op">></span> <span class="ident">IdentityService</span><span class="op"><</span><span class="ident">CookieIdentityPolicy</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_identity_service</span>() -> <span class="ident">IdentityService</span><span class="op"><</span><span class="ident">CookieIdentityPolicy</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">cookie_secret</span> <span class="op">=</span> <span class="kw-2">&</span><span class="ident">SETTINGS</span>.<span class="ident">server</span>.<span class="ident">cookie_secret</span>;
|
||||
<span class="ident">IdentityService::new</span>(
|
||||
<span class="ident">CookieIdentityPolicy::new</span>(<span class="ident">cookie_secret</span>.<span class="ident">as_bytes</span>())
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
<span class="kw">type</span> <span class="ident">InitError</span> <span class="op">=</span> ();
|
||||
<span class="kw">type</span> <span class="ident">Future</span> <span class="op">=</span> <span class="ident">Ready</span><span class="op"><</span><span class="prelude-ty">Result</span><span class="op"><</span><span class="ident"><span class="self">Self</span>::Transform</span>, <span class="ident"><span class="self">Self</span>::InitError</span><span class="op">></span><span class="op">></span>;
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">new_transform</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">service</span>: <span class="ident">S</span>) <span class="op">-</span><span class="op">></span> <span class="ident"><span class="self">Self</span>::Future</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new_transform</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">service</span>: <span class="ident">S</span>) -> <span class="ident"><span class="self">Self</span>::Future</span> {
|
||||
<span class="ident">ok</span>(<span class="ident">CheckLoginMiddleware</span> { <span class="ident">service</span> })
|
||||
}
|
||||
}
|
||||
@@ -170,7 +170,7 @@
|
||||
<span class="comment">//</span>
|
||||
<span class="macro">actix_service::forward_ready!</span>(<span class="ident">service</span>);
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">call</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="ident">ServiceRequest</span>) <span class="op">-</span><span class="op">></span> <span class="ident"><span class="self">Self</span>::Future</span> {
|
||||
<span class="kw">fn</span> <span class="ident">call</span>(<span class="kw-2">&</span><span class="self">self</span>, <span class="ident">req</span>: <span class="ident">ServiceRequest</span>) -> <span class="ident"><span class="self">Self</span>::Future</span> {
|
||||
<span class="comment">// let (r, mut pl) = req.into_parts();</span>
|
||||
|
||||
<span class="comment">// // TODO investigate when the bellow statement will</span>
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"Login"</span>;
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span>
|
||||
}
|
||||
}
|
||||
@@ -83,7 +83,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"PAGES.auth.login"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">login</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">login</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">INDEX</span>)
|
||||
|
||||
@@ -75,14 +75,14 @@
|
||||
<span class="kw">pub</span> <span class="ident">join</span>: <span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>,
|
||||
}
|
||||
<span class="kw">impl</span> <span class="ident">Auth</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Auth</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Auth</span> {
|
||||
<span class="ident">Auth</span> {
|
||||
<span class="ident">login</span>: <span class="string">"/login"</span>,
|
||||
<span class="ident">join</span>: <span class="string">"/join"</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() <span class="op">-</span><span class="op">></span> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">2</span>] {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() -> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">2</span>] {
|
||||
<span class="kw">const</span> <span class="ident">AUTH</span>: <span class="ident">Auth</span> <span class="op">=</span> <span class="ident">Auth::new</span>();
|
||||
[<span class="ident">AUTH</span>.<span class="ident">login</span>, <span class="ident">AUTH</span>.<span class="ident">join</span>]
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"Join"</span>;
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span>
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.auth.join"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">join</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">join</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">INDEX</span>)
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<span class="ident">V</span>: <span class="ident">Display</span> <span class="op">+</span> <span class="ident">Render</span>,
|
||||
{
|
||||
<span class="comment">//pub fn new(url: &'a str, data: Option<Vec<(&'a str, &'a str)>>) -> Self {</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">url</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>, <span class="ident">data</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span>(<span class="ident">K</span>, <span class="ident">V</span>)<span class="op">></span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">url</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>, <span class="ident">data</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span>(<span class="ident">K</span>, <span class="ident">V</span>)<span class="op">></span><span class="op">></span>) -> <span class="self">Self</span> {
|
||||
<span class="self">Self</span> { <span class="ident">url</span>, <span class="ident">data</span> }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"Error"</span>;
|
||||
|
||||
<span class="kw">impl</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> <span class="ident">ErrorPage</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">title</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>, <span class="ident">message</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">title</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>, <span class="ident">message</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">ErrorPage</span> { <span class="ident">title</span>, <span class="ident">message</span> }
|
||||
}
|
||||
}
|
||||
@@ -170,13 +170,13 @@
|
||||
<span class="kw">const</span> <span class="ident">ERROR_ROUTE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"/error/{id}"</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"ERROR_ROUTE"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">error</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">usize</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">error</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">usize</span><span class="op">></span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">path</span>.<span class="ident">into_inner</span>() {
|
||||
<span class="number">500</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::InternalServerError</span>()
|
||||
<span class="number">500</span> => <span class="ident">HttpResponse::InternalServerError</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">INTERNAL_SERVER_ERROR_BODY</span>),
|
||||
|
||||
<span class="kw">_</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::InternalServerError</span>()
|
||||
<span class="kw">_</span> => <span class="ident">HttpResponse::InternalServerError</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">UNKNOWN_ERROR_BODY</span>),
|
||||
};
|
||||
@@ -195,7 +195,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Errors</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">Errors</span> {
|
||||
<span class="ident">internal_server_error</span>: <span class="string">"/error/500"</span>,
|
||||
<span class="ident">unknown_error</span>: <span class="string">"/error/007"</span>,
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">sitekeys</span>: <span class="ident">SiteKeys</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">sitekeys</span>: <span class="ident">SiteKeys</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> { <span class="ident">sitekeys</span> }
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"Dashboard"</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.home"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">panel</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">panel</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">sitekeys</span> <span class="op">=</span> <span class="ident">get_list_sitekeys</span>(<span class="kw-2">&</span><span class="ident">data</span>, <span class="kw-2">&</span><span class="ident">id</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">body</span> <span class="op">=</span> <span class="ident">IndexPage::new</span>(<span class="ident">sitekeys</span>).<span class="ident">render_once</span>().<span class="ident">unwrap</span>();
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>()
|
||||
@@ -163,7 +163,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Panel</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">Panel</span> {
|
||||
<span class="ident">home</span>: <span class="string">"/"</span>,
|
||||
<span class="ident">sitekey</span>: <span class="ident">Sitekey::new</span>(),
|
||||
@@ -172,7 +172,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() <span class="op">-</span><span class="op">></span> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">5</span>] {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() -> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">5</span>] {
|
||||
<span class="kw">const</span> <span class="ident">PANEL</span>: <span class="ident">Panel</span> <span class="op">=</span> <span class="ident">Panel::new</span>();
|
||||
<span class="kw">const</span> <span class="ident">S</span>: [<span class="kw-2">&</span><span class="ident">str</span>; <span class="number">2</span>] <span class="op">=</span> <span class="ident">Sitekey::get_sitemap</span>();
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">n</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">n</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> { <span class="ident">n</span> }
|
||||
}
|
||||
}
|
||||
@@ -174,7 +174,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">From</span><span class="op"><</span><span class="ident">get::Notification</span><span class="op">></span> <span class="kw">for</span> <span class="ident">Notification</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">n</span>: <span class="ident">get::Notification</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from</span>(<span class="ident">n</span>: <span class="ident">get::Notification</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">Notification</span> {
|
||||
<span class="ident">name</span>: <span class="ident">n</span>.<span class="ident">name</span>.<span class="ident">unwrap</span>(),
|
||||
<span class="ident">heading</span>: <span class="ident">n</span>.<span class="ident">heading</span>.<span class="ident">unwrap</span>(),
|
||||
@@ -186,7 +186,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Notification</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">print_date</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">print_date</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">String</span> {
|
||||
<span class="ident">Date::format</span>(<span class="kw-2">&</span><span class="self">self</span>.<span class="ident">received</span>)
|
||||
}
|
||||
}
|
||||
@@ -194,7 +194,7 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"Notifications"</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.notifications"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">notifications</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">notifications</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">receiver</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Settings</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">Settings</span> {
|
||||
<span class="ident">home</span>: <span class="string">"/settings"</span>,
|
||||
<span class="ident">delete_account</span>: <span class="string">"/settings/account/delete"</span>,
|
||||
@@ -156,7 +156,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() <span class="op">-</span><span class="op">></span> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">1</span>] {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() -> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">1</span>] {
|
||||
<span class="kw">const</span> <span class="ident">S</span>: <span class="ident">Settings</span> <span class="op">=</span> <span class="ident">Settings::new</span>();
|
||||
|
||||
[<span class="ident">S</span>.<span class="ident">home</span>]
|
||||
@@ -181,7 +181,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.settings.home"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">settings</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">settings</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
|
||||
<span class="kw">struct</span> <span class="ident">DBResult</span> {
|
||||
@@ -213,7 +213,7 @@
|
||||
<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.settings.delete_account"</span>,
|
||||
<span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>
|
||||
)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_account</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_account</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">let</span> <span class="ident">page</span> <span class="op">=</span> <span class="ident">SudoPage</span>::<span class="op"><</span><span class="ident">u8</span>, <span class="ident">u8</span><span class="op">></span><span class="ident">::new</span>(<span class="ident"><span class="kw">crate</span>::V1_API_ROUTES</span>.<span class="ident">account</span>.<span class="ident">delete</span>, <span class="prelude-val">None</span>)
|
||||
.<span class="ident">render_once</span>()
|
||||
.<span class="ident">unwrap</span>();
|
||||
@@ -226,7 +226,7 @@
|
||||
<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.settings.update_secret"</span>,
|
||||
<span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>
|
||||
)]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">update_secret</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">update_secret</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">let</span> <span class="ident">page</span> <span class="op">=</span> <span class="ident">SudoPage</span>::<span class="op"><</span><span class="ident">u8</span>, <span class="ident">u8</span><span class="op">></span><span class="ident">::new</span>(<span class="ident"><span class="kw">crate</span>::V1_API_ROUTES</span>.<span class="ident">account</span>.<span class="ident">update_secret</span>, <span class="prelude-val">None</span>)
|
||||
.<span class="ident">render_once</span>()
|
||||
.<span class="ident">unwrap</span>();
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">IndexPage</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> {
|
||||
<span class="ident">levels</span>: <span class="number">1</span>,
|
||||
<span class="ident">form_description</span>: <span class="string">""</span>,
|
||||
@@ -99,7 +99,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.sitekey.add"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">add_sitekey</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">add_sitekey</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">INDEX</span>)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::{<span class="ident">PAGES</span>, <span class="ident">V1_API_ROUTES</span>};
|
||||
|
||||
<span class="attribute">#[<span class="ident">get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"PAGES.panel.sitekey.delete"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_sitekey</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_sitekey</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">path</span>.<span class="ident">into_inner</span>();
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="macro">vec!</span>[(<span class="string">"sitekey"</span>, <span class="ident">key</span>)];
|
||||
<span class="kw">let</span> <span class="ident">page</span> <span class="op">=</span> <span class="ident">SudoPage::new</span>(<span class="ident">V1_API_ROUTES</span>.<span class="ident">mcaptcha</span>.<span class="ident">delete</span>, <span class="prelude-val">Some</span>(<span class="ident">data</span>))
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">config</span>: <span class="ident">McaptchaConfig</span>, <span class="ident">levels</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Level</span><span class="op">></span>, <span class="ident">key</span>: <span class="ident">String</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">config</span>: <span class="ident">McaptchaConfig</span>, <span class="ident">levels</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Level</span><span class="op">></span>, <span class="ident">key</span>: <span class="ident">String</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> {
|
||||
<span class="ident">duration</span>: <span class="ident">config</span>.<span class="ident">duration</span> <span class="kw">as</span> <span class="ident">u32</span>,
|
||||
<span class="ident">name</span>: <span class="ident">config</span>.<span class="ident">name</span>,
|
||||
@@ -209,7 +209,7 @@
|
||||
<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">path</span>.<span class="ident">into_inner</span>();
|
||||
|
||||
|
||||
@@ -149,14 +149,14 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"SiteKeys"</span>;
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">sitekeys</span>: <span class="ident">SiteKeys</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">sitekeys</span>: <span class="ident">SiteKeys</span>) -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> { <span class="ident">sitekeys</span> }
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// render a list of all sitekeys that a user has</span>
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.sitekey.list"</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::CheckLogin"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">list_sitekeys</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">list_sitekeys</span>(<span class="ident">data</span>: <span class="ident">AppData</span>, <span class="ident">id</span>: <span class="ident">Identity</span>) -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">get_list_sitekeys</span>(<span class="kw-2">&</span><span class="ident">data</span>, <span class="kw-2">&</span><span class="ident">id</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">body</span> <span class="op">=</span> <span class="ident">IndexPage::new</span>(<span class="ident">res</span>).<span class="ident">render_once</span>().<span class="ident">unwrap</span>();
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>()
|
||||
@@ -165,7 +165,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// utility function to get a list of all sitekeys that a user owns</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_list_sitekeys</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>, <span class="ident">id</span>: <span class="kw-2">&</span><span class="ident">Identity</span>) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="ident">SiteKeys</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_list_sitekeys</span>(<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>, <span class="ident">id</span>: <span class="kw-2">&</span><span class="ident">Identity</span>) -> <span class="ident">PageResult</span><span class="op"><</span><span class="ident">SiteKeys</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">MCaptchaDetails</span>,
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Sitekey</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">Sitekey</span> {
|
||||
<span class="ident">list</span>: <span class="string">"/sitekeys"</span>,
|
||||
<span class="ident">add</span>: <span class="string">"/sitekeys/add"</span>,
|
||||
@@ -96,7 +96,7 @@
|
||||
<span class="ident">delete</span>: <span class="string">"/sitekey/{key}/delete"</span>,
|
||||
}
|
||||
}
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() <span class="op">-</span><span class="op">></span> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">2</span>] {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() -> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">2</span>] {
|
||||
<span class="kw">const</span> <span class="ident">S</span>: <span class="ident">Sitekey</span> <span class="op">=</span> <span class="ident">Sitekey::new</span>();
|
||||
[<span class="ident">S</span>.<span class="ident">list</span>, <span class="ident">S</span>.<span class="ident">add</span>]
|
||||
}
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
<span class="ident">config</span>: <span class="ident">McaptchaConfig</span>,
|
||||
<span class="ident">levels</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Level</span><span class="op">></span>,
|
||||
<span class="ident">key</span>: <span class="ident">String</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
) -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> {
|
||||
<span class="ident">duration</span>: <span class="ident">config</span>.<span class="ident">duration</span> <span class="kw">as</span> <span class="ident">u32</span>,
|
||||
<span class="ident">name</span>: <span class="ident">config</span>.<span class="ident">name</span>,
|
||||
@@ -231,7 +231,7 @@
|
||||
<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
) -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">path</span>.<span class="ident">into_inner</span>();
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Routes</span> {
|
||||
<span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="ident">Routes</span> {
|
||||
<span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="ident">Routes</span> {
|
||||
<span class="kw">let</span> <span class="ident">panel</span> <span class="op">=</span> <span class="ident">Panel::new</span>();
|
||||
<span class="kw">let</span> <span class="ident">home</span> <span class="op">=</span> <span class="ident">panel</span>.<span class="ident">home</span>;
|
||||
<span class="ident">Routes</span> {
|
||||
@@ -120,7 +120,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() <span class="op">-</span><span class="op">></span> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">7</span>] {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">get_sitemap</span>() -> [<span class="kw-2">&</span><span class="lifetime">'static</span> <span class="ident">str</span>; <span class="number">7</span>] {
|
||||
<span class="kw">let</span> <span class="ident">a</span> <span class="op">=</span> <span class="ident">Auth::get_sitemap</span>();
|
||||
<span class="kw">let</span> <span class="ident">p</span> <span class="op">=</span> <span class="ident">Panel::get_sitemap</span>();
|
||||
[<span class="ident">a</span>[<span class="number">0</span>], <span class="ident">a</span>[<span class="number">1</span>], <span class="ident">p</span>[<span class="number">0</span>], <span class="ident">p</span>[<span class="number">1</span>], <span class="ident">p</span>[<span class="number">2</span>], <span class="ident">p</span>[<span class="number">3</span>], <span class="ident">p</span>[<span class="number">4</span>]]
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Default</span> <span class="kw">for</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">default</span>() -> <span class="self">Self</span> {
|
||||
<span class="kw">let</span> <span class="ident">urls</span> <span class="op">=</span> <span class="ident">Routes::get_sitemap</span>();
|
||||
<span class="kw">let</span> <span class="ident">domain</span> <span class="op">=</span> <span class="kw">if</span> <span class="ident"><span class="kw">crate</span>::SETTINGS</span>.<span class="ident">server</span>.<span class="ident">domain</span>.<span class="ident">ends_with</span>(<span class="string">'/'</span>) {
|
||||
<span class="kw-2">&</span><span class="ident"><span class="kw">crate</span>::SETTINGS</span>.<span class="ident">server</span>.<span class="ident">domain</span>[<span class="number">0</span>..<span class="ident"><span class="kw">crate</span>::SETTINGS</span>.<span class="ident">server</span>.<span class="ident">domain</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span>]
|
||||
@@ -101,7 +101,7 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"PAGES.sitemap"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">sitemap</span>() <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">sitemap</span>() -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"application/xml; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">INDEX</span>)
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Server</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_ip</span>(<span class="kw-2">&</span><span class="self">self</span>) <span class="op">-</span><span class="op">></span> <span class="ident">String</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_ip</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">String</span> {
|
||||
<span class="macro">format!</span>(<span class="string">"{}:{}"</span>, <span class="self">self</span>.<span class="ident">ip</span>, <span class="self">self</span>.<span class="ident">port</span>)
|
||||
}
|
||||
}
|
||||
@@ -298,7 +298,7 @@
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">DatabaseBuilder</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">extract_database_url</span>(<span class="ident">url</span>: <span class="kw-2">&</span><span class="ident">Url</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">extract_database_url</span>(<span class="ident">url</span>: <span class="kw-2">&</span><span class="ident">Url</span>) -> <span class="self">Self</span> {
|
||||
<span class="macro">debug!</span>(<span class="string">"Databse name: {}"</span>, <span class="ident">url</span>.<span class="ident">path</span>());
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">path</span> <span class="op">=</span> <span class="ident">url</span>.<span class="ident">path</span>().<span class="ident">split</span>(<span class="string">'/'</span>);
|
||||
<span class="ident">path</span>.<span class="ident">next</span>();
|
||||
@@ -342,7 +342,7 @@
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">Settings</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">ConfigError</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">ConfigError</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">s</span> <span class="op">=</span> <span class="ident">Config::new</span>();
|
||||
|
||||
<span class="comment">// setting default values</span>
|
||||
@@ -369,26 +369,26 @@
|
||||
<span class="ident">check_url</span>(<span class="kw-2">&</span><span class="ident">s</span>);
|
||||
|
||||
<span class="kw">match</span> <span class="ident">env::var</span>(<span class="string">"PORT"</span>) {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) => {
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(<span class="string">"server.port"</span>, <span class="ident">val</span>).<span class="ident">unwrap</span>();
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="macro">warn!</span>(<span class="string">"couldn't interpret PORT: {}"</span>, <span class="ident">e</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="macro">warn!</span>(<span class="string">"couldn't interpret PORT: {}"</span>, <span class="ident">e</span>),
|
||||
}
|
||||
|
||||
<span class="kw">match</span> <span class="ident">env::var</span>(<span class="string">"DATABASE_URL"</span>) {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) => {
|
||||
<span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="ident">Url::parse</span>(<span class="kw-2">&</span><span class="ident">val</span>).<span class="ident">expect</span>(<span class="string">"couldn't parse Database URL"</span>);
|
||||
<span class="kw">let</span> <span class="ident">database_conf</span> <span class="op">=</span> <span class="ident">DatabaseBuilder::extract_database_url</span>(<span class="kw-2">&</span><span class="ident">url</span>);
|
||||
<span class="ident">set_from_database_url</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">s</span>, <span class="kw-2">&</span><span class="ident">database_conf</span>);
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="macro">warn!</span>(<span class="string">"couldn't interpret DATABASE_URL: {}"</span>, <span class="ident">e</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="macro">warn!</span>(<span class="string">"couldn't interpret DATABASE_URL: {}"</span>, <span class="ident">e</span>),
|
||||
}
|
||||
|
||||
<span class="ident">set_database_url</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">s</span>);
|
||||
|
||||
<span class="kw">match</span> <span class="ident">s</span>.<span class="ident">try_into</span>() {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Ok</span>(<span class="ident">val</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) <span class="op">=</span><span class="op">></span> <span class="prelude-val">Err</span>(<span class="ident">ConfigError::Message</span>(<span class="macro">format!</span>(<span class="string">"\n\nError: {}. If it says missing fields, then please refer to https://github.com/mCaptcha/mcaptcha#configuration to learn more about how mcaptcha reads configuration\n\n"</span>, <span class="ident">e</span>))),
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) => <span class="prelude-val">Ok</span>(<span class="ident">val</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="prelude-val">Err</span>(<span class="ident">ConfigError::Message</span>(<span class="macro">format!</span>(<span class="string">"\n\nError: {}. If it says missing fields, then please refer to https://github.com/mCaptcha/mcaptcha#configuration to learn more about how mcaptcha reads configuration\n\n"</span>, <span class="ident">e</span>))),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,12 +68,12 @@
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">FileMap</span> {
|
||||
<span class="attribute">#[<span class="ident">allow</span>(<span class="ident">clippy::new_without_default</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="kw">let</span> <span class="ident">map</span> <span class="op">=</span> <span class="macro">include_str!</span>(<span class="string">"../cache_buster_data.json"</span>);
|
||||
<span class="kw">let</span> <span class="ident">files</span> <span class="op">=</span> <span class="ident">Files::new</span>(<span class="ident">map</span>);
|
||||
<span class="self">Self</span> { <span class="ident">files</span> }
|
||||
}
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span>(<span class="kw-2">&</span><span class="lifetime">'a</span> <span class="self">self</span>, <span class="ident">path</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="prelude-ty">Option</span><span class="op"><</span><span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span>(<span class="kw-2">&</span><span class="lifetime">'a</span> <span class="self">self</span>, <span class="ident">path</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>) -> <span class="prelude-ty">Option</span><span class="op"><</span><span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">file_path</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">files</span>.<span class="ident">get_full_path</span>(<span class="ident">path</span>);
|
||||
<span class="ident">file_path</span>.<span class="ident">map</span>(<span class="op">|</span><span class="ident">file_path</span><span class="op">|</span> <span class="kw-2">&</span><span class="ident">file_path</span>[<span class="number">1</span>..])
|
||||
}
|
||||
|
||||
@@ -283,12 +283,12 @@
|
||||
<span class="attribute">#[<span class="ident">folder</span> <span class="op">=</span> <span class="string">"assets/"</span>]</span>
|
||||
<span class="kw">struct</span> <span class="ident">Asset</span>;
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">handle_assets</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">fn</span> <span class="ident">handle_assets</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">str</span>) -> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">match</span> <span class="ident">Asset::get</span>(<span class="ident">path</span>) {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">content</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">content</span>) => {
|
||||
<span class="kw">let</span> <span class="ident">body</span>: <span class="ident">Body</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">content</span>.<span class="ident">data</span> {
|
||||
<span class="ident">Cow::Borrowed</span>(<span class="ident">bytes</span>) <span class="op">=</span><span class="op">></span> <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Owned</span>(<span class="ident">bytes</span>) <span class="op">=</span><span class="op">></span> <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Borrowed</span>(<span class="ident">bytes</span>) => <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Owned</span>(<span class="ident">bytes</span>) => <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
@@ -300,12 +300,12 @@
|
||||
.<span class="ident">content_type</span>(<span class="ident">from_path</span>(<span class="ident">path</span>).<span class="ident">first_or_octet_stream</span>().<span class="ident">as_ref</span>())
|
||||
.<span class="ident">body</span>(<span class="ident">body</span>)
|
||||
}
|
||||
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::NotFound</span>().<span class="ident">body</span>(<span class="string">"404 Not Found"</span>),
|
||||
<span class="prelude-val">None</span> => <span class="ident">HttpResponse::NotFound</span>().<span class="ident">body</span>(<span class="string">"404 Not Found"</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">get</span>(<span class="string">"/assets/{_:.*}"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">static_files</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">static_files</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="ident">handle_assets</span>(<span class="kw-2">&</span><span class="ident">path</span>)
|
||||
}
|
||||
|
||||
@@ -313,12 +313,12 @@
|
||||
<span class="attribute">#[<span class="ident">folder</span> <span class="op">=</span> <span class="string">"static/favicons/"</span>]</span>
|
||||
<span class="kw">struct</span> <span class="ident">Favicons</span>;
|
||||
|
||||
<span class="kw">fn</span> <span class="ident">handle_favicons</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">str</span>) <span class="op">-</span><span class="op">></span> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">fn</span> <span class="ident">handle_favicons</span>(<span class="ident">path</span>: <span class="kw-2">&</span><span class="ident">str</span>) -> <span class="ident">HttpResponse</span> {
|
||||
<span class="kw">match</span> <span class="ident">Favicons::get</span>(<span class="ident">path</span>) {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">content</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="prelude-val">Some</span>(<span class="ident">content</span>) => {
|
||||
<span class="kw">let</span> <span class="ident">body</span>: <span class="ident">Body</span> <span class="op">=</span> <span class="kw">match</span> <span class="ident">content</span>.<span class="ident">data</span> {
|
||||
<span class="ident">Cow::Borrowed</span>(<span class="ident">bytes</span>) <span class="op">=</span><span class="op">></span> <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Owned</span>(<span class="ident">bytes</span>) <span class="op">=</span><span class="op">></span> <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Borrowed</span>(<span class="ident">bytes</span>) => <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">Cow::Owned</span>(<span class="ident">bytes</span>) => <span class="ident">bytes</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
|
||||
<span class="ident">HttpResponse::Ok</span>()
|
||||
@@ -330,12 +330,12 @@
|
||||
.<span class="ident">content_type</span>(<span class="ident">from_path</span>(<span class="ident">path</span>).<span class="ident">first_or_octet_stream</span>().<span class="ident">as_ref</span>())
|
||||
.<span class="ident">body</span>(<span class="ident">body</span>)
|
||||
}
|
||||
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">></span> <span class="ident">HttpResponse::NotFound</span>().<span class="ident">body</span>(<span class="string">"404 Not Found"</span>),
|
||||
<span class="prelude-val">None</span> => <span class="ident">HttpResponse::NotFound</span>().<span class="ident">body</span>(<span class="string">"404 Not Found"</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">get</span>(<span class="string">"/{file}"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">favicons</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) <span class="op">-</span><span class="op">></span> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">favicons</span>(<span class="ident">path</span>: <span class="ident">web::Path</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>) -> <span class="kw">impl</span> <span class="ident">Responder</span> {
|
||||
<span class="macro">debug!</span>(<span class="string">"searching favicons"</span>);
|
||||
<span class="ident">handle_favicons</span>(<span class="kw-2">&</span><span class="ident">path</span>)
|
||||
}
|
||||
|
||||
@@ -259,7 +259,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Stats</span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">user</span>: <span class="kw-2">&</span><span class="ident">str</span>, <span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>, <span class="ident">db</span>: <span class="kw-2">&</span><span class="ident">PgPool</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">user</span>: <span class="kw-2">&</span><span class="ident">str</span>, <span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>, <span class="ident">db</span>: <span class="kw-2">&</span><span class="ident">PgPool</span>) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">config_fetches_fut</span> <span class="op">=</span> <span class="ident">runners::fetch_config_fetched</span>(<span class="ident">user</span>, <span class="ident">key</span>, <span class="ident">db</span>);
|
||||
<span class="kw">let</span> <span class="ident">solves_fut</span> <span class="op">=</span> <span class="ident">runners::fetch_solve</span>(<span class="ident">user</span>, <span class="ident">key</span>, <span class="ident">db</span>);
|
||||
<span class="kw">let</span> <span class="ident">confirms_fut</span> <span class="op">=</span> <span class="ident">runners::fetch_confirm</span>(<span class="ident">user</span>, <span class="ident">key</span>, <span class="ident">db</span>);
|
||||
@@ -278,7 +278,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">StatsUnixTimestamp</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">from_stats</span>(<span class="ident">stats</span>: <span class="kw-2">&</span><span class="ident">Stats</span>) <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">from_stats</span>(<span class="ident">stats</span>: <span class="kw-2">&</span><span class="ident">Stats</span>) -> <span class="self">Self</span> {
|
||||
<span class="kw">let</span> <span class="ident">config_fetches</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::unix_timestamp</span>(<span class="kw-2">&</span><span class="ident">stats</span>.<span class="ident">config_fetches</span>);
|
||||
<span class="kw">let</span> <span class="ident">solves</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::unix_timestamp</span>(<span class="kw-2">&</span><span class="ident">stats</span>.<span class="ident">solves</span>);
|
||||
<span class="kw">let</span> <span class="ident">confirms</span> <span class="op">=</span> <span class="ident"><span class="self">Self</span>::unix_timestamp</span>(<span class="kw-2">&</span><span class="ident">stats</span>.<span class="ident">confirms</span>);
|
||||
@@ -291,7 +291,7 @@
|
||||
|
||||
<span class="doccomment">/// featch PoWConfig confirms</span>
|
||||
<span class="attribute">#[<span class="ident">inline</span>]</span>
|
||||
<span class="kw">fn</span> <span class="ident">unix_timestamp</span>(<span class="ident">dates</span>: <span class="kw-2">&</span>[<span class="ident">Date</span>]) <span class="op">-</span><span class="op">></span> <span class="ident">Vec</span><span class="op"><</span><span class="ident">i64</span><span class="op">></span> {
|
||||
<span class="kw">fn</span> <span class="ident">unix_timestamp</span>(<span class="ident">dates</span>: <span class="kw-2">&</span>[<span class="ident">Date</span>]) -> <span class="ident">Vec</span><span class="op"><</span><span class="ident">i64</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">res</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">i64</span><span class="op">></span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">dates</span>.<span class="ident">len</span>());
|
||||
|
||||
<span class="ident">dates</span>
|
||||
@@ -310,7 +310,7 @@
|
||||
<span class="ident">user</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">db</span>: <span class="kw-2">&</span><span class="ident">PgPool</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Date</span><span class="op">></span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Date</span><span class="op">></span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">records</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">Date</span>,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_fetched_stats
|
||||
@@ -340,7 +340,7 @@
|
||||
<span class="ident">user</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">db</span>: <span class="kw-2">&</span><span class="ident">PgPool</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Date</span><span class="op">></span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Date</span><span class="op">></span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">records</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">Date</span>,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_solved_stats
|
||||
@@ -368,7 +368,7 @@
|
||||
<span class="ident">user</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">key</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
<span class="ident">db</span>: <span class="kw-2">&</span><span class="ident">PgPool</span>,
|
||||
) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Date</span><span class="op">></span><span class="op">></span> {
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Date</span><span class="op">></span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">records</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">Date</span>,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_confirmed_stats
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Widget</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">Widget</span> {
|
||||
<span class="ident">verification_widget</span>: <span class="string">"/widget"</span>,
|
||||
}
|
||||
@@ -125,7 +125,7 @@
|
||||
<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"mCaptcha CAPTCHA verification"</span>;
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">></span> <span class="self">Self</span> {
|
||||
<span class="kw">fn</span> <span class="ident">new</span>() -> <span class="self">Self</span> {
|
||||
<span class="ident">IndexPage</span> {}
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@
|
||||
|
||||
<span class="doccomment">/// render a client side widget for CAPTCHA verification</span>
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::WIDGET_ROUTES.verification_widget"</span>)]</span> <span class="comment">//, wrap = "crate::CheckLogin")]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">show_widget</span>() <span class="op">-</span><span class="op">></span> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">show_widget</span>() -> <span class="ident">PageResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>()
|
||||
.<span class="ident">content_type</span>(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.<span class="ident">body</span>(<span class="kw-2">&</span><span class="kw-2">*</span><span class="ident">INDEX_PAGE</span>))
|
||||
|
||||
Reference in New Issue
Block a user