mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-12 10:35:39 +00:00
Deploying to gh-pages from @ 096dcd32e4 🚀
This commit is contained in:
@@ -257,6 +257,18 @@
|
||||
<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>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="comment">/*
|
||||
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
@@ -432,13 +444,15 @@
|
||||
<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">"testuser"</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">"longpassword"</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">"testuser1@a.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">SIGNIN</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"/api/v1/signin"</span>;
|
||||
<span class="kw">const</span> <span class="ident">SIGNUP</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"/api/v1/signup"</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">app</span> <span class="op">=</span> <span class="macro">get_app</span><span class="macro">!</span>(<span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 1. Register and signin</span>
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="kw">_</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin_util</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="kw">_</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">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="macro">!</span>(<span class="ident">signin_resp</span>);
|
||||
|
||||
<span class="comment">// 2. check if duplicate username is allowed</span>
|
||||
@@ -447,49 +461,55 @@
|
||||
<span class="ident">password</span>: <span class="ident">PASSWORD</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">email</span>: <span class="ident">EMAIL</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
<span class="kw">let</span> <span class="ident">duplicate_user_resp</span> <span class="op">=</span>
|
||||
<span class="ident">test</span>::<span class="ident">call_service</span>(<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>, <span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">msg</span>, <span class="string">"/api/v1/signup"</span>).<span class="ident">to_request</span>()).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">duplicate_user_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>);
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">SIGNUP</span>,
|
||||
<span class="kw-2">&</span><span class="ident">msg</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">UsernameTaken</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 3. sigining in with non-existent user</span>
|
||||
<span class="kw">let</span> <span class="ident">nonexistantuser</span> <span class="op">=</span> <span class="ident">Login</span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">login</span> <span class="op">=</span> <span class="ident">Login</span> {
|
||||
<span class="ident">username</span>: <span class="string">"nonexistantuser"</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">password</span>: <span class="ident">msg</span>.<span class="ident">password</span>.<span class="ident">clone</span>(),
|
||||
};
|
||||
<span class="kw">let</span> <span class="ident">userdoesntexist</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">nonexistantuser</span>, <span class="string">"/api/v1/signin"</span>).<span class="ident">to_request</span>(),
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">SIGNIN</span>,
|
||||
<span class="kw-2">&</span><span class="ident">login</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">UsernameNotFound</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">UNAUTHORIZED</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">userdoesntexist</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">UNAUTHORIZED</span>);
|
||||
<span class="kw">let</span> <span class="ident">txt</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">userdoesntexist</span>).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">txt</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">UsernameNotFound</span>));
|
||||
|
||||
<span class="comment">// 4. trying to signin with wrong password</span>
|
||||
<span class="kw">let</span> <span class="ident">wrongpassword</span> <span class="op">=</span> <span class="ident">Login</span> {
|
||||
<span class="ident">username</span>: <span class="ident">NAME</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">password</span>: <span class="ident">NAME</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
<span class="kw">let</span> <span class="ident">wrongpassword_resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">wrongpassword</span>, <span class="string">"/api/v1/signin"</span>).<span class="ident">to_request</span>(),
|
||||
<span class="ident">login</span>.<span class="ident">username</span> <span class="op">=</span> <span class="ident">NAME</span>.<span class="ident">into</span>();
|
||||
<span class="ident">login</span>.<span class="ident">password</span> <span class="op">=</span> <span class="ident">NAME</span>.<span class="ident">into</span>();
|
||||
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">SIGNIN</span>,
|
||||
<span class="kw-2">&</span><span class="ident">login</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">WrongPassword</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">UNAUTHORIZED</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">wrongpassword_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">UNAUTHORIZED</span>);
|
||||
<span class="kw">let</span> <span class="ident">txt</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">wrongpassword_resp</span>).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">txt</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">WrongPassword</span>));
|
||||
|
||||
<span class="comment">// 5. signout</span>
|
||||
<span class="kw">let</span> <span class="ident">signout_resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">wrongpassword</span>, <span class="string">"/api/v1/signout"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
|
||||
<span class="ident">test</span>::<span class="ident">TestRequest</span>::<span class="ident">post</span>()
|
||||
.<span class="ident">uri</span>(<span class="string">"/api/v1/signout"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookies</span>)
|
||||
.<span class="ident">to_request</span>(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">signout_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
@@ -498,7 +518,12 @@
|
||||
<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">"longpassword2"</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">"testuser1@a.com2"</span>;
|
||||
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="ident">creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin_util</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">data</span> <span class="op">=</span> <span class="ident">Data</span>::<span class="ident">new</span>().<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="ident">creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">register_and_signin</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="macro">!</span>(<span class="ident">signin_resp</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">app</span> <span class="op">=</span> <span class="macro">get_app</span><span class="macro">!</span>(<span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
@@ -511,7 +536,6 @@
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">delete_user_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
}
|
||||
</pre></div>
|
||||
|
||||
@@ -177,6 +177,123 @@
|
||||
<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>
|
||||
<span id="278">278</span>
|
||||
<span id="279">279</span>
|
||||
<span id="280">280</span>
|
||||
<span id="281">281</span>
|
||||
<span id="282">282</span>
|
||||
<span id="283">283</span>
|
||||
<span id="284">284</span>
|
||||
<span id="285">285</span>
|
||||
<span id="286">286</span>
|
||||
<span id="287">287</span>
|
||||
<span id="288">288</span>
|
||||
<span id="289">289</span>
|
||||
<span id="290">290</span>
|
||||
<span id="291">291</span>
|
||||
<span id="292">292</span>
|
||||
<span id="293">293</span>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="comment">/*
|
||||
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
@@ -219,15 +336,18 @@
|
||||
<span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="ident">Url</span>::<span class="ident">parse</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">name</span>)<span class="question-mark">?</span>;
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">host</span>) <span class="op">=</span> <span class="ident">url</span>.<span class="ident">host_str</span>() {
|
||||
<span class="kw">let</span> <span class="ident">user</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="ident">sqlx</span>::<span class="macro">query</span><span class="macro">!</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">"insert into mcaptcha_domains (name, ID) values
|
||||
($1, (select ID from mcaptcha_users where name = ($2) ));"</span>,
|
||||
<span class="ident">host</span>,
|
||||
<span class="ident">user</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>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>())
|
||||
.<span class="kw">await</span>;
|
||||
<span class="kw">match</span> <span class="ident">res</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">dup_error</span>(<span class="ident">e</span>, <span class="ident">ServiceError</span>::<span class="ident">HostnameTaken</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="ident">HttpResponse</span>::<span class="prelude-val">Ok</span>()),
|
||||
}
|
||||
} <span class="kw">else</span> {
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError</span>::<span class="ident">NotAUrl</span>)
|
||||
}
|
||||
@@ -252,8 +372,9 @@
|
||||
}
|
||||
|
||||
<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>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">TokenName</span> {
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">CreateToken</span> {
|
||||
<span class="kw">pub</span> <span class="ident">name</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">domain</span>: <span class="ident">String</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>
|
||||
@@ -262,34 +383,60 @@
|
||||
<span class="kw">pub</span> <span class="ident">key</span>: <span class="ident">String</span>,
|
||||
}
|
||||
|
||||
<span class="comment">//#[post("/api/v1/mcaptcha/domain/token/add")]</span>
|
||||
<span class="comment">//pub async fn add_mcaptcha(</span>
|
||||
<span class="comment">// payload: web::Json<Domain>,</span>
|
||||
<span class="comment">// data: web::Data<Data>,</span>
|
||||
<span class="comment">// id: Identity,</span>
|
||||
<span class="comment">//) -> ServiceResult<impl Responder> {</span>
|
||||
<span class="comment">// is_authenticated(&id)?;</span>
|
||||
<span class="comment">// let key = get_random(32);</span>
|
||||
<span class="comment">// let res = sqlx::query!(</span>
|
||||
<span class="comment">// "INSERT INTO mcaptcha_config (name, key) VALUES ($1, $2)",</span>
|
||||
<span class="comment">// &payload.name,</span>
|
||||
<span class="comment">// &key,</span>
|
||||
<span class="comment">// )</span>
|
||||
<span class="comment">// .execute(&data.db)</span>
|
||||
<span class="comment">// .await;</span>
|
||||
<span class="comment">//</span>
|
||||
<span class="comment">// match res {</span>
|
||||
<span class="comment">// Err(e) => Err(dup_error(e, ServiceError::UsernameTaken)),</span>
|
||||
<span class="comment">// Ok(_) => {</span>
|
||||
<span class="comment">// let resp = TokenKeyPair {</span>
|
||||
<span class="comment">// key,</span>
|
||||
<span class="comment">// name: payload.name,</span>
|
||||
<span class="comment">// };</span>
|
||||
<span class="comment">//</span>
|
||||
<span class="comment">// Ok(HttpResponse::Ok().json(resp))</span>
|
||||
<span class="comment">// }</span>
|
||||
<span class="comment">// }</span>
|
||||
<span class="comment">//}</span>
|
||||
<span class="attribute">#[<span class="ident">post</span>(<span class="string">"/api/v1/mcaptcha/domain/token/add"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">add_mcaptcha</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web</span>::<span class="ident">Json</span><span class="op"><</span><span class="ident">CreateToken</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">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">is_authenticated</span>(<span class="kw-2">&</span><span class="ident">id</span>)<span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">get_random</span>(<span class="number">32</span>);
|
||||
<span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="ident">Url</span>::<span class="ident">parse</span>(<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">domain</span>)<span class="question-mark">?</span>;
|
||||
<span class="macro">println</span><span class="macro">!</span>(<span class="string">"got req"</span>);
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">host</span>) <span class="op">=</span> <span class="ident">url</span>.<span class="ident">host_str</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">"INSERT INTO mcaptcha_config
|
||||
(name, key, domain_name)
|
||||
VALUES ($1, $2, (
|
||||
SELECT name FROM mcaptcha_domains WHERE name = ($3)))"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">name</span>,
|
||||
<span class="kw-2">&</span><span class="ident">key</span>,
|
||||
<span class="kw-2">&</span><span class="ident">host</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="kw">match</span> <span class="ident">res</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">dup_error</span>(<span class="ident">e</span>, <span class="ident">ServiceError</span>::<span class="ident">TokenNameTaken</span>)),
|
||||
<span class="prelude-val">Ok</span>(<span class="kw">_</span>) <span class="op">=</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">resp</span> <span class="op">=</span> <span class="ident">TokenKeyPair</span> {
|
||||
<span class="ident">key</span>,
|
||||
<span class="ident">name</span>: <span class="ident">payload</span>.<span class="ident">into_inner</span>().<span class="ident">name</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">resp</span>))
|
||||
}
|
||||
}
|
||||
} <span class="kw">else</span> {
|
||||
<span class="prelude-val">Err</span>(<span class="ident">ServiceError</span>::<span class="ident">NotAUrl</span>)
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">post</span>(<span class="string">"/api/v1/mcaptcha/domain/token/delete"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_mcaptcha</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web</span>::<span class="ident">Json</span><span class="op"><</span><span class="ident">CreateToken</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">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">is_authenticated</span>(<span class="kw-2">&</span><span class="ident">id</span>)<span class="question-mark">?</span>;
|
||||
<span class="ident">sqlx</span>::<span class="macro">query</span><span class="macro">!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_config WHERE name = ($1)"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</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>;
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse</span>::<span class="prelude-val">Ok</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">use</span> <span class="ident">std</span>::<span class="ident">iter</span>;
|
||||
@@ -321,28 +468,36 @@
|
||||
<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">"longpassworddomain"</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">"testuserdomain@a.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">DOMAIN</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"http://example.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">ADD_URL</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/domain/add"</span>;
|
||||
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="kw">_</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin_util</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">data</span> <span class="op">=</span> <span class="ident">Data</span>::<span class="ident">new</span>().<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME</span>, <span class="ident">EMAIL</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 1. add domain</span>
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="kw">_</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">add_domain_util</span>(<span class="ident">NAME</span>, <span class="ident">PASSWORD</span>, <span class="ident">DOMAIN</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="macro">!</span>(<span class="ident">signin_resp</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">app</span> <span class="op">=</span> <span class="macro">get_app</span><span class="macro">!</span>(<span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="ident">delete_domain_util</span>(<span class="ident">DOMAIN</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 1. add domain</span>
|
||||
<span class="kw">let</span> <span class="ident">domain</span> <span class="op">=</span> <span class="ident">Domain</span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">domain</span> <span class="op">=</span> <span class="ident">Domain</span> {
|
||||
<span class="ident">name</span>: <span class="ident">DOMAIN</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
|
||||
<span class="kw">let</span> <span class="ident">add_domain_resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">domain</span>, <span class="string">"/api/v1/mcaptcha/domain/add"</span>)
|
||||
.<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
|
||||
.<span class="ident">to_request</span>(),
|
||||
<span class="comment">// 2. duplicate domain</span>
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">ADD_URL</span>,
|
||||
<span class="kw-2">&</span><span class="ident">domain</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">HostnameTaken</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">add_domain_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
|
||||
<span class="comment">// 2. delete domain</span>
|
||||
<span class="comment">// 3. delete domain</span>
|
||||
<span class="kw">let</span> <span class="ident">del_domain_resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">domain</span>, <span class="string">"/api/v1/mcaptcha/domain/delete"</span>)
|
||||
@@ -351,7 +506,86 @@
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq</span><span class="macro">!</span>(<span class="ident">del_domain_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 4. not a URL test for adding domain</span>
|
||||
<span class="ident">domain</span>.<span class="ident">name</span> <span class="op">=</span> <span class="string">"testing"</span>.<span class="ident">into</span>();
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">ADD_URL</span>,
|
||||
<span class="kw-2">&</span><span class="ident">domain</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">NotAUrl</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">actix_rt</span>::<span class="ident">test</span>]</span>
|
||||
<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">add_mcaptcha_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">"testusermcaptcha"</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">"longpassworddomain"</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">"testusermcaptcha@a.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">DOMAIN</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"http://mcaptcha.example.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">TOKEN_NAME</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"add_mcaptcha_works_token"</span>;
|
||||
<span class="kw">const</span> <span class="ident">ADD_URL</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/domain/token/add"</span>;
|
||||
<span class="kw">const</span> <span class="ident">DEL_URL</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"/api/v1/mcaptcha/domain/token/delete"</span>;
|
||||
|
||||
{
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">Data</span>::<span class="ident">new</span>().<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
|
||||
<span class="ident">register_and_signin</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">data</span>, <span class="kw">_</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">add_domain_util</span>(<span class="ident">NAME</span>, <span class="ident">PASSWORD</span>, <span class="ident">DOMAIN</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="macro">!</span>(<span class="ident">signin_resp</span>);
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">app</span> <span class="op">=</span> <span class="macro">get_app</span><span class="macro">!</span>(<span class="ident">data</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 1. add mcaptcha token</span>
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">domain</span> <span class="op">=</span> <span class="ident">CreateToken</span> {
|
||||
<span class="ident">domain</span>: <span class="ident">DOMAIN</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">name</span>: <span class="ident">TOKEN_NAME</span>.<span class="ident">into</span>(),
|
||||
};
|
||||
<span class="kw">let</span> <span class="ident">add_token_resp</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">domain</span>, <span class="ident">ADD_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="macro">!</span>(<span class="ident">add_token_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
|
||||
<span class="comment">// 2. add duplicate mcaptha</span>
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">ADD_URL</span>,
|
||||
<span class="kw-2">&</span><span class="ident">domain</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">TokenNameTaken</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 4. not a URL test for adding domain</span>
|
||||
<span class="ident">domain</span>.<span class="ident">domain</span> <span class="op">=</span> <span class="string">"testing"</span>.<span class="ident">into</span>();
|
||||
<span class="ident">bad_post_req_test</span>(
|
||||
<span class="ident">NAME</span>,
|
||||
<span class="ident">PASSWORD</span>,
|
||||
<span class="ident">ADD_URL</span>,
|
||||
<span class="kw-2">&</span><span class="ident">domain</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">NotAUrl</span>,
|
||||
<span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="comment">// 4. delete token</span>
|
||||
<span class="kw">let</span> <span class="ident">del_token</span> <span class="op">=</span> <span class="ident">test</span>::<span class="ident">call_service</span>(
|
||||
<span class="kw-2">&</span><span class="kw-2">mut</span> <span class="ident">app</span>,
|
||||
<span class="macro">post_request</span><span class="macro">!</span>(<span class="kw-2">&</span><span class="ident">domain</span>, <span class="ident">DEL_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="macro">!</span>(<span class="ident">del_token</span>.<span class="ident">status</span>(), <span class="ident">StatusCode</span>::<span class="ident">OK</span>);
|
||||
}
|
||||
}
|
||||
</pre></div>
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
<span id="32">32</span>
|
||||
<span id="33">33</span>
|
||||
<span id="34">34</span>
|
||||
<span id="35">35</span>
|
||||
<span id="36">36</span>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="comment">/*
|
||||
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
@@ -69,6 +71,8 @@
|
||||
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">add_domain</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">delete_domain</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">add_mcaptcha</span>);
|
||||
<span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">delete_mcaptcha</span>);
|
||||
}
|
||||
</pre></div>
|
||||
</section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../../../";window.currentCrate = "guard";</script><script src="../../../../main.js"></script><script src="../../../../source-script.js"></script><script src="../../../../source-files.js"></script><script defer src="../../../../search-index.js"></script></body></html>
|
||||
@@ -178,6 +178,12 @@
|
||||
<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>
|
||||
</pre><div class="example-wrap"><pre class="rust ">
|
||||
<span class="comment">/*
|
||||
* Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
@@ -257,6 +263,9 @@
|
||||
<span class="doccomment">/// when the a token name is already taken</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"token name not available"</span>)]</span>
|
||||
<span class="ident">TokenNameTaken</span>,
|
||||
<span class="doccomment">/// when the a host name is already taken</span>
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"host name not available"</span>)]</span>
|
||||
<span class="ident">HostnameTaken</span>,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Serialize</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
@@ -278,6 +287,7 @@
|
||||
|
||||
<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="macro">println</span><span class="macro">!</span>(<span class="string">"{:?}"</span>, <span class="kw-2">&</span><span class="self">self</span>);
|
||||
<span class="kw">match</span> <span class="kw-2">*</span><span class="self">self</span> {
|
||||
<span class="ident">ServiceError</span>::<span class="ident">InternalServerError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode</span>::<span class="ident">INTERNAL_SERVER_ERROR</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">NotAnEmail</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
@@ -292,6 +302,7 @@
|
||||
<span class="ident">ServiceError</span>::<span class="ident">UsernameCaseMappedError</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">UsernameTaken</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">TokenNameTaken</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
<span class="ident">ServiceError</span>::<span class="ident">HostnameTaken</span> <span class="op">=</span><span class="op">></span> <span class="ident">StatusCode</span>::<span class="ident">BAD_REQUEST</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -343,6 +354,7 @@
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">dup_error</span>(<span class="ident">e</span>: <span class="ident">sqlx</span>::<span class="ident">Error</span>, <span class="ident">dup_error</span>: <span class="ident">ServiceError</span>) <span class="op">-</span><span class="op">></span> <span class="ident">ServiceError</span> {
|
||||
<span class="kw">use</span> <span class="ident">sqlx</span>::<span class="ident">error</span>::<span class="ident">Error</span>;
|
||||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">borrow</span>::<span class="ident">Cow</span>;
|
||||
<span class="macro">println</span><span class="macro">!</span>(<span class="string">"database error: {:?}"</span>, <span class="kw-2">&</span><span class="ident">e</span>);
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="ident">Error</span>::<span class="ident">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</span>::<span class="ident">from</span>(<span class="string">"23505"</span>)) {
|
||||
<span class="ident">dup_error</span>
|
||||
|
||||
Reference in New Issue
Block a user