mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-11 18:15:39 +00:00
Deploying to gh-pages from @ 3cd38511fa 🚀
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -63,38 +64,38 @@
|
||||
</span><span class="attr">#[derive(Debug, Error)]
|
||||
</span><span class="kw">pub enum </span>DBError {
|
||||
<span class="doccomment">/// errors that are specific to a database implementation
|
||||
</span><span class="attr">#[error(<span class="string">"{0}"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"{0}"</span>)]
|
||||
</span>DBError(<span class="attr">#[source] </span>BoxDynError),
|
||||
<span class="doccomment">/// Username is taken
|
||||
</span><span class="attr">#[error(<span class="string">"Username is taken"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Username is taken"</span>)]
|
||||
</span>UsernameTaken,
|
||||
<span class="doccomment">/// Email is taken
|
||||
</span><span class="attr">#[error(<span class="string">"Email is taken"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Email is taken"</span>)]
|
||||
</span>EmailTaken,
|
||||
<span class="doccomment">/// Secret is taken
|
||||
</span><span class="attr">#[error(<span class="string">"Secret is taken"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Secret is taken"</span>)]
|
||||
</span>SecretTaken,
|
||||
<span class="doccomment">/// Captcha key is taken
|
||||
</span><span class="attr">#[error(<span class="string">"Captcha key is taken"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Captcha key is taken"</span>)]
|
||||
</span>CaptchaKeyTaken,
|
||||
<span class="doccomment">/// Account not found
|
||||
</span><span class="attr">#[error(<span class="string">"Account not found"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Account not found"</span>)]
|
||||
</span>AccountNotFound,
|
||||
|
||||
<span class="doccomment">/// Captcha not found
|
||||
</span><span class="attr">#[error(<span class="string">"Captcha not found"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Captcha not found"</span>)]
|
||||
</span>CaptchaNotFound,
|
||||
<span class="doccomment">/// Traffic pattern not found
|
||||
</span><span class="attr">#[error(<span class="string">"Traffic pattern not found"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Traffic pattern not found"</span>)]
|
||||
</span>TrafficPatternNotFound,
|
||||
|
||||
<span class="doccomment">/// Notification not found
|
||||
</span><span class="attr">#[error(<span class="string">"Notification not found"</span>)]
|
||||
</span><span class="attr">#[error(<span class="string">"Notification not found"</span>)]
|
||||
</span>NotificationNotFound,
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Convenience type alias for grouping driver-specific errors
|
||||
</span><span class="kw">pub type </span>BoxDynError = Box<<span class="kw">dyn </span>StdError + <span class="lifetime">'static </span>+ Send + Sync>;
|
||||
</span><span class="kw">pub type </span>BoxDynError = Box<<span class="kw">dyn </span>StdError + <span class="lifetime">'static </span>+ Send + Sync>;
|
||||
|
||||
<span class="doccomment">/// Generic result data structure
|
||||
</span><span class="kw">pub type </span>DBResult<V> = std::result::Result<V, DBError>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/lib.rs`."><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/lib.rs`."><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -491,7 +492,7 @@
|
||||
|
||||
<span class="kw">pub mod </span>errors;
|
||||
<span class="kw">pub mod </span>ops;
|
||||
<span class="attr">#[cfg(feature = <span class="string">"test"</span>)]
|
||||
<span class="attr">#[cfg(feature = <span class="string">"test"</span>)]
|
||||
</span><span class="kw">pub mod </span>tests;
|
||||
|
||||
<span class="kw">use </span>dev::<span class="kw-2">*</span>;
|
||||
@@ -513,33 +514,33 @@
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
</span><span class="doccomment">/// Data required to register a new user
|
||||
</span><span class="kw">pub struct </span>Register<<span class="lifetime">'a</span>> {
|
||||
</span><span class="kw">pub struct </span>Register<<span class="lifetime">'a</span>> {
|
||||
<span class="doccomment">/// username of new user
|
||||
</span><span class="kw">pub </span>username: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>username: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// secret of new user
|
||||
</span><span class="kw">pub </span>secret: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>secret: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// hashed password of new use
|
||||
</span><span class="kw">pub </span>hash: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>hash: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// Optionally, email of new use
|
||||
</span><span class="kw">pub </span>email: <span class="prelude-ty">Option</span><<span class="kw-2">&</span><span class="lifetime">'a </span>str>,
|
||||
</span><span class="kw">pub </span>email: <span class="prelude-ty">Option</span><<span class="kw-2">&</span><span class="lifetime">'a </span>str>,
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
</span><span class="doccomment">/// data required to update them email of a user
|
||||
</span><span class="kw">pub struct </span>UpdateEmail<<span class="lifetime">'a</span>> {
|
||||
</span><span class="kw">pub struct </span>UpdateEmail<<span class="lifetime">'a</span>> {
|
||||
<span class="doccomment">/// username of the user
|
||||
</span><span class="kw">pub </span>username: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>username: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// new email address of the user
|
||||
</span><span class="kw">pub </span>new_email: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>new_email: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
</span><span class="doccomment">/// types of credentials used as identifiers during login
|
||||
</span><span class="kw">pub enum </span>Login<<span class="lifetime">'a</span>> {
|
||||
</span><span class="kw">pub enum </span>Login<<span class="lifetime">'a</span>> {
|
||||
<span class="doccomment">/// username as login
|
||||
</span>Username(<span class="kw-2">&</span><span class="lifetime">'a </span>str),
|
||||
</span>Username(<span class="kw-2">&</span><span class="lifetime">'a </span>str),
|
||||
<span class="doccomment">/// email as login
|
||||
</span>Email(<span class="kw-2">&</span><span class="lifetime">'a </span>str),
|
||||
</span>Email(<span class="kw-2">&</span><span class="lifetime">'a </span>str),
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
@@ -552,7 +553,7 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[async_trait]
|
||||
</span><span class="doccomment">/// mCaptcha's database requirements. To implement support for $Database, kindly implement this
|
||||
</span><span class="doccomment">/// mCaptcha's database requirements. To implement support for $Database, kindly implement this
|
||||
/// trait.
|
||||
</span><span class="kw">pub trait </span>MCDatabase: std::marker::Send + std::marker::Sync + CloneSPDatabase {
|
||||
<span class="doccomment">/// ping DB
|
||||
@@ -573,25 +574,25 @@
|
||||
<span class="doccomment">/// check if email exists
|
||||
</span><span class="kw">async fn </span>email_exists(<span class="kw-2">&</span><span class="self">self</span>, email: <span class="kw-2">&</span>str) -> DBResult<bool>;
|
||||
|
||||
<span class="doccomment">/// update a user's email
|
||||
<span class="doccomment">/// update a user's email
|
||||
</span><span class="kw">async fn </span>update_email(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>UpdateEmail) -> DBResult<()>;
|
||||
|
||||
<span class="doccomment">/// get a user's password
|
||||
<span class="doccomment">/// get a user's password
|
||||
</span><span class="kw">async fn </span>get_password(<span class="kw-2">&</span><span class="self">self</span>, l: <span class="kw-2">&</span>Login) -> DBResult<NameHash>;
|
||||
|
||||
<span class="doccomment">/// update user's password
|
||||
<span class="doccomment">/// update user's password
|
||||
</span><span class="kw">async fn </span>update_password(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>NameHash) -> DBResult<()>;
|
||||
|
||||
<span class="doccomment">/// update username
|
||||
</span><span class="kw">async fn </span>update_username(<span class="kw-2">&</span><span class="self">self</span>, current: <span class="kw-2">&</span>str, new: <span class="kw-2">&</span>str) -> DBResult<()>;
|
||||
|
||||
<span class="doccomment">/// get a user's secret
|
||||
<span class="doccomment">/// get a user's secret
|
||||
</span><span class="kw">async fn </span>get_secret(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<Secret>;
|
||||
|
||||
<span class="doccomment">/// get a user's secret from a captcha key
|
||||
<span class="doccomment">/// get a user's secret from a captcha key
|
||||
</span><span class="kw">async fn </span>get_secret_from_captcha(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<Secret>;
|
||||
|
||||
<span class="doccomment">/// update a user's secret
|
||||
<span class="doccomment">/// update a user's secret
|
||||
</span><span class="kw">async fn </span>update_secret(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, secret: <span class="kw-2">&</span>str) -> DBResult<()>;
|
||||
|
||||
<span class="doccomment">/// create new captcha
|
||||
@@ -603,14 +604,14 @@
|
||||
<span class="doccomment">/// Get all captchas belonging to user
|
||||
</span><span class="kw">async fn </span>get_all_user_captchas(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<Vec<Captcha>>;
|
||||
|
||||
<span class="doccomment">/// update captcha metadata; doesn't change captcha key
|
||||
<span class="doccomment">/// update captcha metadata; doesn't change captcha key
|
||||
</span><span class="kw">async fn </span>update_captcha_metadata(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
username: <span class="kw-2">&</span>str,
|
||||
p: <span class="kw-2">&</span>CreateCaptcha,
|
||||
) -> DBResult<()>;
|
||||
|
||||
<span class="doccomment">/// update captcha key; doesn't change metadata
|
||||
<span class="doccomment">/// update captcha key; doesn't change metadata
|
||||
</span><span class="kw">async fn </span>update_captcha_key(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
username: <span class="kw-2">&</span>str,
|
||||
@@ -650,7 +651,7 @@
|
||||
captcha_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<Vec<Level>>;
|
||||
|
||||
<span class="doccomment">/// Get captcha's cooldown period
|
||||
<span class="doccomment">/// Get captcha's cooldown period
|
||||
</span><span class="kw">async fn </span>get_captcha_cooldown(<span class="kw-2">&</span><span class="self">self</span>, captcha_key: <span class="kw-2">&</span>str) -> DBResult<i32>;
|
||||
|
||||
<span class="doccomment">/// Add traffic configuration
|
||||
@@ -845,15 +846,15 @@
|
||||
|
||||
<span class="attr">#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
|
||||
</span><span class="doccomment">/// Data required to add notification
|
||||
</span><span class="kw">pub struct </span>AddNotification<<span class="lifetime">'a</span>> {
|
||||
</span><span class="kw">pub struct </span>AddNotification<<span class="lifetime">'a</span>> {
|
||||
<span class="doccomment">/// who is the notification addressed to?
|
||||
</span><span class="kw">pub </span>to: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>to: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// notification sender
|
||||
</span><span class="kw">pub </span>from: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>from: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// heading of the notification
|
||||
</span><span class="kw">pub </span>heading: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>heading: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// message of the notification
|
||||
</span><span class="kw">pub </span>message: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>message: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Default, PartialEq, Serialize, Deserialize, Clone, Debug)]
|
||||
@@ -870,25 +871,25 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Default, PartialEq, Serialize, Deserialize, Clone, Debug)]
|
||||
</span><span class="doccomment">/// User's traffic pattern; used in generating a captcha configuration
|
||||
</span><span class="doccomment">/// User's traffic pattern; used in generating a captcha configuration
|
||||
</span><span class="kw">pub struct </span>TrafficPattern {
|
||||
<span class="doccomment">/// average traffic of user's website
|
||||
<span class="doccomment">/// average traffic of user's website
|
||||
</span><span class="kw">pub </span>avg_traffic: u32,
|
||||
<span class="doccomment">/// the peak traffic that the user's website can handle
|
||||
<span class="doccomment">/// the peak traffic that the user's website can handle
|
||||
</span><span class="kw">pub </span>peak_sustainable_traffic: u32,
|
||||
<span class="doccomment">/// traffic that bought the user's website down; optional
|
||||
<span class="doccomment">/// traffic that bought the user's website down; optional
|
||||
</span><span class="kw">pub </span>broke_my_site_traffic: <span class="prelude-ty">Option</span><u32>,
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Default, PartialEq, Deserialize, Serialize)]
|
||||
</span><span class="doccomment">/// data required to create new captcha
|
||||
</span><span class="kw">pub struct </span>CreateCaptcha<<span class="lifetime">'a</span>> {
|
||||
</span><span class="kw">pub struct </span>CreateCaptcha<<span class="lifetime">'a</span>> {
|
||||
<span class="doccomment">/// cool down duration
|
||||
</span><span class="kw">pub </span>duration: i32,
|
||||
<span class="doccomment">/// description of the captcha
|
||||
</span><span class="kw">pub </span>description: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>description: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="doccomment">/// secret key of the captcha
|
||||
</span><span class="kw">pub </span>key: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
</span><span class="kw">pub </span>key: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Default, PartialEq, Deserialize, Serialize)]
|
||||
@@ -905,9 +906,9 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, PartialEq, Default, Serialize)]
|
||||
</span><span class="doccomment">/// datastructure representing a user's secret
|
||||
</span><span class="doccomment">/// datastructure representing a user's secret
|
||||
</span><span class="kw">pub struct </span>Secret {
|
||||
<span class="doccomment">/// user's secret
|
||||
<span class="doccomment">/// user's secret
|
||||
</span><span class="kw">pub </span>secret: String,
|
||||
}
|
||||
<span class="doccomment">/// Trait to clone MCDatabase
|
||||
@@ -918,7 +919,7 @@
|
||||
|
||||
<span class="kw">impl</span><T> CloneSPDatabase <span class="kw">for </span>T
|
||||
<span class="kw">where
|
||||
</span>T: MCDatabase + Clone + <span class="lifetime">'static</span>,
|
||||
</span>T: MCDatabase + Clone + <span class="lifetime">'static</span>,
|
||||
{
|
||||
<span class="kw">fn </span>clone_db(<span class="kw-2">&</span><span class="self">self</span>) -> Box<<span class="kw">dyn </span>MCDatabase> {
|
||||
Box::new(<span class="self">self</span>.clone())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/ops.rs`."><title>ops.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/ops.rs`."><title>ops.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/tests.rs`."><title>tests.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-core/src/tests.rs`."><title>tests.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_core" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -497,21 +498,21 @@
|
||||
];
|
||||
|
||||
<span class="doccomment">/// test all database functions
|
||||
</span><span class="kw">pub async fn </span>database_works<<span class="lifetime">'a</span>, T: MCDatabase>(
|
||||
</span><span class="kw">pub async fn </span>database_works<<span class="lifetime">'a</span>, T: MCDatabase>(
|
||||
db: <span class="kw-2">&</span>T,
|
||||
p: <span class="kw-2">&</span>Register<<span class="lifetime">'a</span>>,
|
||||
c: <span class="kw-2">&</span>CreateCaptcha<<span class="lifetime">'a</span>>,
|
||||
p: <span class="kw-2">&</span>Register<<span class="lifetime">'a</span>>,
|
||||
c: <span class="kw-2">&</span>CreateCaptcha<<span class="lifetime">'a</span>>,
|
||||
l: <span class="kw-2">&</span>[Level],
|
||||
tp: <span class="kw-2">&</span>TrafficPattern,
|
||||
an: <span class="kw-2">&</span>AddNotification<<span class="lifetime">'a</span>>,
|
||||
an: <span class="kw-2">&</span>AddNotification<<span class="lifetime">'a</span>>,
|
||||
) {
|
||||
<span class="macro">assert!</span>(db.ping().<span class="kw">await</span>, <span class="string">"ping test"</span>);
|
||||
<span class="macro">assert!</span>(db.ping().<span class="kw">await</span>, <span class="string">"ping test"</span>);
|
||||
|
||||
<span class="kw">if </span>db.username_exists(p.username).<span class="kw">await</span>.unwrap() {
|
||||
db.delete_user(p.username).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert!</span>(
|
||||
!db.username_exists(p.username).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user is deleted so username shouldn't exist"
|
||||
<span class="string">"user is deleted so username shouldn't exist"
|
||||
</span>);
|
||||
}
|
||||
|
||||
@@ -526,7 +527,7 @@
|
||||
|
||||
<span class="comment">// testing get secret
|
||||
</span><span class="kw">let </span>secret = db.get_secret(p.username).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert_eq!</span>(secret.secret, p.secret, <span class="string">"user secret matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(secret.secret, p.secret, <span class="string">"user secret matches"</span>);
|
||||
|
||||
<span class="comment">// testing update secret: setting secret = username
|
||||
</span>db.update_secret(p.username, p.username).<span class="kw">await</span>.unwrap();
|
||||
@@ -534,24 +535,24 @@
|
||||
<span class="kw">let </span>secret = db.get_secret(p.username).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert_eq!</span>(
|
||||
secret.secret, p.username,
|
||||
<span class="string">"user secret matches username; as set by previous step"
|
||||
<span class="string">"user secret matches username; as set by previous step"
|
||||
</span>);
|
||||
|
||||
<span class="comment">// testing get_password
|
||||
|
||||
// with username
|
||||
</span><span class="kw">let </span>name_hash = db.get_password(<span class="kw-2">&</span>Login::Username(p.username)).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert_eq!</span>(name_hash.hash, p.hash, <span class="string">"user password matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.hash, p.hash, <span class="string">"user password matches"</span>);
|
||||
|
||||
<span class="macro">assert_eq!</span>(name_hash.username, p.username, <span class="string">"username matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.username, p.username, <span class="string">"username matches"</span>);
|
||||
|
||||
<span class="comment">// with email
|
||||
</span><span class="kw">let </span><span class="kw-2">mut </span>name_hash = db
|
||||
.get_password(<span class="kw-2">&</span>Login::Email(p.email.as_ref().unwrap()))
|
||||
.<span class="kw">await
|
||||
</span>.unwrap();
|
||||
<span class="macro">assert_eq!</span>(name_hash.hash, p.hash, <span class="string">"user password matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.username, p.username, <span class="string">"username matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.hash, p.hash, <span class="string">"user password matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.username, p.username, <span class="string">"username matches"</span>);
|
||||
|
||||
<span class="comment">// testing get_email
|
||||
</span><span class="macro">assert_eq!</span>(
|
||||
@@ -567,11 +568,11 @@
|
||||
<span class="comment">// testing email exists
|
||||
</span><span class="macro">assert!</span>(
|
||||
db.email_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user is registered so email should exist"
|
||||
<span class="string">"user is registered so email should exist"
|
||||
</span>);
|
||||
<span class="macro">assert!</span>(
|
||||
db.username_exists(p.username).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user is registered so username should exist"
|
||||
<span class="string">"user is registered so username should exist"
|
||||
</span>);
|
||||
|
||||
<span class="comment">// update password test. setting password = username
|
||||
@@ -581,28 +582,28 @@
|
||||
<span class="kw">let </span>name_hash = db.get_password(<span class="kw-2">&</span>Login::Username(p.username)).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert_eq!</span>(
|
||||
name_hash.hash, p.username,
|
||||
<span class="string">"user password matches with changed value"
|
||||
<span class="string">"user password matches with changed value"
|
||||
</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.username, p.username, <span class="string">"username matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(name_hash.username, p.username, <span class="string">"username matches"</span>);
|
||||
|
||||
<span class="comment">// update username to p.email
|
||||
</span><span class="macro">assert!</span>(
|
||||
!db.username_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user with p.email doesn't exist. pre-check to update username to p.email"
|
||||
<span class="string">"user with p.email doesn't exist. pre-check to update username to p.email"
|
||||
</span>);
|
||||
db.update_username(p.username, p.email.as_ref().unwrap())
|
||||
.<span class="kw">await
|
||||
</span>.unwrap();
|
||||
<span class="macro">assert!</span>(
|
||||
db.username_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user with p.email exist post-update"
|
||||
<span class="string">"user with p.email exist post-update"
|
||||
</span>);
|
||||
|
||||
<span class="comment">// deleting user for re-registration with email = None
|
||||
</span>db.delete_user(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert!</span>(
|
||||
!db.username_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user is deleted so username shouldn't exist"
|
||||
<span class="string">"user is deleted so username shouldn't exist"
|
||||
</span>);
|
||||
|
||||
<span class="comment">// register with email = None
|
||||
@@ -611,11 +612,11 @@
|
||||
db.register(<span class="kw-2">&</span>p2).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert!</span>(
|
||||
db.username_exists(p2.username).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user is registered so username should exist"
|
||||
<span class="string">"user is registered so username should exist"
|
||||
</span>);
|
||||
<span class="macro">assert!</span>(
|
||||
!db.email_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user registration with email is deleted; so email shouldn't exist"
|
||||
<span class="string">"user registration with email is deleted; so email shouldn't exist"
|
||||
</span>);
|
||||
|
||||
<span class="comment">// testing get_email = None
|
||||
@@ -628,12 +629,12 @@
|
||||
};
|
||||
db.update_email(<span class="kw-2">&</span>update_email).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">println!</span>(
|
||||
<span class="string">"null user email: {}"</span>,
|
||||
<span class="string">"null user email: {}"</span>,
|
||||
db.email_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap()
|
||||
);
|
||||
<span class="macro">assert!</span>(
|
||||
db.email_exists(p.email.as_ref().unwrap()).<span class="kw">await</span>.unwrap(),
|
||||
<span class="string">"user was with empty email but email is set; so email should exist"
|
||||
<span class="string">"user was with empty email but email is set; so email should exist"
|
||||
</span>);
|
||||
|
||||
<span class="comment">/*
|
||||
@@ -666,7 +667,7 @@
|
||||
|
||||
<span class="comment">// get secret from captcha key
|
||||
</span><span class="kw">let </span>secret_from_captcha = db.get_secret_from_captcha(<span class="kw-2">&</span>c.key).<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">assert_eq!</span>(secret_from_captcha.secret, p.secret, <span class="string">"user secret matches"</span>);
|
||||
<span class="macro">assert_eq!</span>(secret_from_captcha.secret, p.secret, <span class="string">"user secret matches"</span>);
|
||||
|
||||
<span class="comment">// get captcha configuration
|
||||
</span><span class="kw">let </span>captcha = db.get_captcha_config(p.username, c.key).<span class="kw">await</span>.unwrap();
|
||||
@@ -701,7 +702,7 @@
|
||||
db.get_traffic_pattern(p.username, c.key).<span class="kw">await</span>,
|
||||
<span class="prelude-val">Err</span>(DBError::TrafficPatternNotFound)
|
||||
),
|
||||
<span class="string">"deletion successful; traffic pattern no longer exists"
|
||||
<span class="string">"deletion successful; traffic pattern no longer exists"
|
||||
</span>);
|
||||
|
||||
<span class="comment">// add captcha levels
|
||||
@@ -777,7 +778,7 @@
|
||||
<span class="kw">let </span>analytics = CreatePerformanceAnalytics {
|
||||
time: <span class="number">1</span>,
|
||||
difficulty_factor: <span class="number">1</span>,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
};
|
||||
|
||||
<span class="macro">assert_eq!</span>(
|
||||
@@ -823,22 +824,22 @@
|
||||
CreatePerformanceAnalytics {
|
||||
time: <span class="number">2</span>,
|
||||
difficulty_factor: <span class="number">2</span>,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
},
|
||||
CreatePerformanceAnalytics {
|
||||
time: <span class="number">3</span>,
|
||||
difficulty_factor: <span class="number">3</span>,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
},
|
||||
CreatePerformanceAnalytics {
|
||||
time: <span class="number">4</span>,
|
||||
difficulty_factor: <span class="number">4</span>,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
},
|
||||
CreatePerformanceAnalytics {
|
||||
time: <span class="number">5</span>,
|
||||
difficulty_factor: <span class="number">5</span>,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
},
|
||||
];
|
||||
<span class="kw">for </span>a <span class="kw">in </span>rest_analytics.iter() {
|
||||
@@ -909,7 +910,7 @@
|
||||
</span>db.update_captcha_key(p.username, c.key, p.username)
|
||||
.<span class="kw">await
|
||||
</span>.unwrap();
|
||||
<span class="comment">// checking for captcha with old key; shouldn't exist
|
||||
<span class="comment">// checking for captcha with old key; shouldn't exist
|
||||
</span><span class="macro">assert!</span>(!db.captcha_exists(<span class="prelude-val">Some</span>(p.username), c.key).<span class="kw">await</span>.unwrap());
|
||||
<span class="comment">// checking for captcha with new key; shouldn exist
|
||||
</span><span class="macro">assert!</span>(db
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-maria/src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_maria" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-maria/src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_maria" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -64,15 +65,15 @@
|
||||
<span class="doccomment">/// map postgres errors to [DBError](DBError) types
|
||||
</span><span class="kw">pub fn </span>map_register_err(e: Error) -> DBError {
|
||||
<span class="kw">if let </span>Error::Database(err) = e {
|
||||
<span class="kw">if </span>err.code() == <span class="prelude-val">Some</span>(Cow::from(<span class="string">"23000"</span>)) {
|
||||
<span class="kw">if </span>err.code() == <span class="prelude-val">Some</span>(Cow::from(<span class="string">"23000"</span>)) {
|
||||
<span class="kw">let </span>msg = err.message();
|
||||
<span class="kw">if </span>msg.contains(<span class="string">"for key 'name'"</span>) {
|
||||
<span class="kw">if </span>msg.contains(<span class="string">"for key 'name'"</span>) {
|
||||
DBError::UsernameTaken
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"for key 'email'"</span>) {
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"for key 'email'"</span>) {
|
||||
DBError::EmailTaken
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"for key 'secret'"</span>) {
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"for key 'secret'"</span>) {
|
||||
DBError::SecretTaken
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"for key 'captcha_key'"</span>) {
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"for key 'captcha_key'"</span>) {
|
||||
DBError::CaptchaKeyTaken
|
||||
} <span class="kw">else </span>{
|
||||
DBError::DBError(Box::new(Error::Database(err)))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-maria/src/lib.rs`."><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_maria" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-maria/src/lib.rs`."><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_maria" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -1483,7 +1484,7 @@
|
||||
<span class="attr">#[async_trait]
|
||||
</span><span class="kw">impl </span>Migrate <span class="kw">for </span>Database {
|
||||
<span class="kw">async fn </span>migrate(<span class="kw-2">&</span><span class="self">self</span>) -> DBResult<()> {
|
||||
<span class="macro">sqlx::migrate!</span>(<span class="string">"./migrations/"</span>)
|
||||
<span class="macro">sqlx::migrate!</span>(<span class="string">"./migrations/"</span>)
|
||||
.run(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
</span>.map_err(|e| DBError::DBError(Box::new(e)))<span class="question-mark">?</span>;
|
||||
@@ -1508,8 +1509,8 @@
|
||||
</span><span class="kw">async fn </span>register(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>Register) -> DBResult<()> {
|
||||
<span class="kw">let </span>res = <span class="kw">if let </span><span class="prelude-val">Some</span>(email) = <span class="kw-2">&</span>p.email {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"insert into mcaptcha_users
|
||||
(name , password, email, secret) values (?, ?, ?, ?)"</span>,
|
||||
<span class="string">"insert into mcaptcha_users
|
||||
(name , password, email, secret) values (?, ?, ?, ?)"</span>,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
<span class="kw-2">&</span>p.hash,
|
||||
<span class="kw-2">&</span>email,
|
||||
@@ -1519,8 +1520,8 @@
|
||||
.<span class="kw">await
|
||||
</span>} <span class="kw">else </span>{
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_users
|
||||
(name , password, secret) VALUES (?, ?, ?)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_users
|
||||
(name , password, secret) VALUES (?, ?, ?)"</span>,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
<span class="kw-2">&</span>p.hash,
|
||||
<span class="kw-2">&</span>p.secret,
|
||||
@@ -1534,7 +1535,7 @@
|
||||
|
||||
<span class="doccomment">/// delete a user
|
||||
</span><span class="kw">async fn </span>delete_user(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(<span class="string">"DELETE FROM mcaptcha_users WHERE name = (?)"</span>, username)
|
||||
<span class="macro">sqlx::query!</span>(<span class="string">"DELETE FROM mcaptcha_users WHERE name = (?)"</span>, username)
|
||||
.execute(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
</span>.map_err(|e| map_row_not_found_err(e, DBError::AccountNotFound))<span class="question-mark">?</span>;
|
||||
@@ -1543,7 +1544,7 @@
|
||||
|
||||
<span class="doccomment">/// check if username exists
|
||||
</span><span class="kw">async fn </span>username_exists(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<bool> {
|
||||
<span class="kw">match </span><span class="macro">sqlx::query!</span>(<span class="string">"SELECT name from mcaptcha_users WHERE name = ?"</span>, username,)
|
||||
<span class="kw">match </span><span class="macro">sqlx::query!</span>(<span class="string">"SELECT name from mcaptcha_users WHERE name = ?"</span>, username,)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
</span>{
|
||||
@@ -1561,7 +1562,7 @@
|
||||
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
Email,
|
||||
<span class="string">"SELECT email FROM mcaptcha_users WHERE name = ?"</span>,
|
||||
<span class="string">"SELECT email FROM mcaptcha_users WHERE name = ?"</span>,
|
||||
username
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1572,7 +1573,7 @@
|
||||
|
||||
<span class="doccomment">/// check if email exists
|
||||
</span><span class="kw">async fn </span>email_exists(<span class="kw-2">&</span><span class="self">self</span>, email: <span class="kw-2">&</span>str) -> DBResult<bool> {
|
||||
<span class="kw">match </span><span class="macro">sqlx::query!</span>(<span class="string">"SELECT name from mcaptcha_users WHERE email = ?"</span>, email)
|
||||
<span class="kw">match </span><span class="macro">sqlx::query!</span>(<span class="string">"SELECT name from mcaptcha_users WHERE email = ?"</span>, email)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
</span>{
|
||||
@@ -1582,11 +1583,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update a user's email
|
||||
<span class="doccomment">/// update a user's email
|
||||
</span><span class="kw">async fn </span>update_email(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>UpdateEmail) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set email = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set email = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="kw-2">&</span>p.new_email,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
)
|
||||
@@ -1597,7 +1598,7 @@
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get a user's password
|
||||
<span class="doccomment">/// get a user's password
|
||||
</span><span class="kw">async fn </span>get_password(<span class="kw-2">&</span><span class="self">self</span>, l: <span class="kw-2">&</span>Login) -> DBResult<NameHash> {
|
||||
<span class="kw">struct </span>Password {
|
||||
name: String,
|
||||
@@ -1607,7 +1608,7 @@
|
||||
<span class="kw">let </span>rec = <span class="kw">match </span>l {
|
||||
Login::Username(u) => <span class="macro">sqlx::query_as!</span>(
|
||||
Password,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE name = ?"#</span>,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE name = ?"#</span>,
|
||||
u,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1616,7 +1617,7 @@
|
||||
|
||||
Login::Email(e) => <span class="macro">sqlx::query_as!</span>(
|
||||
Password,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE email = ?"#</span>,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE email = ?"#</span>,
|
||||
e,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1632,11 +1633,11 @@
|
||||
<span class="prelude-val">Ok</span>(res)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update user's password
|
||||
<span class="doccomment">/// update user's password
|
||||
</span><span class="kw">async fn </span>update_password(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>NameHash) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set password = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set password = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="kw-2">&</span>p.hash,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
)
|
||||
@@ -1650,8 +1651,8 @@
|
||||
<span class="doccomment">/// update username
|
||||
</span><span class="kw">async fn </span>update_username(<span class="kw-2">&</span><span class="self">self</span>, current: <span class="kw-2">&</span>str, new: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set name = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set name = ?
|
||||
WHERE name = ?"</span>,
|
||||
new,
|
||||
current,
|
||||
)
|
||||
@@ -1662,11 +1663,11 @@
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get a user's secret
|
||||
<span class="doccomment">/// get a user's secret
|
||||
</span><span class="kw">async fn </span>get_secret(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<Secret> {
|
||||
<span class="kw">let </span>secret = <span class="macro">sqlx::query_as!</span>(
|
||||
Secret,
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE name = ?"#</span>,
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE name = ?"#</span>,
|
||||
username,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1676,13 +1677,13 @@
|
||||
<span class="prelude-val">Ok</span>(secret)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get a user's secret from a captcha key
|
||||
<span class="doccomment">/// get a user's secret from a captcha key
|
||||
</span><span class="kw">async fn </span>get_secret_from_captcha(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<Secret> {
|
||||
<span class="kw">let </span>secret = <span class="macro">sqlx::query_as!</span>(
|
||||
Secret,
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE ID = (
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE ID = (
|
||||
SELECT user_id FROM mcaptcha_config WHERE captcha_key = ?
|
||||
)"#</span>,
|
||||
)"#</span>,
|
||||
key,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1692,11 +1693,11 @@
|
||||
<span class="prelude-val">Ok</span>(secret)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update a user's secret
|
||||
<span class="doccomment">/// update a user's secret
|
||||
</span><span class="kw">async fn </span>update_secret(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, secret: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set secret = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set secret = ?
|
||||
WHERE name = ?"</span>,
|
||||
<span class="kw-2">&</span>secret,
|
||||
<span class="kw-2">&</span>username,
|
||||
)
|
||||
@@ -1710,9 +1711,9 @@
|
||||
<span class="doccomment">/// create new captcha
|
||||
</span><span class="kw">async fn </span>create_captcha(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, p: <span class="kw-2">&</span>CreateCaptcha) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_config
|
||||
<span class="string">"INSERT INTO mcaptcha_config
|
||||
(`captcha_key`, `user_id`, `duration`, `name`)
|
||||
VALUES (?, (SELECT ID FROM mcaptcha_users WHERE name = ?), ?, ?)"</span>,
|
||||
VALUES (?, (SELECT ID FROM mcaptcha_users WHERE name = ?), ?, ?)"</span>,
|
||||
p.key,
|
||||
username,
|
||||
p.duration <span class="kw">as </span>i32,
|
||||
@@ -1729,9 +1730,9 @@
|
||||
</span><span class="kw">async fn </span>get_captcha_config(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Captcha> {
|
||||
<span class="kw">let </span>captcha = <span class="macro">sqlx::query_as!</span>(
|
||||
InternaleCaptchaConfig,
|
||||
<span class="string">"SELECT `config_id`, `duration`, `name`, `captcha_key` from mcaptcha_config WHERE
|
||||
<span class="string">"SELECT `config_id`, `duration`, `name`, `captcha_key` from mcaptcha_config WHERE
|
||||
`captcha_key` = ? AND
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?) "</span>,
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?) "</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>username,
|
||||
)
|
||||
@@ -1746,8 +1747,8 @@
|
||||
</span><span class="kw">async fn </span>get_all_user_captchas(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<Vec<Captcha>> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
InternaleCaptchaConfig,
|
||||
<span class="string">"SELECT captcha_key, name, config_id, duration FROM mcaptcha_config WHERE
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?) "</span>,
|
||||
<span class="string">"SELECT captcha_key, name, config_id, duration FROM mcaptcha_config WHERE
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?) "</span>,
|
||||
<span class="kw-2">&</span>username,
|
||||
)
|
||||
.fetch_all(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1761,16 +1762,16 @@
|
||||
<span class="prelude-val">Ok</span>(captchas)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update captcha metadata; doesn't change captcha key
|
||||
<span class="doccomment">/// update captcha metadata; doesn't change captcha key
|
||||
</span><span class="kw">async fn </span>update_captcha_metadata(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
username: <span class="kw-2">&</span>str,
|
||||
p: <span class="kw-2">&</span>CreateCaptcha,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_config SET name = ?, duration = ?
|
||||
<span class="string">"UPDATE mcaptcha_config SET name = ?, duration = ?
|
||||
WHERE user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)
|
||||
AND captcha_key = ?"</span>,
|
||||
AND captcha_key = ?"</span>,
|
||||
p.description,
|
||||
p.duration,
|
||||
username,
|
||||
@@ -1783,7 +1784,7 @@
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update captcha key; doesn't change metadata
|
||||
<span class="doccomment">/// update captcha key; doesn't change metadata
|
||||
</span><span class="kw">async fn </span>update_captcha_key(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
username: <span class="kw-2">&</span>str,
|
||||
@@ -1791,8 +1792,8 @@
|
||||
new_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_config SET captcha_key = ?
|
||||
WHERE captcha_key = ? AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_config SET captcha_key = ?
|
||||
WHERE captcha_key = ? AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)"</span>,
|
||||
new_key,
|
||||
old_key,
|
||||
username,
|
||||
@@ -1818,7 +1819,7 @@
|
||||
<span class="kw">let </span>difficulty_factor = level.difficulty_factor <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>visitor_threshold = level.visitor_threshold <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>fut = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_levels (
|
||||
<span class="string">"INSERT INTO mcaptcha_levels (
|
||||
difficulty_factor,
|
||||
visitor_threshold,
|
||||
config_id) VALUES (
|
||||
@@ -1826,7 +1827,7 @@
|
||||
SELECT config_id FROM mcaptcha_config WHERE
|
||||
captcha_key = (?) AND user_id = (
|
||||
SELECT ID FROM mcaptcha_users WHERE name = ?
|
||||
)));"</span>,
|
||||
)));"</span>,
|
||||
difficulty_factor,
|
||||
visitor_threshold,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
@@ -1846,7 +1847,7 @@
|
||||
<span class="kw">let </span>difficulty_factor = level.difficulty_factor <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>visitor_threshold = level.visitor_threshold <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>fut = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO
|
||||
<span class="string">"INSERT INTO
|
||||
mcaptcha_track_nonce (level_id, nonce)
|
||||
VALUES ((
|
||||
SELECT
|
||||
@@ -1859,7 +1860,7 @@
|
||||
difficulty_factor = ?
|
||||
AND
|
||||
visitor_threshold = ?
|
||||
), ?);"</span>,
|
||||
), ?);"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor,
|
||||
visitor_threshold,
|
||||
@@ -1892,10 +1893,10 @@
|
||||
<span class="prelude-val">Some</span>(username) => {
|
||||
<span class="macro">sqlx::query_as!</span>(
|
||||
ConfigId,
|
||||
<span class="string">"SELECT config_id FROM mcaptcha_config
|
||||
<span class="string">"SELECT config_id FROM mcaptcha_config
|
||||
WHERE
|
||||
captcha_key = ?
|
||||
AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)"</span>,
|
||||
AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -1909,7 +1910,7 @@
|
||||
<span class="prelude-val">None </span>=> {
|
||||
<span class="macro">sqlx::query_as!</span>(
|
||||
ConfigId,
|
||||
<span class="string">"SELECT config_id from mcaptcha_config WHERE captcha_key = ?"</span>,
|
||||
<span class="string">"SELECT config_id from mcaptcha_config WHERE captcha_key = ?"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1932,13 +1933,13 @@
|
||||
captcha_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_levels
|
||||
<span class="string">"DELETE FROM mcaptcha_levels
|
||||
WHERE config_id = (
|
||||
SELECT config_id FROM mcaptcha_config where captcha_key= (?)
|
||||
AND user_id = (
|
||||
SELECT ID from mcaptcha_users WHERE name = ?
|
||||
)
|
||||
)"</span>,
|
||||
)"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -1952,9 +1953,9 @@
|
||||
<span class="doccomment">/// Delete captcha
|
||||
</span><span class="kw">async fn </span>delete_captcha(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, captcha_key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_config where captcha_key= (?)
|
||||
<span class="string">"DELETE FROM mcaptcha_config where captcha_key= (?)
|
||||
AND
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)"</span>,
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)"</span>,
|
||||
captcha_key,
|
||||
username,
|
||||
)
|
||||
@@ -1978,10 +1979,10 @@
|
||||
<span class="kw">let </span>levels = <span class="kw">match </span>username {
|
||||
<span class="prelude-val">None </span>=> <span class="macro">sqlx::query_as!</span>(
|
||||
I32Levels,
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config where captcha_key= (?)
|
||||
) ORDER BY difficulty_factor ASC;"</span>,
|
||||
) ORDER BY difficulty_factor ASC;"</span>,
|
||||
captcha_key,
|
||||
)
|
||||
.fetch_all(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1990,12 +1991,12 @@
|
||||
|
||||
<span class="prelude-val">Some</span>(username) => <span class="macro">sqlx::query_as!</span>(
|
||||
I32Levels,
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config where captcha_key= (?)
|
||||
AND user_id = (SELECT ID from mcaptcha_users WHERE name = ?)
|
||||
)
|
||||
ORDER BY difficulty_factor ASC;"</span>,
|
||||
ORDER BY difficulty_factor ASC;"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -2014,7 +2015,7 @@
|
||||
<span class="prelude-val">Ok</span>(new_levels)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Get captcha's cooldown period
|
||||
<span class="doccomment">/// Get captcha's cooldown period
|
||||
</span><span class="kw">async fn </span>get_captcha_cooldown(<span class="kw-2">&</span><span class="self">self</span>, captcha_key: <span class="kw-2">&</span>str) -> DBResult<i32> {
|
||||
<span class="kw">struct </span>DurationResp {
|
||||
duration: i32,
|
||||
@@ -2022,8 +2023,8 @@
|
||||
|
||||
<span class="kw">let </span>resp = <span class="macro">sqlx::query_as!</span>(
|
||||
DurationResp,
|
||||
<span class="string">"SELECT duration FROM mcaptcha_config
|
||||
where captcha_key= ?"</span>,
|
||||
<span class="string">"SELECT duration FROM mcaptcha_config
|
||||
where captcha_key= ?"</span>,
|
||||
captcha_key,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2040,7 +2041,7 @@
|
||||
pattern: <span class="kw-2">&</span>TrafficPattern,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_sitekey_user_provided_avg_traffic (
|
||||
<span class="string">"INSERT INTO mcaptcha_sitekey_user_provided_avg_traffic (
|
||||
config_id,
|
||||
avg_traffic,
|
||||
peak_sustainable_traffic,
|
||||
@@ -2048,7 +2049,7 @@
|
||||
) VALUES (
|
||||
(SELECT config_id FROM mcaptcha_config where captcha_key= (?)
|
||||
AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)
|
||||
), ?, ?, ?)"</span>,
|
||||
), ?, ?, ?)"</span>,
|
||||
<span class="comment">//payload.avg_traffic,
|
||||
</span>captcha_key,
|
||||
username,
|
||||
@@ -2075,7 +2076,7 @@
|
||||
}
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
Traffic,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
avg_traffic,
|
||||
peak_sustainable_traffic,
|
||||
broke_my_site_traffic
|
||||
@@ -2098,7 +2099,7 @@
|
||||
NAME = ?
|
||||
)
|
||||
)
|
||||
"</span>,
|
||||
"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -2119,7 +2120,7 @@
|
||||
captcha_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_sitekey_user_provided_avg_traffic
|
||||
<span class="string">"DELETE FROM mcaptcha_sitekey_user_provided_avg_traffic
|
||||
WHERE config_id = (
|
||||
SELECT config_id
|
||||
FROM
|
||||
@@ -2128,7 +2129,7 @@
|
||||
captcha_key = ?
|
||||
AND
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = ?)
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
captcha_key,
|
||||
username,
|
||||
)
|
||||
@@ -2142,14 +2143,14 @@
|
||||
</span><span class="kw">async fn </span>create_notification(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>AddNotification) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = now_unix_time_stamp();
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_notifications (
|
||||
<span class="string">"INSERT INTO mcaptcha_notifications (
|
||||
heading, message, tx, rx, received)
|
||||
VALUES (
|
||||
?, ?,
|
||||
(SELECT ID FROM mcaptcha_users WHERE name = ?),
|
||||
(SELECT ID FROM mcaptcha_users WHERE name = ?),
|
||||
?
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
p.heading,
|
||||
p.message,
|
||||
p.from,
|
||||
@@ -2170,7 +2171,7 @@
|
||||
) -> DBResult<Vec<Notification>> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>inner_notifications = <span class="macro">sqlx::query_file_as!</span>(
|
||||
InnerNotification,
|
||||
<span class="string">"./src/get_all_unread_notifications.sql"</span>,
|
||||
<span class="string">"./src/get_all_unread_notifications.sql"</span>,
|
||||
<span class="kw-2">&</span>username
|
||||
)
|
||||
.fetch_all(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2190,7 +2191,7 @@
|
||||
</span><span class="kw">async fn </span>mark_notification_read(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, id: i32) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query_file_as!</span>(
|
||||
Notification,
|
||||
<span class="string">"./src/mark_notification_read.sql"</span>,
|
||||
<span class="string">"./src/mark_notification_read.sql"</span>,
|
||||
id,
|
||||
<span class="kw-2">&</span>username
|
||||
)
|
||||
@@ -2205,8 +2206,8 @@
|
||||
</span><span class="kw">async fn </span>record_fetch(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = now_unix_time_stamp();
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_fetched_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_fetched_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"</span>,
|
||||
key,
|
||||
<span class="kw-2">&</span>now,
|
||||
)
|
||||
@@ -2220,8 +2221,8 @@
|
||||
</span><span class="kw">async fn </span>record_solve(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = OffsetDateTime::now_utc();
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_solved_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_solved_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"</span>,
|
||||
key,
|
||||
<span class="kw-2">&</span>now,
|
||||
)
|
||||
@@ -2235,8 +2236,8 @@
|
||||
</span><span class="kw">async fn </span>record_confirm(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = now_unix_time_stamp();
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_confirmed_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_confirmed_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?)"</span>,
|
||||
key,
|
||||
<span class="kw-2">&</span>now
|
||||
)
|
||||
@@ -2250,7 +2251,7 @@
|
||||
</span><span class="kw">async fn </span>fetch_config_fetched(<span class="kw-2">&</span><span class="self">self</span>, user: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Vec<i64>> {
|
||||
<span class="kw">let </span>records = <span class="macro">sqlx::query_as!</span>(
|
||||
Date,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_fetched_stats
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_fetched_stats
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT
|
||||
@@ -2261,7 +2262,7 @@
|
||||
user_id = (
|
||||
SELECT
|
||||
ID FROM mcaptcha_users WHERE name = ?))
|
||||
ORDER BY time DESC"</span>,
|
||||
ORDER BY time DESC"</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>user,
|
||||
)
|
||||
@@ -2276,7 +2277,7 @@
|
||||
</span><span class="kw">async fn </span>fetch_solve(<span class="kw-2">&</span><span class="self">self</span>, user: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Vec<i64>> {
|
||||
<span class="kw">let </span>records = <span class="macro">sqlx::query_as!</span>(
|
||||
Date,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_solved_stats
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_solved_stats
|
||||
WHERE config_id = (
|
||||
SELECT config_id FROM mcaptcha_config
|
||||
WHERE
|
||||
@@ -2285,7 +2286,7 @@
|
||||
user_id = (
|
||||
SELECT
|
||||
ID FROM mcaptcha_users WHERE name = ?))
|
||||
ORDER BY time DESC"</span>,
|
||||
ORDER BY time DESC"</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>user
|
||||
)
|
||||
@@ -2300,7 +2301,7 @@
|
||||
</span><span class="kw">async fn </span>fetch_confirm(<span class="kw-2">&</span><span class="self">self</span>, user: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Vec<i64>> {
|
||||
<span class="kw">let </span>records = <span class="macro">sqlx::query_as!</span>(
|
||||
Date,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_confirmed_stats
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_confirmed_stats
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config
|
||||
@@ -2310,7 +2311,7 @@
|
||||
user_id = (
|
||||
SELECT
|
||||
ID FROM mcaptcha_users WHERE name = ?))
|
||||
ORDER BY time DESC"</span>,
|
||||
ORDER BY time DESC"</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>user
|
||||
)
|
||||
@@ -2328,9 +2329,9 @@
|
||||
d: <span class="kw-2">&</span>CreatePerformanceAnalytics,
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_analytics
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_analytics
|
||||
(config_id, time, difficulty_factor, worker_type)
|
||||
VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?, ?, ?)"</span>,
|
||||
VALUES ((SELECT config_id FROM mcaptcha_config where captcha_key= ?), ?, ?, ?)"</span>,
|
||||
captcha_id,
|
||||
d.time <span class="kw">as </span>i32,
|
||||
d.difficulty_factor <span class="kw">as </span>i32,
|
||||
@@ -2369,7 +2370,7 @@
|
||||
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>c = <span class="macro">sqlx::query_as!</span>(
|
||||
P,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
id, time, difficulty_factor, worker_type
|
||||
FROM
|
||||
mcaptcha_pow_analytics
|
||||
@@ -2378,7 +2379,7 @@
|
||||
SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?
|
||||
)
|
||||
ORDER BY ID
|
||||
LIMIT ? OFFSET ?"</span>,
|
||||
LIMIT ? OFFSET ?"</span>,
|
||||
<span class="kw-2">&</span>captcha_id,
|
||||
limit <span class="kw">as </span>i64,
|
||||
offset <span class="kw">as </span>i64,
|
||||
@@ -2401,13 +2402,13 @@
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let </span>id = Uuid::new_v4();
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
INSERT INTO
|
||||
mcaptcha_psuedo_campaign_id (config_id, psuedo_id)
|
||||
VALUES (
|
||||
(SELECT config_id FROM mcaptcha_config WHERE captcha_key = (?)),
|
||||
?
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
captcha_id,
|
||||
<span class="kw-2">&</span>id.to_string(),
|
||||
)
|
||||
@@ -2425,11 +2426,11 @@
|
||||
) -> DBResult<String> {
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
PsuedoID,
|
||||
<span class="string">"SELECT psuedo_id FROM
|
||||
<span class="string">"SELECT psuedo_id FROM
|
||||
mcaptcha_psuedo_campaign_id
|
||||
WHERE
|
||||
config_id = (SELECT config_id FROM mcaptcha_config WHERE captcha_key = (?));
|
||||
"</span>,
|
||||
"</span>,
|
||||
captcha_id
|
||||
).fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
@@ -2449,7 +2450,7 @@
|
||||
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
ID,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
captcha_key
|
||||
FROM
|
||||
mcaptcha_config
|
||||
@@ -2461,7 +2462,7 @@
|
||||
mcaptcha_psuedo_campaign_id
|
||||
WHERE
|
||||
psuedo_id = ?
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
psuedo_id
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2475,25 +2476,25 @@
|
||||
campaign_id: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
DELETE FROM
|
||||
mcaptcha_psuedo_campaign_id
|
||||
WHERE config_id = (
|
||||
SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
campaign_id
|
||||
)
|
||||
.execute(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
DELETE FROM
|
||||
mcaptcha_pow_analytics
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?
|
||||
) "</span>,
|
||||
) "</span>,
|
||||
campaign_id
|
||||
)
|
||||
.execute(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2508,12 +2509,12 @@
|
||||
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
PsuedoID,
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
SELECT
|
||||
psuedo_id
|
||||
FROM
|
||||
mcaptcha_psuedo_campaign_id
|
||||
ORDER BY ID ASC LIMIT ? OFFSET ?;"</span>,
|
||||
ORDER BY ID ASC LIMIT ? OFFSET ?;"</span>,
|
||||
LIMIT <span class="kw">as </span>i64,
|
||||
offset <span class="kw">as </span>i64
|
||||
)
|
||||
@@ -2533,7 +2534,7 @@
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let </span>latest_nonce = latest_nonce <span class="kw">as </span>i64;
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_track_nonce SET nonce = ?
|
||||
<span class="string">"UPDATE mcaptcha_track_nonce SET nonce = ?
|
||||
WHERE level_id = (
|
||||
SELECT
|
||||
level_id
|
||||
@@ -2544,7 +2545,7 @@
|
||||
AND
|
||||
difficulty_factor = ?
|
||||
)
|
||||
AND nonce <= ?;"</span>,
|
||||
AND nonce <= ?;"</span>,
|
||||
latest_nonce,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor <span class="kw">as </span>i64,
|
||||
@@ -2573,7 +2574,7 @@
|
||||
) -> DBResult<X> {
|
||||
<span class="macro">sqlx::query_as!</span>(
|
||||
X,
|
||||
<span class="string">"SELECT nonce FROM mcaptcha_track_nonce
|
||||
<span class="string">"SELECT nonce FROM mcaptcha_track_nonce
|
||||
WHERE level_id = (
|
||||
SELECT
|
||||
level_id
|
||||
@@ -2583,7 +2584,7 @@
|
||||
config_id = (SELECT config_id FROM mcaptcha_config WHERE captcha_key = ?)
|
||||
AND
|
||||
difficulty_factor = ?
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor <span class="kw">as </span>i32,
|
||||
)
|
||||
@@ -2594,7 +2595,7 @@
|
||||
<span class="kw">let </span>res = inner_get_max_nonce(<span class="kw-2">&</span><span class="self">self</span>.pool, captcha_key, difficulty_factor).<span class="kw">await</span>;
|
||||
<span class="kw">if let </span><span class="prelude-val">Err</span>(DBError::CaptchaNotFound) = res {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO
|
||||
<span class="string">"INSERT INTO
|
||||
mcaptcha_track_nonce (level_id, nonce)
|
||||
VALUES ((
|
||||
SELECT
|
||||
@@ -2605,7 +2606,7 @@
|
||||
config_id = (SELECT config_id FROM mcaptcha_config WHERE captcha_key =?)
|
||||
AND
|
||||
difficulty_factor = ?
|
||||
), ?);"</span>,
|
||||
), ?);"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor <span class="kw">as </span>i32,
|
||||
<span class="number">0</span>,
|
||||
@@ -2629,14 +2630,14 @@
|
||||
count: <span class="prelude-ty">Option</span><i64>,
|
||||
}
|
||||
|
||||
<span class="comment">//"SELECT COUNT(*) FROM (SELECT difficulty_factor FROM mcaptcha_pow_analytics WHERE time <= ?) as count",
|
||||
<span class="comment">//"SELECT COUNT(*) FROM (SELECT difficulty_factor FROM mcaptcha_pow_analytics WHERE time <= ?) as count",
|
||||
</span><span class="kw">let </span>count = <span class="macro">sqlx::query_as!</span>(
|
||||
Count,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
COUNT(difficulty_factor) AS count
|
||||
FROM
|
||||
mcaptcha_pow_analytics
|
||||
WHERE time <= ?;"</span>,
|
||||
WHERE time <= ?;"</span>,
|
||||
duration <span class="kw">as </span>i32,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2659,13 +2660,13 @@
|
||||
|
||||
<span class="kw">match </span><span class="macro">sqlx::query_as!</span>(
|
||||
Difficulty,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
difficulty_factor
|
||||
FROM
|
||||
mcaptcha_pow_analytics
|
||||
WHERE
|
||||
time <= ?
|
||||
ORDER BY difficulty_factor ASC LIMIT 1 OFFSET ?;"</span>,
|
||||
ORDER BY difficulty_factor ASC LIMIT 1 OFFSET ?;"</span>,
|
||||
duration <span class="kw">as </span>i32,
|
||||
location <span class="kw">as </span>i64 - <span class="number">1</span>,
|
||||
)
|
||||
@@ -2694,7 +2695,7 @@
|
||||
}
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>inner_res = <span class="macro">sqlx::query_as!</span>(
|
||||
InnerEasyCaptcha,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic,
|
||||
mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic,
|
||||
mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,
|
||||
@@ -2712,7 +2713,7 @@
|
||||
ON
|
||||
mcaptcha_config.user_id = mcaptcha_users.ID
|
||||
ORDER BY mcaptcha_config.config_id
|
||||
LIMIT ? OFFSET ?"</span>,
|
||||
LIMIT ? OFFSET ?"</span>,
|
||||
limit <span class="kw">as </span>i64,
|
||||
offset <span class="kw">as </span>i64
|
||||
)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-postgres/src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_postgres" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-postgres/src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_postgres" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -65,16 +66,16 @@
|
||||
<span class="doccomment">/// map postgres errors to [DBError](DBError) types
|
||||
</span><span class="kw">pub fn </span>map_register_err(e: Error) -> DBError {
|
||||
<span class="kw">if let </span>Error::Database(err) = e {
|
||||
<span class="kw">if </span>err.code() == <span class="prelude-val">Some</span>(Cow::from(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">if </span>err.code() == <span class="prelude-val">Some</span>(Cow::from(<span class="string">"23505"</span>)) {
|
||||
<span class="kw">let </span>msg = err.message();
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, msg);
|
||||
<span class="kw">if </span>msg.contains(<span class="string">"mcaptcha_users_name_key"</span>) {
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, msg);
|
||||
<span class="kw">if </span>msg.contains(<span class="string">"mcaptcha_users_name_key"</span>) {
|
||||
DBError::UsernameTaken
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"mcaptcha_users_email_key"</span>) {
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"mcaptcha_users_email_key"</span>) {
|
||||
DBError::EmailTaken
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"mcaptcha_users_secret_key"</span>) {
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"mcaptcha_users_secret_key"</span>) {
|
||||
DBError::SecretTaken
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"mcaptcha_config_key_key"</span>) {
|
||||
} <span class="kw">else if </span>msg.contains(<span class="string">"mcaptcha_config_key_key"</span>) {
|
||||
DBError::CaptchaKeyTaken
|
||||
} <span class="kw">else </span>{
|
||||
DBError::DBError(Box::new(Error::Database(err)))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-postgres/src/lib.rs`."><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_postgres" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `db/db-sqlx-postgres/src/lib.rs`."><title>lib.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="db_sqlx_postgres" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -1493,7 +1494,7 @@
|
||||
<span class="attr">#[async_trait]
|
||||
</span><span class="kw">impl </span>Migrate <span class="kw">for </span>Database {
|
||||
<span class="kw">async fn </span>migrate(<span class="kw-2">&</span><span class="self">self</span>) -> DBResult<()> {
|
||||
<span class="macro">sqlx::migrate!</span>(<span class="string">"./migrations/"</span>)
|
||||
<span class="macro">sqlx::migrate!</span>(<span class="string">"./migrations/"</span>)
|
||||
.run(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
</span>.map_err(|e| DBError::DBError(Box::new(e)))<span class="question-mark">?</span>;
|
||||
@@ -1518,8 +1519,8 @@
|
||||
</span><span class="kw">async fn </span>register(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>Register) -> DBResult<()> {
|
||||
<span class="kw">let </span>res = <span class="kw">if let </span><span class="prelude-val">Some</span>(email) = <span class="kw-2">&</span>p.email {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"insert into mcaptcha_users
|
||||
(name , password, email, secret) values ($1, $2, $3, $4)"</span>,
|
||||
<span class="string">"insert into mcaptcha_users
|
||||
(name , password, email, secret) values ($1, $2, $3, $4)"</span>,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
<span class="kw-2">&</span>p.hash,
|
||||
<span class="kw-2">&</span>email,
|
||||
@@ -1529,8 +1530,8 @@
|
||||
.<span class="kw">await
|
||||
</span>} <span class="kw">else </span>{
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_users
|
||||
(name , password, secret) VALUES ($1, $2, $3)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_users
|
||||
(name , password, secret) VALUES ($1, $2, $3)"</span>,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
<span class="kw-2">&</span>p.hash,
|
||||
<span class="kw-2">&</span>p.secret,
|
||||
@@ -1544,7 +1545,7 @@
|
||||
|
||||
<span class="doccomment">/// delete a user
|
||||
</span><span class="kw">async fn </span>delete_user(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(<span class="string">"DELETE FROM mcaptcha_users WHERE name = ($1)"</span>, username)
|
||||
<span class="macro">sqlx::query!</span>(<span class="string">"DELETE FROM mcaptcha_users WHERE name = ($1)"</span>, username)
|
||||
.execute(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await
|
||||
</span>.map_err(|e| map_row_not_found_err(e, DBError::AccountNotFound))<span class="question-mark">?</span>;
|
||||
@@ -1554,7 +1555,7 @@
|
||||
<span class="doccomment">/// check if username exists
|
||||
</span><span class="kw">async fn </span>username_exists(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<bool> {
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE name = $1)"</span>,
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE name = $1)"</span>,
|
||||
username,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1577,7 +1578,7 @@
|
||||
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
Email,
|
||||
<span class="string">"SELECT email FROM mcaptcha_users WHERE name = $1"</span>,
|
||||
<span class="string">"SELECT email FROM mcaptcha_users WHERE name = $1"</span>,
|
||||
username
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1589,7 +1590,7 @@
|
||||
<span class="doccomment">/// check if email exists
|
||||
</span><span class="kw">async fn </span>email_exists(<span class="kw-2">&</span><span class="self">self</span>, email: <span class="kw-2">&</span>str) -> DBResult<bool> {
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE email = $1)"</span>,
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_users WHERE email = $1)"</span>,
|
||||
email
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1604,11 +1605,11 @@
|
||||
<span class="prelude-val">Ok</span>(resp)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update a user's email
|
||||
<span class="doccomment">/// update a user's email
|
||||
</span><span class="kw">async fn </span>update_email(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>UpdateEmail) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set email = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set email = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="kw-2">&</span>p.new_email,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
)
|
||||
@@ -1619,7 +1620,7 @@
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get a user's password
|
||||
<span class="doccomment">/// get a user's password
|
||||
</span><span class="kw">async fn </span>get_password(<span class="kw-2">&</span><span class="self">self</span>, l: <span class="kw-2">&</span>Login) -> DBResult<NameHash> {
|
||||
<span class="kw">struct </span>Password {
|
||||
name: String,
|
||||
@@ -1629,7 +1630,7 @@
|
||||
<span class="kw">let </span>rec = <span class="kw">match </span>l {
|
||||
Login::Username(u) => <span class="macro">sqlx::query_as!</span>(
|
||||
Password,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE name = ($1)"#</span>,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE name = ($1)"#</span>,
|
||||
u,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1638,7 +1639,7 @@
|
||||
|
||||
Login::Email(e) => <span class="macro">sqlx::query_as!</span>(
|
||||
Password,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE email = ($1)"#</span>,
|
||||
<span class="string">r#"SELECT name, password FROM mcaptcha_users WHERE email = ($1)"#</span>,
|
||||
e,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1654,11 +1655,11 @@
|
||||
<span class="prelude-val">Ok</span>(res)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update user's password
|
||||
<span class="doccomment">/// update user's password
|
||||
</span><span class="kw">async fn </span>update_password(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>NameHash) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set password = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set password = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="kw-2">&</span>p.hash,
|
||||
<span class="kw-2">&</span>p.username,
|
||||
)
|
||||
@@ -1672,8 +1673,8 @@
|
||||
<span class="doccomment">/// update username
|
||||
</span><span class="kw">async fn </span>update_username(<span class="kw-2">&</span><span class="self">self</span>, current: <span class="kw-2">&</span>str, new: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set name = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set name = $1
|
||||
WHERE name = $2"</span>,
|
||||
new,
|
||||
current,
|
||||
)
|
||||
@@ -1684,11 +1685,11 @@
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get a user's secret
|
||||
<span class="doccomment">/// get a user's secret
|
||||
</span><span class="kw">async fn </span>get_secret(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<Secret> {
|
||||
<span class="kw">let </span>secret = <span class="macro">sqlx::query_as!</span>(
|
||||
Secret,
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE name = ($1)"#</span>,
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE name = ($1)"#</span>,
|
||||
username,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1698,13 +1699,13 @@
|
||||
<span class="prelude-val">Ok</span>(secret)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get a user's secret from a captcha key
|
||||
<span class="doccomment">/// get a user's secret from a captcha key
|
||||
</span><span class="kw">async fn </span>get_secret_from_captcha(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<Secret> {
|
||||
<span class="kw">let </span>secret = <span class="macro">sqlx::query_as!</span>(
|
||||
Secret,
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE ID = (
|
||||
<span class="string">r#"SELECT secret FROM mcaptcha_users WHERE ID = (
|
||||
SELECT user_id FROM mcaptcha_config WHERE key = $1
|
||||
)"#</span>,
|
||||
)"#</span>,
|
||||
key,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1714,11 +1715,11 @@
|
||||
<span class="prelude-val">Ok</span>(secret)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update a user's secret
|
||||
<span class="doccomment">/// update a user's secret
|
||||
</span><span class="kw">async fn </span>update_secret(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, secret: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_users set secret = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_users set secret = $1
|
||||
WHERE name = $2"</span>,
|
||||
<span class="kw-2">&</span>secret,
|
||||
<span class="kw-2">&</span>username,
|
||||
)
|
||||
@@ -1732,9 +1733,9 @@
|
||||
<span class="doccomment">/// create new captcha
|
||||
</span><span class="kw">async fn </span>create_captcha(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, p: <span class="kw-2">&</span>CreateCaptcha) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_config
|
||||
<span class="string">"INSERT INTO mcaptcha_config
|
||||
(key, user_id, duration, name)
|
||||
VALUES ($1, (SELECT ID FROM mcaptcha_users WHERE name = $2), $3, $4)"</span>,
|
||||
VALUES ($1, (SELECT ID FROM mcaptcha_users WHERE name = $2), $3, $4)"</span>,
|
||||
p.key,
|
||||
username,
|
||||
p.duration <span class="kw">as </span>i32,
|
||||
@@ -1751,9 +1752,9 @@
|
||||
</span><span class="kw">async fn </span>get_captcha_config(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Captcha> {
|
||||
<span class="kw">let </span>captcha = <span class="macro">sqlx::query_as!</span>(
|
||||
InternaleCaptchaConfig,
|
||||
<span class="string">"SELECT config_id, duration, name, key from mcaptcha_config WHERE
|
||||
<span class="string">"SELECT config_id, duration, name, key from mcaptcha_config WHERE
|
||||
key = $1 AND
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2) "</span>,
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2) "</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>username,
|
||||
)
|
||||
@@ -1768,8 +1769,8 @@
|
||||
</span><span class="kw">async fn </span>get_all_user_captchas(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str) -> DBResult<Vec<Captcha>> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
InternaleCaptchaConfig,
|
||||
<span class="string">"SELECT key, name, config_id, duration FROM mcaptcha_config WHERE
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $1) "</span>,
|
||||
<span class="string">"SELECT key, name, config_id, duration FROM mcaptcha_config WHERE
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $1) "</span>,
|
||||
<span class="kw-2">&</span>username,
|
||||
)
|
||||
.fetch_all(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1783,16 +1784,16 @@
|
||||
<span class="prelude-val">Ok</span>(captchas)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update captcha metadata; doesn't change captcha key
|
||||
<span class="doccomment">/// update captcha metadata; doesn't change captcha key
|
||||
</span><span class="kw">async fn </span>update_captcha_metadata(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
username: <span class="kw-2">&</span>str,
|
||||
p: <span class="kw-2">&</span>CreateCaptcha,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_config SET name = $1, duration = $2
|
||||
<span class="string">"UPDATE mcaptcha_config SET name = $1, duration = $2
|
||||
WHERE user_id = (SELECT ID FROM mcaptcha_users WHERE name = $3)
|
||||
AND key = $4"</span>,
|
||||
AND key = $4"</span>,
|
||||
p.description,
|
||||
p.duration,
|
||||
username,
|
||||
@@ -1805,7 +1806,7 @@
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
|
||||
<span class="doccomment">/// update captcha key; doesn't change metadata
|
||||
<span class="doccomment">/// update captcha key; doesn't change metadata
|
||||
</span><span class="kw">async fn </span>update_captcha_key(
|
||||
<span class="kw-2">&</span><span class="self">self</span>,
|
||||
username: <span class="kw-2">&</span>str,
|
||||
@@ -1813,8 +1814,8 @@
|
||||
new_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_config SET key = $1
|
||||
WHERE key = $2 AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = $3)"</span>,
|
||||
<span class="string">"UPDATE mcaptcha_config SET key = $1
|
||||
WHERE key = $2 AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = $3)"</span>,
|
||||
new_key,
|
||||
old_key,
|
||||
username,
|
||||
@@ -1840,7 +1841,7 @@
|
||||
<span class="kw">let </span>difficulty_factor = level.difficulty_factor <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>visitor_threshold = level.visitor_threshold <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>fut = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_levels (
|
||||
<span class="string">"INSERT INTO mcaptcha_levels (
|
||||
difficulty_factor,
|
||||
visitor_threshold,
|
||||
config_id) VALUES (
|
||||
@@ -1848,7 +1849,7 @@
|
||||
SELECT config_id FROM mcaptcha_config WHERE
|
||||
key = ($3) AND user_id = (
|
||||
SELECT ID FROM mcaptcha_users WHERE name = $4
|
||||
)));"</span>,
|
||||
)));"</span>,
|
||||
difficulty_factor,
|
||||
visitor_threshold,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
@@ -1867,7 +1868,7 @@
|
||||
<span class="kw">let </span>difficulty_factor = level.difficulty_factor <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>visitor_threshold = level.visitor_threshold <span class="kw">as </span>i32;
|
||||
<span class="kw">let </span>fut = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO
|
||||
<span class="string">"INSERT INTO
|
||||
mcaptcha_track_nonce (level_id, nonce)
|
||||
VALUES ((
|
||||
SELECT
|
||||
@@ -1880,7 +1881,7 @@
|
||||
difficulty_factor = $2
|
||||
AND
|
||||
visitor_threshold = $3
|
||||
), $4);"</span>,
|
||||
), $4);"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor,
|
||||
visitor_threshold,
|
||||
@@ -1908,10 +1909,10 @@
|
||||
<span class="kw">match </span>username {
|
||||
<span class="prelude-val">Some</span>(username) => {
|
||||
<span class="kw">let </span>x = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (
|
||||
<span class="string">"SELECT EXISTS (
|
||||
SELECT 1 from mcaptcha_config WHERE key = $1
|
||||
AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2)
|
||||
)"</span>,
|
||||
)"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -1925,7 +1926,7 @@
|
||||
|
||||
<span class="prelude-val">None </span>=> {
|
||||
<span class="kw">let </span>x = <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)"</span>,
|
||||
<span class="string">"SELECT EXISTS (SELECT 1 from mcaptcha_config WHERE key = $1)"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -1947,13 +1948,13 @@
|
||||
captcha_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_levels
|
||||
<span class="string">"DELETE FROM mcaptcha_levels
|
||||
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>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -1967,9 +1968,9 @@
|
||||
<span class="doccomment">/// Delete captcha
|
||||
</span><span class="kw">async fn </span>delete_captcha(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, captcha_key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_config WHERE key = ($1)
|
||||
<span class="string">"DELETE FROM mcaptcha_config WHERE key = ($1)
|
||||
AND
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2)"</span>,
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2)"</span>,
|
||||
captcha_key,
|
||||
username,
|
||||
)
|
||||
@@ -1993,10 +1994,10 @@
|
||||
<span class="kw">let </span>levels = <span class="kw">match </span>username {
|
||||
<span class="prelude-val">None </span>=> <span class="macro">sqlx::query_as!</span>(
|
||||
I32Levels,
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config WHERE key = ($1)
|
||||
) ORDER BY difficulty_factor ASC;"</span>,
|
||||
) ORDER BY difficulty_factor ASC;"</span>,
|
||||
captcha_key,
|
||||
)
|
||||
.fetch_all(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2005,12 +2006,12 @@
|
||||
|
||||
<span class="prelude-val">Some</span>(username) => <span class="macro">sqlx::query_as!</span>(
|
||||
I32Levels,
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
<span class="string">"SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config WHERE key = ($1)
|
||||
AND user_id = (SELECT ID from mcaptcha_users WHERE name = $2)
|
||||
)
|
||||
ORDER BY difficulty_factor ASC;"</span>,
|
||||
ORDER BY difficulty_factor ASC;"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -2029,7 +2030,7 @@
|
||||
<span class="prelude-val">Ok</span>(new_levels)
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Get captcha's cooldown period
|
||||
<span class="doccomment">/// Get captcha's cooldown period
|
||||
</span><span class="kw">async fn </span>get_captcha_cooldown(<span class="kw-2">&</span><span class="self">self</span>, captcha_key: <span class="kw-2">&</span>str) -> DBResult<i32> {
|
||||
<span class="kw">struct </span>DurationResp {
|
||||
duration: i32,
|
||||
@@ -2037,8 +2038,8 @@
|
||||
|
||||
<span class="kw">let </span>resp = <span class="macro">sqlx::query_as!</span>(
|
||||
DurationResp,
|
||||
<span class="string">"SELECT duration FROM mcaptcha_config
|
||||
WHERE key = $1"</span>,
|
||||
<span class="string">"SELECT duration FROM mcaptcha_config
|
||||
WHERE key = $1"</span>,
|
||||
captcha_key,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2055,7 +2056,7 @@
|
||||
pattern: <span class="kw-2">&</span>TrafficPattern,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_sitekey_user_provided_avg_traffic (
|
||||
<span class="string">"INSERT INTO mcaptcha_sitekey_user_provided_avg_traffic (
|
||||
config_id,
|
||||
avg_traffic,
|
||||
peak_sustainable_traffic,
|
||||
@@ -2063,7 +2064,7 @@
|
||||
) VALUES (
|
||||
(SELECT config_id FROM mcaptcha_config WHERE key = ($1)
|
||||
AND user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2)
|
||||
), $3, $4, $5)"</span>,
|
||||
), $3, $4, $5)"</span>,
|
||||
<span class="comment">//payload.avg_traffic,
|
||||
</span>captcha_key,
|
||||
username,
|
||||
@@ -2085,7 +2086,7 @@
|
||||
) -> DBResult<TrafficPattern> {
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
InnerTraffic,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
avg_traffic,
|
||||
peak_sustainable_traffic,
|
||||
broke_my_site_traffic
|
||||
@@ -2108,7 +2109,7 @@
|
||||
NAME = $2
|
||||
)
|
||||
)
|
||||
"</span>,
|
||||
"</span>,
|
||||
captcha_key,
|
||||
username
|
||||
)
|
||||
@@ -2134,7 +2135,7 @@
|
||||
}
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>inner_res = <span class="macro">sqlx::query_as!</span>(
|
||||
InnerEasyCaptcha,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
mcaptcha_sitekey_user_provided_avg_traffic.avg_traffic,
|
||||
mcaptcha_sitekey_user_provided_avg_traffic.peak_sustainable_traffic,
|
||||
mcaptcha_sitekey_user_provided_avg_traffic.broke_my_site_traffic,
|
||||
@@ -2152,7 +2153,7 @@
|
||||
ON
|
||||
mcaptcha_config.user_id = mcaptcha_users.ID
|
||||
ORDER BY mcaptcha_config.config_id
|
||||
OFFSET $1 LIMIT $2; "</span>,
|
||||
OFFSET $1 LIMIT $2; "</span>,
|
||||
offset <span class="kw">as </span>i32,
|
||||
limit <span class="kw">as </span>i32
|
||||
)
|
||||
@@ -2185,7 +2186,7 @@
|
||||
captcha_key: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"DELETE FROM mcaptcha_sitekey_user_provided_avg_traffic
|
||||
<span class="string">"DELETE FROM mcaptcha_sitekey_user_provided_avg_traffic
|
||||
WHERE config_id = (
|
||||
SELECT config_id
|
||||
FROM
|
||||
@@ -2194,7 +2195,7 @@
|
||||
key = ($1)
|
||||
AND
|
||||
user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2)
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
captcha_key,
|
||||
username,
|
||||
)
|
||||
@@ -2208,14 +2209,14 @@
|
||||
</span><span class="kw">async fn </span>create_notification(<span class="kw-2">&</span><span class="self">self</span>, p: <span class="kw-2">&</span>AddNotification) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = now_unix_time_stamp();
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_notifications (
|
||||
<span class="string">"INSERT INTO mcaptcha_notifications (
|
||||
heading, message, tx, rx, received)
|
||||
VALUES (
|
||||
$1, $2,
|
||||
(SELECT ID FROM mcaptcha_users WHERE name = $3),
|
||||
(SELECT ID FROM mcaptcha_users WHERE name = $4),
|
||||
$5
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
p.heading,
|
||||
p.message,
|
||||
p.from,
|
||||
@@ -2236,7 +2237,7 @@
|
||||
) -> DBResult<Vec<Notification>> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>inner_notifications = <span class="macro">sqlx::query_file_as!</span>(
|
||||
InnerNotification,
|
||||
<span class="string">"./src/get_all_unread_notifications.sql"</span>,
|
||||
<span class="string">"./src/get_all_unread_notifications.sql"</span>,
|
||||
<span class="kw-2">&</span>username
|
||||
)
|
||||
.fetch_all(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2256,7 +2257,7 @@
|
||||
</span><span class="kw">async fn </span>mark_notification_read(<span class="kw-2">&</span><span class="self">self</span>, username: <span class="kw-2">&</span>str, id: i32) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query_file_as!</span>(
|
||||
Notification,
|
||||
<span class="string">"./src/mark_notification_read.sql"</span>,
|
||||
<span class="string">"./src/mark_notification_read.sql"</span>,
|
||||
id,
|
||||
<span class="kw-2">&</span>username
|
||||
)
|
||||
@@ -2271,8 +2272,8 @@
|
||||
</span><span class="kw">async fn </span>record_fetch(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = now_unix_time_stamp();
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_fetched_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_fetched_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2)"</span>,
|
||||
key,
|
||||
<span class="kw-2">&</span>now,
|
||||
)
|
||||
@@ -2286,8 +2287,8 @@
|
||||
</span><span class="kw">async fn </span>record_solve(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = OffsetDateTime::now_utc();
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_solved_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_solved_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2)"</span>,
|
||||
key,
|
||||
<span class="kw-2">&</span>now,
|
||||
)
|
||||
@@ -2301,8 +2302,8 @@
|
||||
</span><span class="kw">async fn </span>record_confirm(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> DBResult<()> {
|
||||
<span class="kw">let </span>now = now_unix_time_stamp();
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_confirmed_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2)"</span>,
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_confirmed_stats
|
||||
(config_id, time) VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2)"</span>,
|
||||
key,
|
||||
<span class="kw-2">&</span>now
|
||||
)
|
||||
@@ -2316,7 +2317,7 @@
|
||||
</span><span class="kw">async fn </span>fetch_config_fetched(<span class="kw-2">&</span><span class="self">self</span>, user: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Vec<i64>> {
|
||||
<span class="kw">let </span>records = <span class="macro">sqlx::query_as!</span>(
|
||||
Date,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_fetched_stats
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_fetched_stats
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT
|
||||
@@ -2327,7 +2328,7 @@
|
||||
user_id = (
|
||||
SELECT
|
||||
ID FROM mcaptcha_users WHERE name = $2))
|
||||
ORDER BY time DESC"</span>,
|
||||
ORDER BY time DESC"</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>user,
|
||||
)
|
||||
@@ -2342,7 +2343,7 @@
|
||||
</span><span class="kw">async fn </span>fetch_solve(<span class="kw-2">&</span><span class="self">self</span>, user: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Vec<i64>> {
|
||||
<span class="kw">let </span>records = <span class="macro">sqlx::query_as!</span>(
|
||||
Date,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_solved_stats
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_solved_stats
|
||||
WHERE config_id = (
|
||||
SELECT config_id FROM mcaptcha_config
|
||||
WHERE
|
||||
@@ -2351,7 +2352,7 @@
|
||||
user_id = (
|
||||
SELECT
|
||||
ID FROM mcaptcha_users WHERE name = $2))
|
||||
ORDER BY time DESC"</span>,
|
||||
ORDER BY time DESC"</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>user
|
||||
)
|
||||
@@ -2366,7 +2367,7 @@
|
||||
</span><span class="kw">async fn </span>fetch_confirm(<span class="kw-2">&</span><span class="self">self</span>, user: <span class="kw-2">&</span>str, key: <span class="kw-2">&</span>str) -> DBResult<Vec<i64>> {
|
||||
<span class="kw">let </span>records = <span class="macro">sqlx::query_as!</span>(
|
||||
Date,
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_confirmed_stats
|
||||
<span class="string">"SELECT time FROM mcaptcha_pow_confirmed_stats
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config
|
||||
@@ -2376,7 +2377,7 @@
|
||||
user_id = (
|
||||
SELECT
|
||||
ID FROM mcaptcha_users WHERE name = $2))
|
||||
ORDER BY time DESC"</span>,
|
||||
ORDER BY time DESC"</span>,
|
||||
<span class="kw-2">&</span>key,
|
||||
<span class="kw-2">&</span>user
|
||||
)
|
||||
@@ -2394,9 +2395,9 @@
|
||||
d: <span class="kw-2">&</span>CreatePerformanceAnalytics,
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_analytics
|
||||
<span class="string">"INSERT INTO mcaptcha_pow_analytics
|
||||
(config_id, time, difficulty_factor, worker_type)
|
||||
VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2, $3, $4)"</span>,
|
||||
VALUES ((SELECT config_id FROM mcaptcha_config WHERE key = $1), $2, $3, $4)"</span>,
|
||||
captcha_id,
|
||||
d.time <span class="kw">as </span>i32,
|
||||
d.difficulty_factor <span class="kw">as </span>i32,
|
||||
@@ -2435,7 +2436,7 @@
|
||||
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>c = <span class="macro">sqlx::query_as!</span>(
|
||||
P,
|
||||
<span class="string">"SELECT id, time, difficulty_factor, worker_type FROM mcaptcha_pow_analytics
|
||||
<span class="string">"SELECT id, time, difficulty_factor, worker_type FROM mcaptcha_pow_analytics
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT
|
||||
@@ -2445,7 +2446,7 @@
|
||||
)
|
||||
ORDER BY ID
|
||||
OFFSET $2 LIMIT $3
|
||||
"</span>,
|
||||
"</span>,
|
||||
<span class="kw-2">&</span>captcha_id,
|
||||
offset <span class="kw">as </span>i32,
|
||||
limit <span class="kw">as </span>i32
|
||||
@@ -2468,13 +2469,13 @@
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let </span>id = Uuid::new_v4();
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
INSERT INTO
|
||||
mcaptcha_psuedo_campaign_id (config_id, psuedo_id)
|
||||
VALUES (
|
||||
(SELECT config_id FROM mcaptcha_config WHERE key = ($1)),
|
||||
$2
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
captcha_id,
|
||||
<span class="kw-2">&</span>id.to_string(),
|
||||
)
|
||||
@@ -2492,11 +2493,11 @@
|
||||
) -> DBResult<String> {
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
PsuedoID,
|
||||
<span class="string">"SELECT psuedo_id FROM
|
||||
<span class="string">"SELECT psuedo_id FROM
|
||||
mcaptcha_psuedo_campaign_id
|
||||
WHERE
|
||||
config_id = (SELECT config_id FROM mcaptcha_config WHERE key = ($1));
|
||||
"</span>,
|
||||
"</span>,
|
||||
captcha_id
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2517,7 +2518,7 @@
|
||||
|
||||
<span class="kw">let </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
ID,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
key
|
||||
FROM
|
||||
mcaptcha_config
|
||||
@@ -2529,7 +2530,7 @@
|
||||
mcaptcha_psuedo_campaign_id
|
||||
WHERE
|
||||
psuedo_id = $1
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
psuedo_id
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2543,26 +2544,26 @@
|
||||
campaign_id: <span class="kw-2">&</span>str,
|
||||
) -> DBResult<()> {
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
DELETE FROM
|
||||
mcaptcha_psuedo_campaign_id
|
||||
WHERE config_id = (
|
||||
SELECT config_id FROM mcaptcha_config WHERE key = ($1)
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
campaign_id
|
||||
)
|
||||
.execute(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let _ </span>= <span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
DELETE FROM
|
||||
mcaptcha_pow_analytics
|
||||
WHERE
|
||||
config_id = (
|
||||
SELECT config_id FROM mcaptcha_config WHERE key = $1
|
||||
)
|
||||
"</span>,
|
||||
"</span>,
|
||||
campaign_id
|
||||
)
|
||||
.execute(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2578,12 +2579,12 @@
|
||||
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>res = <span class="macro">sqlx::query_as!</span>(
|
||||
PsuedoID,
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
SELECT
|
||||
psuedo_id
|
||||
FROM
|
||||
mcaptcha_psuedo_campaign_id
|
||||
ORDER BY ID ASC LIMIT $1 OFFSET $2;"</span>,
|
||||
ORDER BY ID ASC LIMIT $1 OFFSET $2;"</span>,
|
||||
LIMIT <span class="kw">as </span>i64,
|
||||
offset <span class="kw">as </span>i64
|
||||
)
|
||||
@@ -2602,7 +2603,7 @@
|
||||
latest_nonce: u32,
|
||||
) -> DBResult<()> {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"UPDATE mcaptcha_track_nonce SET nonce = $3
|
||||
<span class="string">"UPDATE mcaptcha_track_nonce SET nonce = $3
|
||||
WHERE level_id = (
|
||||
SELECT
|
||||
level_id
|
||||
@@ -2613,7 +2614,7 @@
|
||||
AND
|
||||
difficulty_factor = $2
|
||||
)
|
||||
AND nonce <= $3;"</span>,
|
||||
AND nonce <= $3;"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor <span class="kw">as </span>i32,
|
||||
latest_nonce <span class="kw">as </span>i32,
|
||||
@@ -2641,7 +2642,7 @@
|
||||
) -> DBResult<X> {
|
||||
<span class="macro">sqlx::query_as!</span>(
|
||||
X,
|
||||
<span class="string">"SELECT nonce FROM mcaptcha_track_nonce
|
||||
<span class="string">"SELECT nonce FROM mcaptcha_track_nonce
|
||||
WHERE level_id = (
|
||||
SELECT
|
||||
level_id
|
||||
@@ -2651,7 +2652,7 @@
|
||||
config_id = (SELECT config_id FROM mcaptcha_config WHERE key = ($1))
|
||||
AND
|
||||
difficulty_factor = $2
|
||||
);"</span>,
|
||||
);"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor <span class="kw">as </span>i32,
|
||||
)
|
||||
@@ -2663,7 +2664,7 @@
|
||||
<span class="kw">let </span>res = inner_get_max_nonce(<span class="kw-2">&</span><span class="self">self</span>.pool, captcha_key, difficulty_factor).<span class="kw">await</span>;
|
||||
<span class="kw">if let </span><span class="prelude-val">Err</span>(DBError::CaptchaNotFound) = res {
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO
|
||||
<span class="string">"INSERT INTO
|
||||
mcaptcha_track_nonce (level_id, nonce)
|
||||
VALUES ((
|
||||
SELECT
|
||||
@@ -2674,7 +2675,7 @@
|
||||
config_id = (SELECT config_id FROM mcaptcha_config WHERE key = ($1))
|
||||
AND
|
||||
difficulty_factor = $2
|
||||
), $3);"</span>,
|
||||
), $3);"</span>,
|
||||
<span class="kw-2">&</span>captcha_key,
|
||||
difficulty_factor <span class="kw">as </span>i32,
|
||||
<span class="number">0</span>,
|
||||
@@ -2700,7 +2701,7 @@
|
||||
|
||||
<span class="kw">let </span>count = <span class="macro">sqlx::query_as!</span>(
|
||||
Count,
|
||||
<span class="string">"SELECT COUNT(difficulty_factor) FROM mcaptcha_pow_analytics WHERE time <= $1;"</span>,
|
||||
<span class="string">"SELECT COUNT(difficulty_factor) FROM mcaptcha_pow_analytics WHERE time <= $1;"</span>,
|
||||
duration <span class="kw">as </span>i32,
|
||||
)
|
||||
.fetch_one(<span class="kw-2">&</span><span class="self">self</span>.pool)
|
||||
@@ -2723,13 +2724,13 @@
|
||||
|
||||
<span class="kw">match </span><span class="macro">sqlx::query_as!</span>(
|
||||
Difficulty,
|
||||
<span class="string">"SELECT
|
||||
<span class="string">"SELECT
|
||||
difficulty_factor
|
||||
FROM
|
||||
mcaptcha_pow_analytics
|
||||
WHERE
|
||||
time <= $1
|
||||
ORDER BY difficulty_factor ASC LIMIT 1 OFFSET $2;"</span>,
|
||||
ORDER BY difficulty_factor ASC LIMIT 1 OFFSET $2;"</span>,
|
||||
duration <span class="kw">as </span>i32,
|
||||
location <span class="kw">as </span>i64 - <span class="number">1</span>,
|
||||
)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/delete.rs`."><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/delete.rs`."><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -63,8 +64,8 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.delete"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.delete"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>delete_account(
|
||||
id: Identity,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/email.rs`."><title>email.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/email.rs`."><title>email.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -76,7 +77,7 @@
|
||||
<span class="kw">pub </span>email: String,
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.account.email_exists"</span>)]
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.account.email_exists"</span>)]
|
||||
</span><span class="kw">pub async fn </span>email_exists(
|
||||
payload: web::Json<AccountCheckPayload>,
|
||||
data: AppData,
|
||||
@@ -90,8 +91,8 @@
|
||||
|
||||
<span class="doccomment">/// update email
|
||||
</span><span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_email"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_email"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>set_email(
|
||||
id: Identity,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -91,26 +92,26 @@
|
||||
<span class="kw">pub mod </span>routes {
|
||||
|
||||
<span class="kw">pub struct </span>Account {
|
||||
<span class="kw">pub </span>delete: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>email_exists: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get_secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_email: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_password: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>username_exists: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_username: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>email_exists: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get_secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_email: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_password: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>username_exists: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_username: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Account {
|
||||
<span class="kw">pub const fn </span>new() -> Account {
|
||||
<span class="kw">let </span>get_secret = <span class="string">"/api/v1/account/secret/get"</span>;
|
||||
<span class="kw">let </span>update_secret = <span class="string">"/api/v1/account/secret/update"</span>;
|
||||
<span class="kw">let </span>delete = <span class="string">"/api/v1/account/delete"</span>;
|
||||
<span class="kw">let </span>email_exists = <span class="string">"/api/v1/account/email/exists"</span>;
|
||||
<span class="kw">let </span>username_exists = <span class="string">"/api/v1/account/username/exists"</span>;
|
||||
<span class="kw">let </span>update_username = <span class="string">"/api/v1/account/username/update"</span>;
|
||||
<span class="kw">let </span>update_email = <span class="string">"/api/v1/account/email/update"</span>;
|
||||
<span class="kw">let </span>update_password = <span class="string">"/api/v1/account/password/update"</span>;
|
||||
<span class="kw">let </span>get_secret = <span class="string">"/api/v1/account/secret/get"</span>;
|
||||
<span class="kw">let </span>update_secret = <span class="string">"/api/v1/account/secret/update"</span>;
|
||||
<span class="kw">let </span>delete = <span class="string">"/api/v1/account/delete"</span>;
|
||||
<span class="kw">let </span>email_exists = <span class="string">"/api/v1/account/email/exists"</span>;
|
||||
<span class="kw">let </span>username_exists = <span class="string">"/api/v1/account/username/exists"</span>;
|
||||
<span class="kw">let </span>update_username = <span class="string">"/api/v1/account/username/update"</span>;
|
||||
<span class="kw">let </span>update_email = <span class="string">"/api/v1/account/email/update"</span>;
|
||||
<span class="kw">let </span>update_password = <span class="string">"/api/v1/account/password/update"</span>;
|
||||
Account {
|
||||
delete,
|
||||
email_exists,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/password.rs`."><title>password.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/password.rs`."><title>password.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -245,8 +246,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_password"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_password"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>update_user_password(
|
||||
id: Identity,
|
||||
@@ -298,9 +299,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>update_password_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"updatepassuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword2"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"updatepassuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"updatepassuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword2"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"updatepassuser@a.com"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
@@ -310,7 +311,7 @@
|
||||
<span class="kw">let </span>cookies = <span class="macro">get_cookie!</span>(signin_resp);
|
||||
<span class="kw">let </span>app = <span class="macro">get_app!</span>(data).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let </span>new_password = <span class="string">"newpassword"</span>;
|
||||
<span class="kw">let </span>new_password = <span class="string">"newpassword"</span>;
|
||||
|
||||
<span class="kw">let </span>update_password = ChangePasswordReqest {
|
||||
password: PASSWORD.into(),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/secret.rs`."><title>secret.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/secret.rs`."><title>secret.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -64,8 +65,8 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.get_secret"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.get_secret"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>get_secret(id: Identity, data: AppData) -> ServiceResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>username = id.identity().unwrap();
|
||||
@@ -74,8 +75,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_secret"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_secret"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>update_user_secret(
|
||||
id: Identity,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/username.rs`."><title>username.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/account/username.rs`."><title>username.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -77,7 +78,7 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::errors::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.account.username_exists"</span>)]
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.account.username_exists"</span>)]
|
||||
</span><span class="kw">async fn </span>username_exists(
|
||||
payload: web::Json<AccountCheckPayload>,
|
||||
data: AppData,
|
||||
@@ -106,8 +107,8 @@
|
||||
|
||||
<span class="doccomment">/// update username
|
||||
</span><span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_username"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.account.update_username"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>set_username(
|
||||
id: Identity,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/auth.rs`."><title>auth.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/auth.rs`."><title>auth.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -207,16 +208,16 @@
|
||||
<span class="kw">use </span>actix_auth_middleware::GetLoginRoute;
|
||||
|
||||
<span class="kw">pub struct </span>Auth {
|
||||
<span class="kw">pub </span>logout: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>login: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>register: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>logout: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>login: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>register: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Auth {
|
||||
<span class="kw">pub const fn </span>new() -> Auth {
|
||||
<span class="kw">let </span>login = <span class="string">"/api/v1/signin"</span>;
|
||||
<span class="kw">let </span>logout = <span class="string">"/logout"</span>;
|
||||
<span class="kw">let </span>register = <span class="string">"/api/v1/signup"</span>;
|
||||
<span class="kw">let </span>login = <span class="string">"/api/v1/signin"</span>;
|
||||
<span class="kw">let </span>logout = <span class="string">"/logout"</span>;
|
||||
<span class="kw">let </span>register = <span class="string">"/api/v1/signup"</span>;
|
||||
Auth {
|
||||
logout,
|
||||
login,
|
||||
@@ -229,7 +230,7 @@
|
||||
<span class="kw">fn </span>get_login_route(<span class="kw-2">&</span><span class="self">self</span>, src: <span class="prelude-ty">Option</span><<span class="kw-2">&</span>str>) -> String {
|
||||
<span class="kw">if let </span><span class="prelude-val">Some</span>(redirect_to) = src {
|
||||
<span class="macro">format!</span>(
|
||||
<span class="string">"{}?redirect_to={}"</span>,
|
||||
<span class="string">"{}?redirect_to={}"</span>,
|
||||
<span class="self">self</span>.login,
|
||||
urlencoding::encode(redirect_to)
|
||||
)
|
||||
@@ -253,7 +254,7 @@
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||
</span><span class="kw">pub struct </span>Login {
|
||||
<span class="comment">// login accepts both username and email under "username field"
|
||||
<span class="comment">// login accepts both username and email under "username field"
|
||||
// TODO update all instances where login is used
|
||||
</span><span class="kw">pub </span>login: String,
|
||||
<span class="kw">pub </span>password: String,
|
||||
@@ -276,7 +277,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
<span class="kw">let </span>s = <span class="kw">if </span>payload.login.contains(<span class="string">'@'</span>) {
|
||||
<span class="kw">let </span>s = <span class="kw">if </span>payload.login.contains(<span class="string">'@'</span>) {
|
||||
data.db
|
||||
.get_password(<span class="kw-2">&</span>db_core::Login::Email(<span class="kw-2">&</span>payload.login))
|
||||
.<span class="kw">await</span><span class="question-mark">?
|
||||
@@ -336,7 +337,7 @@
|
||||
cfg.service(login);
|
||||
cfg.service(signout);
|
||||
}
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.auth.register"</span>)]
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.auth.register"</span>)]
|
||||
</span><span class="kw">async fn </span>register(
|
||||
payload: web::Json<runners::Register>,
|
||||
data: AppData,
|
||||
@@ -345,7 +346,7 @@
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok())
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.auth.login"</span>)]
|
||||
<span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.auth.login"</span>)]
|
||||
</span><span class="kw">async fn </span>login(
|
||||
id: Identity,
|
||||
payload: web::Json<runners::Login>,
|
||||
@@ -367,8 +368,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.auth.logout"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.auth.logout"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>signout(id: Identity) -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">if </span>id.identity().is_some() {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/create.rs`."><title>create.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/create.rs`."><title>create.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -134,8 +135,8 @@
|
||||
<span class="comment">// TODO redo mcaptcha table to include levels as json field
|
||||
// so that the whole thing can be added/udpaed in a single stroke
|
||||
</span><span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.create"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.create"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>create(
|
||||
payload: web::Json<CreateCaptcha>,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/delete.rs`."><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/delete.rs`."><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -67,8 +68,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.delete"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.delete"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>delete(
|
||||
payload: web::Json<DeleteCaptcha>,
|
||||
@@ -88,7 +89,7 @@
|
||||
data.db.delete_captcha(<span class="kw-2">&</span>username, <span class="kw-2">&</span>payload.key).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
|
||||
<span class="kw">if let </span><span class="prelude-val">Err</span>(err) = data.captcha.remove(RemoveCaptcha(payload.key)).<span class="kw">await </span>{
|
||||
<span class="macro">log::error!</span>(<span class="string">"Error while trying to remove captcha from cache {}"</span>, err);
|
||||
<span class="macro">log::error!</span>(<span class="string">"Error while trying to remove captcha from cache {}"</span>, err);
|
||||
}
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok())
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/easy.rs`."><title>easy.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/easy.rs`."><title>easy.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -557,15 +558,15 @@
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Easy {
|
||||
<span class="doccomment">/// easy is using defaults
|
||||
</span><span class="kw">pub </span>create: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
</span><span class="kw">pub </span>create: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Easy {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
create: <span class="string">"/api/v1/mcaptcha/add/easy"</span>,
|
||||
update: <span class="string">"/api/v1/mcaptcha/update/easy"</span>,
|
||||
create: <span class="string">"/api/v1/mcaptcha/add/easy"</span>,
|
||||
update: <span class="string">"/api/v1/mcaptcha/update/easy"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -577,13 +578,13 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Default, Serialize, Deserialize, Clone, Debug)]
|
||||
</span><span class="doccomment">/// User's traffic pattern; used in generating a captcha configuration
|
||||
</span><span class="doccomment">/// User's traffic pattern; used in generating a captcha configuration
|
||||
</span><span class="kw">pub struct </span>TrafficPatternRequest {
|
||||
<span class="doccomment">/// average traffic of user's website
|
||||
<span class="doccomment">/// average traffic of user's website
|
||||
</span><span class="kw">pub </span>avg_traffic: u32,
|
||||
<span class="doccomment">/// the peak traffic that the user's website can handle
|
||||
<span class="doccomment">/// the peak traffic that the user's website can handle
|
||||
</span><span class="kw">pub </span>peak_sustainable_traffic: u32,
|
||||
<span class="doccomment">/// traffic that bought the user's website down; optional
|
||||
<span class="doccomment">/// traffic that bought the user's website down; optional
|
||||
</span><span class="kw">pub </span>broke_my_site_traffic: <span class="prelude-ty">Option</span><u32>,
|
||||
<span class="doccomment">/// Captcha description
|
||||
</span><span class="kw">pub </span>description: String,
|
||||
@@ -713,8 +714,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.easy.create"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.easy.create"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>create(
|
||||
payload: web::Json<TrafficPatternRequest>,
|
||||
@@ -752,8 +753,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.easy.update"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.easy.update"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>update(
|
||||
payload: web::Json<UpdateTrafficPattern>,
|
||||
@@ -894,9 +895,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>easy_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"defaultuserconfgworks"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"defaultuserconfgworks@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"defaultuserconfgworks"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"defaultuserconfgworks@a.com"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/get.rs`."><title>get.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/get.rs`."><title>get.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -54,8 +55,8 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.get"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.get"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>get_captcha(
|
||||
payload: web::Json<MCaptchaDetails>,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -107,11 +108,11 @@
|
||||
<span class="kw">use </span><span class="kw">super</span>::stats::routes::Stats;
|
||||
|
||||
<span class="kw">pub struct </span>Captcha {
|
||||
<span class="kw">pub </span>create: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_key: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>create: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_key: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>easy: Easy,
|
||||
<span class="kw">pub </span>stats: Stats,
|
||||
}
|
||||
@@ -119,11 +120,11 @@
|
||||
<span class="kw">impl </span>Captcha {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
create: <span class="string">"/api/v1/mcaptcha/create"</span>,
|
||||
update: <span class="string">"/api/v1/mcaptcha/update"</span>,
|
||||
get: <span class="string">"/api/v1/mcaptcha/get"</span>,
|
||||
update_key: <span class="string">"/api/v1/mcaptcha/update/key"</span>,
|
||||
delete: <span class="string">"/api/v1/mcaptcha/delete"</span>,
|
||||
create: <span class="string">"/api/v1/mcaptcha/create"</span>,
|
||||
update: <span class="string">"/api/v1/mcaptcha/update"</span>,
|
||||
get: <span class="string">"/api/v1/mcaptcha/get"</span>,
|
||||
update_key: <span class="string">"/api/v1/mcaptcha/update/key"</span>,
|
||||
delete: <span class="string">"/api/v1/mcaptcha/delete"</span>,
|
||||
easy: Easy::new(),
|
||||
stats: Stats::new(),
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/stats.rs`."><title>stats.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/stats.rs`."><title>stats.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -55,13 +56,13 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Stats {
|
||||
<span class="kw">pub </span>get: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Stats {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
get: <span class="string">"/api/v1/mcaptcha/stats"</span>,
|
||||
get: <span class="string">"/api/v1/mcaptcha/stats"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -72,8 +73,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.stats.get"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.stats.get"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>get(
|
||||
payload: web::Json<StatsPayload>,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/update.rs`."><title>update.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mcaptcha/update.rs`."><title>update.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -235,8 +236,8 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.update_key"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.update_key"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>update_key(
|
||||
payload: web::Json<MCaptchaDetails>,
|
||||
@@ -286,8 +287,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.update"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.captcha.update"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>update_captcha(
|
||||
payload: web::Json<UpdateCaptcha>,
|
||||
@@ -341,7 +342,7 @@
|
||||
.<span class="kw">await
|
||||
</span>{
|
||||
<span class="macro">log::error!</span>(
|
||||
<span class="string">"Deleting captcha key {} while updating it, error: {:?}"</span>,
|
||||
<span class="string">"Deleting captcha key {} while updating it, error: {:?}"</span>,
|
||||
<span class="kw-2">&</span>payload.key,
|
||||
e
|
||||
);
|
||||
@@ -384,9 +385,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>update_and_get_mcaptcha_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"updateusermcaptcha"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"testupdateusermcaptcha@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"updateusermcaptcha"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"testupdateusermcaptcha@a.com"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
|
||||
@@ -416,7 +417,7 @@
|
||||
.to_request(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="comment">// if updated key doesn't exist in database, a non 200 result will bereturned
|
||||
<span class="comment">// if updated key doesn't exist in database, a non 200 result will bereturned
|
||||
</span><span class="macro">assert_eq!</span>(get_token_resp.status(), StatusCode::OK);
|
||||
|
||||
<span class="comment">// get stats
|
||||
@@ -428,7 +429,7 @@
|
||||
.to_request(),
|
||||
)
|
||||
.<span class="kw">await</span>;
|
||||
<span class="comment">// if updated key doesn't exist in database, a non 200 result will bereturned
|
||||
<span class="comment">// if updated key doesn't exist in database, a non 200 result will bereturned
|
||||
</span><span class="macro">assert_eq!</span>(get_statis_resp.status(), StatusCode::OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/meta.rs`."><title>meta.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/meta.rs`."><title>meta.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -156,28 +157,28 @@
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Builder, Serialize)]
|
||||
</span><span class="kw">pub struct </span>BuildDetails {
|
||||
<span class="kw">pub </span>version: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>git_commit_hash: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>version: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>git_commit_hash: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Meta {
|
||||
<span class="kw">pub </span>build_details: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>health: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>build_details: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>health: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Meta {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
build_details: <span class="string">"/api/v1/meta/build"</span>,
|
||||
health: <span class="string">"/api/v1/meta/health"</span>,
|
||||
build_details: <span class="string">"/api/v1/meta/build"</span>,
|
||||
health: <span class="string">"/api/v1/meta/health"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// emits build details of the bninary
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::V1_API_ROUTES.meta.build_details"</span>)]
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::V1_API_ROUTES.meta.build_details"</span>)]
|
||||
</span><span class="kw">async fn </span>build_details() -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">let </span>build = BuildDetails {
|
||||
version: VERSION,
|
||||
@@ -190,7 +191,7 @@
|
||||
</span><span class="doccomment">/// Health check return datatype
|
||||
</span><span class="kw">pub struct </span>Health {
|
||||
db: bool,
|
||||
<span class="attr">#[serde(skip_serializing_if = <span class="string">"Self::is_redis"</span>)]
|
||||
<span class="attr">#[serde(skip_serializing_if = <span class="string">"Self::is_redis"</span>)]
|
||||
</span>redis: <span class="prelude-ty">Option</span><bool>,
|
||||
}
|
||||
|
||||
@@ -201,7 +202,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// checks all components of the system
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::V1_API_ROUTES.meta.health"</span>)]
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::V1_API_ROUTES.meta.health"</span>)]
|
||||
</span><span class="kw">async fn </span>health(data: AppData) -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>resp_builder = HealthBuilder::default();
|
||||
resp_builder.redis(<span class="prelude-val">None</span>);
|
||||
@@ -264,7 +265,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>health_works(data: ArcData) {
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, V1_API_ROUTES.meta.health);
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, V1_API_ROUTES.meta.health);
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
<span class="kw">let </span>app = <span class="macro">get_app!</span>(data).<span class="kw">await</span>;
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/add.rs`."><title>add.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/add.rs`."><title>add.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -122,8 +123,8 @@
|
||||
|
||||
<span class="doccomment">/// route handler that adds a notification message
|
||||
</span><span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.notifications.add"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.notifications.add"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>add_notification(
|
||||
payload: web::Json<AddNotificationRequest>,
|
||||
@@ -131,7 +132,7 @@
|
||||
id: Identity,
|
||||
) -> ServiceResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>sender = id.identity().unwrap();
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
|
||||
</span><span class="kw">let </span>p = AddNotification {
|
||||
from: <span class="kw-2">&</span>sender,
|
||||
@@ -167,11 +168,11 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>notification_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME1: <span class="kw-2">&</span>str = <span class="string">"notifuser1"</span>;
|
||||
<span class="kw">const </span>NAME2: <span class="kw-2">&</span>str = <span class="string">"notiuser2"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL1: <span class="kw-2">&</span>str = <span class="string">"testnotification1@a.com"</span>;
|
||||
<span class="kw">const </span>EMAIL2: <span class="kw-2">&</span>str = <span class="string">"testnotification2@a.com"</span>;
|
||||
<span class="kw">const </span>NAME1: <span class="kw-2">&</span>str = <span class="string">"notifuser1"</span>;
|
||||
<span class="kw">const </span>NAME2: <span class="kw-2">&</span>str = <span class="string">"notiuser2"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL1: <span class="kw-2">&</span>str = <span class="string">"testnotification1@a.com"</span>;
|
||||
<span class="kw">const </span>EMAIL2: <span class="kw-2">&</span>str = <span class="string">"testnotification2@a.com"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
@@ -186,8 +187,8 @@
|
||||
|
||||
<span class="kw">let </span>msg = AddNotificationRequest {
|
||||
to: NAME2.into(),
|
||||
heading: <span class="string">"Test notification"</span>.into(),
|
||||
message: <span class="string">"Testing notifications with a dummy message"</span>.into(),
|
||||
heading: <span class="string">"Test notification"</span>.into(),
|
||||
message: <span class="string">"Testing notifications with a dummy message"</span>.into(),
|
||||
};
|
||||
|
||||
<span class="kw">let </span>send_notification_resp = test::call_service(
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/get.rs`."><title>get.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/get.rs`."><title>get.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -190,15 +191,15 @@
|
||||
|
||||
<span class="doccomment">/// route handler that gets all unread notifications
|
||||
</span><span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.notifications.get"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.notifications.get"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>get_notification(
|
||||
data: AppData,
|
||||
id: Identity,
|
||||
) -> ServiceResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>receiver = id.identity().unwrap();
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
|
||||
</span><span class="kw">let </span>notifications = data.db.get_all_unread_notifications(<span class="kw-2">&</span>receiver).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let </span>notifications = NotificationResp::from_notifications(notifications);
|
||||
@@ -228,13 +229,13 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>notification_get_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME1: <span class="kw-2">&</span>str = <span class="string">"notifuser12"</span>;
|
||||
<span class="kw">const </span>NAME2: <span class="kw-2">&</span>str = <span class="string">"notiuser22"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL1: <span class="kw-2">&</span>str = <span class="string">"testnotification12@a.com"</span>;
|
||||
<span class="kw">const </span>EMAIL2: <span class="kw-2">&</span>str = <span class="string">"testnotification22@a.com"</span>;
|
||||
<span class="kw">const </span>HEADING: <span class="kw-2">&</span>str = <span class="string">"testing notifications get"</span>;
|
||||
<span class="kw">const </span>MESSAGE: <span class="kw-2">&</span>str = <span class="string">"testing notifications get message"</span>;
|
||||
<span class="kw">const </span>NAME1: <span class="kw-2">&</span>str = <span class="string">"notifuser12"</span>;
|
||||
<span class="kw">const </span>NAME2: <span class="kw-2">&</span>str = <span class="string">"notiuser22"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL1: <span class="kw-2">&</span>str = <span class="string">"testnotification12@a.com"</span>;
|
||||
<span class="kw">const </span>EMAIL2: <span class="kw-2">&</span>str = <span class="string">"testnotification22@a.com"</span>;
|
||||
<span class="kw">const </span>HEADING: <span class="kw-2">&</span>str = <span class="string">"testing notifications get"</span>;
|
||||
<span class="kw">const </span>MESSAGE: <span class="kw-2">&</span>str = <span class="string">"testing notifications get message"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/mark_read.rs`."><title>mark_read.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/mark_read.rs`."><title>mark_read.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -157,8 +158,8 @@
|
||||
|
||||
<span class="doccomment">/// route handler that marks a notification read
|
||||
</span><span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::V1_API_ROUTES.notifications.mark_read"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
path = <span class="string">"crate::V1_API_ROUTES.notifications.mark_read"</span>,
|
||||
wrap = <span class="string">"crate::api::v1::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>mark_read(
|
||||
data: AppData,
|
||||
@@ -166,9 +167,9 @@
|
||||
id: Identity,
|
||||
) -> ServiceResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>receiver = id.identity().unwrap();
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
|
||||
// TODO get payload from path /api/v1/notifications/{id}/read"
|
||||
// TODO get payload from path /api/v1/notifications/{id}/read"
|
||||
</span>data.db
|
||||
.mark_notification_read(<span class="kw-2">&</span>receiver, payload.id)
|
||||
.<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
@@ -200,13 +201,13 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>notification_mark_read_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME1: <span class="kw-2">&</span>str = <span class="string">"notifuser122"</span>;
|
||||
<span class="kw">const </span>NAME2: <span class="kw-2">&</span>str = <span class="string">"notiuser222"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL1: <span class="kw-2">&</span>str = <span class="string">"testnotification122@a.com"</span>;
|
||||
<span class="kw">const </span>EMAIL2: <span class="kw-2">&</span>str = <span class="string">"testnotification222@a.com"</span>;
|
||||
<span class="kw">const </span>HEADING: <span class="kw-2">&</span>str = <span class="string">"testing notifications get"</span>;
|
||||
<span class="kw">const </span>MESSAGE: <span class="kw-2">&</span>str = <span class="string">"testing notifications get message"</span>;
|
||||
<span class="kw">const </span>NAME1: <span class="kw-2">&</span>str = <span class="string">"notifuser122"</span>;
|
||||
<span class="kw">const </span>NAME2: <span class="kw-2">&</span>str = <span class="string">"notiuser222"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL1: <span class="kw-2">&</span>str = <span class="string">"testnotification122@a.com"</span>;
|
||||
<span class="kw">const </span>EMAIL2: <span class="kw-2">&</span>str = <span class="string">"testnotification222@a.com"</span>;
|
||||
<span class="kw">const </span>HEADING: <span class="kw-2">&</span>str = <span class="string">"testing notifications get"</span>;
|
||||
<span class="kw">const </span>MESSAGE: <span class="kw-2">&</span>str = <span class="string">"testing notifications get message"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
delete_user(data, NAME1).<span class="kw">await</span>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/notifications/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -43,17 +44,17 @@
|
||||
<span class="kw">pub mod </span>routes {
|
||||
|
||||
<span class="kw">pub struct </span>Notifications {
|
||||
<span class="kw">pub </span>add: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>mark_read: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>add: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>mark_read: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Notifications {
|
||||
<span class="kw">pub const fn </span>new() -> Notifications {
|
||||
Notifications {
|
||||
add: <span class="string">"/api/v1/notifications/add"</span>,
|
||||
mark_read: <span class="string">"/api/v1/notifications/read"</span>,
|
||||
get: <span class="string">"/api/v1/notifications/get"</span>,
|
||||
add: <span class="string">"/api/v1/notifications/add"</span>,
|
||||
mark_read: <span class="string">"/api/v1/notifications/read"</span>,
|
||||
get: <span class="string">"/api/v1/notifications/get"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/get_config.rs`."><title>get_config.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/get_config.rs`."><title>get_config.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -312,7 +313,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// get PoW configuration for an mcaptcha key
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"V1_API_ROUTES.pow.get_config()"</span>)]
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"V1_API_ROUTES.pow.get_config()"</span>)]
|
||||
</span><span class="kw">pub async fn </span>get_config(
|
||||
payload: web::Json<GetConfigPayload>,
|
||||
data: AppData,
|
||||
@@ -332,7 +333,7 @@
|
||||
.captcha
|
||||
.get_pow(payload.key.clone())
|
||||
.<span class="kw">await
|
||||
</span>.expect(<span class="string">"mcaptcha should be initialized and ready to go"</span>);
|
||||
</span>.expect(<span class="string">"mcaptcha should be initialized and ready to go"</span>);
|
||||
<span class="prelude-val">Ok</span>(config.unwrap())
|
||||
}
|
||||
<span class="prelude-val">Err</span>(e) => <span class="prelude-val">Err</span>(e.into()),
|
||||
@@ -357,7 +358,7 @@
|
||||
/// This fn gets mcaptcha config from database, builds [Defense][libmcaptcha::Defense],
|
||||
/// creates [MCaptcha][libmcaptcha::MCaptcha] and adds it to [Master][libmcaptcha::Defense]
|
||||
</span><span class="kw">pub async fn </span>init_mcaptcha(data: <span class="kw-2">&</span>AppData, key: <span class="kw-2">&</span>str) -> ServiceResult<()> {
|
||||
<span class="macro">println!</span>(<span class="string">"Initializing captcha"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"Initializing captcha"</span>);
|
||||
<span class="comment">// get levels
|
||||
</span><span class="kw">let </span>levels = data.db.get_captcha_levels(<span class="prelude-val">None</span>, key).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let </span>duration = data.db.get_captcha_cooldown(key).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
@@ -376,12 +377,12 @@
|
||||
}
|
||||
|
||||
<span class="kw">let </span>defense = defense.build()<span class="question-mark">?</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"{:?}"</span>, defense);
|
||||
<span class="macro">println!</span>(<span class="string">"{:?}"</span>, defense);
|
||||
|
||||
<span class="comment">// create captcha
|
||||
</span><span class="kw">let </span>mcaptcha = MCaptchaBuilder::default()
|
||||
.defense(defense)
|
||||
<span class="comment">// leaky bucket algorithm's emission interval
|
||||
<span class="comment">// leaky bucket algorithm's emission interval
|
||||
</span>.duration(duration <span class="kw">as </span>u64)
|
||||
<span class="comment">// .cache(cache)
|
||||
</span>.build()
|
||||
@@ -422,9 +423,9 @@
|
||||
<span class="kw">use crate</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span>actix_web::test;
|
||||
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powusrworks"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"randomuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powusrworks"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"randomuser@a.com"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
@@ -441,7 +442,7 @@
|
||||
<span class="comment">// update and check changes
|
||||
|
||||
</span><span class="kw">let </span>url = V1_API_ROUTES.pow.get_config;
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, <span class="kw-2">&</span>url);
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, <span class="kw-2">&</span>url);
|
||||
<span class="kw">let </span>get_config_resp = test::call_service(
|
||||
<span class="kw-2">&</span>app,
|
||||
<span class="macro">post_request!</span>(<span class="kw-2">&</span>get_config_payload, V1_API_ROUTES.pow.get_config)
|
||||
@@ -478,9 +479,9 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::api::v1::mcaptcha::create::CreateCaptcha;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::api::v1::mcaptcha::create::MCaptchaDetails;
|
||||
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powusrworks2"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"randomuser2@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powusrworks2"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"randomuser2@a.com"</span>;
|
||||
<span class="kw">pub const </span>L1: Level = Level {
|
||||
difficulty_factor: <span class="number">10</span>,
|
||||
visitor_threshold: <span class="number">10</span>,
|
||||
@@ -507,7 +508,7 @@
|
||||
<span class="kw">let </span>create_captcha = CreateCaptcha {
|
||||
levels: levels.into(),
|
||||
duration: <span class="number">30</span>,
|
||||
description: <span class="string">"dummy"</span>.into(),
|
||||
description: <span class="string">"dummy"</span>.into(),
|
||||
publish_benchmarks: <span class="bool-val">true</span>,
|
||||
};
|
||||
|
||||
@@ -547,7 +548,7 @@
|
||||
|
||||
<span class="kw">let </span>config: PoWConfig = test::read_body_json(get_config_resp).<span class="kw">await</span>;
|
||||
<span class="macro">println!</span>(
|
||||
<span class="string">"[{count}] received difficulty_factor: {} prev difficulty_factor {}"</span>,
|
||||
<span class="string">"[{count}] received difficulty_factor: {} prev difficulty_factor {}"</span>,
|
||||
config.difficulty_factor, prev
|
||||
);
|
||||
<span class="kw">if </span>count == levels.len() - <span class="number">1 </span>{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -98,7 +99,7 @@
|
||||
<span class="kw">pub fn </span>services(cfg: <span class="kw-2">&mut </span>web::ServiceConfig) {
|
||||
<span class="kw">let </span>cors = actix_cors::Cors::default()
|
||||
.allow_any_origin()
|
||||
.allowed_methods(<span class="macro">vec!</span>[<span class="string">"POST"</span>, <span class="string">"GET"</span>])
|
||||
.allowed_methods(<span class="macro">vec!</span>[<span class="string">"POST"</span>, <span class="string">"GET"</span>])
|
||||
.allow_any_header()
|
||||
.max_age(<span class="number">3600</span>)
|
||||
.send_wildcard();
|
||||
@@ -115,10 +116,10 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>PoW {
|
||||
<span class="kw">pub </span>get_config: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>verify_pow: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>validate_captcha_token: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>scope: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>get_config: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>verify_pow: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>validate_captcha_token: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>scope: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="macro">macro_rules! </span>rm_scope {
|
||||
@@ -138,12 +139,12 @@
|
||||
<span class="comment">// date: 2021-11-29 16:31
|
||||
// commit: 6eb75d7
|
||||
// route 404s when scope contained trailing slash
|
||||
//let scope = "/api/v1/pow/";
|
||||
</span><span class="kw">let </span>scope = <span class="string">"/api/v1/pow"</span>;
|
||||
//let scope = "/api/v1/pow/";
|
||||
</span><span class="kw">let </span>scope = <span class="string">"/api/v1/pow"</span>;
|
||||
PoW {
|
||||
get_config: <span class="string">"/api/v1/pow/config"</span>,
|
||||
verify_pow: <span class="string">"/api/v1/pow/verify"</span>,
|
||||
validate_captcha_token: <span class="string">"/api/v1/pow/siteverify"</span>,
|
||||
get_config: <span class="string">"/api/v1/pow/config"</span>,
|
||||
verify_pow: <span class="string">"/api/v1/pow/verify"</span>,
|
||||
validate_captcha_token: <span class="string">"/api/v1/pow/siteverify"</span>,
|
||||
scope,
|
||||
}
|
||||
}
|
||||
@@ -161,9 +162,9 @@
|
||||
<span class="attr">#[test]
|
||||
</span><span class="kw">fn </span>scope_pow_works() {
|
||||
<span class="kw">let </span>pow = PoW::new();
|
||||
<span class="macro">assert_eq!</span>(pow.get_config(), <span class="string">"/config"</span>);
|
||||
<span class="macro">assert_eq!</span>(pow.verify_pow(), <span class="string">"/verify"</span>);
|
||||
<span class="macro">assert_eq!</span>(pow.validate_captcha_token(), <span class="string">"/siteverify"</span>);
|
||||
<span class="macro">assert_eq!</span>(pow.get_config(), <span class="string">"/config"</span>);
|
||||
<span class="macro">assert_eq!</span>(pow.verify_pow(), <span class="string">"/verify"</span>);
|
||||
<span class="macro">assert_eq!</span>(pow.validate_captcha_token(), <span class="string">"/siteverify"</span>);
|
||||
}
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/verify_pow.rs`."><title>verify_pow.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/verify_pow.rs`."><title>verify_pow.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -306,7 +307,7 @@
|
||||
|
||||
</span><span class="doccomment">/// route handler that verifies PoW and issues a solution token
|
||||
/// if verification is successful
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"V1_API_ROUTES.pow.verify_pow()"</span>)]
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"V1_API_ROUTES.pow.verify_pow()"</span>)]
|
||||
</span><span class="kw">pub async fn </span>verify_pow(
|
||||
req: HttpRequest,
|
||||
payload: web::Json<ApiWork>,
|
||||
@@ -319,7 +320,7 @@
|
||||
//
|
||||
// ref: https://docs.rs/actix-web/latest/actix_web/struct.HttpRequest.html#method.peer_addr
|
||||
</span><span class="attr">#[cfg(test)]
|
||||
</span><span class="kw">let </span>ip = <span class="string">"127.0.1.1"</span>.into();
|
||||
</span><span class="kw">let </span>ip = <span class="string">"127.0.1.1"</span>.into();
|
||||
|
||||
<span class="kw">let </span>key = payload.key.clone();
|
||||
<span class="kw">let </span>payload = payload.into_inner();
|
||||
@@ -379,9 +380,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>verify_analytics_pow_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powanalyticsuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"powanalyticsuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powanalyticsuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"powanalyticsuser@a.com"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
@@ -419,7 +420,7 @@
|
||||
nonce: work.nonce,
|
||||
key: token_key.key.clone(),
|
||||
time: <span class="prelude-val">Some</span>(<span class="number">100</span>),
|
||||
worker_type: <span class="prelude-val">Some</span>(<span class="string">"wasm"</span>.into()),
|
||||
worker_type: <span class="prelude-val">Some</span>(<span class="string">"wasm"</span>.into()),
|
||||
};
|
||||
|
||||
<span class="kw">let </span>pow_verify_resp = test::call_service(
|
||||
@@ -442,9 +443,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>verify_pow_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powverifyusr"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"verifyuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"powverifyusr"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"verifyuser@a.com"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
@@ -503,7 +504,7 @@
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(string_not_found.status(), StatusCode::BAD_REQUEST);
|
||||
<span class="kw">let </span>err: ErrorToResponse = test::read_body_json(string_not_found).<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(err.error, <span class="string">"Challenge: not found"</span>);
|
||||
<span class="macro">assert_eq!</span>(err.error, <span class="string">"Challenge: not found"</span>);
|
||||
|
||||
<span class="comment">// let pow_config_resp = test::call_service(
|
||||
// &app,
|
||||
@@ -511,7 +512,7 @@
|
||||
// )
|
||||
// .await;
|
||||
// assert_eq!(pow_config_resp.status(), StatusCode::OK);
|
||||
// I'm not checking for errors because changing work.result triggered
|
||||
// I'm not checking for errors because changing work.result triggered
|
||||
// InssuficientDifficulty, which is possible because libmcaptcha calculates
|
||||
// difficulty with the submitted result. Besides, this endpoint is merely
|
||||
// propagating errors from libmcaptcha and libmcaptcha has tests covering the
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/verify_token.rs`."><title>verify_token.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/pow/verify_token.rs`."><title>verify_token.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -234,7 +235,7 @@
|
||||
<span class="comment">// API keys are mcaptcha actor names
|
||||
|
||||
</span><span class="doccomment">/// route handler that validates a PoW solution token
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"V1_API_ROUTES.pow.validate_captcha_token()"</span>)]
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"V1_API_ROUTES.pow.validate_captcha_token()"</span>)]
|
||||
</span><span class="kw">pub async fn </span>validate_captcha_token(
|
||||
payload: web::Json<VerifyCaptchaResultPayload>,
|
||||
data: AppData,
|
||||
@@ -248,7 +249,7 @@
|
||||
<span class="kw">let </span>res = data.captcha.validate_verification_tokens(payload).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let </span>resp = CaptchaValidateResp { valid: res };
|
||||
data.stats.record_confirm(<span class="kw-2">&</span>data, <span class="kw-2">&</span>key).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="comment">//println!("{:?}", &payload);
|
||||
<span class="comment">//println!("{:?}", &payload);
|
||||
</span><span class="prelude-val">Ok</span>(HttpResponse::Ok().json(resp))
|
||||
}
|
||||
|
||||
@@ -278,13 +279,13 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>validate_captcha_token_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"enterprisetken"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"verifyuser@enter.com"</span>;
|
||||
<span class="kw">const </span>VERIFY_CAPTCHA_URL: <span class="kw-2">&</span>str = <span class="string">"/api/v1/pow/verify"</span>;
|
||||
<span class="kw">const </span>GET_URL: <span class="kw-2">&</span>str = <span class="string">"/api/v1/pow/config"</span>;
|
||||
<span class="kw">const </span>VERIFY_TOKEN_URL: <span class="kw-2">&</span>str = <span class="string">"/api/v1/pow/siteverify"</span>;
|
||||
<span class="comment">// const UPDATE_URL: &str = "/api/v1/mcaptcha/domain/token/duration/update";
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"enterprisetken"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"testingpas"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"verifyuser@enter.com"</span>;
|
||||
<span class="kw">const </span>VERIFY_CAPTCHA_URL: <span class="kw-2">&</span>str = <span class="string">"/api/v1/pow/verify"</span>;
|
||||
<span class="kw">const </span>GET_URL: <span class="kw-2">&</span>str = <span class="string">"/api/v1/pow/config"</span>;
|
||||
<span class="kw">const </span>VERIFY_TOKEN_URL: <span class="kw-2">&</span>str = <span class="string">"/api/v1/pow/siteverify"</span>;
|
||||
<span class="comment">// const UPDATE_URL: &str = "/api/v1/mcaptcha/domain/token/duration/update";
|
||||
|
||||
</span><span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/routes.rs`."><title>routes.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/routes.rs`."><title>routes.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/stats.rs`."><title>stats.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/stats.rs`."><title>stats.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -270,8 +271,8 @@
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Deserialize, Builder, Serialize)]
|
||||
</span><span class="kw">pub struct </span>BuildDetails {
|
||||
<span class="kw">pub </span>version: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>git_commit_hash: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>version: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>git_commit_hash: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
@@ -279,13 +280,13 @@
|
||||
|
||||
<span class="attr">#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Stats {
|
||||
<span class="kw">pub </span>percentile_benches: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>percentile_benches: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Stats {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
percentile_benches: <span class="string">"/api/v1/stats/analytics/percentile"</span>,
|
||||
percentile_benches: <span class="string">"/api/v1/stats/analytics/percentile"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -355,7 +356,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// Get difficulty factor with max time limit for percentile of stats
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.stats.percentile_benches"</span>)]
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.stats.percentile_benches"</span>)]
|
||||
</span><span class="kw">async fn </span>percentile_benches(
|
||||
data: AppData,
|
||||
payload: web::Json<PercentileReq>,
|
||||
@@ -403,12 +404,12 @@
|
||||
<span class="kw">async fn </span>stats_bench_work(data: ArcData) {
|
||||
<span class="kw">use </span><span class="kw">crate</span>::tests::<span class="kw-2">*</span>;
|
||||
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"benchstatsuesr"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"benchstatsuesr@testadminuser.com"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword2"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"benchstatsuesr"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"benchstatsuesr@testadminuser.com"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword2"</span>;
|
||||
|
||||
<span class="kw">const </span>DEVICE_USER_PROVIDED: <span class="kw-2">&</span>str = <span class="string">"foo"</span>;
|
||||
<span class="kw">const </span>DEVICE_SOFTWARE_RECOGNISED: <span class="kw-2">&</span>str = <span class="string">"Foobar.v2"</span>;
|
||||
<span class="kw">const </span>DEVICE_USER_PROVIDED: <span class="kw-2">&</span>str = <span class="string">"foo"</span>;
|
||||
<span class="kw">const </span>DEVICE_SOFTWARE_RECOGNISED: <span class="kw-2">&</span>str = <span class="string">"Foobar.v2"</span>;
|
||||
<span class="kw">const </span>THREADS: i32 = <span class="number">4</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
@@ -446,11 +447,11 @@
|
||||
</span>.unwrap();
|
||||
|
||||
<span class="kw">for </span>i <span class="kw">in </span><span class="number">1</span>..<span class="number">6 </span>{
|
||||
<span class="macro">println!</span>(<span class="string">"[{i}] Saving analytics"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"[{i}] Saving analytics"</span>);
|
||||
<span class="kw">let </span>analytics = db_core::CreatePerformanceAnalytics {
|
||||
time: i,
|
||||
difficulty_factor: i,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
};
|
||||
data.db.analysis_save(<span class="kw-2">&</span>key.key, <span class="kw-2">&</span>analytics).<span class="kw">await</span>.unwrap();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/survey.rs`."><title>survey.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/api/v1/survey.rs`."><title>survey.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -283,22 +284,22 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Survey {
|
||||
<span class="kw">pub </span>download: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>download: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Survey {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
download: <span class="string">"/api/v1/survey/takeout/{survey_id}/get"</span>,
|
||||
secret: <span class="string">"/api/v1/survey/secret"</span>,
|
||||
download: <span class="string">"/api/v1/survey/takeout/{survey_id}/get"</span>,
|
||||
secret: <span class="string">"/api/v1/survey/secret"</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub fn </span>get_download_route(<span class="kw-2">&</span><span class="self">self</span>, survey_id: <span class="kw-2">&</span>str, page: usize) -> String {
|
||||
<span class="macro">format!</span>(
|
||||
<span class="string">"{}?page={}"</span>,
|
||||
<span class="self">self</span>.download.replace(<span class="string">"{survey_id}"</span>, survey_id),
|
||||
<span class="string">"{}?page={}"</span>,
|
||||
<span class="self">self</span>.download.replace(<span class="string">"{survey_id}"</span>, survey_id),
|
||||
page
|
||||
)
|
||||
}
|
||||
@@ -311,7 +312,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// emits build details of the bninary
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::V1_API_ROUTES.survey.download"</span>)]
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::V1_API_ROUTES.survey.download"</span>)]
|
||||
</span><span class="kw">async fn </span>download(
|
||||
data: AppData,
|
||||
page: web::Query<Page>,
|
||||
@@ -339,7 +340,7 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// mCaptcha/survey upload secret route
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.survey.secret"</span>)]
|
||||
</span><span class="attr">#[my_codegen::post(path = <span class="string">"crate::V1_API_ROUTES.survey.secret"</span>)]
|
||||
</span><span class="kw">async fn </span>secret(
|
||||
data: AppData,
|
||||
payload: web::Json<SurveySecretUpload>,
|
||||
@@ -382,7 +383,7 @@
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
<span class="kw">let </span>app = <span class="macro">get_app!</span>(data).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let </span>survey_instance_url = <span class="string">"http://survey_registration_works.survey.example.org"</span>;
|
||||
<span class="kw">let </span>survey_instance_url = <span class="string">"http://survey_registration_works.survey.example.org"</span>;
|
||||
|
||||
<span class="kw">let </span>key = get_random(<span class="number">20</span>);
|
||||
|
||||
@@ -427,9 +428,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">pub async fn </span>survey_works(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"survetuseranalytics"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"survetuseranalytics@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"survetuseranalytics"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"survetuseranalytics@a.com"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
@@ -464,18 +465,18 @@
|
||||
</span>.unwrap();
|
||||
|
||||
<span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..<span class="number">60 </span>{
|
||||
<span class="macro">println!</span>(<span class="string">"[{i}] Saving analytics"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"[{i}] Saving analytics"</span>);
|
||||
<span class="kw">let </span>analytics = db_core::CreatePerformanceAnalytics {
|
||||
time: <span class="number">0</span>,
|
||||
difficulty_factor: <span class="number">0</span>,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
};
|
||||
data.db.analysis_save(<span class="kw-2">&</span>key.key, <span class="kw-2">&</span>analytics).<span class="kw">await</span>.unwrap();
|
||||
}
|
||||
|
||||
<span class="kw">for </span>p <span class="kw">in </span><span class="number">1</span>..<span class="number">3 </span>{
|
||||
<span class="kw">let </span>download_rotue = V1_API_ROUTES.survey.get_download_route(<span class="kw-2">&</span>psuedo_id, p);
|
||||
<span class="macro">println!</span>(<span class="string">"page={p}, download={download_rotue}"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"page={p}, download={download_rotue}"</span>);
|
||||
|
||||
<span class="kw">let </span>download_req = test::call_service(
|
||||
<span class="kw-2">&</span>app,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/data.rs`."><title>data.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/data.rs`."><title>data.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -462,9 +463,9 @@
|
||||
|
||||
<span class="attr">#[allow(unused_variables)]
|
||||
</span><span class="kw">let </span>init = thread::spawn(<span class="kw">move </span>|| {
|
||||
<span class="macro">log::info!</span>(<span class="string">"Initializing credential manager"</span>);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Initializing credential manager"</span>);
|
||||
c.init();
|
||||
<span class="macro">log::info!</span>(<span class="string">"Initialized credential manager"</span>);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Initialized credential manager"</span>);
|
||||
});
|
||||
|
||||
<span class="kw">let </span>db = <span class="kw">match </span>s.database.database_type {
|
||||
@@ -497,7 +498,7 @@
|
||||
<span class="kw">fn </span>get_mailer(s: <span class="kw-2">&</span>Settings) -> <span class="prelude-ty">Option</span><Mailer> {
|
||||
<span class="kw">if let </span><span class="prelude-val">Some</span>(smtp) = s.smtp.as_ref() {
|
||||
<span class="kw">let </span>creds =
|
||||
Credentials::new(smtp.username.to_string(), smtp.password.to_string()); <span class="comment">// "smtp_username".to_string(), "smtp_password".to_string());
|
||||
Credentials::new(smtp.username.to_string(), smtp.password.to_string()); <span class="comment">// "smtp_username".to_string(), "smtp_password".to_string());
|
||||
|
||||
</span><span class="kw">let </span>mailer: Mailer =
|
||||
AsyncSmtpTransport::<Tokio1Executor>::builder_dangerous(<span class="kw-2">&</span>smtp.url)
|
||||
@@ -510,7 +511,7 @@
|
||||
])
|
||||
.build();
|
||||
|
||||
<span class="comment">// let mailer: Mailer = AsyncSmtpTransport::<Tokio1Executor>::relay(&smtp.url) //"smtp.gmail.com")
|
||||
<span class="comment">// let mailer: Mailer = AsyncSmtpTransport::<Tokio1Executor>::relay(&smtp.url) //"smtp.gmail.com")
|
||||
// .unwrap()
|
||||
// .credentials(creds)
|
||||
// .build();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/date.rs`."><title>date.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/date.rs`."><title>date.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -122,9 +123,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Debug <span class="kw">for </span>Date {
|
||||
<span class="kw">fn </span>fmt(<span class="kw-2">&</span><span class="self">self</span>, f: <span class="kw-2">&mut </span>std::fmt::Formatter<<span class="lifetime">'_</span>>) -> std::fmt::Result {
|
||||
f.debug_struct(<span class="string">"Date"</span>)
|
||||
.field(<span class="string">"time"</span>, <span class="kw-2">&</span><span class="self">self</span>.print_date())
|
||||
<span class="kw">fn </span>fmt(<span class="kw-2">&</span><span class="self">self</span>, f: <span class="kw-2">&mut </span>std::fmt::Formatter<<span class="lifetime">'_</span>>) -> std::fmt::Result {
|
||||
f.debug_struct(<span class="string">"Date"</span>)
|
||||
.field(<span class="string">"time"</span>, <span class="kw-2">&</span><span class="self">self</span>.print_date())
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
@@ -142,15 +143,15 @@
|
||||
<span class="kw">let </span>difference = now - timestamp;
|
||||
|
||||
<span class="kw">if </span>difference >= <span class="number">3 </span>* WEEK {
|
||||
<span class="macro">format!</span>(<span class="string">"{}{}{}"</span>, date.year(), date.month(), date.date())
|
||||
<span class="macro">format!</span>(<span class="string">"{}{}{}"</span>, date.year(), date.month(), date.date())
|
||||
} <span class="kw">else if </span>(DAY..(<span class="number">3 </span>* WEEK)).contains(<span class="kw-2">&</span>difference) {
|
||||
<span class="macro">format!</span>(<span class="string">"{} days ago"</span>, date.hour())
|
||||
<span class="macro">format!</span>(<span class="string">"{} days ago"</span>, date.hour())
|
||||
} <span class="kw">else if </span>(HOUR..DAY).contains(<span class="kw-2">&</span>difference) {
|
||||
<span class="macro">format!</span>(<span class="string">"{} hours ago"</span>, date.hour())
|
||||
<span class="macro">format!</span>(<span class="string">"{} hours ago"</span>, date.hour())
|
||||
} <span class="kw">else if </span>(MINUTE..HOUR).contains(<span class="kw-2">&</span>difference) {
|
||||
<span class="macro">format!</span>(<span class="string">"{} minutes ago"</span>, date.minute())
|
||||
<span class="macro">format!</span>(<span class="string">"{} minutes ago"</span>, date.minute())
|
||||
} <span class="kw">else </span>{
|
||||
<span class="macro">format!</span>(<span class="string">"{} seconds ago"</span>, date.second())
|
||||
<span class="macro">format!</span>(<span class="string">"{} seconds ago"</span>, date.second())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +163,7 @@
|
||||
<span class="doccomment">/// print date
|
||||
</span><span class="kw">pub fn </span>date(<span class="kw-2">&</span><span class="self">self</span>) -> String {
|
||||
<span class="macro">format!</span>(
|
||||
<span class="string">"{}{}{}"</span>,
|
||||
<span class="string">"{}{}{}"</span>,
|
||||
<span class="self">self</span>.time.year(),
|
||||
<span class="self">self</span>.time.month(),
|
||||
<span class="self">self</span>.time.date()
|
||||
@@ -187,32 +188,32 @@
|
||||
};
|
||||
|
||||
<span class="kw">let </span>timestamp = n.time.unix_timestamp();
|
||||
<span class="macro">println!</span>(<span class="string">"timestamp: {}"</span>, timestamp);
|
||||
<span class="macro">println!</span>(<span class="string">"timestamp: {}"</span>, timestamp);
|
||||
|
||||
<span class="comment">// seconds test
|
||||
</span><span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
</span><span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
n.time = OffsetDateTime::from_unix_timestamp(timestamp - <span class="number">5</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
|
||||
<span class="comment">// minutes test
|
||||
</span>n.time = OffsetDateTime::from_unix_timestamp(timestamp - MINUTE * <span class="number">2</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
n.time = OffsetDateTime::from_unix_timestamp(timestamp - MINUTE * <span class="number">56</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
|
||||
<span class="comment">// hours test
|
||||
</span>n.time = OffsetDateTime::from_unix_timestamp(timestamp - HOUR).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
n.time = OffsetDateTime::from_unix_timestamp(timestamp - HOUR * <span class="number">23</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
|
||||
<span class="comment">// days test
|
||||
</span>n.time = OffsetDateTime::from_unix_timestamp(timestamp - <span class="number">2 </span>* WEEK).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"days ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"days ago"</span>));
|
||||
|
||||
<span class="comment">// date test
|
||||
</span>n.time = OffsetDateTime::from_unix_timestamp(timestamp - <span class="number">6 </span>* WEEK).unwrap();
|
||||
<span class="kw">let </span>date = <span class="macro">format!</span>(<span class="string">"{}{}{}"</span>, n.time.year(), n.time.month(), n.time.date());
|
||||
<span class="kw">let </span>date = <span class="macro">format!</span>(<span class="string">"{}{}{}"</span>, n.time.year(), n.time.month(), n.time.date());
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="kw-2">&</span>date))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/db.rs`."><title>db.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/db.rs`."><title>db.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/demo.rs`."><title>demo.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/demo.rs`."><title>demo.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -214,9 +215,9 @@
|
||||
<span class="kw">use </span>errors::<span class="kw-2">*</span>;
|
||||
|
||||
<span class="doccomment">/// Demo username
|
||||
</span><span class="kw">pub const </span>DEMO_USER: <span class="kw-2">&</span>str = <span class="string">"aaronsw"</span>;
|
||||
</span><span class="kw">pub const </span>DEMO_USER: <span class="kw-2">&</span>str = <span class="string">"aaronsw"</span>;
|
||||
<span class="doccomment">/// Demo password
|
||||
</span><span class="kw">pub const </span>DEMO_PASSWORD: <span class="kw-2">&</span>str = <span class="string">"password"</span>;
|
||||
</span><span class="kw">pub const </span>DEMO_PASSWORD: <span class="kw-2">&</span>str = <span class="string">"password"</span>;
|
||||
|
||||
<span class="kw">pub struct </span>DemoUser {
|
||||
tx: Sender<()>,
|
||||
@@ -253,7 +254,7 @@
|
||||
email: <span class="prelude-val">None</span>,
|
||||
};
|
||||
|
||||
<span class="macro">log::info!</span>(<span class="string">"Registering demo user"</span>);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Registering demo user"</span>);
|
||||
<span class="kw">match </span>register_runner(<span class="kw-2">&</span>register_payload, data).<span class="kw">await </span>{
|
||||
<span class="prelude-val">Err</span>(ServiceError::UsernameTaken) | <span class="prelude-val">Ok</span>(<span class="kw">_</span>) => <span class="prelude-val">Ok</span>(()),
|
||||
<span class="prelude-val">Err</span>(e) => <span class="prelude-val">Err</span>(e),
|
||||
@@ -264,7 +265,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>delete_demo_user(data: <span class="kw-2">&</span>AppData) -> ServiceResult<()> {
|
||||
<span class="macro">log::info!</span>(<span class="string">"Deleting demo user"</span>);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Deleting demo user"</span>);
|
||||
delete_user(DEMO_USER, data).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
@@ -300,11 +301,11 @@
|
||||
}
|
||||
|
||||
<span class="kw">if let </span><span class="prelude-val">Err</span>(e) = <span class="self">Self</span>::delete_demo_user(<span class="kw-2">&</span>data).<span class="kw">await </span>{
|
||||
<span class="macro">log::error!</span>(<span class="string">"Error while deleting demo user: {:?}"</span>, e);
|
||||
<span class="macro">log::error!</span>(<span class="string">"Error while deleting demo user: {:?}"</span>, e);
|
||||
}
|
||||
|
||||
<span class="kw">if let </span><span class="prelude-val">Err</span>(e) = <span class="self">Self</span>::register_demo_user(<span class="kw-2">&</span>data).<span class="kw">await </span>{
|
||||
<span class="macro">log::error!</span>(<span class="string">"Error while registering demo user: {:?}"</span>, e);
|
||||
<span class="macro">log::error!</span>(<span class="string">"Error while registering demo user: {:?}"</span>, e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/docs.rs`."><title>docs.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/docs.rs`."><title>docs.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -140,17 +141,17 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Docs {
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>spec: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>assets: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>spec: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>assets: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Docs {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Docs {
|
||||
home: <span class="string">"/docs/"</span>,
|
||||
spec: <span class="string">"/docs/openapi.yaml"</span>,
|
||||
assets: <span class="string">"/docs/{_:.*}"</span>,
|
||||
home: <span class="string">"/docs/"</span>,
|
||||
spec: <span class="string">"/docs/openapi.yaml"</span>,
|
||||
assets: <span class="string">"/docs/{_:.*}"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -161,7 +162,7 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(RustEmbed)]
|
||||
#[folder = <span class="string">"static/openapi/"</span>]
|
||||
#[folder = <span class="string">"static/openapi/"</span>]
|
||||
</span><span class="kw">struct </span>Asset;
|
||||
|
||||
<span class="kw">pub fn </span>handle_embedded_file(path: <span class="kw-2">&</span>str) -> HttpResponse {
|
||||
@@ -175,32 +176,32 @@
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::CacheControl(<span class="macro">vec!</span>[
|
||||
header::CacheDirective::Public,
|
||||
header::CacheDirective::Extension(<span class="string">"immutable"</span>.into(), <span class="prelude-val">None</span>),
|
||||
header::CacheDirective::Extension(<span class="string">"immutable"</span>.into(), <span class="prelude-val">None</span>),
|
||||
header::CacheDirective::MaxAge(CACHE_AGE),
|
||||
]))
|
||||
.content_type(from_path(path).first_or_octet_stream().as_ref())
|
||||
.body(body)
|
||||
}
|
||||
<span class="prelude-val">None </span>=> HttpResponse::NotFound().body(<span class="string">"404 Not Found"</span>),
|
||||
<span class="prelude-val">None </span>=> HttpResponse::NotFound().body(<span class="string">"404 Not Found"</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"DOCS.assets"</span>)]
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"DOCS.assets"</span>)]
|
||||
</span><span class="kw">async fn </span>dist(path: web::Path<String>) -> <span class="kw">impl </span>Responder {
|
||||
handle_embedded_file(<span class="kw-2">&</span>path)
|
||||
}
|
||||
<span class="kw">const </span>OPEN_API_SPEC: <span class="kw-2">&</span>str = <span class="macro">include_str!</span>(<span class="string">"../docs/openapi/dist/openapi.yaml"</span>);
|
||||
<span class="kw">const </span>OPEN_API_SPEC: <span class="kw-2">&</span>str = <span class="macro">include_str!</span>(<span class="string">"../docs/openapi/dist/openapi.yaml"</span>);
|
||||
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"DOCS.spec"</span>)]
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"DOCS.spec"</span>)]
|
||||
</span><span class="kw">async fn </span>spec() -> HttpResponse {
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/yaml"</span>)
|
||||
.content_type(<span class="string">"text/yaml"</span>)
|
||||
.body(OPEN_API_SPEC)
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"&DOCS.home[0..DOCS.home.len() -1]"</span>)]
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"&DOCS.home[0..DOCS.home.len() -1]"</span>)]
|
||||
</span><span class="kw">async fn </span>index() -> HttpResponse {
|
||||
handle_embedded_file(<span class="string">"index.html"</span>)
|
||||
handle_embedded_file(<span class="string">"index.html"</span>)
|
||||
}
|
||||
|
||||
<span class="attr">#[cfg(test)]
|
||||
@@ -213,7 +214,7 @@
|
||||
|
||||
<span class="attr">#[actix_rt::test]
|
||||
</span><span class="kw">async fn </span>docs_works() {
|
||||
<span class="kw">const </span>FILE: <span class="kw-2">&</span>str = <span class="string">"favicon-32x32.png"</span>;
|
||||
<span class="kw">const </span>FILE: <span class="kw-2">&</span>str = <span class="string">"favicon-32x32.png"</span>;
|
||||
|
||||
<span class="kw">let </span>app = test::init_service(
|
||||
App::new()
|
||||
@@ -238,7 +239,7 @@
|
||||
.<span class="kw">await</span>;
|
||||
<span class="macro">assert_eq!</span>(resp.status(), StatusCode::OK);
|
||||
|
||||
<span class="kw">let </span>uri = <span class="macro">format!</span>(<span class="string">"{}{}"</span>, DOCS.home, FILE);
|
||||
<span class="kw">let </span>uri = <span class="macro">format!</span>(<span class="string">"{}{}"</span>, DOCS.home, FILE);
|
||||
|
||||
<span class="kw">let </span>resp =
|
||||
test::call_service(<span class="kw-2">&</span>app, test::TestRequest::get().uri(<span class="kw-2">&</span>uri).to_request())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/easy.rs`."><title>easy.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/easy.rs`."><title>easy.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -252,7 +253,7 @@
|
||||
</span>.err()
|
||||
{
|
||||
<span class="macro">log::error!</span>(
|
||||
<span class="string">"Tried to update easy captcha configurations in background {:?}"</span>,
|
||||
<span class="string">"Tried to update easy captcha configurations in background {:?}"</span>,
|
||||
err
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/email/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/email/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/email/verification.rs`."><title>verification.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/email/verification.rs`."><title>verification.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -142,16 +143,16 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::errors::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::Data;
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Login"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Login"</span>;
|
||||
|
||||
<span class="attr">#[derive(Clone, TemplateOnce)]
|
||||
#[template(path = <span class="string">"email/verification/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>IndexPage<<span class="lifetime">'a</span>> {
|
||||
verification_link: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
#[template(path = <span class="string">"email/verification/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>IndexPage<<span class="lifetime">'a</span>> {
|
||||
verification_link: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> IndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">fn </span>new(verification_link: <span class="kw-2">&</span><span class="lifetime">'a </span>str) -> <span class="self">Self </span>{
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> IndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">fn </span>new(verification_link: <span class="kw-2">&</span><span class="lifetime">'a </span>str) -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{ verification_link }
|
||||
}
|
||||
}
|
||||
@@ -162,24 +163,24 @@
|
||||
verification_link: <span class="kw-2">&</span>str,
|
||||
) -> ServiceResult<()> {
|
||||
<span class="kw">if let </span><span class="prelude-val">Some</span>(smtp) = data.settings.smtp.as_ref() {
|
||||
<span class="kw">let </span>from = <span class="macro">format!</span>(<span class="string">"mCaptcha Admin <{}>"</span>, smtp.from);
|
||||
<span class="kw">let </span>reply_to = <span class="macro">format!</span>(<span class="string">"mCaptcha Admin <{}>"</span>, smtp.reply);
|
||||
<span class="kw">const </span>SUBJECT: <span class="kw-2">&</span>str = <span class="string">"[mCaptcha] Please verify your email"</span>;
|
||||
<span class="kw">let </span>from = <span class="macro">format!</span>(<span class="string">"mCaptcha Admin <{}>"</span>, smtp.from);
|
||||
<span class="kw">let </span>reply_to = <span class="macro">format!</span>(<span class="string">"mCaptcha Admin <{}>"</span>, smtp.reply);
|
||||
<span class="kw">const </span>SUBJECT: <span class="kw-2">&</span>str = <span class="string">"[mCaptcha] Please verify your email"</span>;
|
||||
|
||||
<span class="kw">let </span>plain_text = <span class="macro">format!</span>(
|
||||
<span class="string">"
|
||||
<span class="string">"
|
||||
Welcome to mCaptcha!
|
||||
|
||||
Please verify your email address to continue.
|
||||
|
||||
VERIFICATION LINK: {}
|
||||
|
||||
Please ignore this email if you weren't expecting it.
|
||||
Please ignore this email if you weren't expecting it.
|
||||
|
||||
With best regards,
|
||||
Admin
|
||||
instance: {}
|
||||
project website: {}"</span>,
|
||||
project website: {}"</span>,
|
||||
verification_link,
|
||||
<span class="kw-2">&</span>data.settings.server.domain,
|
||||
<span class="kw">crate</span>::PKG_HOMEPAGE
|
||||
@@ -231,8 +232,8 @@ project website: {}"</span>,
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>email_verification_works(data: <span class="kw">crate</span>::ArcData) {
|
||||
<span class="kw">const </span>TO_ADDR: <span class="kw-2">&</span>str = <span class="string">"Hello <realaravinth@localhost>"</span>;
|
||||
<span class="kw">const </span>VERIFICATION_LINK: <span class="kw-2">&</span>str = <span class="string">"https://localhost"</span>;
|
||||
<span class="kw">const </span>TO_ADDR: <span class="kw-2">&</span>str = <span class="string">"Hello <realaravinth@localhost>"</span>;
|
||||
<span class="kw">const </span>VERIFICATION_LINK: <span class="kw-2">&</span>str = <span class="string">"https://localhost"</span>;
|
||||
<span class="kw">let </span>settings = <span class="kw-2">&</span>data.settings;
|
||||
verification(<span class="kw-2">&</span>data, TO_ADDR, VERIFICATION_LINK)
|
||||
.<span class="kw">await
|
||||
@@ -240,7 +241,7 @@ project website: {}"</span>,
|
||||
|
||||
<span class="kw">let </span>client = Client::default();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>resp = client
|
||||
.get(<span class="string">"http://localhost:1080/email"</span>)
|
||||
.get(<span class="string">"http://localhost:1080/email"</span>)
|
||||
.send()
|
||||
.<span class="kw">await
|
||||
</span>.unwrap();
|
||||
@@ -248,11 +249,11 @@ project website: {}"</span>,
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data[<span class="number">0</span>];
|
||||
<span class="kw">let </span>smtp = settings.smtp.as_ref().unwrap();
|
||||
|
||||
<span class="kw">let </span>from_addr = <span class="kw-2">&</span>data[<span class="string">"headers"</span>][<span class="string">"from"</span>];
|
||||
<span class="kw">let </span>from_addr = <span class="kw-2">&</span>data[<span class="string">"headers"</span>][<span class="string">"from"</span>];
|
||||
|
||||
<span class="macro">assert!</span>(from_addr.to_string().contains(<span class="kw-2">&</span>smtp.from));
|
||||
|
||||
<span class="kw">let </span>body = <span class="kw-2">&</span>data[<span class="string">"html"</span>];
|
||||
<span class="kw">let </span>body = <span class="kw-2">&</span>data[<span class="string">"html"</span>];
|
||||
<span class="macro">assert!</span>(body.to_string().contains(VERIFICATION_LINK));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -356,7 +357,7 @@
|
||||
|
||||
<span class="kw">impl </span>std::cmp::PartialEq <span class="kw">for </span>DBErrorWrapper {
|
||||
<span class="kw">fn </span>eq(<span class="kw-2">&</span><span class="self">self</span>, other: <span class="kw-2">&</span><span class="self">Self</span>) -> bool {
|
||||
<span class="macro">format!</span>(<span class="string">"{}"</span>, <span class="self">self</span>.<span class="number">0</span>) == <span class="macro">format!</span>(<span class="string">"{}"</span>, other.<span class="number">0</span>)
|
||||
<span class="macro">format!</span>(<span class="string">"{}"</span>, <span class="self">self</span>.<span class="number">0</span>) == <span class="macro">format!</span>(<span class="string">"{}"</span>, other.<span class="number">0</span>)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,74 +370,74 @@
|
||||
<span class="attr">#[derive(Debug, Display, PartialEq, Error)]
|
||||
#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">pub enum </span>ServiceError {
|
||||
<span class="attr">#[display(fmt = <span class="string">"internal server error"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"internal server error"</span>)]
|
||||
</span>InternalServerError,
|
||||
|
||||
<span class="attr">#[display(
|
||||
fmt = <span class="string">"This server is is closed for registration. Contact admin if this is unexpecter"
|
||||
fmt = <span class="string">"This server is is closed for registration. Contact admin if this is unexpecter"
|
||||
</span>)]
|
||||
</span>ClosedForRegistration,
|
||||
|
||||
<span class="attr">#[display(fmt = <span class="string">"The value you entered for email is not an email"</span>)] </span><span class="comment">//405j
|
||||
<span class="attr">#[display(fmt = <span class="string">"The value you entered for email is not an email"</span>)] </span><span class="comment">//405j
|
||||
</span>NotAnEmail,
|
||||
<span class="attr">#[display(fmt = <span class="string">"The value you entered for URL is not a URL"</span>)] </span><span class="comment">//405j
|
||||
<span class="attr">#[display(fmt = <span class="string">"The value you entered for URL is not a URL"</span>)] </span><span class="comment">//405j
|
||||
</span>NotAUrl,
|
||||
|
||||
<span class="attr">#[display(fmt = <span class="string">"Wrong password"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Wrong password"</span>)]
|
||||
</span>WrongPassword,
|
||||
<span class="attr">#[display(fmt = <span class="string">"Username not found"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Username not found"</span>)]
|
||||
</span>UsernameNotFound,
|
||||
<span class="attr">#[display(fmt = <span class="string">"Account not found"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Account not found"</span>)]
|
||||
</span>AccountNotFound,
|
||||
|
||||
<span class="doccomment">/// when the value passed contains profainity
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Can't allow profanity in usernames"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Can't allow profanity in usernames"</span>)]
|
||||
</span>ProfainityError,
|
||||
<span class="doccomment">/// when the value passed contains blacklisted words
|
||||
/// see [blacklist](https://github.com/shuttlecraft/The-Big-Username-Blacklist)
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Username contains blacklisted words"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Username contains blacklisted words"</span>)]
|
||||
</span>BlacklistError,
|
||||
<span class="doccomment">/// when the value passed contains characters not present
|
||||
/// in [UsernameCaseMapped](https://tools.ietf.org/html/rfc8265#page-7)
|
||||
/// profile
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"username_case_mapped violation"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"username_case_mapped violation"</span>)]
|
||||
</span>UsernameCaseMappedError,
|
||||
|
||||
<span class="attr">#[display(fmt = <span class="string">"Passsword too short"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Passsword too short"</span>)]
|
||||
</span>PasswordTooShort,
|
||||
<span class="attr">#[display(fmt = <span class="string">"Username too long"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Username too long"</span>)]
|
||||
</span>PasswordTooLong,
|
||||
<span class="attr">#[display(fmt = <span class="string">"Passwords don't match"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Passwords don't match"</span>)]
|
||||
</span>PasswordsDontMatch,
|
||||
|
||||
<span class="doccomment">/// when the a username is already taken
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Username not available"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Username not available"</span>)]
|
||||
</span>UsernameTaken,
|
||||
|
||||
<span class="doccomment">/// email is already taken
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Email not available"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Email not available"</span>)]
|
||||
</span>EmailTaken,
|
||||
|
||||
<span class="doccomment">/// Unable to send email
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Unable to send email, contact admin"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Unable to send email, contact admin"</span>)]
|
||||
</span>UnableToSendEmail(SmtpErrorWrapper),
|
||||
|
||||
<span class="doccomment">/// token not found
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Token not found. Is token registered?"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Token not found. Is token registered?"</span>)]
|
||||
</span>TokenNotFound,
|
||||
|
||||
<span class="attr">#[display(fmt = <span class="string">"{}"</span>, _0)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"{}"</span>, _0)]
|
||||
</span>CaptchaError(CaptchaError),
|
||||
|
||||
<span class="attr">#[display(fmt = <span class="string">"{}"</span>, _0)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"{}"</span>, _0)]
|
||||
</span>DBError(DBErrorWrapper),
|
||||
|
||||
<span class="doccomment">/// captcha not found
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Captcha not found."</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Captcha not found."</span>)]
|
||||
</span>CaptchaNotFound,
|
||||
|
||||
<span class="doccomment">/// Traffic pattern not found
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Traffic pattern not found"</span>)]
|
||||
</span><span class="attr">#[display(fmt = <span class="string">"Traffic pattern not found"</span>)]
|
||||
</span>TrafficPatternNotFound,
|
||||
}
|
||||
|
||||
@@ -451,7 +452,7 @@
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">fn </span>error_response(<span class="kw-2">&</span><span class="self">self</span>) -> HttpResponse {
|
||||
HttpResponseBuilder::new(<span class="self">self</span>.status_code())
|
||||
.append_header((header::CONTENT_TYPE, <span class="string">"application/json; charset=UTF-8"</span>))
|
||||
.append_header((header::CONTENT_TYPE, <span class="string">"application/json; charset=UTF-8"</span>))
|
||||
.body(
|
||||
serde_json::to_string(<span class="kw-2">&</span>ErrorToResponse {
|
||||
error: <span class="self">self</span>.to_string(),
|
||||
@@ -484,7 +485,7 @@
|
||||
|
||||
ServiceError::TokenNotFound => StatusCode::NOT_FOUND,
|
||||
ServiceError::CaptchaError(e) => {
|
||||
<span class="macro">log::error!</span>(<span class="string">"{}"</span>, e);
|
||||
<span class="macro">log::error!</span>(<span class="string">"{}"</span>, e);
|
||||
<span class="kw">match </span>e {
|
||||
CaptchaError::MailboxError => StatusCode::INTERNAL_SERVER_ERROR,
|
||||
<span class="kw">_ </span>=> StatusCode::BAD_REQUEST,
|
||||
@@ -492,7 +493,7 @@
|
||||
}
|
||||
|
||||
ServiceError::UnableToSendEmail(e) => {
|
||||
<span class="macro">log::error!</span>(<span class="string">"{}"</span>, e.<span class="number">0</span>);
|
||||
<span class="macro">log::error!</span>(<span class="string">"{}"</span>, e.<span class="number">0</span>);
|
||||
StatusCode::INTERNAL_SERVER_ERROR
|
||||
}
|
||||
|
||||
@@ -521,7 +522,7 @@
|
||||
<span class="kw">impl </span>From<DBError> <span class="kw">for </span>ServiceError {
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">fn </span>from(e: DBError) -> ServiceError {
|
||||
<span class="macro">println!</span>(<span class="string">"from conversin: {}"</span>, e);
|
||||
<span class="macro">println!</span>(<span class="string">"from conversin: {}"</span>, e);
|
||||
<span class="kw">match </span>e {
|
||||
DBError::UsernameTaken => ServiceError::UsernameTaken,
|
||||
DBError::SecretTaken => ServiceError::InternalServerError,
|
||||
@@ -567,7 +568,7 @@
|
||||
</span><span class="kw">impl </span>From<RecvError> <span class="kw">for </span>ServiceError {
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">fn </span>from(e: RecvError) -> <span class="self">Self </span>{
|
||||
<span class="macro">log::error!</span>(<span class="string">"{:?}"</span>, e);
|
||||
<span class="macro">log::error!</span>(<span class="string">"{:?}"</span>, e);
|
||||
ServiceError::InternalServerError
|
||||
}
|
||||
}
|
||||
@@ -576,7 +577,7 @@
|
||||
</span><span class="kw">impl </span>From<MailboxError> <span class="kw">for </span>ServiceError {
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">fn </span>from(e: MailboxError) -> <span class="self">Self </span>{
|
||||
<span class="macro">log::error!</span>(<span class="string">"{:?}"</span>, e);
|
||||
<span class="macro">log::error!</span>(<span class="string">"{:?}"</span>, e);
|
||||
ServiceError::InternalServerError
|
||||
}
|
||||
}
|
||||
@@ -587,10 +588,10 @@
|
||||
<span class="attr">#[derive(Debug, Display, PartialEq, Error)]
|
||||
#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">pub enum </span>PageError {
|
||||
<span class="attr">#[display(fmt = <span class="string">"Something weng wrong: Internal server error"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"Something weng wrong: Internal server error"</span>)]
|
||||
</span>InternalServerError,
|
||||
|
||||
<span class="attr">#[display(fmt = <span class="string">"{}"</span>, _0)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"{}"</span>, _0)]
|
||||
</span>ServiceError(ServiceError),
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/main.rs`."><title>main.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/main.rs`."><title>main.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -275,40 +276,40 @@
|
||||
|
||||
<span class="macro">lazy_static! </span>{
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>SETTINGS: Settings = Settings::new().unwrap();
|
||||
<span class="comment">// pub static ref S: String = env::var("S").unwrap();
|
||||
<span class="comment">// pub static ref S: String = env::var("S").unwrap();
|
||||
</span><span class="kw">pub static </span><span class="kw-2">ref </span>FILES: FileMap = FileMap::new();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>JS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/bundle.js"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>CSS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/css/main.css"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>MOBILE_CSS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/css/mobile.css"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>JS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/bundle.js"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>CSS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/css/main.css"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>MOBILE_CSS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/css/mobile.css"</span>).unwrap();
|
||||
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>VERIFICATIN_WIDGET_JS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/verificationWidget.js"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>VERIFICATIN_WIDGET_CSS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/css/widget.css"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>VERIFICATIN_WIDGET_JS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/verificationWidget.js"</span>).unwrap();
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>VERIFICATIN_WIDGET_CSS: <span class="kw-2">&</span><span class="lifetime">'static </span>str =
|
||||
FILES.get(<span class="string">"./static/cache/bundle/css/widget.css"</span>).unwrap();
|
||||
|
||||
<span class="doccomment">/// points to source files matching build commit
|
||||
</span><span class="kw">pub static </span><span class="kw-2">ref </span>SOURCE_FILES_OF_INSTANCE: String = {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>url = SETTINGS.source_code.clone();
|
||||
<span class="kw">if </span>!url.ends_with(<span class="string">'/'</span>) {
|
||||
url.push(<span class="string">'/'</span>);
|
||||
<span class="kw">if </span>!url.ends_with(<span class="string">'/'</span>) {
|
||||
url.push(<span class="string">'/'</span>);
|
||||
}
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>base = url::Url::parse(<span class="kw-2">&</span>url).unwrap();
|
||||
base = base.join(<span class="string">"tree/"</span>).unwrap();
|
||||
base = base.join(<span class="string">"tree/"</span>).unwrap();
|
||||
base = base.join(GIT_COMMIT_HASH).unwrap();
|
||||
base.into()
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
<span class="kw">pub const </span>COMPILED_DATE: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"COMPILED_DATE"</span>);
|
||||
<span class="kw">pub const </span>GIT_COMMIT_HASH: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"GIT_HASH"</span>);
|
||||
<span class="kw">pub const </span>VERSION: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_VERSION"</span>);
|
||||
<span class="kw">pub const </span>PKG_NAME: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_NAME"</span>);
|
||||
<span class="kw">pub const </span>PKG_DESCRIPTION: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_DESCRIPTION"</span>);
|
||||
<span class="kw">pub const </span>PKG_HOMEPAGE: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_HOMEPAGE"</span>);
|
||||
<span class="kw">pub const </span>COMPILED_DATE: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"COMPILED_DATE"</span>);
|
||||
<span class="kw">pub const </span>GIT_COMMIT_HASH: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"GIT_HASH"</span>);
|
||||
<span class="kw">pub const </span>VERSION: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_VERSION"</span>);
|
||||
<span class="kw">pub const </span>PKG_NAME: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_NAME"</span>);
|
||||
<span class="kw">pub const </span>PKG_DESCRIPTION: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_DESCRIPTION"</span>);
|
||||
<span class="kw">pub const </span>PKG_HOMEPAGE: <span class="kw-2">&</span>str = <span class="macro">env!</span>(<span class="string">"CARGO_PKG_HOMEPAGE"</span>);
|
||||
|
||||
<span class="kw">pub const </span>CACHE_AGE: u32 = <span class="number">604800</span>;
|
||||
|
||||
@@ -320,13 +321,13 @@
|
||||
</span><span class="kw">async fn </span>main() -> std::io::Result<()> {
|
||||
<span class="kw">use </span>std::time::Duration;
|
||||
|
||||
<span class="kw">if </span>env::var(<span class="string">"RUST_LOG"</span>).is_err() {
|
||||
env::set_var(<span class="string">"RUST_LOG"</span>, <span class="string">"info"</span>);
|
||||
<span class="kw">if </span>env::var(<span class="string">"RUST_LOG"</span>).is_err() {
|
||||
env::set_var(<span class="string">"RUST_LOG"</span>, <span class="string">"info"</span>);
|
||||
}
|
||||
|
||||
pretty_env_logger::init();
|
||||
<span class="macro">info!</span>(
|
||||
<span class="string">"{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}"</span>,
|
||||
<span class="string">"{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}"</span>,
|
||||
PKG_NAME, PKG_DESCRIPTION, PKG_HOMEPAGE, VERSION, GIT_COMMIT_HASH
|
||||
);
|
||||
|
||||
@@ -364,14 +365,14 @@
|
||||
}
|
||||
|
||||
<span class="kw">let </span>ip = settings.server.get_ip();
|
||||
<span class="macro">println!</span>(<span class="string">"Starting server on: http://{ip}"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"Starting server on: http://{ip}"</span>);
|
||||
|
||||
HttpServer::new(<span class="kw">move </span>|| {
|
||||
App::new()
|
||||
.wrap(actix_middleware::Logger::default())
|
||||
.wrap(
|
||||
actix_middleware::DefaultHeaders::new()
|
||||
.add((<span class="string">"Permissions-Policy"</span>, <span class="string">"interest-cohort=()"</span>)),
|
||||
.add((<span class="string">"Permissions-Policy"</span>, <span class="string">"interest-cohort=()"</span>)),
|
||||
)
|
||||
.wrap(get_identity_service(<span class="kw-2">&</span>settings))
|
||||
.wrap(actix_middleware::Compress::default())
|
||||
@@ -411,7 +412,7 @@
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">pub fn </span>get_json_err() -> JsonConfig {
|
||||
JsonConfig::default().error_handler(|err, <span class="kw">_</span>| {
|
||||
<span class="comment">//debug!("JSON deserialization error: {:?}", &err);
|
||||
<span class="comment">//debug!("JSON deserialization error: {:?}", &err);
|
||||
</span>InternalError::new(err, StatusCode::BAD_REQUEST).into()
|
||||
})
|
||||
}
|
||||
@@ -423,7 +424,7 @@
|
||||
<span class="kw">let </span>cookie_secret = <span class="kw-2">&</span>settings.server.cookie_secret;
|
||||
IdentityService::new(
|
||||
CookieIdentityPolicy::new(cookie_secret.as_bytes())
|
||||
.name(<span class="string">"Authorization"</span>)
|
||||
.name(<span class="string">"Authorization"</span>)
|
||||
<span class="comment">//TODO change cookie age
|
||||
</span>.max_age_secs(<span class="number">216000</span>)
|
||||
.domain(<span class="kw-2">&</span>settings.server.domain)
|
||||
@@ -438,7 +439,7 @@
|
||||
<span class="macro">assert_eq!</span>(
|
||||
<span class="kw-2">&*</span><span class="kw">crate</span>::SOURCE_FILES_OF_INSTANCE,
|
||||
<span class="kw-2">&</span><span class="macro">format!</span>(
|
||||
<span class="string">"https://github.com/mCaptcha/mCaptcha/tree/{}"</span>,
|
||||
<span class="string">"https://github.com/mCaptcha/mCaptcha/tree/{}"</span>,
|
||||
<span class="kw">crate</span>::GIT_COMMIT_HASH
|
||||
)
|
||||
);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/login.rs`."><title>login.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/login.rs`."><title>login.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -44,9 +45,9 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::PAGES;
|
||||
|
||||
<span class="attr">#[derive(Clone, TemplateOnce)]
|
||||
#[template(path = <span class="string">"auth/login/index.html"</span>)]
|
||||
#[template(path = <span class="string">"auth/login/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>IndexPage;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Login"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Login"</span>;
|
||||
|
||||
<span class="kw">impl </span>Default <span class="kw">for </span>IndexPage {
|
||||
<span class="kw">fn </span>default() -> <span class="self">Self </span>{
|
||||
@@ -58,10 +59,10 @@
|
||||
<span class="kw">static </span><span class="kw-2">ref </span>INDEX: String = IndexPage.render_once().unwrap();
|
||||
}
|
||||
|
||||
<span class="attr">#[get(path = <span class="string">"PAGES.auth.login"</span>)]
|
||||
<span class="attr">#[get(path = <span class="string">"PAGES.auth.login"</span>)]
|
||||
</span><span class="kw">pub async fn </span>login() -> <span class="kw">impl </span>Responder {
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>INDEX)
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -65,18 +66,18 @@
|
||||
<span class="kw">use </span>actix_auth_middleware::GetLoginRoute;
|
||||
|
||||
<span class="kw">pub struct </span>Auth {
|
||||
<span class="kw">pub </span>login: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>join: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>login: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>join: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
<span class="kw">impl </span>Auth {
|
||||
<span class="kw">pub const fn </span>new() -> Auth {
|
||||
Auth {
|
||||
login: <span class="string">"/login"</span>,
|
||||
join: <span class="string">"/join"</span>,
|
||||
login: <span class="string">"/login"</span>,
|
||||
join: <span class="string">"/join"</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">2</span>] {
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">2</span>] {
|
||||
<span class="kw">const </span>AUTH: Auth = Auth::new();
|
||||
[AUTH.login, AUTH.join]
|
||||
}
|
||||
@@ -86,7 +87,7 @@
|
||||
<span class="kw">fn </span>get_login_route(<span class="kw-2">&</span><span class="self">self</span>, src: <span class="prelude-ty">Option</span><<span class="kw-2">&</span>str>) -> String {
|
||||
<span class="kw">if let </span><span class="prelude-val">Some</span>(redirect_to) = src {
|
||||
<span class="macro">format!</span>(
|
||||
<span class="string">"{}?redirect_to={}"</span>,
|
||||
<span class="string">"{}?redirect_to={}"</span>,
|
||||
<span class="self">self</span>.login,
|
||||
urlencoding::encode(redirect_to)
|
||||
)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/register.rs`."><title>register.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/register.rs`."><title>register.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -39,10 +40,10 @@
|
||||
<span class="kw">use </span>sailfish::TemplateOnce;
|
||||
|
||||
<span class="attr">#[derive(Clone, TemplateOnce)]
|
||||
#[template(path = <span class="string">"auth/register/index.html"</span>)]
|
||||
#[template(path = <span class="string">"auth/register/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>IndexPage;
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Join"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Join"</span>;
|
||||
|
||||
<span class="kw">impl </span>Default <span class="kw">for </span>IndexPage {
|
||||
<span class="kw">fn </span>default() -> <span class="self">Self </span>{
|
||||
@@ -54,10 +55,10 @@
|
||||
<span class="kw">static </span><span class="kw-2">ref </span>INDEX: String = IndexPage.render_once().unwrap();
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"crate::PAGES.auth.join"</span>)]
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"crate::PAGES.auth.join"</span>)]
|
||||
</span><span class="kw">pub async fn </span>join() -> <span class="kw">impl </span>Responder {
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>INDEX)
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/sudo.rs`."><title>sudo.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/auth/sudo.rs`."><title>sudo.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -42,25 +43,25 @@
|
||||
<span class="kw">use </span>sailfish::TemplateOnce;
|
||||
|
||||
<span class="attr">#[derive(Clone, TemplateOnce)]
|
||||
#[template(path = <span class="string">"auth/sudo/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>SudoPage<<span class="lifetime">'a</span>, K, V>
|
||||
#[template(path = <span class="string">"auth/sudo/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>SudoPage<<span class="lifetime">'a</span>, K, V>
|
||||
<span class="kw">where
|
||||
</span>K: Display + Render,
|
||||
V: Display + Render,
|
||||
{
|
||||
url: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
url: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
data: <span class="prelude-ty">Option</span><Vec<(K, V)>>,
|
||||
}
|
||||
|
||||
<span class="kw">pub const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Confirm Access"</span>;
|
||||
<span class="kw">pub const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Confirm Access"</span>;
|
||||
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>, K, V> SudoPage<<span class="lifetime">'a</span>, K, V>
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>, K, V> SudoPage<<span class="lifetime">'a</span>, K, V>
|
||||
<span class="kw">where
|
||||
</span>K: Display + Render,
|
||||
V: Display + Render,
|
||||
{
|
||||
<span class="comment">//pub fn new(url: &'a str, data: Option<Vec<(&'a str, &'a str)>>) -> Self {
|
||||
</span><span class="kw">pub fn </span>new(url: <span class="kw-2">&</span><span class="lifetime">'a </span>str, data: <span class="prelude-ty">Option</span><Vec<(K, V)>>) -> <span class="self">Self </span>{
|
||||
<span class="comment">//pub fn new(url: &'a str, data: Option<Vec<(&'a str, &'a str)>>) -> Self {
|
||||
</span><span class="kw">pub fn </span>new(url: <span class="kw-2">&</span><span class="lifetime">'a </span>str, data: <span class="prelude-ty">Option</span><Vec<(K, V)>>) -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{ url, data }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/errors.rs`."><title>errors.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -118,46 +119,46 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::errors::PageError;
|
||||
|
||||
<span class="attr">#[derive(Clone, TemplateOnce)]
|
||||
#[template(path = <span class="string">"errors/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>ErrorPage<<span class="lifetime">'a</span>> {
|
||||
title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
message: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
#[template(path = <span class="string">"errors/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>ErrorPage<<span class="lifetime">'a</span>> {
|
||||
title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
message: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Error"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Error"</span>;
|
||||
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> ErrorPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">fn </span>new(title: <span class="kw-2">&</span><span class="lifetime">'a </span>str, message: <span class="kw-2">&</span><span class="lifetime">'a </span>str) -> <span class="self">Self </span>{
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> ErrorPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">fn </span>new(title: <span class="kw-2">&</span><span class="lifetime">'a </span>str, message: <span class="kw-2">&</span><span class="lifetime">'a </span>str) -> <span class="self">Self </span>{
|
||||
ErrorPage { title, message }
|
||||
}
|
||||
}
|
||||
|
||||
<span class="macro">lazy_static! </span>{
|
||||
<span class="kw">static </span><span class="kw-2">ref </span>INTERNAL_SERVER_ERROR_BODY: String = ErrorPage::new(
|
||||
<span class="string">"Internal Server Error"</span>,
|
||||
<span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"{}"</span>, PageError::InternalServerError),
|
||||
<span class="string">"Internal Server Error"</span>,
|
||||
<span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"{}"</span>, PageError::InternalServerError),
|
||||
)
|
||||
.render_once()
|
||||
.unwrap();
|
||||
<span class="kw">static </span><span class="kw-2">ref </span>UNKNOWN_ERROR_BODY: String = ErrorPage::new(
|
||||
<span class="string">"Something went wrong"</span>,
|
||||
<span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"{}"</span>, PageError::InternalServerError),
|
||||
<span class="string">"Something went wrong"</span>,
|
||||
<span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"{}"</span>, PageError::InternalServerError),
|
||||
)
|
||||
.render_once()
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
<span class="kw">const </span>ERROR_ROUTE: <span class="kw-2">&</span>str = <span class="string">"/error/{id}"</span>;
|
||||
<span class="kw">const </span>ERROR_ROUTE: <span class="kw-2">&</span>str = <span class="string">"/error/{id}"</span>;
|
||||
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"ERROR_ROUTE"</span>)]
|
||||
<span class="attr">#[my_codegen::get(path = <span class="string">"ERROR_ROUTE"</span>)]
|
||||
</span><span class="kw">async fn </span>error(path: web::Path<usize>) -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">let </span>resp = <span class="kw">match </span>path.into_inner() {
|
||||
<span class="number">500 </span>=> HttpResponse::InternalServerError()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>INTERNAL_SERVER_ERROR_BODY),
|
||||
|
||||
<span class="kw">_ </span>=> HttpResponse::InternalServerError()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>UNKNOWN_ERROR_BODY),
|
||||
};
|
||||
|
||||
@@ -170,15 +171,15 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Errors {
|
||||
<span class="kw">pub </span>internal_server_error: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>unknown_error: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>internal_server_error: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>unknown_error: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Errors {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Errors {
|
||||
internal_server_error: <span class="string">"/error/500"</span>,
|
||||
unknown_error: <span class="string">"/error/007"</span>,
|
||||
internal_server_error: <span class="string">"/error/500"</span>,
|
||||
unknown_error: <span class="string">"/error/007"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -125,7 +126,7 @@
|
||||
<span class="kw">pub mod </span>routes;
|
||||
<span class="kw">mod </span>sitemap;
|
||||
|
||||
<span class="kw">pub const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"mCaptcha"</span>;
|
||||
<span class="kw">pub const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"mCaptcha"</span>;
|
||||
|
||||
<span class="kw">pub fn </span>services(cfg: <span class="kw-2">&mut </span>ServiceConfig) {
|
||||
auth::services(cfg);
|
||||
@@ -161,9 +162,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>protected_pages_templates_work(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"templateuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"templateuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"templateuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"templateuser@a.com"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -111,7 +112,7 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/index.html"</span>)]
|
||||
#[template(path = <span class="string">"panel/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>IndexPage {
|
||||
sitekeys: Vec<Captcha>,
|
||||
}
|
||||
@@ -122,18 +123,18 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Dashboard"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Dashboard"</span>;
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.home"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.home"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>panel(data: AppData, id: Identity) -> PageResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>username = id.identity().unwrap();
|
||||
<span class="kw">let </span>sitekeys = data.db.get_all_user_captchas(<span class="kw-2">&</span>username).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let </span>body = IndexPage::new(sitekeys).render_once().unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
@@ -151,9 +152,9 @@
|
||||
<span class="kw">use </span><span class="kw">super</span>::utils::routes::Utils;
|
||||
|
||||
<span class="kw">pub struct </span>Panel {
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>sitekey: Sitekey,
|
||||
<span class="kw">pub </span>notifications: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>notifications: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>settings: Settings,
|
||||
<span class="kw">pub </span>utils: Utils,
|
||||
}
|
||||
@@ -161,15 +162,15 @@
|
||||
<span class="kw">impl </span>Panel {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Panel {
|
||||
home: <span class="string">"/"</span>,
|
||||
home: <span class="string">"/"</span>,
|
||||
sitekey: Sitekey::new(),
|
||||
notifications: <span class="string">"/notifications"</span>,
|
||||
notifications: <span class="string">"/notifications"</span>,
|
||||
settings: Settings::new(),
|
||||
utils: Utils::new(),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">6</span>] {
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">6</span>] {
|
||||
<span class="kw">const </span>PANEL: Panel = Panel::new();
|
||||
<span class="kw">const </span>S: [<span class="kw-2">&</span>str; <span class="number">2</span>] = Sitekey::get_sitemap();
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/notifications.rs`."><title>notifications.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/notifications.rs`."><title>notifications.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -138,7 +139,7 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce)]
|
||||
#[template(path = <span class="string">"panel/notifications/index.html"</span>)]
|
||||
#[template(path = <span class="string">"panel/notifications/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>IndexPage {
|
||||
<span class="doccomment">/// notifications
|
||||
</span>n: Vec<Notification>,
|
||||
@@ -176,15 +177,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Notifications"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Notifications"</span>;
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.notifications"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.notifications"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>notifications(data: AppData, id: Identity) -> PageResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>receiver = id.identity().unwrap();
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
<span class="comment">// TODO handle error where payload.to doesn't exist
|
||||
|
||||
// let mut notifications = runner::get_notification(&data, &receiver).await?;
|
||||
</span><span class="kw">let </span><span class="kw-2">mut </span>notifications = data.db.get_all_unread_notifications(<span class="kw-2">&</span>receiver).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
@@ -192,7 +193,7 @@
|
||||
|
||||
<span class="kw">let </span>body = IndexPage::new(notifications).render_once().unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
@@ -212,35 +213,35 @@
|
||||
};
|
||||
|
||||
<span class="kw">let </span>timestamp = n.received.unix_timestamp();
|
||||
<span class="macro">println!</span>(<span class="string">"timestamp: {}"</span>, timestamp);
|
||||
<span class="macro">println!</span>(<span class="string">"timestamp: {}"</span>, timestamp);
|
||||
|
||||
<span class="comment">// seconds test
|
||||
</span><span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
</span><span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
n.received = OffsetDateTime::from_unix_timestamp(timestamp - <span class="number">5</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"seconds ago"</span>));
|
||||
|
||||
<span class="comment">// minutes test
|
||||
</span>n.received =
|
||||
OffsetDateTime::from_unix_timestamp(timestamp - MINUTE * <span class="number">2</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
n.received =
|
||||
OffsetDateTime::from_unix_timestamp(timestamp - MINUTE * <span class="number">56</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"minutes ago"</span>));
|
||||
|
||||
<span class="comment">// hours test
|
||||
</span>n.received = OffsetDateTime::from_unix_timestamp(timestamp - HOUR).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
n.received = OffsetDateTime::from_unix_timestamp(timestamp - HOUR * <span class="number">23</span>).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"hours ago"</span>));
|
||||
|
||||
<span class="comment">// days test
|
||||
</span>n.received = OffsetDateTime::from_unix_timestamp(timestamp - <span class="number">2 </span>* WEEK).unwrap();
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"days ago"</span>));
|
||||
<span class="macro">assert!</span>(n.print_date().contains(<span class="string">"days ago"</span>));
|
||||
|
||||
<span class="comment">// date test
|
||||
</span>n.received = OffsetDateTime::from_unix_timestamp(timestamp - <span class="number">6 </span>* WEEK).unwrap();
|
||||
<span class="kw">let </span>date = <span class="macro">format!</span>(
|
||||
<span class="string">"{}{}{}"</span>,
|
||||
<span class="string">"{}{}{}"</span>,
|
||||
n.received.year(),
|
||||
n.received.month(),
|
||||
n.received.date()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/settings.rs`."><title>settings.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/settings.rs`."><title>settings.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -114,21 +115,21 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Settings {
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete_account: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete_account: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>update_secret: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Settings {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Settings {
|
||||
home: <span class="string">"/settings"</span>,
|
||||
delete_account: <span class="string">"/settings/account/delete"</span>,
|
||||
update_secret: <span class="string">"/settings/secret/update"</span>,
|
||||
home: <span class="string">"/settings"</span>,
|
||||
delete_account: <span class="string">"/settings/account/delete"</span>,
|
||||
update_secret: <span class="string">"/settings/secret/update"</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">1</span>] {
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">1</span>] {
|
||||
<span class="kw">const </span>S: Settings = Settings::new();
|
||||
|
||||
[S.home]
|
||||
@@ -142,19 +143,19 @@
|
||||
cfg.service(delete_account);
|
||||
}
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Settings"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Settings"</span>;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/settings/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>IndexPage<<span class="lifetime">'a</span>> {
|
||||
#[template(path = <span class="string">"panel/settings/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>IndexPage<<span class="lifetime">'a</span>> {
|
||||
email: <span class="prelude-ty">Option</span><String>,
|
||||
secret: String,
|
||||
username: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
username: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.settings.home"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.settings.home"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>settings(data: AppData, id: Identity) -> PageResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>username = id.identity().unwrap();
|
||||
@@ -171,33 +172,33 @@
|
||||
|
||||
<span class="kw">let </span>body = data.render_once().unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.settings.delete_account"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.settings.delete_account"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>delete_account() -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">let </span>page = SudoPage::<u8, u8>::new(<span class="kw">crate</span>::V1_API_ROUTES.account.delete, <span class="prelude-val">None</span>)
|
||||
.render_once()
|
||||
.unwrap();
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(page)
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.settings.update_secret"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.settings.update_secret"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>update_secret() -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">let </span>page = SudoPage::<u8, u8>::new(<span class="kw">crate</span>::V1_API_ROUTES.account.update_secret, <span class="prelude-val">None</span>)
|
||||
.render_once()
|
||||
.unwrap();
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(page)
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/add.rs`."><title>add.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/add.rs`."><title>add.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -85,7 +86,7 @@
|
||||
<span class="kw">use </span>lazy_static::lazy_static;
|
||||
<span class="kw">use </span>sailfish::TemplateOnce;
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Add Sitekey"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Add Sitekey"</span>;
|
||||
|
||||
<span class="macro">lazy_static! </span>{
|
||||
<span class="kw">static </span><span class="kw-2">ref </span>ADVANCE_INDEX: String =
|
||||
@@ -94,19 +95,19 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/sitekey/add/advance/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>AdvanceIndexPage<<span class="lifetime">'a</span>> {
|
||||
#[template(path = <span class="string">"panel/sitekey/add/advance/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>AdvanceIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">pub </span>levels: usize,
|
||||
<span class="kw">pub </span>form_title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>form_description: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>form_title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>form_description: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>form_duration: usize,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> Default <span class="kw">for </span>AdvanceIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> Default <span class="kw">for </span>AdvanceIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">fn </span>default() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
levels: <span class="number">1</span>,
|
||||
form_description: <span class="string">""</span>,
|
||||
form_description: <span class="string">""</span>,
|
||||
form_title: PAGE,
|
||||
form_duration: <span class="number">30</span>,
|
||||
}
|
||||
@@ -114,29 +115,29 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.add_advance"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.add_advance"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>advance() -> <span class="kw">impl </span>Responder {
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>ADVANCE_INDEX)
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/sitekey/add/novice/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>EasyIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">pub </span>form_description: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>form_title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
#[template(path = <span class="string">"panel/sitekey/add/novice/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>EasyIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">pub </span>form_description: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>form_title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>peak_sustainable_traffic: <span class="prelude-ty">Option</span><usize>,
|
||||
<span class="kw">pub </span>avg_traffic: <span class="prelude-ty">Option</span><usize>,
|
||||
<span class="kw">pub </span>broke_my_site_traffic: <span class="prelude-ty">Option</span><usize>,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> Default <span class="kw">for </span>EasyIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> Default <span class="kw">for </span>EasyIndexPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">fn </span>default() -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
form_description: <span class="string">""</span>,
|
||||
form_description: <span class="string">""</span>,
|
||||
peak_sustainable_traffic: <span class="prelude-val">None</span>,
|
||||
avg_traffic: <span class="prelude-val">None</span>,
|
||||
broke_my_site_traffic: <span class="prelude-val">None</span>,
|
||||
@@ -146,12 +147,12 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.add_easy"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.add_easy"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>easy() -> <span class="kw">impl </span>Responder {
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>EASY_INDEX)
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/delete.rs`."><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/delete.rs`."><title>delete.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -37,17 +38,17 @@
|
||||
<span class="kw">use crate</span>::{PAGES, V1_API_ROUTES};
|
||||
|
||||
<span class="attr">#[get(
|
||||
path = <span class="string">"PAGES.panel.sitekey.delete"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"PAGES.panel.sitekey.delete"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>delete_sitekey(path: web::Path<String>) -> <span class="kw">impl </span>Responder {
|
||||
<span class="kw">let </span>key = path.into_inner();
|
||||
<span class="kw">let </span>data = <span class="macro">vec!</span>[(<span class="string">"sitekey"</span>, key)];
|
||||
<span class="kw">let </span>data = <span class="macro">vec!</span>[(<span class="string">"sitekey"</span>, key)];
|
||||
<span class="kw">let </span>page = SudoPage::new(V1_API_ROUTES.captcha.delete, <span class="prelude-val">Some</span>(data))
|
||||
.render_once()
|
||||
.unwrap();
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(page)
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/edit.rs`."><title>edit.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/edit.rs`."><title>edit.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -222,10 +223,10 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::errors::<span class="kw-2">*</span>;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Edit Sitekey"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Edit Sitekey"</span>;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/sitekey/edit/advance.html"</span>)]
|
||||
#[template(path = <span class="string">"panel/sitekey/edit/advance.html"</span>)]
|
||||
</span><span class="kw">struct </span>AdvanceEditPage {
|
||||
duration: u32,
|
||||
name: String,
|
||||
@@ -253,8 +254,8 @@
|
||||
|
||||
<span class="doccomment">/// route handler that renders individual views for sitekeys
|
||||
</span><span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.edit_advance"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.edit_advance"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>advance(
|
||||
path: web::Path<String>,
|
||||
@@ -272,19 +273,19 @@
|
||||
.render_once()
|
||||
.unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/sitekey/edit/easy/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>EasyEditPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">pub </span>form_title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
#[template(path = <span class="string">"panel/sitekey/edit/easy/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>EasyEditPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">pub </span>form_title: <span class="kw-2">&</span><span class="lifetime">'a </span>str,
|
||||
<span class="kw">pub </span>pattern: TrafficPatternRequest,
|
||||
<span class="kw">pub </span>key: String,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> EasyEditPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">impl</span><<span class="lifetime">'a</span>> EasyEditPage<<span class="lifetime">'a</span>> {
|
||||
<span class="kw">pub fn </span>new(key: String, pattern: TrafficPatternRequest) -> <span class="self">Self </span>{
|
||||
<span class="self">Self </span>{
|
||||
form_title: PAGE,
|
||||
@@ -296,8 +297,8 @@
|
||||
|
||||
<span class="doccomment">/// route handler that renders individual views for sitekeys
|
||||
</span><span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.edit_easy"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.edit_easy"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>easy(
|
||||
path: web::Path<String>,
|
||||
@@ -322,7 +323,7 @@
|
||||
|
||||
<span class="kw">let </span>page = EasyEditPage::new(key, pattern).render_once().unwrap();
|
||||
<span class="kw">return </span><span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(page));
|
||||
}
|
||||
<span class="prelude-val">Err</span>(DBError::TrafficPatternNotFound) => {
|
||||
@@ -362,9 +363,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>edit_sitekey_work(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"editsitekeyuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"editsitekeyuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"editsitekeyuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"editsitekeyuser@a.com"</span>;
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/list.rs`."><title>list.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/list.rs`."><title>list.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -116,12 +117,12 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/sitekey/list/index.html"</span>)]
|
||||
#[template(path = <span class="string">"panel/sitekey/list/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>IndexPage {
|
||||
sitekeys: Vec<Captcha>,
|
||||
}
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"SiteKeys"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"SiteKeys"</span>;
|
||||
|
||||
<span class="kw">impl </span>IndexPage {
|
||||
<span class="kw">fn </span>new(sitekeys: Vec<Captcha>) -> <span class="self">Self </span>{
|
||||
@@ -131,15 +132,15 @@
|
||||
|
||||
<span class="doccomment">/// render a list of all sitekeys that a user has
|
||||
</span><span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.list"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.list"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>list_sitekeys(data: AppData, id: Identity) -> PageResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>username = id.identity().unwrap();
|
||||
<span class="kw">let </span>res = data.db.get_all_user_captchas(<span class="kw-2">&</span>username).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let </span>body = IndexPage::new(res).render_once().unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
@@ -165,9 +166,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>list_sitekeys_work(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"listsitekeyuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"listsitekeyuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"listsitekeyuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"listsitekeyuser@a.com"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -98,46 +99,46 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Sitekey {
|
||||
<span class="kw">pub </span>list: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>add_easy: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>add_advance: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>view: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>edit_easy: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>edit_advance: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>list: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>add_easy: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>add_advance: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>view: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>edit_easy: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>edit_advance: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>delete: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Sitekey {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Sitekey {
|
||||
list: <span class="string">"/sitekeys"</span>,
|
||||
add_advance: <span class="string">"/sitekeys/advance/add"</span>,
|
||||
add_easy: <span class="string">"/sitekeys/easy/add"</span>,
|
||||
view: <span class="string">"/sitekey/{key}"</span>,
|
||||
edit_advance: <span class="string">"/sitekey/{key}/advance/edit"</span>,
|
||||
edit_easy: <span class="string">"/sitekey/{key}/easy/edit"</span>,
|
||||
delete: <span class="string">"/sitekey/{key}/delete"</span>,
|
||||
list: <span class="string">"/sitekeys"</span>,
|
||||
add_advance: <span class="string">"/sitekeys/advance/add"</span>,
|
||||
add_easy: <span class="string">"/sitekeys/easy/add"</span>,
|
||||
view: <span class="string">"/sitekey/{key}"</span>,
|
||||
edit_advance: <span class="string">"/sitekey/{key}/advance/edit"</span>,
|
||||
edit_easy: <span class="string">"/sitekey/{key}/easy/edit"</span>,
|
||||
delete: <span class="string">"/sitekey/{key}/delete"</span>,
|
||||
}
|
||||
}
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">2</span>] {
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">2</span>] {
|
||||
<span class="kw">const </span>S: Sitekey = Sitekey::new();
|
||||
[S.list, S.add_advance]
|
||||
}
|
||||
|
||||
<span class="kw">pub fn </span>get_edit_easy(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> String {
|
||||
<span class="self">self</span>.edit_easy.replace(<span class="string">"{key}"</span>, key)
|
||||
<span class="self">self</span>.edit_easy.replace(<span class="string">"{key}"</span>, key)
|
||||
}
|
||||
|
||||
<span class="kw">pub fn </span>get_edit_advance(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> String {
|
||||
<span class="self">self</span>.edit_advance.replace(<span class="string">"{key}"</span>, key)
|
||||
<span class="self">self</span>.edit_advance.replace(<span class="string">"{key}"</span>, key)
|
||||
}
|
||||
|
||||
<span class="kw">pub fn </span>get_view(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> String {
|
||||
<span class="self">self</span>.view.replace(<span class="string">"{key}"</span>, key)
|
||||
<span class="self">self</span>.view.replace(<span class="string">"{key}"</span>, key)
|
||||
}
|
||||
|
||||
<span class="kw">pub fn </span>get_delete(<span class="kw-2">&</span><span class="self">self</span>, key: <span class="kw-2">&</span>str) -> String {
|
||||
<span class="self">self</span>.delete.replace(<span class="string">"{key}"</span>, key)
|
||||
<span class="self">self</span>.delete.replace(<span class="string">"{key}"</span>, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -159,12 +160,12 @@
|
||||
<span class="attr">#[test]
|
||||
</span><span class="kw">fn </span>get_sitekey_routes_work() {
|
||||
<span class="kw">const </span>ROUTES: Sitekey = Sitekey::new();
|
||||
<span class="kw">const </span>KEY: <span class="kw-2">&</span>str = <span class="string">"foo"</span>;
|
||||
<span class="kw">const </span>KEY: <span class="kw-2">&</span>str = <span class="string">"foo"</span>;
|
||||
<span class="kw">let </span>tests = [
|
||||
(ROUTES.get_edit_easy(KEY), <span class="string">"/sitekey/foo/easy/edit"</span>),
|
||||
(ROUTES.get_edit_advance(KEY), <span class="string">"/sitekey/foo/advance/edit"</span>),
|
||||
(ROUTES.get_view(KEY), <span class="string">"/sitekey/foo"</span>),
|
||||
(ROUTES.get_delete(KEY), <span class="string">"/sitekey/foo/delete"</span>),
|
||||
(ROUTES.get_edit_easy(KEY), <span class="string">"/sitekey/foo/easy/edit"</span>),
|
||||
(ROUTES.get_edit_advance(KEY), <span class="string">"/sitekey/foo/advance/edit"</span>),
|
||||
(ROUTES.get_view(KEY), <span class="string">"/sitekey/foo"</span>),
|
||||
(ROUTES.get_delete(KEY), <span class="string">"/sitekey/foo/delete"</span>),
|
||||
];
|
||||
|
||||
<span class="kw">for </span>(r, l) <span class="kw">in </span>tests.iter() {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/view.rs`."><title>view.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/sitekey/view.rs`."><title>view.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../../" data-static-root-path="../../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../../src-files.js"></script><script defer src="../../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -146,10 +147,10 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::stats::CaptchaStats;
|
||||
<span class="kw">use </span><span class="kw">crate</span>::AppData;
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"SiteKeys"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"SiteKeys"</span>;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/sitekey/view/index.html"</span>)]
|
||||
#[template(path = <span class="string">"panel/sitekey/view/index.html"</span>)]
|
||||
</span><span class="kw">struct </span>IndexPage {
|
||||
duration: u32,
|
||||
name: String,
|
||||
@@ -180,8 +181,8 @@
|
||||
|
||||
<span class="doccomment">/// route handler that renders individual views for sitekeys
|
||||
</span><span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.view"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.sitekey.view"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">pub async fn </span>view_sitekey(
|
||||
path: web::Path<String>,
|
||||
@@ -199,7 +200,7 @@
|
||||
.render_once()
|
||||
.unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
@@ -225,9 +226,9 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>view_sitekey_work(data: ArcData) {
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"viewsitekeyuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"viewsitekeyuser@a.com"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"viewsitekeyuser"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"viewsitekeyuser@a.com"</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
delete_user(data, NAME).<span class="kw">await</span>;
|
||||
@@ -238,7 +239,7 @@
|
||||
|
||||
<span class="kw">let </span>app = <span class="macro">get_app!</span>(data).<span class="kw">await</span>;
|
||||
|
||||
<span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">"/sitekey/{}/"</span>, <span class="kw-2">&</span>key.key);
|
||||
<span class="kw">let </span>url = <span class="macro">format!</span>(<span class="string">"/sitekey/{}/"</span>, <span class="kw-2">&</span>key.key);
|
||||
|
||||
<span class="kw">let </span>list_sitekey_resp = test::call_service(
|
||||
<span class="kw-2">&</span>app,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/utils.rs`."><title>utils.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/panel/utils.rs`."><title>utils.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../../" data-static-root-path="../../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../../src-files.js"></script><script defer src="../../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -294,17 +295,17 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Utils {
|
||||
<span class="kw">pub </span>percentile: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>percentile: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Utils {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Utils {
|
||||
percentile: <span class="string">"/utils/percentile"</span>,
|
||||
percentile: <span class="string">"/utils/percentile"</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">1</span>] {
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">1</span>] {
|
||||
<span class="kw">const </span>S: Utils = Utils::new();
|
||||
[S.percentile]
|
||||
}
|
||||
@@ -316,10 +317,10 @@
|
||||
cfg.service(post_percentile);
|
||||
}
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Difficulty factor statistics"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"Difficulty factor statistics"</span>;
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"panel/utils/percentile/index.html"</span>)]
|
||||
#[template(path = <span class="string">"panel/utils/percentile/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>PercentilePage {
|
||||
time: <span class="prelude-ty">Option</span><u32>,
|
||||
percentile: <span class="prelude-ty">Option</span><f64>,
|
||||
@@ -327,8 +328,8 @@
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::get(
|
||||
path = <span class="string">"crate::PAGES.panel.utils.percentile"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.utils.percentile"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>get_percentile(id: Identity) -> PageResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="kw">let </span>data = PercentilePage {
|
||||
@@ -339,13 +340,13 @@
|
||||
|
||||
<span class="kw">let </span>body = data.render_once().unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
<span class="attr">#[my_codegen::post(
|
||||
path = <span class="string">"crate::PAGES.panel.utils.percentile"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
path = <span class="string">"crate::PAGES.panel.utils.percentile"</span>,
|
||||
wrap = <span class="string">"crate::pages::get_middleware()"
|
||||
</span>)]
|
||||
</span><span class="kw">async fn </span>post_percentile(
|
||||
data: AppData,
|
||||
@@ -361,7 +362,7 @@
|
||||
|
||||
<span class="kw">let </span>body = page.render_once().unwrap();
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(body))
|
||||
}
|
||||
|
||||
@@ -388,12 +389,12 @@
|
||||
<span class="kw">async fn </span>page_stats_bench_work(data: ArcData) {
|
||||
<span class="kw">use </span><span class="kw">crate</span>::tests::<span class="kw-2">*</span>;
|
||||
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"pagebenchstatsuesr"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"pagebenchstatsuesr@testadminuser.com"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword2"</span>;
|
||||
<span class="kw">const </span>NAME: <span class="kw-2">&</span>str = <span class="string">"pagebenchstatsuesr"</span>;
|
||||
<span class="kw">const </span>EMAIL: <span class="kw-2">&</span>str = <span class="string">"pagebenchstatsuesr@testadminuser.com"</span>;
|
||||
<span class="kw">const </span>PASSWORD: <span class="kw-2">&</span>str = <span class="string">"longpassword2"</span>;
|
||||
|
||||
<span class="kw">const </span>DEVICE_USER_PROVIDED: <span class="kw-2">&</span>str = <span class="string">"foo"</span>;
|
||||
<span class="kw">const </span>DEVICE_SOFTWARE_RECOGNISED: <span class="kw-2">&</span>str = <span class="string">"Foobar.v2"</span>;
|
||||
<span class="kw">const </span>DEVICE_USER_PROVIDED: <span class="kw-2">&</span>str = <span class="string">"foo"</span>;
|
||||
<span class="kw">const </span>DEVICE_SOFTWARE_RECOGNISED: <span class="kw-2">&</span>str = <span class="string">"Foobar.v2"</span>;
|
||||
<span class="kw">const </span>THREADS: i32 = <span class="number">4</span>;
|
||||
|
||||
<span class="kw">let </span>data = <span class="kw-2">&</span>data;
|
||||
@@ -432,11 +433,11 @@
|
||||
</span>.unwrap();
|
||||
|
||||
<span class="kw">for </span>i <span class="kw">in </span><span class="number">1</span>..<span class="number">6 </span>{
|
||||
<span class="macro">println!</span>(<span class="string">"[{i}] Saving analytics"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"[{i}] Saving analytics"</span>);
|
||||
<span class="kw">let </span>analytics = db_core::CreatePerformanceAnalytics {
|
||||
time: i,
|
||||
difficulty_factor: i,
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
worker_type: <span class="string">"wasm"</span>.into(),
|
||||
};
|
||||
data.db.analysis_save(<span class="kw-2">&</span>key.key, <span class="kw-2">&</span>analytics).<span class="kw">await</span>.unwrap();
|
||||
}
|
||||
@@ -483,7 +484,7 @@
|
||||
<span class="kw">let </span>body: Bytes = test::read_body(percentile_resp).<span class="kw">await</span>;
|
||||
<span class="kw">let </span>body = String::from_utf8(body.to_vec()).unwrap();
|
||||
|
||||
<span class="macro">assert!</span>(body.contains(<span class="string">"Maximum time taken"</span>));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="string">"Maximum time taken"</span>));
|
||||
|
||||
<span class="kw">let </span>percentile_resp = test::call_service(
|
||||
<span class="kw-2">&</span>app,
|
||||
@@ -499,7 +500,7 @@
|
||||
<span class="kw">let </span>body: Bytes = test::read_body(percentile_resp).<span class="kw">await</span>;
|
||||
<span class="kw">let </span>body = String::from_utf8(body.to_vec()).unwrap();
|
||||
|
||||
<span class="macro">assert!</span>(body.contains(<span class="string">"Maximum time taken"</span>));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="string">"Maximum time taken"</span>));
|
||||
|
||||
<span class="comment">// end
|
||||
// start post
|
||||
@@ -525,7 +526,7 @@
|
||||
<span class="kw">let </span>body = String::from_utf8(body.to_vec()).unwrap();
|
||||
|
||||
<span class="macro">assert!</span>(body.contains(
|
||||
<span class="string">"Not enough inputs to compute statistics. Please try again later"
|
||||
<span class="string">"Not enough inputs to compute statistics. Please try again later"
|
||||
</span>));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="kw-2">&</span><span class="number">1</span>.to_string()));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="kw-2">&</span><span class="number">99.00</span>.to_string()));
|
||||
@@ -553,7 +554,7 @@
|
||||
<span class="kw">let </span>body: Bytes = test::read_body(percentile_resp).<span class="kw">await</span>;
|
||||
<span class="kw">let </span>body = String::from_utf8(body.to_vec()).unwrap();
|
||||
|
||||
<span class="macro">assert!</span>(body.contains(<span class="string">"Difficulty factor: 2"</span>));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="string">"Difficulty factor: 2"</span>));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="kw-2">&</span><span class="number">2</span>.to_string()));
|
||||
<span class="macro">assert!</span>(body.contains(<span class="kw-2">&</span><span class="number">100.00</span>.to_string()));
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/routes.rs`."><title>routes.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/routes.rs`."><title>routes.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -78,16 +79,16 @@
|
||||
<span class="kw">pub const </span>ROUTES: Routes = Routes::new();
|
||||
|
||||
<span class="kw">pub struct </span>Routes {
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>home: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>auth: Auth,
|
||||
<span class="kw">pub </span>panel: Panel,
|
||||
<span class="kw">pub </span>errors: Errors,
|
||||
<span class="kw">pub </span>about: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>sitemap: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>thanks: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>donate: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>security: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>privacy: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>about: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>sitemap: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>thanks: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>donate: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>security: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>privacy: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Routes {
|
||||
@@ -99,16 +100,16 @@
|
||||
panel,
|
||||
home,
|
||||
errors: Errors::new(),
|
||||
about: <span class="string">"/about"</span>,
|
||||
sitemap: <span class="string">"/sitemap.xml"</span>,
|
||||
thanks: <span class="string">"/thanks"</span>,
|
||||
donate: <span class="string">"/donate"</span>,
|
||||
security: <span class="string">"/security"</span>,
|
||||
privacy: <span class="string">"/privacy-policy"</span>,
|
||||
about: <span class="string">"/about"</span>,
|
||||
sitemap: <span class="string">"/sitemap.xml"</span>,
|
||||
thanks: <span class="string">"/thanks"</span>,
|
||||
donate: <span class="string">"/donate"</span>,
|
||||
security: <span class="string">"/security"</span>,
|
||||
privacy: <span class="string">"/privacy-policy"</span>,
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">7</span>] {
|
||||
<span class="kw">pub const fn </span>get_sitemap() -> [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">7</span>] {
|
||||
<span class="kw">let </span>a = Auth::get_sitemap();
|
||||
<span class="kw">let </span>p = Panel::get_sitemap();
|
||||
[a[<span class="number">0</span>], a[<span class="number">1</span>], p[<span class="number">0</span>], p[<span class="number">1</span>], p[<span class="number">2</span>], p[<span class="number">3</span>], p[<span class="number">4</span>]]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/sitemap.rs`."><title>sitemap.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/pages/sitemap.rs`."><title>sitemap.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -55,16 +56,16 @@
|
||||
<span class="kw">use </span><span class="kw">crate</span>::PAGES;
|
||||
|
||||
<span class="attr">#[derive(Clone, TemplateOnce)]
|
||||
#[template(path = <span class="string">"sitemap.html"</span>)]
|
||||
#[template(path = <span class="string">"sitemap.html"</span>)]
|
||||
</span><span class="kw">struct </span>IndexPage {
|
||||
urls: [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">7</span>],
|
||||
domain: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
urls: [<span class="kw-2">&</span><span class="lifetime">'static </span>str; <span class="number">7</span>],
|
||||
domain: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Default <span class="kw">for </span>IndexPage {
|
||||
<span class="kw">fn </span>default() -> <span class="self">Self </span>{
|
||||
<span class="kw">let </span>urls = Routes::get_sitemap();
|
||||
<span class="kw">let </span>domain = <span class="kw">if </span><span class="kw">crate</span>::SETTINGS.server.domain.ends_with(<span class="string">'/'</span>) {
|
||||
<span class="kw">let </span>domain = <span class="kw">if </span><span class="kw">crate</span>::SETTINGS.server.domain.ends_with(<span class="string">'/'</span>) {
|
||||
<span class="kw-2">&</span><span class="kw">crate</span>::SETTINGS.server.domain[<span class="number">0</span>..<span class="kw">crate</span>::SETTINGS.server.domain.len() - <span class="number">1</span>]
|
||||
} <span class="kw">else </span>{
|
||||
<span class="kw-2">&</span><span class="kw">crate</span>::SETTINGS.server.domain
|
||||
@@ -78,10 +79,10 @@
|
||||
<span class="kw">static </span><span class="kw-2">ref </span>INDEX: String = IndexPage::default().render_once().unwrap();
|
||||
}
|
||||
|
||||
<span class="attr">#[get(path = <span class="string">"PAGES.sitemap"</span>)]
|
||||
<span class="attr">#[get(path = <span class="string">"PAGES.sitemap"</span>)]
|
||||
</span><span class="kw">pub async fn </span>sitemap() -> <span class="kw">impl </span>Responder {
|
||||
HttpResponse::Ok()
|
||||
.content_type(<span class="string">"application/xml; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"application/xml; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>INDEX)
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/routes.rs`."><title>routes.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/routes.rs`."><title>routes.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/settings.rs`."><title>settings.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/settings.rs`."><title>settings.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -703,25 +704,25 @@
|
||||
<span class="kw">impl </span>Server {
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">pub fn </span>get_ip(<span class="kw-2">&</span><span class="self">self</span>) -> String {
|
||||
<span class="macro">format!</span>(<span class="string">"{}:{}"</span>, <span class="self">self</span>.ip, <span class="self">self</span>.port)
|
||||
<span class="macro">format!</span>(<span class="string">"{}:{}"</span>, <span class="self">self</span>.ip, <span class="self">self</span>.port)
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(Deserialize, Serialize, Display, Eq, PartialEq, Clone, Debug)]
|
||||
#[serde(rename_all = <span class="string">"lowercase"</span>)]
|
||||
#[serde(rename_all = <span class="string">"lowercase"</span>)]
|
||||
</span><span class="kw">pub enum </span>DBType {
|
||||
<span class="attr">#[display(fmt = <span class="string">"postgres"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"postgres"</span>)]
|
||||
</span>Postgres,
|
||||
<span class="attr">#[display(fmt = <span class="string">"maria"</span>)]
|
||||
<span class="attr">#[display(fmt = <span class="string">"maria"</span>)]
|
||||
</span>Maria,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>DBType {
|
||||
<span class="kw">fn </span>from_url(url: <span class="kw-2">&</span>Url) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, ConfigError> {
|
||||
<span class="kw">match </span>url.scheme() {
|
||||
<span class="string">"mysql" </span>=> <span class="prelude-val">Ok</span>(<span class="self">Self</span>::Maria),
|
||||
<span class="string">"postgres" </span>=> <span class="prelude-val">Ok</span>(<span class="self">Self</span>::Postgres),
|
||||
<span class="kw">_ </span>=> <span class="prelude-val">Err</span>(ConfigError::Message(<span class="string">"Unknown database type"</span>.into())),
|
||||
<span class="string">"mysql" </span>=> <span class="prelude-val">Ok</span>(<span class="self">Self</span>::Maria),
|
||||
<span class="string">"postgres" </span>=> <span class="prelude-val">Ok</span>(<span class="self">Self</span>::Postgres),
|
||||
<span class="kw">_ </span>=> <span class="prelude-val">Err</span>(ConfigError::Message(<span class="string">"Unknown database type"</span>.into())),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -763,91 +764,91 @@
|
||||
|
||||
<span class="kw">const </span>ENV_VAR_CONFIG: [(<span class="kw-2">&</span>str, <span class="kw-2">&</span>str); <span class="number">32</span>] = [
|
||||
<span class="comment">/* top-level */
|
||||
</span>(<span class="string">"debug"</span>, <span class="string">"MCAPTCHA_debug"</span>),
|
||||
(<span class="string">"commercial"</span>, <span class="string">"MCAPTCHA_commercial"</span>),
|
||||
(<span class="string">"source_code"</span>, <span class="string">"MCAPTCHA_source_code"</span>),
|
||||
(<span class="string">"allow_registration"</span>, <span class="string">"MCAPTCHA_allow_registration"</span>),
|
||||
(<span class="string">"allow_demo"</span>, <span class="string">"MCAPTCHA_allow_demo"</span>),
|
||||
</span>(<span class="string">"debug"</span>, <span class="string">"MCAPTCHA_debug"</span>),
|
||||
(<span class="string">"commercial"</span>, <span class="string">"MCAPTCHA_commercial"</span>),
|
||||
(<span class="string">"source_code"</span>, <span class="string">"MCAPTCHA_source_code"</span>),
|
||||
(<span class="string">"allow_registration"</span>, <span class="string">"MCAPTCHA_allow_registration"</span>),
|
||||
(<span class="string">"allow_demo"</span>, <span class="string">"MCAPTCHA_allow_demo"</span>),
|
||||
|
||||
<span class="comment">/* database */
|
||||
</span>(<span class="string">"database.url"</span>, <span class="string">"DATABASE_URL"</span>),
|
||||
(<span class="string">"database.pool"</span>, <span class="string">"MCAPTCHA_database_POOL"</span>),
|
||||
</span>(<span class="string">"database.url"</span>, <span class="string">"DATABASE_URL"</span>),
|
||||
(<span class="string">"database.pool"</span>, <span class="string">"MCAPTCHA_database_POOL"</span>),
|
||||
|
||||
<span class="comment">/* redis */
|
||||
</span>(<span class="string">"redis.url"</span>, <span class="string">"MCAPTCHA_redis_URL"</span>),
|
||||
(<span class="string">"redis.pool"</span>, <span class="string">"MCAPTCHA_redis_POOL"</span>),
|
||||
</span>(<span class="string">"redis.url"</span>, <span class="string">"MCAPTCHA_redis_URL"</span>),
|
||||
(<span class="string">"redis.pool"</span>, <span class="string">"MCAPTCHA_redis_POOL"</span>),
|
||||
|
||||
<span class="comment">/* server */
|
||||
</span>(<span class="string">"server.port"</span>, <span class="string">"PORT"</span>),
|
||||
(<span class="string">"server.domain"</span>, <span class="string">"MCAPTCHA_server_DOMAIN"</span>),
|
||||
(<span class="string">"server.cookie_secret"</span>, <span class="string">"MCAPTCHA__server_COOKIE_SECRET"</span>),
|
||||
(<span class="string">"server.ip"</span>, <span class="string">"MCAPTCHA__server_IP"</span>),
|
||||
(<span class="string">"server.proxy_has_tls"</span>, <span class="string">"MCAPTCHA__server_PROXY_HAS_TLS"</span>),
|
||||
</span>(<span class="string">"server.port"</span>, <span class="string">"PORT"</span>),
|
||||
(<span class="string">"server.domain"</span>, <span class="string">"MCAPTCHA_server_DOMAIN"</span>),
|
||||
(<span class="string">"server.cookie_secret"</span>, <span class="string">"MCAPTCHA__server_COOKIE_SECRET"</span>),
|
||||
(<span class="string">"server.ip"</span>, <span class="string">"MCAPTCHA__server_IP"</span>),
|
||||
(<span class="string">"server.proxy_has_tls"</span>, <span class="string">"MCAPTCHA__server_PROXY_HAS_TLS"</span>),
|
||||
|
||||
|
||||
<span class="comment">/* captcha */
|
||||
</span>(<span class="string">"captcha.salt"</span>, <span class="string">"MCAPTCHA_captcha_SALT"</span>),
|
||||
(<span class="string">"captcha.gc"</span>, <span class="string">"MCAPTCHA_captcha_GC"</span>),
|
||||
(<span class="string">"captcha.runners"</span>, <span class="string">"MCAPTCHA_captcha_RUNNERS"</span>),
|
||||
(<span class="string">"captcha.queue_length"</span>, <span class="string">"MCAPTCHA_captcha_QUEUE_LENGTH"</span>),
|
||||
(<span class="string">"captcha.enable_stats"</span>, <span class="string">"MCAPTCHA_captcha_ENABLE_STATS"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.avg_traffic_difficulty"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_difficulty"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.broke_my_site_traffic_difficulty"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_difficulty"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.peak_sustainable_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_difficulty"</span>),
|
||||
( <span class="string">"captcha.default_difficulty_strategy.duration"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_duration"
|
||||
</span>(<span class="string">"captcha.salt"</span>, <span class="string">"MCAPTCHA_captcha_SALT"</span>),
|
||||
(<span class="string">"captcha.gc"</span>, <span class="string">"MCAPTCHA_captcha_GC"</span>),
|
||||
(<span class="string">"captcha.runners"</span>, <span class="string">"MCAPTCHA_captcha_RUNNERS"</span>),
|
||||
(<span class="string">"captcha.queue_length"</span>, <span class="string">"MCAPTCHA_captcha_QUEUE_LENGTH"</span>),
|
||||
(<span class="string">"captcha.enable_stats"</span>, <span class="string">"MCAPTCHA_captcha_ENABLE_STATS"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.avg_traffic_difficulty"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_difficulty"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.broke_my_site_traffic_difficulty"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_difficulty"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.peak_sustainable_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_difficulty"</span>),
|
||||
( <span class="string">"captcha.default_difficulty_strategy.duration"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_duration"
|
||||
</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.avg_traffic_time"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_time"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.peak_sustainable_traffic_time"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_time"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.broke_my_site_traffic_time"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_time"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.avg_traffic_time"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_time"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.peak_sustainable_traffic_time"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_time"</span>),
|
||||
(<span class="string">"captcha.default_difficulty_strategy.broke_my_site_traffic_time"</span>, <span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_time"</span>),
|
||||
|
||||
|
||||
<span class="comment">/* SMTP */
|
||||
</span>(<span class="string">"smtp.from"</span>, <span class="string">"MCAPTCHA_smtp_FROM"</span>),
|
||||
(<span class="string">"smtp.reply"</span>, <span class="string">"MCAPTCHA_smtp_REPLY"</span>),
|
||||
(<span class="string">"smtp.url"</span>, <span class="string">"MCAPTCHA_smtp_URL"</span>),
|
||||
(<span class="string">"smtp.username"</span>, <span class="string">"MCAPTCHA_smtp_USERNAME"</span>),
|
||||
(<span class="string">"smtp.password"</span>, <span class="string">"MCAPTCHA_smtp_PASSWORD"</span>),
|
||||
(<span class="string">"smtp.port"</span>, <span class="string">"MCAPTCHA_smtp_PORT"</span>),
|
||||
</span>(<span class="string">"smtp.from"</span>, <span class="string">"MCAPTCHA_smtp_FROM"</span>),
|
||||
(<span class="string">"smtp.reply"</span>, <span class="string">"MCAPTCHA_smtp_REPLY"</span>),
|
||||
(<span class="string">"smtp.url"</span>, <span class="string">"MCAPTCHA_smtp_URL"</span>),
|
||||
(<span class="string">"smtp.username"</span>, <span class="string">"MCAPTCHA_smtp_USERNAME"</span>),
|
||||
(<span class="string">"smtp.password"</span>, <span class="string">"MCAPTCHA_smtp_PASSWORD"</span>),
|
||||
(<span class="string">"smtp.port"</span>, <span class="string">"MCAPTCHA_smtp_PORT"</span>),
|
||||
|
||||
|
||||
|
||||
];
|
||||
|
||||
<span class="kw">const </span>DEPRECATED_ENV_VARS: [(<span class="kw-2">&</span>str, <span class="kw-2">&</span>str); <span class="number">23</span>] = [
|
||||
(<span class="string">"debug"</span>, <span class="string">"MCAPTCHA_DEBUG"</span>),
|
||||
(<span class="string">"commercial"</span>, <span class="string">"MCAPTCHA_COMMERCIAL"</span>),
|
||||
(<span class="string">"source_code"</span>, <span class="string">"MCAPTCHA_SOURCE_CODE"</span>),
|
||||
(<span class="string">"allow_registration"</span>, <span class="string">"MCAPTCHA_ALLOW_REGISTRATION"</span>),
|
||||
(<span class="string">"allow_demo"</span>, <span class="string">"MCAPTCHA_ALLOW_DEMO"</span>),
|
||||
(<span class="string">"redis.pool"</span>, <span class="string">"MCAPTCHA_REDIS_POOL"</span>),
|
||||
(<span class="string">"redis.url"</span>, <span class="string">"MCAPTCHA_REDIS_URL"</span>),
|
||||
(<span class="string">"server.port"</span>, <span class="string">"MCAPTCHA_SERVER_PORT"</span>),
|
||||
(<span class="string">"server.ip"</span>, <span class="string">"MCAPTCHA_SERVER_IP"</span>),
|
||||
(<span class="string">"server.domain"</span>, <span class="string">"MCAPTCHA_SERVER_DOMAIN"</span>),
|
||||
(<span class="string">"server.cookie_secret"</span>, <span class="string">"MCAPTCHA_SERVER_COOKIE_SECRET"</span>),
|
||||
(<span class="string">"server.proxy_has_tls"</span>, <span class="string">"MCAPTCHA_SERVER_PROXY_HAS_TLS"</span>),
|
||||
(<span class="string">"captcha.salt"</span>, <span class="string">"MCAPTCHA_CAPTCHA_SALT"</span>),
|
||||
(<span class="string">"captcha.gc"</span>, <span class="string">"MCAPTCHA_CAPTCHA_GC"</span>),
|
||||
(<span class="string">"debug"</span>, <span class="string">"MCAPTCHA_DEBUG"</span>),
|
||||
(<span class="string">"commercial"</span>, <span class="string">"MCAPTCHA_COMMERCIAL"</span>),
|
||||
(<span class="string">"source_code"</span>, <span class="string">"MCAPTCHA_SOURCE_CODE"</span>),
|
||||
(<span class="string">"allow_registration"</span>, <span class="string">"MCAPTCHA_ALLOW_REGISTRATION"</span>),
|
||||
(<span class="string">"allow_demo"</span>, <span class="string">"MCAPTCHA_ALLOW_DEMO"</span>),
|
||||
(<span class="string">"redis.pool"</span>, <span class="string">"MCAPTCHA_REDIS_POOL"</span>),
|
||||
(<span class="string">"redis.url"</span>, <span class="string">"MCAPTCHA_REDIS_URL"</span>),
|
||||
(<span class="string">"server.port"</span>, <span class="string">"MCAPTCHA_SERVER_PORT"</span>),
|
||||
(<span class="string">"server.ip"</span>, <span class="string">"MCAPTCHA_SERVER_IP"</span>),
|
||||
(<span class="string">"server.domain"</span>, <span class="string">"MCAPTCHA_SERVER_DOMAIN"</span>),
|
||||
(<span class="string">"server.cookie_secret"</span>, <span class="string">"MCAPTCHA_SERVER_COOKIE_SECRET"</span>),
|
||||
(<span class="string">"server.proxy_has_tls"</span>, <span class="string">"MCAPTCHA_SERVER_PROXY_HAS_TLS"</span>),
|
||||
(<span class="string">"captcha.salt"</span>, <span class="string">"MCAPTCHA_CAPTCHA_SALT"</span>),
|
||||
(<span class="string">"captcha.gc"</span>, <span class="string">"MCAPTCHA_CAPTCHA_GC"</span>),
|
||||
(
|
||||
<span class="string">"captcha.default_difficulty_strategy.avg_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_AVG_TRAFFIC_DIFFICULTY"</span>,
|
||||
<span class="string">"captcha.default_difficulty_strategy.avg_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_AVG_TRAFFIC_DIFFICULTY"</span>,
|
||||
),
|
||||
(
|
||||
<span class="string">"captcha.default_difficulty_strategy.peak_sustainable_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_PEAK_TRAFFIC_DIFFICULTY"</span>,
|
||||
<span class="string">"captcha.default_difficulty_strategy.peak_sustainable_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_PEAK_TRAFFIC_DIFFICULTY"</span>,
|
||||
),
|
||||
(
|
||||
<span class="string">"captcha.default_difficulty_strategy.broke_my_site_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_BROKE_MY_SITE_TRAFFIC"</span>,
|
||||
<span class="string">"captcha.default_difficulty_strategy.broke_my_site_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_BROKE_MY_SITE_TRAFFIC"</span>,
|
||||
),
|
||||
(<span class="string">"smtp.from"</span>, <span class="string">"MCAPTCHA_SMTP_FROM"</span>),
|
||||
(<span class="string">"smtp.reply"</span>, <span class="string">"MCAPTCHA_SMTP_REPLY_TO"</span>),
|
||||
(<span class="string">"smtp.url"</span>, <span class="string">"MCAPTCHA_SMTP_URL"</span>),
|
||||
(<span class="string">"smtp.username"</span>, <span class="string">"MCAPTCHA_SMTP_USERNAME"</span>),
|
||||
(<span class="string">"smtp.password"</span>, <span class="string">"MCAPTCHA_SMTP_PASSWORD"</span>),
|
||||
(<span class="string">"smtp.port"</span>, <span class="string">"MCAPTCHA_SMTP_PORT"</span>),
|
||||
(<span class="string">"smtp.from"</span>, <span class="string">"MCAPTCHA_SMTP_FROM"</span>),
|
||||
(<span class="string">"smtp.reply"</span>, <span class="string">"MCAPTCHA_SMTP_REPLY_TO"</span>),
|
||||
(<span class="string">"smtp.url"</span>, <span class="string">"MCAPTCHA_SMTP_URL"</span>),
|
||||
(<span class="string">"smtp.username"</span>, <span class="string">"MCAPTCHA_SMTP_USERNAME"</span>),
|
||||
(<span class="string">"smtp.password"</span>, <span class="string">"MCAPTCHA_SMTP_PASSWORD"</span>),
|
||||
(<span class="string">"smtp.port"</span>, <span class="string">"MCAPTCHA_SMTP_PORT"</span>),
|
||||
];
|
||||
|
||||
<span class="attr">#[cfg(not(tarpaulin_include))]
|
||||
@@ -855,12 +856,12 @@
|
||||
<span class="kw">pub fn </span>new() -> <span class="prelude-ty">Result</span><<span class="self">Self</span>, ConfigError> {
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>s = Config::builder();
|
||||
|
||||
<span class="kw">const </span>CURRENT_DIR: <span class="kw-2">&</span>str = <span class="string">"./config/default.toml"</span>;
|
||||
<span class="kw">const </span>ETC: <span class="kw-2">&</span>str = <span class="string">"/etc/mcaptcha/config.toml"</span>;
|
||||
<span class="kw">const </span>CURRENT_DIR: <span class="kw-2">&</span>str = <span class="string">"./config/default.toml"</span>;
|
||||
<span class="kw">const </span>ETC: <span class="kw-2">&</span>str = <span class="string">"/etc/mcaptcha/config.toml"</span>;
|
||||
|
||||
s = s
|
||||
.set_default(<span class="string">"capatcha.enable_stats"</span>, <span class="bool-val">true</span>.to_string())
|
||||
.expect(<span class="string">"unable to set capatcha.enable_stats default config"</span>);
|
||||
.set_default(<span class="string">"capatcha.enable_stats"</span>, <span class="bool-val">true</span>.to_string())
|
||||
.expect(<span class="string">"unable to set capatcha.enable_stats default config"</span>);
|
||||
|
||||
<span class="comment">// Will be overridden after config is parsed and loaded into Settings by
|
||||
// Settings::set_database_type.
|
||||
@@ -868,29 +869,29 @@
|
||||
// inferred. But we need a default value for config lib to parse successfully, since it is
|
||||
// DBType and not Option<DBType>
|
||||
</span>s = s
|
||||
.set_default(<span class="string">"database.database_type"</span>, DBType::Postgres.to_string())
|
||||
.expect(<span class="string">"unable to set database.database_type default config"</span>);
|
||||
.set_default(<span class="string">"database.database_type"</span>, DBType::Postgres.to_string())
|
||||
.expect(<span class="string">"unable to set database.database_type default config"</span>);
|
||||
|
||||
<span class="kw">if let </span><span class="prelude-val">Ok</span>(path) = env::var(<span class="string">"MCAPTCHA_CONFIG"</span>) {
|
||||
<span class="kw">if let </span><span class="prelude-val">Ok</span>(path) = env::var(<span class="string">"MCAPTCHA_CONFIG"</span>) {
|
||||
<span class="kw">let </span>absolute_path = Path::new(<span class="kw-2">&</span>path).canonicalize().unwrap();
|
||||
<span class="macro">log::info!</span>(
|
||||
<span class="string">"Loading config file from {}"</span>,
|
||||
<span class="string">"Loading config file from {}"</span>,
|
||||
absolute_path.to_str().unwrap()
|
||||
);
|
||||
s = s.add_source(File::with_name(absolute_path.to_str().unwrap()));
|
||||
} <span class="kw">else if </span>Path::new(CURRENT_DIR).exists() {
|
||||
<span class="kw">let </span>absolute_path = fs::canonicalize(CURRENT_DIR).unwrap();
|
||||
<span class="macro">log::info!</span>(
|
||||
<span class="string">"Loading config file from {}"</span>,
|
||||
<span class="string">"Loading config file from {}"</span>,
|
||||
absolute_path.to_str().unwrap()
|
||||
);
|
||||
<span class="comment">// merging default config from file
|
||||
</span>s = s.add_source(File::with_name(absolute_path.to_str().unwrap()));
|
||||
} <span class="kw">else if </span>Path::new(ETC).exists() {
|
||||
<span class="macro">log::info!</span>(<span class="string">"{}"</span>, <span class="macro">format!</span>(<span class="string">"Loading config file from {}"</span>, ETC));
|
||||
<span class="macro">log::info!</span>(<span class="string">"{}"</span>, <span class="macro">format!</span>(<span class="string">"Loading config file from {}"</span>, ETC));
|
||||
s = s.add_source(File::with_name(ETC));
|
||||
} <span class="kw">else </span>{
|
||||
<span class="macro">log::warn!</span>(<span class="string">"Configuration file not found"</span>);
|
||||
<span class="macro">log::warn!</span>(<span class="string">"Configuration file not found"</span>);
|
||||
}
|
||||
|
||||
s = <span class="self">Self</span>::env_override(s);
|
||||
@@ -908,19 +909,19 @@
|
||||
<span class="kw">if </span>s.broke_my_site_traffic_time.is_none()
|
||||
|| s.peak_sustainable_traffic_time.is_none()
|
||||
{
|
||||
<span class="macro">panic!</span>(<span class="string">"if captcha.default_difficulty_strategy.avg_traffic_time is set, then captcha.default_difficulty_strategy.broke_my_site_traffic_time and captcha.default_difficulty_strategy.peak_sustainable_traffic_time must also be set"</span>);
|
||||
<span class="macro">panic!</span>(<span class="string">"if captcha.default_difficulty_strategy.avg_traffic_time is set, then captcha.default_difficulty_strategy.broke_my_site_traffic_time and captcha.default_difficulty_strategy.peak_sustainable_traffic_time must also be set"</span>);
|
||||
}
|
||||
}
|
||||
<span class="kw">if </span>s.peak_sustainable_traffic_time.is_some() {
|
||||
<span class="kw">if </span>s.avg_traffic_time.is_none() || s.peak_sustainable_traffic_time.is_none()
|
||||
{
|
||||
<span class="macro">panic!</span>(<span class="string">"if captcha.default_difficulty_strategy.peak_sustainable_traffic_time is set, then captcha.default_difficulty_strategy.broke_my_site_traffic_time and captcha.default_difficulty_strategy.avg_traffic_time must also be set"</span>);
|
||||
<span class="macro">panic!</span>(<span class="string">"if captcha.default_difficulty_strategy.peak_sustainable_traffic_time is set, then captcha.default_difficulty_strategy.broke_my_site_traffic_time and captcha.default_difficulty_strategy.avg_traffic_time must also be set"</span>);
|
||||
}
|
||||
}
|
||||
<span class="kw">if </span>s.broke_my_site_traffic_time.is_some() {
|
||||
<span class="kw">if </span>s.avg_traffic_time.is_none() || s.peak_sustainable_traffic_time.is_none()
|
||||
{
|
||||
<span class="macro">panic!</span>(<span class="string">"if captcha.default_difficulty_strategy.broke_my_site_traffic_time is set, then captcha.default_difficulty_strategy.peak_sustainable_traffic_time and captcha.default_difficulty_strategy.avg_traffic_time must also be set"</span>);
|
||||
<span class="macro">panic!</span>(<span class="string">"if captcha.default_difficulty_strategy.broke_my_site_traffic_time is set, then captcha.default_difficulty_strategy.peak_sustainable_traffic_time and captcha.default_difficulty_strategy.avg_traffic_time must also be set"</span>);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -929,7 +930,7 @@
|
||||
<span class="kw">for </span>(parameter, env_var_name) <span class="kw">in </span>DEPRECATED_ENV_VARS.iter() {
|
||||
<span class="kw">if let </span><span class="prelude-val">Ok</span>(val) = env::var(env_var_name) {
|
||||
<span class="macro">log::warn!</span>(
|
||||
<span class="string">"Found {env_var_name}. {env_var_name} will be deprecated soon. Please see https://github.com/mCaptcha/mCaptcha/blob/master/docs/CONFIGURATION.md for latest environment variable names"
|
||||
<span class="string">"Found {env_var_name}. {env_var_name} will be deprecated soon. Please see https://github.com/mCaptcha/mCaptcha/blob/master/docs/CONFIGURATION.md for latest environment variable names"
|
||||
</span>);
|
||||
s = s.set_override(parameter, val).unwrap();
|
||||
}
|
||||
@@ -938,7 +939,7 @@
|
||||
<span class="kw">for </span>(parameter, env_var_name) <span class="kw">in </span>ENV_VAR_CONFIG.iter() {
|
||||
<span class="kw">if let </span><span class="prelude-val">Ok</span>(val) = env::var(env_var_name) {
|
||||
<span class="macro">log::debug!</span>(
|
||||
<span class="string">"Overriding [{parameter}] with environment variable {env_var_name}"
|
||||
<span class="string">"Overriding [{parameter}] with environment variable {env_var_name}"
|
||||
</span>);
|
||||
s = s.set_override(parameter, val).unwrap();
|
||||
}
|
||||
@@ -949,13 +950,13 @@
|
||||
|
||||
<span class="kw">fn </span>set_database_type(<span class="kw-2">&mut </span><span class="self">self</span>) {
|
||||
<span class="kw">let </span>url = Url::parse(<span class="kw-2">&</span><span class="self">self</span>.database.url)
|
||||
.expect(<span class="string">"couldn't parse Database URL and detect database type"</span>);
|
||||
.expect(<span class="string">"couldn't parse Database URL and detect database type"</span>);
|
||||
<span class="self">self</span>.database.database_type = DBType::from_url(<span class="kw-2">&</span>url).unwrap();
|
||||
}
|
||||
|
||||
<span class="kw">fn </span>check_url(<span class="kw-2">&</span><span class="self">self</span>) {
|
||||
Url::parse(<span class="kw-2">&</span><span class="self">self</span>.source_code)
|
||||
.expect(<span class="string">"Please enter a URL for source_code in settings"</span>);
|
||||
.expect(<span class="string">"Please enter a URL for source_code in settings"</span>);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -975,7 +976,7 @@
|
||||
|
||||
|
||||
(<span class="macro-nonterminal">$env</span>:expr, <span class="macro-nonterminal">$val</span>:expr, <span class="macro-nonterminal">$val_typed</span>:expr, $(<span class="macro-nonterminal">$param</span>:ident).+) => {
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, <span class="macro-nonterminal">$env</span>, <span class="macro-nonterminal">$val</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, <span class="macro-nonterminal">$env</span>, <span class="macro-nonterminal">$val</span>);
|
||||
env::set_var(<span class="macro-nonterminal">$env</span>, <span class="macro-nonterminal">$val</span>);
|
||||
new_settings = get_settings();
|
||||
<span class="macro">assert_eq!</span>(new_settings.$(<span class="macro-nonterminal">$param</span>).+, <span class="macro-nonterminal">$val_typed</span>);
|
||||
@@ -990,21 +991,21 @@
|
||||
}
|
||||
|
||||
<span class="comment">/* top level */
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_DEBUG"</span>, !init_settings.debug, debug);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_COMMERCIAL"</span>, !init_settings.commercial, commercial);
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_DEBUG"</span>, !init_settings.debug, debug);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_COMMERCIAL"</span>, !init_settings.commercial, commercial);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_ALLOW_REGISTRATION"</span>,
|
||||
<span class="string">"MCAPTCHA_ALLOW_REGISTRATION"</span>,
|
||||
!init_settings.allow_registration,
|
||||
allow_registration
|
||||
);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_ALLOW_DEMO"</span>, !init_settings.allow_demo, allow_demo);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_ALLOW_DEMO"</span>, !init_settings.allow_demo, allow_demo);
|
||||
|
||||
<span class="comment">/* database_type */
|
||||
|
||||
/* redis.url */
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_REDIS_URL"</span>;
|
||||
<span class="kw">let </span>val = <span class="string">"redis://redis.example.org"</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_REDIS_URL"</span>;
|
||||
<span class="kw">let </span>val = <span class="string">"redis://redis.example.org"</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
env::set_var(env, val);
|
||||
new_settings = get_settings();
|
||||
<span class="macro">assert_eq!</span>(new_settings.redis.as_ref().unwrap().url, val);
|
||||
@@ -1015,9 +1016,9 @@
|
||||
env::remove_var(env);
|
||||
|
||||
<span class="comment">/* redis.pool */
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_REDIS_POOL"</span>;
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_REDIS_POOL"</span>;
|
||||
<span class="kw">let </span>val = <span class="number">999</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
env::set_var(env, val.to_string());
|
||||
new_settings = get_settings();
|
||||
<span class="macro">assert_eq!</span>(new_settings.redis.as_ref().unwrap().pool, val);
|
||||
@@ -1027,41 +1028,41 @@
|
||||
);
|
||||
env::remove_var(env);
|
||||
|
||||
<span class="macro">helper!</span>(<span class="string">"PORT"</span>, <span class="number">0</span>, server.port);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_SERVER_DOMAIN"</span>, <span class="string">"example.org"</span>, server.domain);
|
||||
<span class="macro">helper!</span>(<span class="string">"PORT"</span>, <span class="number">0</span>, server.port);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_SERVER_DOMAIN"</span>, <span class="string">"example.org"</span>, server.domain);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_SERVER_COOKIE_SECRET"</span>,
|
||||
<span class="string">"dafasdfsdf"</span>,
|
||||
<span class="string">"MCAPTCHA_SERVER_COOKIE_SECRET"</span>,
|
||||
<span class="string">"dafasdfsdf"</span>,
|
||||
server.cookie_secret
|
||||
);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_SERVER_IP"</span>, <span class="string">"9.9.9.9"</span>, server.ip);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_SERVER_PROXY_HAS_TLS"</span>, <span class="bool-val">true</span>, server.proxy_has_tls);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_SERVER_IP"</span>, <span class="string">"9.9.9.9"</span>, server.ip);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_SERVER_PROXY_HAS_TLS"</span>, <span class="bool-val">true</span>, server.proxy_has_tls);
|
||||
|
||||
<span class="comment">/* captcha */
|
||||
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_CAPTCHA_SALT"</span>, <span class="string">"foobarasdfasdf"</span>, captcha.salt);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_CAPTCHA_GC"</span>, <span class="number">500</span>, captcha.gc);
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_CAPTCHA_SALT"</span>, <span class="string">"foobarasdfasdf"</span>, captcha.salt);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_CAPTCHA_GC"</span>, <span class="number">500</span>, captcha.gc);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_RUNNERS"</span>,
|
||||
<span class="string">"500"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_RUNNERS"</span>,
|
||||
<span class="string">"500"</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="number">500</span>),
|
||||
captcha.runners
|
||||
);
|
||||
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_AVG_TRAFFIC_DIFFICULTY"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_AVG_TRAFFIC_DIFFICULTY"</span>,
|
||||
<span class="number">999</span>,
|
||||
captcha.default_difficulty_strategy.avg_traffic_difficulty
|
||||
);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_PEAK_TRAFFIC_DIFFICULTY"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_PEAK_TRAFFIC_DIFFICULTY"</span>,
|
||||
<span class="number">999</span>,
|
||||
captcha
|
||||
.default_difficulty_strategy
|
||||
.peak_sustainable_traffic_difficulty
|
||||
);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_BROKE_MY_SITE_TRAFFIC"</span>,
|
||||
<span class="string">"MCAPTCHA_CAPTCHA_BROKE_MY_SITE_TRAFFIC"</span>,
|
||||
<span class="number">999</span>,
|
||||
captcha
|
||||
.default_difficulty_strategy
|
||||
@@ -1071,28 +1072,28 @@
|
||||
<span class="comment">/* SMTP */
|
||||
|
||||
</span><span class="kw">let </span>vals = [
|
||||
<span class="string">"MCAPTCHA_SMTP_FROM"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_REPLY_TO"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_URL"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_USERNAME"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_PASSWORD"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_PORT"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_FROM"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_REPLY_TO"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_URL"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_USERNAME"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_PASSWORD"</span>,
|
||||
<span class="string">"MCAPTCHA_SMTP_PORT"</span>,
|
||||
];
|
||||
<span class="kw">for </span>env <span class="kw">in </span>vals.iter() {
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, env);
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, env);
|
||||
env::set_var(env, env);
|
||||
}
|
||||
|
||||
<span class="kw">let </span>port = <span class="number">9999</span>;
|
||||
env::set_var(<span class="string">"MCAPTCHA_SMTP_PORT"</span>, port.to_string());
|
||||
env::set_var(<span class="string">"MCAPTCHA_SMTP_PORT"</span>, port.to_string());
|
||||
|
||||
new_settings = get_settings();
|
||||
<span class="kw">let </span>smtp_new = new_settings.smtp.as_ref().unwrap();
|
||||
<span class="kw">let </span>smtp_old = init_settings.smtp.as_ref().unwrap();
|
||||
<span class="macro">assert_eq!</span>(smtp_new.from, <span class="string">"MCAPTCHA_SMTP_FROM"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.reply, <span class="string">"MCAPTCHA_SMTP_REPLY_TO"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.username, <span class="string">"MCAPTCHA_SMTP_USERNAME"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.password, <span class="string">"MCAPTCHA_SMTP_PASSWORD"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.from, <span class="string">"MCAPTCHA_SMTP_FROM"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.reply, <span class="string">"MCAPTCHA_SMTP_REPLY_TO"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.username, <span class="string">"MCAPTCHA_SMTP_USERNAME"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.password, <span class="string">"MCAPTCHA_SMTP_PASSWORD"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.port, port);
|
||||
<span class="macro">assert_ne!</span>(smtp_new, smtp_old);
|
||||
|
||||
@@ -1112,7 +1113,7 @@
|
||||
|
||||
|
||||
(<span class="macro-nonterminal">$env</span>:expr, <span class="macro-nonterminal">$val</span>:expr, <span class="macro-nonterminal">$val_typed</span>:expr, $(<span class="macro-nonterminal">$param</span>:ident).+) => {
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, <span class="macro-nonterminal">$env</span>, <span class="macro-nonterminal">$val</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, <span class="macro-nonterminal">$env</span>, <span class="macro-nonterminal">$val</span>);
|
||||
env::set_var(<span class="macro-nonterminal">$env</span>, <span class="macro-nonterminal">$val</span>);
|
||||
new_settings = get_settings();
|
||||
<span class="macro">assert_eq!</span>(new_settings.$(<span class="macro-nonterminal">$param</span>).+, <span class="macro-nonterminal">$val_typed</span>);
|
||||
@@ -1127,33 +1128,33 @@
|
||||
}
|
||||
|
||||
<span class="comment">/* top level */
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_debug"</span>, <span class="bool-val">false</span>, debug);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_commercial"</span>, <span class="bool-val">true</span>, commercial);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_allow_registration"</span>, <span class="bool-val">false</span>, allow_registration);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_allow_demo"</span>, <span class="bool-val">false</span>, allow_demo);
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_debug"</span>, <span class="bool-val">false</span>, debug);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_commercial"</span>, <span class="bool-val">true</span>, commercial);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_allow_registration"</span>, <span class="bool-val">false</span>, allow_registration);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_allow_demo"</span>, <span class="bool-val">false</span>, allow_demo);
|
||||
|
||||
<span class="comment">/* database_type */
|
||||
|
||||
</span><span class="macro">helper!</span>(
|
||||
<span class="string">"DATABASE_URL"</span>,
|
||||
<span class="string">"postgres://postgres:password@localhost:5432/postgres"</span>,
|
||||
<span class="string">"DATABASE_URL"</span>,
|
||||
<span class="string">"postgres://postgres:password@localhost:5432/postgres"</span>,
|
||||
database.url
|
||||
);
|
||||
<span class="macro">assert_eq!</span>(new_settings.database.database_type, DBType::Postgres);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"DATABASE_URL"</span>,
|
||||
<span class="string">"mysql://maria:password@localhost/maria"</span>,
|
||||
<span class="string">"DATABASE_URL"</span>,
|
||||
<span class="string">"mysql://maria:password@localhost/maria"</span>,
|
||||
database.url
|
||||
);
|
||||
<span class="macro">assert_eq!</span>(new_settings.database.database_type, DBType::Maria);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_database_POOL"</span>, <span class="number">1000</span>, database.pool);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_database_POOL"</span>, <span class="number">1000</span>, database.pool);
|
||||
|
||||
<span class="comment">/* redis */
|
||||
|
||||
/* redis.url */
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_redis_URL"</span>;
|
||||
<span class="kw">let </span>val = <span class="string">"redis://redis.example.org"</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_redis_URL"</span>;
|
||||
<span class="kw">let </span>val = <span class="string">"redis://redis.example.org"</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
env::set_var(env, val);
|
||||
new_settings = get_settings();
|
||||
<span class="macro">assert_eq!</span>(new_settings.redis.as_ref().unwrap().url, val);
|
||||
@@ -1164,9 +1165,9 @@
|
||||
env::remove_var(env);
|
||||
|
||||
<span class="comment">/* redis.pool */
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_redis_POOL"</span>;
|
||||
</span><span class="kw">let </span>env = <span class="string">"MCAPTCHA_redis_POOL"</span>;
|
||||
<span class="kw">let </span>val = <span class="number">999</span>;
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, val);
|
||||
env::set_var(env, val.to_string());
|
||||
new_settings = get_settings();
|
||||
<span class="macro">assert_eq!</span>(new_settings.redis.as_ref().unwrap().pool, val);
|
||||
@@ -1176,51 +1177,51 @@
|
||||
);
|
||||
env::remove_var(env);
|
||||
|
||||
<span class="macro">helper!</span>(<span class="string">"PORT"</span>, <span class="number">0</span>, server.port);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_server_DOMAIN"</span>, <span class="string">"example.org"</span>, server.domain);
|
||||
<span class="macro">helper!</span>(<span class="string">"PORT"</span>, <span class="number">0</span>, server.port);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_server_DOMAIN"</span>, <span class="string">"example.org"</span>, server.domain);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA__server_COOKIE_SECRET"</span>,
|
||||
<span class="string">"dafasdfsdf"</span>,
|
||||
<span class="string">"MCAPTCHA__server_COOKIE_SECRET"</span>,
|
||||
<span class="string">"dafasdfsdf"</span>,
|
||||
server.cookie_secret
|
||||
);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA__server_IP"</span>, <span class="string">"9.9.9.9"</span>, server.ip);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA__server_PROXY_HAS_TLS"</span>, <span class="bool-val">true</span>, server.proxy_has_tls);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA__server_IP"</span>, <span class="string">"9.9.9.9"</span>, server.ip);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA__server_PROXY_HAS_TLS"</span>, <span class="bool-val">true</span>, server.proxy_has_tls);
|
||||
|
||||
<span class="comment">/* captcha */
|
||||
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_SALT"</span>, <span class="string">"foobarasdfasdf"</span>, captcha.salt);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_GC"</span>, <span class="number">500</span>, captcha.gc);
|
||||
</span><span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_SALT"</span>, <span class="string">"foobarasdfasdf"</span>, captcha.salt);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_GC"</span>, <span class="number">500</span>, captcha.gc);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_RUNNERS"</span>,
|
||||
<span class="string">"500"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_RUNNERS"</span>,
|
||||
<span class="string">"500"</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="number">500</span>),
|
||||
captcha.runners
|
||||
);
|
||||
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_QUEUE_LENGTH"</span>, <span class="number">500</span>, captcha.queue_length);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_ENABLE_STATS"</span>, <span class="bool-val">false</span>, captcha.enable_stats);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_QUEUE_LENGTH"</span>, <span class="number">500</span>, captcha.queue_length);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_ENABLE_STATS"</span>, <span class="bool-val">false</span>, captcha.enable_stats);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_difficulty"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_difficulty"</span>,
|
||||
<span class="number">999</span>,
|
||||
captcha.default_difficulty_strategy.avg_traffic_difficulty
|
||||
);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_difficulty"</span>, <span class="number">999 </span>, captcha.default_difficulty_strategy.peak_sustainable_traffic_difficulty);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_difficulty"</span>, <span class="number">999 </span>, captcha.default_difficulty_strategy.broke_my_site_traffic_difficulty);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_difficulty"</span>, <span class="number">999 </span>, captcha.default_difficulty_strategy.peak_sustainable_traffic_difficulty);
|
||||
<span class="macro">helper!</span>(<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_difficulty"</span>, <span class="number">999 </span>, captcha.default_difficulty_strategy.broke_my_site_traffic_difficulty);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_duration"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_duration"</span>,
|
||||
<span class="number">999</span>,
|
||||
captcha.default_difficulty_strategy.duration
|
||||
);
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_time"</span>,
|
||||
<span class="string">"10"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_avg_traffic_time"</span>,
|
||||
<span class="string">"10"</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="number">10</span>),
|
||||
captcha.default_difficulty_strategy.avg_traffic_time
|
||||
);
|
||||
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_time"</span>,
|
||||
<span class="string">"20"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_peak_sustainable_traffic_time"</span>,
|
||||
<span class="string">"20"</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="number">20</span>),
|
||||
captcha
|
||||
.default_difficulty_strategy
|
||||
@@ -1228,8 +1229,8 @@
|
||||
);
|
||||
|
||||
<span class="macro">helper!</span>(
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_time"</span>,
|
||||
<span class="string">"30"</span>,
|
||||
<span class="string">"MCAPTCHA_captcha_DEFAULT_DIFFICULTY_STRATEGY_broke_my_site_traffic_time"</span>,
|
||||
<span class="string">"30"</span>,
|
||||
<span class="prelude-val">Some</span>(<span class="number">30</span>),
|
||||
captcha
|
||||
.default_difficulty_strategy
|
||||
@@ -1239,28 +1240,28 @@
|
||||
<span class="comment">/* SMTP */
|
||||
|
||||
</span><span class="kw">let </span>vals = [
|
||||
<span class="string">"MCAPTCHA_smtp_FROM"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_REPLY"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_URL"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_USERNAME"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_PASSWORD"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_PORT"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_FROM"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_REPLY"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_URL"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_USERNAME"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_PASSWORD"</span>,
|
||||
<span class="string">"MCAPTCHA_smtp_PORT"</span>,
|
||||
];
|
||||
<span class="kw">for </span>env <span class="kw">in </span>vals.iter() {
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, env);
|
||||
<span class="macro">println!</span>(<span class="string">"Setting env var {} to {} for test"</span>, env, env);
|
||||
env::set_var(env, env);
|
||||
}
|
||||
|
||||
<span class="kw">let </span>port = <span class="number">9999</span>;
|
||||
env::set_var(<span class="string">"MCAPTCHA_smtp_PORT"</span>, port.to_string());
|
||||
env::set_var(<span class="string">"MCAPTCHA_smtp_PORT"</span>, port.to_string());
|
||||
|
||||
new_settings = get_settings();
|
||||
<span class="kw">let </span>smtp_new = new_settings.smtp.as_ref().unwrap();
|
||||
<span class="kw">let </span>smtp_old = init_settings.smtp.as_ref().unwrap();
|
||||
<span class="macro">assert_eq!</span>(smtp_new.from, <span class="string">"MCAPTCHA_smtp_FROM"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.reply, <span class="string">"MCAPTCHA_smtp_REPLY"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.username, <span class="string">"MCAPTCHA_smtp_USERNAME"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.password, <span class="string">"MCAPTCHA_smtp_PASSWORD"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.from, <span class="string">"MCAPTCHA_smtp_FROM"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.reply, <span class="string">"MCAPTCHA_smtp_REPLY"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.username, <span class="string">"MCAPTCHA_smtp_USERNAME"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.password, <span class="string">"MCAPTCHA_smtp_PASSWORD"</span>);
|
||||
<span class="macro">assert_eq!</span>(smtp_new.port, port);
|
||||
<span class="macro">assert_ne!</span>(smtp_new, smtp_old);
|
||||
|
||||
@@ -1273,9 +1274,9 @@
|
||||
// fn url_prefix_test() {
|
||||
// let mut settings = Settings::new().unwrap();
|
||||
// assert!(settings.server.url_prefix.is_none());
|
||||
// settings.server.url_prefix = Some("test".into());
|
||||
// settings.server.url_prefix = Some("test".into());
|
||||
// settings.server.check_url_prefix();
|
||||
// settings.server.url_prefix = Some(" ".into());
|
||||
// settings.server.url_prefix = Some(" ".into());
|
||||
// settings.server.check_url_prefix();
|
||||
// assert!(settings.server.url_prefix.is_none());
|
||||
// }
|
||||
@@ -1284,8 +1285,8 @@
|
||||
// fn smtp_config_works() {
|
||||
// let settings = Settings::new().unwrap();
|
||||
// assert!(settings.smtp.is_some());
|
||||
// assert_eq!(settings.smtp.as_ref().unwrap().password, "password");
|
||||
// assert_eq!(settings.smtp.as_ref().unwrap().username, "admin");
|
||||
// assert_eq!(settings.smtp.as_ref().unwrap().password, "password");
|
||||
// assert_eq!(settings.smtp.as_ref().unwrap().username, "admin");
|
||||
// }
|
||||
</span>}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/static_assets/filemap.rs`."><title>filemap.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/static_assets/filemap.rs`."><title>filemap.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -47,11 +48,11 @@
|
||||
<span class="kw">impl </span>FileMap {
|
||||
<span class="attr">#[allow(clippy::new_without_default)]
|
||||
</span><span class="kw">pub fn </span>new() -> <span class="self">Self </span>{
|
||||
<span class="kw">let </span>map = <span class="macro">include_str!</span>(<span class="string">"../libcachebust_data.json"</span>);
|
||||
<span class="kw">let </span>map = <span class="macro">include_str!</span>(<span class="string">"../libcachebust_data.json"</span>);
|
||||
<span class="kw">let </span>files = Files::new(map);
|
||||
<span class="self">Self </span>{ files }
|
||||
}
|
||||
<span class="kw">pub fn </span>get<<span class="lifetime">'a</span>>(<span class="kw-2">&</span><span class="lifetime">'a </span><span class="self">self</span>, path: <span class="kw-2">&</span><span class="lifetime">'a </span>str) -> <span class="prelude-ty">Option</span><<span class="kw-2">&</span><span class="lifetime">'a </span>str> {
|
||||
<span class="kw">pub fn </span>get<<span class="lifetime">'a</span>>(<span class="kw-2">&</span><span class="lifetime">'a </span><span class="self">self</span>, path: <span class="kw-2">&</span><span class="lifetime">'a </span>str) -> <span class="prelude-ty">Option</span><<span class="kw-2">&</span><span class="lifetime">'a </span>str> {
|
||||
<span class="kw">let </span>file_path = <span class="self">self</span>.files.get_full_path(path);
|
||||
file_path.map(|file_path| <span class="kw-2">&</span>file_path[<span class="number">1</span>..])
|
||||
}
|
||||
@@ -63,9 +64,9 @@
|
||||
<span class="attr">#[test]
|
||||
</span><span class="kw">fn </span>filemap_works() {
|
||||
<span class="kw">let </span>files = <span class="kw">super</span>::FileMap::new();
|
||||
<span class="kw">let </span>css = files.get(<span class="string">"./static/cache/bundle/css/main.css"</span>).unwrap();
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, css);
|
||||
<span class="macro">assert!</span>(css.contains(<span class="string">"/assets/bundle/css"</span>));
|
||||
<span class="kw">let </span>css = files.get(<span class="string">"./static/cache/bundle/css/main.css"</span>).unwrap();
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, css);
|
||||
<span class="macro">assert!</span>(css.contains(<span class="string">"/assets/bundle/css"</span>));
|
||||
}
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/static_assets/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/static_assets/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/static_assets/static_files.rs`."><title>static_files.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/static_assets/static_files.rs`."><title>static_files.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -175,54 +176,54 @@
|
||||
|
||||
<span class="kw">use </span><span class="kw">crate</span>::FILES;
|
||||
|
||||
<span class="kw">type </span>Img = (<span class="kw-2">&</span><span class="lifetime">'static </span>str, <span class="kw-2">&</span><span class="lifetime">'static </span>str);
|
||||
<span class="kw">type </span>Img = (<span class="kw-2">&</span><span class="lifetime">'static </span>str, <span class="kw-2">&</span><span class="lifetime">'static </span>str);
|
||||
|
||||
<span class="macro">lazy_static! </span>{
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>KEY: Img =
|
||||
(FILES.get(<span class="string">"./static/cache/img/svg/key.svg"</span>).unwrap(), <span class="string">"key"</span>);
|
||||
(FILES.get(<span class="string">"./static/cache/img/svg/key.svg"</span>).unwrap(), <span class="string">"key"</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>GITHUB: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/github.svg"</span>).unwrap(),
|
||||
<span class="string">"Source code"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/github.svg"</span>).unwrap(),
|
||||
<span class="string">"Source code"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>HOME: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/home.svg"</span>).unwrap(),
|
||||
<span class="string">"Home"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/home.svg"</span>).unwrap(),
|
||||
<span class="string">"Home"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>SETTINGS_ICON: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/settings.svg"</span>).unwrap(),
|
||||
<span class="string">"Settings"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/settings.svg"</span>).unwrap(),
|
||||
<span class="string">"Settings"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>CREDIT_CARD: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/credit-card.svg"</span>).unwrap(),
|
||||
<span class="string">"Payment"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/credit-card.svg"</span>).unwrap(),
|
||||
<span class="string">"Payment"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>HELP_CIRCLE: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/help-circle.svg"</span>).unwrap(),
|
||||
<span class="string">"Help"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/help-circle.svg"</span>).unwrap(),
|
||||
<span class="string">"Help"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>MESSAGE: Img = (
|
||||
FILES
|
||||
.get(<span class="string">"./static/cache/img/svg/message-square.svg"</span>)
|
||||
.get(<span class="string">"./static/cache/img/svg/message-square.svg"</span>)
|
||||
.unwrap(),
|
||||
<span class="string">"Message"
|
||||
<span class="string">"Message"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>DOCS_ICON: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/file-text.svg"</span>).unwrap(),
|
||||
<span class="string">"Documentation"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/file-text.svg"</span>).unwrap(),
|
||||
<span class="string">"Documentation"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>MCAPTCHA_TRANS_ICON: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/icon-trans.png"</span>).unwrap(),
|
||||
<span class="string">"Logo"
|
||||
FILES.get(<span class="string">"./static/cache/img/icon-trans.png"</span>).unwrap(),
|
||||
<span class="string">"Logo"
|
||||
</span>);
|
||||
<span class="kw">pub static </span><span class="kw-2">ref </span>BAR_CHART: Img = (
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/bar-chart.svg"</span>).unwrap(),
|
||||
<span class="string">"Statistics"
|
||||
FILES.get(<span class="string">"./static/cache/img/svg/bar-chart.svg"</span>).unwrap(),
|
||||
<span class="string">"Statistics"
|
||||
</span>);
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(RustEmbed)]
|
||||
#[folder = <span class="string">"assets/"</span>]
|
||||
#[folder = <span class="string">"assets/"</span>]
|
||||
</span><span class="kw">struct </span>Asset;
|
||||
|
||||
<span class="kw">fn </span>handle_assets(path: <span class="kw-2">&</span>str) -> HttpResponse {
|
||||
@@ -236,23 +237,23 @@
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::CacheControl(<span class="macro">vec!</span>[
|
||||
header::CacheDirective::Public,
|
||||
header::CacheDirective::Extension(<span class="string">"immutable"</span>.into(), <span class="prelude-val">None</span>),
|
||||
header::CacheDirective::Extension(<span class="string">"immutable"</span>.into(), <span class="prelude-val">None</span>),
|
||||
header::CacheDirective::MaxAge(CACHE_AGE),
|
||||
]))
|
||||
.content_type(from_path(path).first_or_octet_stream().as_ref())
|
||||
.body(body)
|
||||
}
|
||||
<span class="prelude-val">None </span>=> HttpResponse::NotFound().body(<span class="string">"404 Not Found"</span>),
|
||||
<span class="prelude-val">None </span>=> HttpResponse::NotFound().body(<span class="string">"404 Not Found"</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[get(<span class="string">"/assets/{_:.*}"</span>)]
|
||||
<span class="attr">#[get(<span class="string">"/assets/{_:.*}"</span>)]
|
||||
</span><span class="kw">pub async fn </span>static_files(path: web::Path<String>) -> <span class="kw">impl </span>Responder {
|
||||
handle_assets(<span class="kw-2">&</span>path)
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(RustEmbed)]
|
||||
#[folder = <span class="string">"static/favicons/"</span>]
|
||||
#[folder = <span class="string">"static/favicons/"</span>]
|
||||
</span><span class="kw">struct </span>Favicons;
|
||||
|
||||
<span class="kw">fn </span>handle_favicons(path: <span class="kw-2">&</span>str) -> HttpResponse {
|
||||
@@ -266,19 +267,19 @@
|
||||
HttpResponse::Ok()
|
||||
.insert_header(header::CacheControl(<span class="macro">vec!</span>[
|
||||
header::CacheDirective::Public,
|
||||
header::CacheDirective::Extension(<span class="string">"immutable"</span>.into(), <span class="prelude-val">None</span>),
|
||||
header::CacheDirective::Extension(<span class="string">"immutable"</span>.into(), <span class="prelude-val">None</span>),
|
||||
header::CacheDirective::MaxAge(CACHE_AGE),
|
||||
]))
|
||||
.content_type(from_path(path).first_or_octet_stream().as_ref())
|
||||
.body(body)
|
||||
}
|
||||
<span class="prelude-val">None </span>=> HttpResponse::NotFound().body(<span class="string">"404 Not Found"</span>),
|
||||
<span class="prelude-val">None </span>=> HttpResponse::NotFound().body(<span class="string">"404 Not Found"</span>),
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[get(<span class="string">"/{file}"</span>)]
|
||||
<span class="attr">#[get(<span class="string">"/{file}"</span>)]
|
||||
</span><span class="kw">pub async fn </span>favicons(path: web::Path<String>) -> <span class="kw">impl </span>Responder {
|
||||
<span class="macro">debug!</span>(<span class="string">"searching favicons"</span>);
|
||||
<span class="macro">debug!</span>(<span class="string">"searching favicons"</span>);
|
||||
handle_favicons(<span class="kw-2">&</span>path)
|
||||
}
|
||||
|
||||
@@ -298,13 +299,13 @@
|
||||
<span class="kw-2">*</span><span class="kw">crate</span>::VERIFICATIN_WIDGET_JS,
|
||||
<span class="kw-2">*</span><span class="kw">crate</span>::VERIFICATIN_WIDGET_CSS,
|
||||
<span class="kw">crate</span>::FILES
|
||||
.get(<span class="string">"./static/cache/img/icon-trans.png"</span>)
|
||||
.get(<span class="string">"./static/cache/img/icon-trans.png"</span>)
|
||||
.unwrap(),
|
||||
<span class="string">"/favicon.ico"</span>,
|
||||
<span class="string">"/favicon.ico"</span>,
|
||||
];
|
||||
|
||||
<span class="kw">for </span>u <span class="kw">in </span>urls.iter() {
|
||||
<span class="macro">println!</span>(<span class="string">"[*] Testing static asset at URL: {u}"</span>);
|
||||
<span class="macro">println!</span>(<span class="string">"[*] Testing static asset at URL: {u}"</span>);
|
||||
<span class="kw">let </span>resp =
|
||||
test::call_service(<span class="kw-2">&</span>app, test::TestRequest::get().uri(u).to_request())
|
||||
.<span class="kw">await</span>;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/stats.rs`."><title>stats.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/stats.rs`."><title>stats.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -151,7 +152,7 @@
|
||||
|
||||
<span class="kw">impl</span><T> CloneStats <span class="kw">for </span>T
|
||||
<span class="kw">where
|
||||
</span>T: Stats + Clone + <span class="lifetime">'static</span>,
|
||||
</span>T: Stats + Clone + <span class="lifetime">'static</span>,
|
||||
{
|
||||
<span class="kw">fn </span>clone_stats(<span class="kw-2">&</span><span class="self">self</span>) -> Box<<span class="kw">dyn </span>Stats> {
|
||||
Box::new(<span class="self">self</span>.clone())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/survey.rs`."><title>survey.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/survey.rs`."><title>survey.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../src-files.js"></script><script defer src="../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -267,7 +268,7 @@
|
||||
<span class="kw">impl </span>Survey {
|
||||
<span class="kw">pub fn </span>new(app_ctx: AppData) -> <span class="self">Self </span>{
|
||||
<span class="kw">if </span>app_ctx.settings.survey.is_none() {
|
||||
<span class="macro">panic!</span>(<span class="string">"Survey uploader shouldn't be initialized it isn't configured, please report this bug"</span>)
|
||||
<span class="macro">panic!</span>(<span class="string">"Survey uploader shouldn't be initialized it isn't configured, please report this bug"</span>)
|
||||
}
|
||||
Survey {
|
||||
client: Client::new(),
|
||||
@@ -292,7 +293,7 @@
|
||||
<span class="kw">let </span>fut = <span class="kw">async move </span>{
|
||||
<span class="kw">loop </span>{
|
||||
<span class="kw">if </span>!can_run(<span class="kw-2">&mut </span>rx) {
|
||||
<span class="macro">log::info!</span>(<span class="string">"Stopping survey uploads"</span>);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Stopping survey uploads"</span>);
|
||||
<span class="kw">break</span>;
|
||||
}
|
||||
|
||||
@@ -310,7 +311,7 @@
|
||||
|
||||
<span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..this.app_ctx.settings.survey.as_ref().unwrap().rate_limit {
|
||||
<span class="kw">if </span>!can_run(<span class="kw-2">&mut </span>rx) {
|
||||
<span class="macro">log::info!</span>(<span class="string">"Stopping survey uploads"</span>);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Stopping survey uploads"</span>);
|
||||
<span class="kw">break</span>;
|
||||
}
|
||||
sleep(Duration::new(<span class="number">1</span>, <span class="number">0</span>)).<span class="kw">await</span>;
|
||||
@@ -319,10 +320,10 @@
|
||||
|
||||
<span class="comment">// for url in this.app_ctx.settings.survey.as_ref().unwrap().nodes.iter() {
|
||||
// if !can_run(&mut rx) {
|
||||
// log::info!("Stopping survey uploads");
|
||||
// log::info!("Stopping survey uploads");
|
||||
// break;
|
||||
// }
|
||||
// log::info!("Uploading to survey instance {}", url);
|
||||
// log::info!("Uploading to survey instance {}", url);
|
||||
// }
|
||||
</span>}
|
||||
};
|
||||
@@ -333,7 +334,7 @@
|
||||
<span class="kw">let </span>res = <span class="self">self
|
||||
</span>.client
|
||||
.get(<span class="macro">format!</span>(
|
||||
<span class="string">"http://{}{}"</span>,
|
||||
<span class="string">"http://{}{}"</span>,
|
||||
<span class="self">self</span>.app_ctx.settings.server.get_ip(),
|
||||
V1_API_ROUTES.meta.health
|
||||
))
|
||||
@@ -344,7 +345,7 @@
|
||||
}
|
||||
|
||||
<span class="kw">async fn </span>schedule_upload_job(<span class="kw-2">&</span><span class="self">self</span>) -> ServiceResult<()> {
|
||||
<span class="macro">log::debug!</span>(<span class="string">"Running upload job"</span>);
|
||||
<span class="macro">log::debug!</span>(<span class="string">"Running upload job"</span>);
|
||||
<span class="attr">#[derive(Serialize)]
|
||||
</span><span class="kw">struct </span>Secret {
|
||||
secret: String,
|
||||
@@ -353,7 +354,7 @@
|
||||
<span class="kw">loop </span>{
|
||||
<span class="kw">let </span>psuedo_ids = <span class="self">self</span>.app_ctx.db.analytics_get_all_psuedo_ids(page).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">if </span>psuedo_ids.is_empty() {
|
||||
<span class="macro">log::debug!</span>(<span class="string">"upload job complete, no more IDs to upload"</span>);
|
||||
<span class="macro">log::debug!</span>(<span class="string">"upload job complete, no more IDs to upload"</span>);
|
||||
<span class="kw">break</span>;
|
||||
}
|
||||
<span class="kw">for </span>id <span class="kw">in </span>psuedo_ids {
|
||||
@@ -361,12 +362,12 @@
|
||||
<span class="kw">if let </span><span class="prelude-val">Some</span>(secret) = <span class="self">self</span>.app_ctx.survey_secrets.get(url.as_str()) {
|
||||
<span class="kw">let </span>payload = Secret { secret };
|
||||
|
||||
<span class="macro">log::info!</span>(<span class="string">"Uploading to survey instance {} campaign {id}"</span>, url);
|
||||
<span class="macro">log::info!</span>(<span class="string">"Uploading to survey instance {} campaign {id}"</span>, url);
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>url = url.clone();
|
||||
url.set_path(<span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"/mcaptcha/api/v1/{id}/upload"</span>));
|
||||
url.set_path(<span class="kw-2">&</span><span class="macro">format!</span>(<span class="string">"/mcaptcha/api/v1/{id}/upload"</span>));
|
||||
<span class="kw">let </span>resp =
|
||||
<span class="self">self</span>.client.post(url).json(<span class="kw-2">&</span>payload).send().<span class="kw">await</span>.unwrap();
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, resp.text().<span class="kw">await</span>.unwrap());
|
||||
<span class="macro">println!</span>(<span class="string">"{}"</span>, resp.text().<span class="kw">await</span>.unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -410,7 +411,7 @@
|
||||
.survey_secrets
|
||||
.set(secret_upload_auth_token, url.to_string());
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>url = url.clone();
|
||||
url.set_path(<span class="string">"/mcaptcha/api/v1/register"</span>);
|
||||
url.set_path(<span class="string">"/mcaptcha/api/v1/register"</span>);
|
||||
<span class="kw">let </span>resp = <span class="self">self</span>.client.post(url).json(<span class="kw-2">&</span>payload).send().<span class="kw">await</span>.unwrap();
|
||||
}
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/widget/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-9ee3a5e31a2afa3e.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.75.0 (82e1608df 2023-12-21)" data-channel="1.75.0" data-search-js="search-8fbf244ebcf71464.js" data-settings-js="settings-74424d7eec62a23e.js" ><script src="../../../static.files/storage-fec3eaa3851e447d.js"></script><script defer src="../../../static.files/src-script-3280b574d94e47b4.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-9dd44ab47b99a0fb.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-5d8b3c7633ad77ba.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `src/widget/mod.rs`."><title>mod.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="../../../static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><meta name="rustdoc-vars" data-root-path="../../../" data-static-root-path="../../../static.files/" data-current-crate="mcaptcha" data-themes="" data-resource-suffix="" data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)" data-channel="1.76.0" data-search-js="search-2b6ce74ff89ae146.js" data-settings-js="settings-4313503d2e1961c2.js" ><script src="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><script defer src="../../../static.files/src-script-39ed315d46fb705f.js"></script><script defer src="../../../src-files.js"></script><script defer src="../../../static.files/main-305769736d49e732.js"></script><noscript><link rel="stylesheet" href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="../../../static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc src"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"></nav><div class="sidebar-resizer"></div>
|
||||
<main><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" tabindex="-1"><a href="../../../help.html" title="help">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="example-wrap"><div data-nosnippet><pre class="src-line-numbers"><a href="#1" id="1">1</a>
|
||||
<a href="#2" id="2">2</a>
|
||||
<a href="#3" id="3">3</a>
|
||||
<a href="#4" id="4">4</a>
|
||||
@@ -84,23 +85,23 @@
|
||||
|
||||
<span class="kw">pub mod </span>routes {
|
||||
<span class="kw">pub struct </span>Widget {
|
||||
<span class="kw">pub </span>verification_widget: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
<span class="kw">pub </span>verification_widget: <span class="kw-2">&</span><span class="lifetime">'static </span>str,
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Widget {
|
||||
<span class="kw">pub const fn </span>new() -> <span class="self">Self </span>{
|
||||
Widget {
|
||||
verification_widget: <span class="string">"/widget"</span>,
|
||||
verification_widget: <span class="string">"/widget"</span>,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[derive(TemplateOnce, Clone)]
|
||||
#[template(path = <span class="string">"widget/index.html"</span>)]
|
||||
#[template(path = <span class="string">"widget/index.html"</span>)]
|
||||
</span><span class="kw">pub struct </span>IndexPage;
|
||||
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"mCaptcha CAPTCHA verification"</span>;
|
||||
<span class="kw">const </span>PAGE: <span class="kw-2">&</span>str = <span class="string">"mCaptcha CAPTCHA verification"</span>;
|
||||
|
||||
<span class="kw">impl </span>IndexPage {
|
||||
<span class="kw">fn </span>new() -> <span class="self">Self </span>{
|
||||
@@ -113,10 +114,10 @@
|
||||
}
|
||||
|
||||
<span class="doccomment">/// render a client side widget for CAPTCHA verification
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::WIDGET_ROUTES.verification_widget"</span>)] </span><span class="comment">//, wrap = "crate::CheckLogin")]
|
||||
</span><span class="attr">#[my_codegen::get(path = <span class="string">"crate::WIDGET_ROUTES.verification_widget"</span>)] </span><span class="comment">//, wrap = "crate::CheckLogin")]
|
||||
</span><span class="kw">async fn </span>show_widget() -> PageResult<<span class="kw">impl </span>Responder> {
|
||||
<span class="prelude-val">Ok</span>(HttpResponse::Ok()
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.content_type(<span class="string">"text/html; charset=utf-8"</span>)
|
||||
.body(<span class="kw-2">&**</span>INDEX_PAGE))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user