Deploying to gh-pages from @ ffdd1865bb 🚀

This commit is contained in:
realaravinth
2021-06-11 14:39:55 +00:00
parent 0c62461f50
commit 6cde408f42
134 changed files with 1454 additions and 700 deletions

View File

@@ -194,6 +194,13 @@
<span id="191">191</span>
<span id="192">192</span>
<span id="193">193</span>
<span id="194">194</span>
<span id="195">195</span>
<span id="196">196</span>
<span id="197">197</span>
<span id="198">198</span>
<span id="199">199</span>
<span id="200">200</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="comment">/*
* Copyright (C) 2021 Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
@@ -212,10 +219,11 @@
* along with this program. If not, see &lt;https://www.gnu.org/licenses/&gt;.
*/</span>
<span class="kw">use</span> <span class="ident">actix</span>::<span class="ident">prelude</span>::<span class="kw-2">*</span>;
<span class="comment">//use actix::prelude::*;</span>
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
<span class="kw">use</span> <span class="ident">libmcaptcha</span>::{
<span class="ident">defense</span>::<span class="ident">LevelBuilder</span>, <span class="ident">master</span>::<span class="ident">AddSiteBuilder</span>, <span class="ident">DefenseBuilder</span>, <span class="ident">MCaptchaBuilder</span>,
<span class="ident">defense</span>::<span class="ident">LevelBuilder</span>, <span class="ident">master</span>::<span class="ident">messages</span>::<span class="ident">AddSiteBuilder</span>, <span class="ident">DefenseBuilder</span>,
<span class="ident">MCaptchaBuilder</span>,
};
<span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
@@ -223,7 +231,7 @@
<span class="kw">use</span> <span class="kw">super</span>::<span class="ident">I32Levels</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">errors</span>::<span class="kw-2">*</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">stats</span>::<span class="ident">record</span>::<span class="ident">record_fetch</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Data</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">AppData</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">V1_API_ROUTES</span>;
<span class="comment">//#[derive(Clone, Debug, Deserialize, Serialize)]</span>
@@ -245,7 +253,7 @@
)]</span>
<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</span>::<span class="ident">Json</span><span class="op">&lt;</span><span class="ident">GetConfigPayload</span><span class="op">&gt;</span>,
<span class="ident">data</span>: <span class="ident">web</span>::<span class="ident">Data</span><span class="op">&lt;</span><span class="ident">Data</span><span class="op">&gt;</span>,
<span class="ident">data</span>: <span class="ident">AppData</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResult</span><span class="op">&lt;</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">&gt;</span> {
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">sqlx</span>::<span class="macro">query</span><span class="macro">!</span>(
<span class="string">&quot;SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)&quot;</span>,
@@ -260,7 +268,6 @@
<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">&gt;</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">Some</span>(<span class="ident">config</span>) <span class="op">=</span><span class="op">&gt;</span> <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>().<span class="ident">json</span>(<span class="ident">config</span>)),
<span class="prelude-val">None</span> <span class="op">=</span><span class="op">&gt;</span> {
@@ -286,7 +293,7 @@
<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">&amp;</span><span class="ident">Data</span>, <span class="ident">key</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</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">&amp;</span><span class="ident">AppData</span>, <span class="ident">key</span>: <span class="kw-2">&amp;</span><span class="ident">str</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResult</span><span class="op">&lt;</span>()<span class="op">&gt;</span> {
<span class="comment">// get levels</span>
<span class="kw">let</span> <span class="ident">levels_fut</span> <span class="op">=</span> <span class="ident">sqlx</span>::<span class="macro">query_as</span><span class="macro">!</span>(
<span class="ident">I32Levels</span>,
@@ -330,16 +337,18 @@
.<span class="ident">duration</span>(<span class="ident">duration</span>.<span class="ident">duration</span> <span class="kw">as</span> <span class="ident">u64</span>)
<span class="comment">// .cache(cache)</span>
.<span class="ident">build</span>()
.<span class="ident">unwrap</span>()
.<span class="ident">start</span>();
.<span class="ident">unwrap</span>();
<span class="comment">// add captcha to master</span>
<span class="kw">let</span> <span class="ident">msg</span> <span class="op">=</span> <span class="ident">AddSiteBuilder</span>::<span class="ident">default</span>()
.<span class="ident">id</span>(<span class="ident">key</span>.<span class="ident">into</span>())
.<span class="ident">addr</span>(<span class="ident">mcaptcha</span>.<span class="ident">clone</span>())
.<span class="ident">mcaptcha</span>(<span class="ident">mcaptcha</span>)
.<span class="ident">build</span>()
.<span class="ident">unwrap</span>();
<span class="ident">data</span>.<span class="ident">captcha</span>.<span class="ident">master</span>.<span class="ident">send</span>(<span class="ident">msg</span>).<span class="kw">await</span>.<span class="ident">unwrap</span>();
<span class="kw">match</span> <span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">captcha</span> {
<span class="kw">crate</span>::<span class="ident">data</span>::<span class="ident">SystemGroup</span>::<span class="ident">Embedded</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">&gt;</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="ident">unwrap</span>(),
<span class="kw">crate</span>::<span class="ident">data</span>::<span class="ident">SystemGroup</span>::<span class="ident">Redis</span>(<span class="ident">val</span>) <span class="op">=</span><span class="op">&gt;</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="ident">unwrap</span>(),
};
<span class="prelude-val">Ok</span>(())
}
@@ -354,7 +363,12 @@
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">tests</span>::<span class="kw-2">*</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="kw-2">*</span>;
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
<span class="attribute">#[<span class="ident">test</span>]</span>
<span class="kw">fn</span> <span class="ident">feature</span>() {
<span class="ident">actix_rt</span>::<span class="ident">System</span>::<span class="ident">new</span>(<span class="string">&quot;trest&quot;</span>)
.<span class="ident">block_on</span>(<span class="kw">async</span> <span class="kw">move</span> { <span class="ident">get_pow_config_works</span>().<span class="kw">await</span> });
}
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_pow_config_works</span>() {
<span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;powusrworks&quot;</span>;
<span class="kw">const</span> <span class="ident">PASSWORD</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;testingpas&quot;</span>;
@@ -383,9 +397,9 @@
.<span class="ident">to_request</span>(),
)
.<span class="kw">await</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">get_config_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
<span class="kw">let</span> <span class="ident">config</span>: <span class="ident">PoWConfig</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">read_body_json</span>(<span class="ident">get_config_resp</span>).<span class="kw">await</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">config</span>.<span class="ident">difficulty_factor</span>, <span class="ident">L1</span>.<span class="ident">difficulty_factor</span>);
<span class="comment">// assert_eq!(get_config_resp.status(), StatusCode::OK);</span>
<span class="comment">// let config: PoWConfig = test::read_body_json(get_config_resp).await;</span>
<span class="comment">// assert_eq!(config.difficulty_factor, L1.difficulty_factor);</span>
}
}
</pre></div>

View File

@@ -138,14 +138,6 @@
<span id="135">135</span>
<span id="136">136</span>
<span id="137">137</span>
<span id="138">138</span>
<span id="139">139</span>
<span id="140">140</span>
<span id="141">141</span>
<span id="142">142</span>
<span id="143">143</span>
<span id="144">144</span>
<span id="145">145</span>
</pre><div class="example-wrap"><pre class="rust ">
<span class="comment">/*
* Copyright (C) 2021 Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
@@ -171,7 +163,7 @@
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">errors</span>::<span class="kw-2">*</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">stats</span>::<span class="ident">record</span>::<span class="ident">record_solve</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Data</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">AppData</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">V1_API_ROUTES</span>;
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Debug</span>, <span class="ident">Deserialize</span>, <span class="ident">Serialize</span>)]</span>
@@ -190,7 +182,7 @@
)]</span>
<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</span>::<span class="ident">Json</span><span class="op">&lt;</span><span class="ident">Work</span><span class="op">&gt;</span>,
<span class="ident">data</span>: <span class="ident">web</span>::<span class="ident">Data</span><span class="op">&lt;</span><span class="ident">Data</span><span class="op">&gt;</span>,
<span class="ident">data</span>: <span class="ident">AppData</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResult</span><span class="op">&lt;</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">&gt;</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>;
@@ -269,15 +261,7 @@
.<span class="kw">await</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">string_not_found</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>);
<span class="kw">let</span> <span class="ident">err</span>: <span class="ident">ErrorToResponse</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">read_body_json</span>(<span class="ident">string_not_found</span>).<span class="kw">await</span>;
<span class="macro">assert_eq</span><span class="macro">!</span>(
<span class="ident">err</span>.<span class="ident">error</span>,
<span class="macro">format</span><span class="macro">!</span>(
<span class="string">&quot;{}&quot;</span>,
<span class="ident">ServiceError</span>::<span class="ident">CaptchaError</span>(
<span class="ident">libmcaptcha</span>::<span class="ident">errors</span>::<span class="ident">CaptchaError</span>::<span class="ident">StringNotFound</span>
)
)
);
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">err</span>.<span class="ident">error</span>, <span class="string">&quot;Challenge: not found&quot;</span>);
<span class="comment">// let pow_config_resp = test::call_service(</span>
<span class="comment">// &amp;mut app,</span>

View File

@@ -187,7 +187,7 @@
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">errors</span>::<span class="kw-2">*</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">stats</span>::<span class="ident">record</span>::<span class="ident">record_confirm</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">Data</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">AppData</span>;
<span class="kw">use</span> <span class="kw">crate</span>::<span class="ident">V1_API_ROUTES</span>;
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>, <span class="ident">Debug</span>, <span class="ident">Deserialize</span>, <span class="ident">Serialize</span>)]</span>
@@ -203,7 +203,7 @@
)]</span>
<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</span>::<span class="ident">Json</span><span class="op">&lt;</span><span class="ident">VerifyCaptchaResult</span><span class="op">&gt;</span>,
<span class="ident">data</span>: <span class="ident">web</span>::<span class="ident">Data</span><span class="op">&lt;</span><span class="ident">Data</span><span class="op">&gt;</span>,
<span class="ident">data</span>: <span class="ident">AppData</span>,
) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResult</span><span class="op">&lt;</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">&gt;</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>