mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-13 19:15:39 +00:00
Deploying to gh-pages from @ ffdd1865bb 🚀
This commit is contained in:
@@ -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 <realaravinth@batsense.net>
|
||||
@@ -212,10 +219,11 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/</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"><</span><span class="ident">GetConfigPayload</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">web</span>::<span class="ident">Data</span><span class="op"><</span><span class="ident">Data</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="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">"SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)"</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">></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">></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">></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">&</span><span class="ident">Data</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="op">-</span><span class="op">></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="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">&</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">></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">></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">"trest"</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">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"powusrworks"</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>;
|
||||
@@ -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>
|
||||
|
||||
@@ -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 <realaravinth@batsense.net>
|
||||
@@ -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"><</span><span class="ident">Work</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">web</span>::<span class="ident">Data</span><span class="op"><</span><span class="ident">Data</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="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">"{}"</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">"Challenge: not found"</span>);
|
||||
|
||||
<span class="comment">// let pow_config_resp = test::call_service(</span>
|
||||
<span class="comment">// &mut app,</span>
|
||||
|
||||
@@ -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"><</span><span class="ident">VerifyCaptchaResult</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">web</span>::<span class="ident">Data</span><span class="op"><</span><span class="ident">Data</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="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>
|
||||
|
||||
Reference in New Issue
Block a user