mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-13 02:55:39 +00:00
Deploying to gh-pages from @ 53e966958b 🚀
This commit is contained in:
@@ -148,6 +148,133 @@
|
||||
<span id="148">148</span>
|
||||
<span id="149">149</span>
|
||||
<span id="150">150</span>
|
||||
<span id="151">151</span>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
<span id="158">158</span>
|
||||
<span id="159">159</span>
|
||||
<span id="160">160</span>
|
||||
<span id="161">161</span>
|
||||
<span id="162">162</span>
|
||||
<span id="163">163</span>
|
||||
<span id="164">164</span>
|
||||
<span id="165">165</span>
|
||||
<span id="166">166</span>
|
||||
<span id="167">167</span>
|
||||
<span id="168">168</span>
|
||||
<span id="169">169</span>
|
||||
<span id="170">170</span>
|
||||
<span id="171">171</span>
|
||||
<span id="172">172</span>
|
||||
<span id="173">173</span>
|
||||
<span id="174">174</span>
|
||||
<span id="175">175</span>
|
||||
<span id="176">176</span>
|
||||
<span id="177">177</span>
|
||||
<span id="178">178</span>
|
||||
<span id="179">179</span>
|
||||
<span id="180">180</span>
|
||||
<span id="181">181</span>
|
||||
<span id="182">182</span>
|
||||
<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>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
@@ -165,13 +292,15 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
<span class="kw">use</span> <span class="ident">actix_identity::Identity</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">actix_web</span>::{<span class="ident">http</span>, <span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
|
||||
<span class="kw">use</span> <span class="ident">sailfish::TemplateOnce</span>;
|
||||
<span class="kw">use</span> <span class="ident">sqlx::Error::RowNotFound</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::mcaptcha::easy::TrafficPattern</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::errors</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::AppData</span>;
|
||||
|
||||
<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">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"Edit Sitekey"</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>)]</span>
|
||||
<span class="kw">struct</span> <span class="ident">McaptchaConfig</span> {
|
||||
@@ -187,17 +316,17 @@
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">TemplateOnce</span>, <span class="ident">Clone</span>)]</span>
|
||||
<span class="attribute">#[<span class="ident">template</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"panel/sitekey/edit/index.html"</span>)]</span>
|
||||
<span class="kw">struct</span> <span class="ident">IndexPage</span> {
|
||||
<span class="attribute">#[<span class="ident">template</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"panel/sitekey/edit/advance.html"</span>)]</span>
|
||||
<span class="kw">struct</span> <span class="ident">AdvanceEditPage</span> {
|
||||
<span class="ident">duration</span>: <span class="ident">u32</span>,
|
||||
<span class="ident">name</span>: <span class="ident">String</span>,
|
||||
<span class="ident">key</span>: <span class="ident">String</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="kw">impl</span> <span class="ident">IndexPage</span> {
|
||||
<span class="kw">impl</span> <span class="ident">AdvanceEditPage</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">AdvanceEditPage</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>,
|
||||
<span class="ident">levels</span>,
|
||||
@@ -211,7 +340,7 @@
|
||||
<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::PAGES.panel.sitekey.edit_advance"</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">edit_sitekey</span>(
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">advance</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="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
@@ -242,15 +371,126 @@
|
||||
.<span class="ident">fetch_all</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">body</span> <span class="op">=</span> <span class="ident">IndexPage::new</span>(<span class="ident">config</span>, <span class="ident">levels</span>, <span class="ident">key</span>).<span class="ident">render_once</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="ident">body</span> <span class="op">=</span> <span class="ident">AdvanceEditPage::new</span>(<span class="ident">config</span>, <span class="ident">levels</span>, <span class="ident">key</span>)
|
||||
.<span class="ident">render_once</span>()
|
||||
.<span class="ident">unwrap</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="ident">body</span>))
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">TemplateOnce</span>, <span class="ident">Clone</span>)]</span>
|
||||
<span class="attribute">#[<span class="ident">template</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">"panel/sitekey/edit/easy/index.html"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">EasyEditPage</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="ident">form_title</span>: <span class="kw-2">&</span><span class="lifetime">'a</span> <span class="ident">str</span>,
|
||||
<span class="kw">pub</span> <span class="ident">pattern</span>: <span class="ident">TrafficPattern</span>,
|
||||
<span class="kw">pub</span> <span class="ident">key</span>: <span class="ident">String</span>,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> <span class="ident">EasyEditPage</span><span class="op"><</span><span class="lifetime">'a</span><span class="op">></span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">key</span>: <span class="ident">String</span>, <span class="ident">pattern</span>: <span class="ident">TrafficPattern</span>) -> <span class="self">Self</span> {
|
||||
<span class="self">Self</span> {
|
||||
<span class="ident">form_title</span>: <span class="ident">PAGE</span>,
|
||||
<span class="ident">pattern</span>,
|
||||
<span class="ident">key</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// route handler that renders individual views for sitekeys</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.edit_easy"</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">easy</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="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">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">struct</span> <span class="ident">Traffic</span> {
|
||||
<span class="ident">peak_sustainable_traffic</span>: <span class="ident">i32</span>,
|
||||
<span class="ident">avg_traffic</span>: <span class="ident">i32</span>,
|
||||
<span class="ident">broke_my_site_traffic</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">i32</span><span class="op">></span>,
|
||||
}
|
||||
|
||||
<span class="kw">match</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">Traffic</span>,
|
||||
<span class="string">"SELECT
|
||||
avg_traffic,
|
||||
peak_sustainable_traffic,
|
||||
broke_my_site_traffic
|
||||
FROM
|
||||
mcaptcha_sitekey_user_provided_avg_traffic
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT
|
||||
config_id
|
||||
FROM
|
||||
mcaptcha_config
|
||||
WHERE
|
||||
KEY = $1
|
||||
AND user_id = (
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
mcaptcha_users
|
||||
WHERE
|
||||
NAME = $2
|
||||
)
|
||||
)
|
||||
"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">key</span>,
|
||||
<span class="kw-2">&</span><span class="ident">username</span>
|
||||
)
|
||||
.<span class="ident">fetch_one</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">c</span>) => {
|
||||
<span class="kw">struct</span> <span class="ident">Description</span> {
|
||||
<span class="ident">name</span>: <span class="ident">String</span>,
|
||||
}
|
||||
<span class="kw">let</span> <span class="ident">description</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
|
||||
<span class="ident">Description</span>,
|
||||
<span class="string">"SELECT name FROM mcaptcha_config
|
||||
WHERE key = $1
|
||||
AND user_id = (
|
||||
SELECT user_id FROM mcaptcha_users WHERE NAME = $2)"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">key</span>,
|
||||
<span class="kw-2">&</span><span class="ident">username</span>
|
||||
)
|
||||
.<span class="ident">fetch_one</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">pattern</span> <span class="op">=</span> <span class="ident">TrafficPattern</span> {
|
||||
<span class="ident">peak_sustainable_traffic</span>: <span class="ident">c</span>.<span class="ident">peak_sustainable_traffic</span> <span class="kw">as</span> <span class="ident">u32</span>,
|
||||
<span class="ident">avg_traffic</span>: <span class="ident">c</span>.<span class="ident">avg_traffic</span> <span class="kw">as</span> <span class="ident">u32</span>,
|
||||
<span class="ident">broke_my_site_traffic</span>: <span class="ident">c</span>.<span class="ident">broke_my_site_traffic</span>.<span class="ident">map</span>(<span class="op">|</span><span class="ident">n</span><span class="op">|</span> <span class="ident">n</span> <span class="kw">as</span> <span class="ident">u32</span>),
|
||||
<span class="ident">description</span>: <span class="ident">description</span>.<span class="ident">name</span>,
|
||||
};
|
||||
|
||||
<span class="kw">let</span> <span class="ident">page</span> <span class="op">=</span> <span class="ident">EasyEditPage::new</span>(<span class="ident">key</span>, <span class="ident">pattern</span>).<span class="ident">render_once</span>().<span class="ident">unwrap</span>();
|
||||
<span class="kw">return</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="ident">page</span>));
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">RowNotFound</span>) => {
|
||||
<span class="kw">return</span> <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Found</span>()
|
||||
.<span class="ident">insert_header</span>((
|
||||
<span class="ident">http::header::LOCATION</span>,
|
||||
<span class="ident"><span class="kw">crate</span>::PAGES</span>.<span class="ident">panel</span>.<span class="ident">sitekey</span>.<span class="ident">get_edit_advance</span>(<span class="kw-2">&</span><span class="ident">key</span>),
|
||||
))
|
||||
.<span class="ident">finish</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="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">test</span> {
|
||||
<span class="kw">use</span> <span class="ident">actix_web::http::StatusCode</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web::http</span>::{<span class="ident">header</span>, <span class="ident">StatusCode</span>};
|
||||
<span class="kw">use</span> <span class="ident">actix_web::test</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web::web::Bytes</span>;
|
||||
|
||||
@@ -296,6 +536,20 @@
|
||||
<span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&</span><span class="ident">L1</span>.<span class="ident">difficulty_factor</span>.<span class="ident">to_string</span>()));
|
||||
<span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&</span><span class="ident">L2</span>.<span class="ident">difficulty_factor</span>.<span class="ident">to_string</span>()));
|
||||
<span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&</span><span class="ident">L2</span>.<span class="ident">visitor_threshold</span>.<span class="ident">to_string</span>()));
|
||||
|
||||
<span class="kw">let</span> <span class="ident">easy_url</span> <span class="op">=</span> <span class="ident">PAGES</span>.<span class="ident">panel</span>.<span class="ident">sitekey</span>.<span class="ident">get_edit_easy</span>(<span class="kw-2">&</span><span class="ident">key</span>.<span class="ident">key</span>);
|
||||
|
||||
<span class="kw">let</span> <span class="ident">redirect_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="ident">test::TestRequest::get</span>()
|
||||
.<span class="ident">uri</span>(<span class="kw-2">&</span><span class="ident">easy_url</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">redirect_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::FOUND</span>);
|
||||
<span class="kw">let</span> <span class="ident">headers</span> <span class="op">=</span> <span class="ident">redirect_resp</span>.<span class="ident">headers</span>();
|
||||
<span class="macro">assert_eq!</span>(<span class="ident">headers</span>.<span class="ident">get</span>(<span class="ident">header::LOCATION</span>).<span class="ident">unwrap</span>(), <span class="kw-2">&</span><span class="ident">url</span>);
|
||||
}
|
||||
}
|
||||
</code></pre></div>
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
<span id="96">96</span>
|
||||
<span id="97">97</span>
|
||||
<span id="98">98</span>
|
||||
<span id="99">99</span>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
@@ -170,7 +171,8 @@
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">add::easy</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">list::list_sitekeys</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">view::view_sitekey</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">edit::edit_sitekey</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">edit::advance</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">edit::easy</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">delete::delete_sitekey</span>);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user