mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-12 10:35:39 +00:00
Deploying to gh-pages from @ 5daeffd6fb 🚀
This commit is contained in:
@@ -188,6 +188,102 @@
|
||||
<span id="183">183</span>
|
||||
<span id="184">184</span>
|
||||
<span id="185">185</span>
|
||||
<span id="186">186</span>
|
||||
<span id="187">187</span>
|
||||
<span id="188">188</span>
|
||||
<span id="189">189</span>
|
||||
<span id="190">190</span>
|
||||
<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>
|
||||
<span id="201">201</span>
|
||||
<span id="202">202</span>
|
||||
<span id="203">203</span>
|
||||
<span id="204">204</span>
|
||||
<span id="205">205</span>
|
||||
<span id="206">206</span>
|
||||
<span id="207">207</span>
|
||||
<span id="208">208</span>
|
||||
<span id="209">209</span>
|
||||
<span id="210">210</span>
|
||||
<span id="211">211</span>
|
||||
<span id="212">212</span>
|
||||
<span id="213">213</span>
|
||||
<span id="214">214</span>
|
||||
<span id="215">215</span>
|
||||
<span id="216">216</span>
|
||||
<span id="217">217</span>
|
||||
<span id="218">218</span>
|
||||
<span id="219">219</span>
|
||||
<span id="220">220</span>
|
||||
<span id="221">221</span>
|
||||
<span id="222">222</span>
|
||||
<span id="223">223</span>
|
||||
<span id="224">224</span>
|
||||
<span id="225">225</span>
|
||||
<span id="226">226</span>
|
||||
<span id="227">227</span>
|
||||
<span id="228">228</span>
|
||||
<span id="229">229</span>
|
||||
<span id="230">230</span>
|
||||
<span id="231">231</span>
|
||||
<span id="232">232</span>
|
||||
<span id="233">233</span>
|
||||
<span id="234">234</span>
|
||||
<span id="235">235</span>
|
||||
<span id="236">236</span>
|
||||
<span id="237">237</span>
|
||||
<span id="238">238</span>
|
||||
<span id="239">239</span>
|
||||
<span id="240">240</span>
|
||||
<span id="241">241</span>
|
||||
<span id="242">242</span>
|
||||
<span id="243">243</span>
|
||||
<span id="244">244</span>
|
||||
<span id="245">245</span>
|
||||
<span id="246">246</span>
|
||||
<span id="247">247</span>
|
||||
<span id="248">248</span>
|
||||
<span id="249">249</span>
|
||||
<span id="250">250</span>
|
||||
<span id="251">251</span>
|
||||
<span id="252">252</span>
|
||||
<span id="253">253</span>
|
||||
<span id="254">254</span>
|
||||
<span id="255">255</span>
|
||||
<span id="256">256</span>
|
||||
<span id="257">257</span>
|
||||
<span id="258">258</span>
|
||||
<span id="259">259</span>
|
||||
<span id="260">260</span>
|
||||
<span id="261">261</span>
|
||||
<span id="262">262</span>
|
||||
<span id="263">263</span>
|
||||
<span id="264">264</span>
|
||||
<span id="265">265</span>
|
||||
<span id="266">266</span>
|
||||
<span id="267">267</span>
|
||||
<span id="268">268</span>
|
||||
<span id="269">269</span>
|
||||
<span id="270">270</span>
|
||||
<span id="271">271</span>
|
||||
<span id="272">272</span>
|
||||
<span id="273">273</span>
|
||||
<span id="274">274</span>
|
||||
<span id="275">275</span>
|
||||
<span id="276">276</span>
|
||||
<span id="277">277</span>
|
||||
<span id="278">278</span>
|
||||
<span id="279">279</span>
|
||||
<span id="280">280</span>
|
||||
<span id="281">281</span>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
@@ -288,7 +384,8 @@
|
||||
<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="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">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="macro">println!</span>(<span class="string">"Initializing captcha"</span>);
|
||||
<span class="comment">// get levels</span>
|
||||
<span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="ident">data</span>.<span class="ident">db</span>.<span class="ident">get_captcha_levels</span>(<span class="prelude-val">None</span>, <span class="ident">key</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">duration</span> <span class="op">=</span> <span class="ident">data</span>.<span class="ident">db</span>.<span class="ident">get_captcha_cooldown</span>(<span class="ident">key</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
@@ -307,6 +404,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="ident">defense</span> <span class="op">=</span> <span class="ident">defense</span>.<span class="ident">build</span>()<span class="question-mark">?</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"{:?}"</span>, <span class="ident">defense</span>);
|
||||
|
||||
<span class="comment">// create captcha</span>
|
||||
<span class="kw">let</span> <span class="ident">mcaptcha</span> <span class="op">=</span> <span class="ident">MCaptchaBuilder::default</span>()
|
||||
@@ -372,6 +470,100 @@
|
||||
<span class="kw">let</span> <span class="ident">config</span>: <span class="ident">PoWConfig</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_config_resp</span>).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</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="attribute">#[<span class="ident">actix_rt::test</span>]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">pow_difficulty_factor_increases_on_visitor_count_increase</span>() {
|
||||
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::tests</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="kw">crate</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web::test</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident">libmcaptcha::defense::Level</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::mcaptcha::create::CreateCaptcha</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::mcaptcha::create::MCaptchaDetails</span>;
|
||||
|
||||
<span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"powusrworks2"</span>;
|
||||
<span class="kw">const</span> <span class="ident">PASSWORD</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const</span> <span class="ident">EMAIL</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"randomuser2@a.com"</span>;
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">L1</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
|
||||
<span class="ident">difficulty_factor</span>: <span class="number">10</span>,
|
||||
<span class="ident">visitor_threshold</span>: <span class="number">10</span>,
|
||||
};
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">L2</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
|
||||
<span class="ident">difficulty_factor</span>: <span class="number">20</span>,
|
||||
<span class="ident">visitor_threshold</span>: <span class="number">20</span>,
|
||||
};
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">const</span> <span class="ident">L3</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
|
||||
<span class="ident">difficulty_factor</span>: <span class="number">30</span>,
|
||||
<span class="ident">visitor_threshold</span>: <span class="number">30</span>,
|
||||
};
|
||||
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">get_data</span>().<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="kw-2">&</span><span class="ident">data</span>;
|
||||
<span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> [<span class="ident">L1</span>, <span class="ident">L2</span>, <span class="ident">L3</span>];
|
||||
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> (<span class="kw">_</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME</span>, <span class="ident">EMAIL</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">cookies</span> <span class="op">=</span> <span class="macro">get_cookie!</span>(<span class="ident">signin_resp</span>);
|
||||
<span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="macro">get_app!</span>(<span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">create_captcha</span> <span class="op">=</span> <span class="ident">CreateCaptcha</span> {
|
||||
<span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">duration</span>: <span class="number">30</span>,
|
||||
<span class="ident">description</span>: <span class="string">"dummy"</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
|
||||
<span class="comment">// 1. add level</span>
|
||||
<span class="kw">let</span> <span class="ident">add_token_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">app</span>,
|
||||
<span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">create_captcha</span>, <span class="ident">V1_API_ROUTES</span>.<span class="ident">captcha</span>.<span class="ident">create</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">add_token_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
|
||||
<span class="kw">let</span> <span class="ident">token_key</span>: <span class="ident">MCaptchaDetails</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">add_token_resp</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">get_config_payload</span> <span class="op">=</span> <span class="ident">GetConfigPayload</span> {
|
||||
<span class="ident">key</span>: <span class="ident">token_key</span>.<span class="ident">key</span>.<span class="ident">clone</span>(),
|
||||
};
|
||||
|
||||
<span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="ident">V1_API_ROUTES</span>.<span class="ident">pow</span>.<span class="ident">get_config</span>;
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">prev</span> <span class="op">=</span> <span class="number">0</span>;
|
||||
<span class="kw">for</span> (<span class="ident">count</span>, <span class="ident">l</span>) <span class="kw">in</span> <span class="ident">levels</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
|
||||
<span class="kw">for</span> <span class="ident">l</span> <span class="kw">in</span> <span class="ident">prev</span>..<span class="ident">l</span>.<span class="ident">visitor_threshold</span> <span class="op">*</span> <span class="number">2</span> {
|
||||
<span class="kw">let</span> <span class="ident">get_config_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">app</span>,
|
||||
<span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">get_config_payload</span>, <span class="ident">V1_API_ROUTES</span>.<span class="ident">pow</span>.<span class="ident">get_config</span>)
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="kw">let</span> <span class="ident">get_config_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
|
||||
<span class="kw-2">&</span><span class="ident">app</span>,
|
||||
<span class="macro">post_request!</span>(<span class="kw-2">&</span><span class="ident">get_config_payload</span>, <span class="ident">V1_API_ROUTES</span>.<span class="ident">pow</span>.<span class="ident">get_config</span>)
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">config</span>: <span class="ident">PoWConfig</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_config_resp</span>).<span class="kw">await</span>;
|
||||
<span class="macro">println!</span>(
|
||||
<span class="string">"[{count}] received difficulty_factor: {} prev difficulty_factor {}"</span>,
|
||||
<span class="ident">config</span>.<span class="ident">difficulty_factor</span>, <span class="ident">prev</span>
|
||||
);
|
||||
<span class="kw">if</span> <span class="ident">count</span> <span class="op">==</span> <span class="ident">levels</span>.<span class="ident">len</span>() <span class="op">-</span> <span class="number">1</span> {
|
||||
<span class="macro">assert!</span>(<span class="ident">config</span>.<span class="ident">difficulty_factor</span> <span class="op">==</span> <span class="ident">prev</span>);
|
||||
} <span class="kw">else</span> {
|
||||
<span class="macro">assert!</span>(<span class="ident">config</span>.<span class="ident">difficulty_factor</span> <span class="op">></span> <span class="ident">prev</span>);
|
||||
}
|
||||
<span class="ident">prev</span> <span class="op">=</span> <span class="ident">config</span>.<span class="ident">difficulty_factor</span>;
|
||||
}
|
||||
<span class="comment">// update and check changes</span>
|
||||
}
|
||||
}
|
||||
</code></pre></div>
|
||||
</section><section id="search" class="content hidden"></section></div></main><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.61.0 (fe5b13d68 2022-05-18)" ></div>
|
||||
|
||||
Reference in New Issue
Block a user