mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-13 19:15:39 +00:00
Deploying to gh-pages from @ ac502b7c08 🚀
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
<!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`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>settings.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled><link rel="stylesheet" type="text/css" href="../../dark.css" disabled><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../source-script.js"></script><script defer src="../../source-files.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../mcaptcha/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../mcaptcha/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../mcaptcha/index.html"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></a><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><button type="button">?</button></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="example-wrap"><pre class="line-numbers"><span id="1">1</span>
|
||||
<!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`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>settings.rs - source</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="../../source-script.js"></script><script defer src="../../source-files.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc source"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">☰</button><a class="sidebar-logo" href="../../mcaptcha/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../mcaptcha/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../mcaptcha/index.html"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></a><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><button type="button">?</button></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="example-wrap"><pre class="line-numbers"><span id="1">1</span>
|
||||
<span id="2">2</span>
|
||||
<span id="3">3</span>
|
||||
<span id="4">4</span>
|
||||
@@ -279,256 +279,256 @@
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
<span class="kw">use</span> <span class="ident">std::path::Path</span>;
|
||||
<span class="kw">use</span> <span class="ident">std</span>::{<span class="ident">env</span>, <span class="ident">fs</span>};
|
||||
*/
|
||||
</span><span class="kw">use </span>std::path::Path;
|
||||
<span class="kw">use </span>std::{env, fs};
|
||||
|
||||
<span class="kw">use</span> <span class="ident">config</span>::{<span class="ident">Config</span>, <span class="ident">ConfigError</span>, <span class="ident">Environment</span>, <span class="ident">File</span>};
|
||||
<span class="kw">use</span> <span class="ident">derive_more::Display</span>;
|
||||
<span class="kw">use</span> <span class="ident">log</span>::{<span class="ident">debug</span>, <span class="ident">warn</span>};
|
||||
<span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
|
||||
<span class="kw">use</span> <span class="ident">url::Url</span>;
|
||||
<span class="kw">use </span>config::{Config, ConfigError, Environment, File};
|
||||
<span class="kw">use </span>derive_more::Display;
|
||||
<span class="kw">use </span>log::{debug, warn};
|
||||
<span class="kw">use </span>serde::{Deserialize, Serialize};
|
||||
<span class="kw">use </span>url::Url;
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Server</span> {
|
||||
<span class="kw">pub</span> <span class="ident">port</span>: <span class="ident">u32</span>,
|
||||
<span class="kw">pub</span> <span class="ident">domain</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">cookie_secret</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">ip</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">url_prefix</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">proxy_has_tls</span>: <span class="ident">bool</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Server {
|
||||
<span class="kw">pub </span>port: u32,
|
||||
<span class="kw">pub </span>domain: String,
|
||||
<span class="kw">pub </span>cookie_secret: String,
|
||||
<span class="kw">pub </span>ip: String,
|
||||
<span class="kw">pub </span>url_prefix: <span class="prelude-ty">Option</span><String>,
|
||||
<span class="kw">pub </span>proxy_has_tls: bool,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Captcha</span> {
|
||||
<span class="kw">pub</span> <span class="ident">salt</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">gc</span>: <span class="ident">u64</span>,
|
||||
<span class="kw">pub</span> <span class="ident">runners</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">usize</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">queue_length</span>: <span class="ident">usize</span>,
|
||||
<span class="kw">pub</span> <span class="ident">enable_stats</span>: <span class="ident">bool</span>,
|
||||
<span class="kw">pub</span> <span class="ident">default_difficulty_strategy</span>: <span class="ident">DefaultDifficultyStrategy</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Captcha {
|
||||
<span class="kw">pub </span>salt: String,
|
||||
<span class="kw">pub </span>gc: u64,
|
||||
<span class="kw">pub </span>runners: <span class="prelude-ty">Option</span><usize>,
|
||||
<span class="kw">pub </span>queue_length: usize,
|
||||
<span class="kw">pub </span>enable_stats: bool,
|
||||
<span class="kw">pub </span>default_difficulty_strategy: DefaultDifficultyStrategy,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">DefaultDifficultyStrategy</span> {
|
||||
<span class="kw">pub</span> <span class="ident">avg_traffic_difficulty</span>: <span class="ident">u32</span>,
|
||||
<span class="kw">pub</span> <span class="ident">broke_my_site_traffic_difficulty</span>: <span class="ident">u32</span>,
|
||||
<span class="kw">pub</span> <span class="ident">peak_sustainable_traffic_difficulty</span>: <span class="ident">u32</span>,
|
||||
<span class="kw">pub</span> <span class="ident">duration</span>: <span class="ident">u32</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>DefaultDifficultyStrategy {
|
||||
<span class="kw">pub </span>avg_traffic_difficulty: u32,
|
||||
<span class="kw">pub </span>broke_my_site_traffic_difficulty: u32,
|
||||
<span class="kw">pub </span>peak_sustainable_traffic_difficulty: u32,
|
||||
<span class="kw">pub </span>duration: u32,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Smtp</span> {
|
||||
<span class="kw">pub</span> <span class="ident">from</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">reply</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">url</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">username</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">password</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">port</span>: <span class="ident">u16</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Smtp {
|
||||
<span class="kw">pub </span>from: String,
|
||||
<span class="kw">pub </span>reply: String,
|
||||
<span class="kw">pub </span>url: String,
|
||||
<span class="kw">pub </span>username: String,
|
||||
<span class="kw">pub </span>password: String,
|
||||
<span class="kw">pub </span>port: u16,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">Server</span> {
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">get_ip</span>(<span class="kw-2">&</span><span class="self">self</span>) -> <span class="ident">String</span> {
|
||||
<span class="macro">format!</span>(<span class="string">"{}:{}"</span>, <span class="self">self</span>.<span class="ident">ip</span>, <span class="self">self</span>.<span class="ident">port</span>)
|
||||
<span class="kw">impl </span>Server {
|
||||
<span class="attribute">#[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="comment">//#[derive(Debug, Clone, Deserialize)]</span>
|
||||
<span class="comment">//struct DatabaseBuilder {</span>
|
||||
<span class="comment">// pub port: u32,</span>
|
||||
<span class="comment">// pub hostname: String,</span>
|
||||
<span class="comment">// pub username: String,</span>
|
||||
<span class="comment">// pub password: String,</span>
|
||||
<span class="comment">// pub name: String,</span>
|
||||
<span class="comment">//}</span>
|
||||
<span class="comment">//#[derive(Debug, Clone, Deserialize)]
|
||||
//struct DatabaseBuilder {
|
||||
// pub port: u32,
|
||||
// pub hostname: String,
|
||||
// pub username: String,
|
||||
// pub password: String,
|
||||
// pub name: String,
|
||||
//}
|
||||
|
||||
<span class="comment">//impl DatabaseBuilder {</span>
|
||||
<span class="comment">// #[cfg(not(tarpaulin_include))]</span>
|
||||
<span class="comment">// fn extract_database_url(url: &Url) -> Self {</span>
|
||||
<span class="comment">// debug!("Database name: {}", url.path());</span>
|
||||
<span class="comment">// let mut path = url.path().split('/');</span>
|
||||
<span class="comment">// path.next();</span>
|
||||
<span class="comment">// let name = path.next().expect("no database name").to_string();</span>
|
||||
<span class="comment">// DatabaseBuilder {</span>
|
||||
<span class="comment">// port: url.port().expect("Enter database port").into(),</span>
|
||||
<span class="comment">// hostname: url.host().expect("Enter database host").to_string(),</span>
|
||||
<span class="comment">// username: url.username().into(),</span>
|
||||
<span class="comment">// password: url.password().expect("Enter database password").into(),</span>
|
||||
<span class="comment">// name,</span>
|
||||
<span class="comment">// }</span>
|
||||
<span class="comment">// }</span>
|
||||
<span class="comment">//}</span>
|
||||
//impl DatabaseBuilder {
|
||||
// #[cfg(not(tarpaulin_include))]
|
||||
// fn extract_database_url(url: &Url) -> Self {
|
||||
// debug!("Database name: {}", url.path());
|
||||
// let mut path = url.path().split('/');
|
||||
// path.next();
|
||||
// let name = path.next().expect("no database name").to_string();
|
||||
// DatabaseBuilder {
|
||||
// port: url.port().expect("Enter database port").into(),
|
||||
// hostname: url.host().expect("Enter database host").to_string(),
|
||||
// username: url.username().into(),
|
||||
// password: url.password().expect("Enter database password").into(),
|
||||
// name,
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>, <span class="ident">Display</span>, <span class="ident">PartialEq</span>, <span class="ident">Clone</span>, <span class="ident">Debug</span>)]</span>
|
||||
<span class="attribute">#[<span class="ident">serde</span>(<span class="ident">rename_all</span> <span class="op">=</span> <span class="string">"lowercase"</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">enum</span> <span class="ident">DBType</span> {
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"postgres"</span>)]</span>
|
||||
<span class="ident">Postgres</span>,
|
||||
<span class="attribute">#[<span class="ident">display</span>(<span class="ident">fmt</span> <span class="op">=</span> <span class="string">"maria"</span>)]</span>
|
||||
<span class="ident">Maria</span>,
|
||||
</span><span class="attribute">#[derive(Deserialize, Serialize, Display, PartialEq, Clone, Debug)]
|
||||
#[serde(rename_all = <span class="string">"lowercase"</span>)]
|
||||
</span><span class="kw">pub enum </span>DBType {
|
||||
<span class="attribute">#[display(fmt = <span class="string">"postgres"</span>)]
|
||||
</span>Postgres,
|
||||
<span class="attribute">#[display(fmt = <span class="string">"maria"</span>)]
|
||||
</span>Maria,
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">DBType</span> {
|
||||
<span class="kw">fn</span> <span class="ident">from_url</span>(<span class="ident">url</span>: <span class="kw-2">&</span><span class="ident">Url</span>) -> <span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">ConfigError</span><span class="op">></span> {
|
||||
<span class="kw">match</span> <span class="ident">url</span>.<span class="ident">scheme</span>() {
|
||||
<span class="string">"mysql"</span> => <span class="prelude-val">Ok</span>(<span class="ident"><span class="self">Self</span>::Maria</span>),
|
||||
<span class="string">"postgres"</span> => <span class="prelude-val">Ok</span>(<span class="ident"><span class="self">Self</span>::Postgres</span>),
|
||||
<span class="kw">_</span> => <span class="prelude-val">Err</span>(<span class="ident">ConfigError::Message</span>(<span class="string">"Unknown database type"</span>.<span class="ident">into</span>())),
|
||||
<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="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Database</span> {
|
||||
<span class="kw">pub</span> <span class="ident">url</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">pool</span>: <span class="ident">u32</span>,
|
||||
<span class="kw">pub</span> <span class="ident">database_type</span>: <span class="ident">DBType</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Database {
|
||||
<span class="kw">pub </span>url: String,
|
||||
<span class="kw">pub </span>pool: u32,
|
||||
<span class="kw">pub </span>database_type: DBType,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Redis</span> {
|
||||
<span class="kw">pub</span> <span class="ident">url</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">pool</span>: <span class="ident">u32</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Redis {
|
||||
<span class="kw">pub </span>url: String,
|
||||
<span class="kw">pub </span>pool: u32,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Settings</span> {
|
||||
<span class="kw">pub</span> <span class="ident">debug</span>: <span class="ident">bool</span>,
|
||||
<span class="kw">pub</span> <span class="ident">commercial</span>: <span class="ident">bool</span>,
|
||||
<span class="kw">pub</span> <span class="ident">database</span>: <span class="ident">Database</span>,
|
||||
<span class="kw">pub</span> <span class="ident">redis</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Redis</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">server</span>: <span class="ident">Server</span>,
|
||||
<span class="kw">pub</span> <span class="ident">captcha</span>: <span class="ident">Captcha</span>,
|
||||
<span class="kw">pub</span> <span class="ident">source_code</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">smtp</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">Smtp</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">allow_registration</span>: <span class="ident">bool</span>,
|
||||
<span class="kw">pub</span> <span class="ident">allow_demo</span>: <span class="ident">bool</span>,
|
||||
<span class="attribute">#[derive(Debug, Clone, Deserialize)]
|
||||
</span><span class="kw">pub struct </span>Settings {
|
||||
<span class="kw">pub </span>debug: bool,
|
||||
<span class="kw">pub </span>commercial: bool,
|
||||
<span class="kw">pub </span>database: Database,
|
||||
<span class="kw">pub </span>redis: <span class="prelude-ty">Option</span><Redis>,
|
||||
<span class="kw">pub </span>server: Server,
|
||||
<span class="kw">pub </span>captcha: Captcha,
|
||||
<span class="kw">pub </span>source_code: String,
|
||||
<span class="kw">pub </span>smtp: <span class="prelude-ty">Option</span><Smtp>,
|
||||
<span class="kw">pub </span>allow_registration: bool,
|
||||
<span class="kw">pub </span>allow_demo: bool,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">impl</span> <span class="ident">Settings</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">new</span>() -> <span class="prelude-ty">Result</span><span class="op"><</span><span class="self">Self</span>, <span class="ident">ConfigError</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">s</span> <span class="op">=</span> <span class="ident">Config::new</span>();
|
||||
<span class="attribute">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">impl </span>Settings {
|
||||
<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::new();
|
||||
|
||||
<span class="kw">const</span> <span class="ident">CURRENT_DIR</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"./config/default.toml"</span>;
|
||||
<span class="kw">const</span> <span class="ident">ETC</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <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>;
|
||||
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(<span class="string">"capatcha.enable_stats"</span>, <span class="bool-val">true</span>.<span class="ident">to_string</span>())
|
||||
.<span class="ident">expect</span>(<span class="string">"unable to set capatcha.enable_stats default config"</span>);
|
||||
s.set(<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="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Ok</span>(<span class="ident">path</span>) <span class="op">=</span> <span class="ident">env::var</span>(<span class="string">"MCAPTCHA_CONFIG"</span>) {
|
||||
<span class="kw">let</span> <span class="ident">absolute_path</span> <span class="op">=</span> <span class="ident">Path::new</span>(<span class="kw-2">&</span><span class="ident">path</span>).<span class="ident">canonicalize</span>().<span class="ident">unwrap</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="ident">absolute_path</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>()
|
||||
absolute_path.to_str().unwrap()
|
||||
);
|
||||
<span class="ident">s</span>.<span class="ident">merge</span>(<span class="ident">File::with_name</span>(<span class="ident">absolute_path</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>()))<span class="question-mark">?</span>;
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">Path::new</span>(<span class="ident">CURRENT_DIR</span>).<span class="ident">exists</span>() {
|
||||
<span class="kw">let</span> <span class="ident">absolute_path</span> <span class="op">=</span> <span class="ident">fs::canonicalize</span>(<span class="ident">CURRENT_DIR</span>).<span class="ident">unwrap</span>();
|
||||
s.merge(File::with_name(absolute_path.to_str().unwrap()))<span class="question-mark">?</span>;
|
||||
} <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="ident">absolute_path</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>()
|
||||
absolute_path.to_str().unwrap()
|
||||
);
|
||||
<span class="comment">// merging default config from file</span>
|
||||
<span class="ident">s</span>.<span class="ident">merge</span>(<span class="ident">File::with_name</span>(<span class="ident">absolute_path</span>.<span class="ident">to_str</span>().<span class="ident">unwrap</span>()))<span class="question-mark">?</span>;
|
||||
} <span class="kw">else</span> <span class="kw">if</span> <span class="ident">Path::new</span>(<span class="ident">ETC</span>).<span class="ident">exists</span>() {
|
||||
<span class="macro">log::info!</span>(<span class="string">"{}"</span>, <span class="macro">format!</span>(<span class="string">"Loading config file from {}"</span>, <span class="ident">ETC</span>));
|
||||
<span class="ident">s</span>.<span class="ident">merge</span>(<span class="ident">File::with_name</span>(<span class="ident">ETC</span>))<span class="question-mark">?</span>;
|
||||
} <span class="kw">else</span> {
|
||||
<span class="comment">// merging default config from file
|
||||
</span>s.merge(File::with_name(absolute_path.to_str().unwrap()))<span class="question-mark">?</span>;
|
||||
} <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));
|
||||
s.merge(File::with_name(ETC))<span class="question-mark">?</span>;
|
||||
} <span class="kw">else </span>{
|
||||
<span class="macro">log::warn!</span>(<span class="string">"Configuration file not found"</span>);
|
||||
}
|
||||
|
||||
<span class="ident">s</span>.<span class="ident">merge</span>(<span class="ident">Environment::with_prefix</span>(<span class="string">"MCAPTCHA"</span>).<span class="ident">separator</span>(<span class="string">"_"</span>))<span class="question-mark">?</span>;
|
||||
s.merge(Environment::with_prefix(<span class="string">"MCAPTCHA"</span>).separator(<span class="string">"_"</span>))<span class="question-mark">?</span>;
|
||||
|
||||
<span class="ident">check_url</span>(<span class="kw-2">&</span><span class="ident">s</span>);
|
||||
check_url(<span class="kw-2">&</span>s);
|
||||
|
||||
<span class="kw">if</span> <span class="kw">let</span> <span class="prelude-val">Ok</span>(<span class="ident">val</span>) <span class="op">=</span> <span class="ident">env::var</span>(<span class="string">"PORT"</span>) {
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(<span class="string">"server.port"</span>, <span class="ident">val</span>).<span class="ident">unwrap</span>();
|
||||
<span class="kw">if let </span><span class="prelude-val">Ok</span>(val) = env::var(<span class="string">"PORT"</span>) {
|
||||
s.set(<span class="string">"server.port"</span>, val).unwrap();
|
||||
<span class="macro">log::info!</span>(<span class="string">"Overriding [server].port with environment variable"</span>);
|
||||
}
|
||||
|
||||
<span class="kw">match</span> <span class="ident">env::var</span>(<span class="string">"DATABASE_URL"</span>) {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) => {
|
||||
<span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="ident">Url::parse</span>(<span class="kw-2">&</span><span class="ident">val</span>).<span class="ident">expect</span>(<span class="string">"couldn't parse Database URL"</span>);
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(<span class="string">"database.url"</span>, <span class="ident">url</span>.<span class="ident">to_string</span>()).<span class="ident">unwrap</span>();
|
||||
<span class="kw">let</span> <span class="ident">database_type</span> <span class="op">=</span> <span class="ident">DBType::from_url</span>(<span class="kw-2">&</span><span class="ident">url</span>).<span class="ident">unwrap</span>();
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(<span class="string">"database.database_type"</span>, <span class="ident">database_type</span>.<span class="ident">to_string</span>())
|
||||
.<span class="ident">unwrap</span>();
|
||||
<span class="kw">match </span>env::var(<span class="string">"DATABASE_URL"</span>) {
|
||||
<span class="prelude-val">Ok</span>(val) => {
|
||||
<span class="kw">let </span>url = Url::parse(<span class="kw-2">&</span>val).expect(<span class="string">"couldn't parse Database URL"</span>);
|
||||
s.set(<span class="string">"database.url"</span>, url.to_string()).unwrap();
|
||||
<span class="kw">let </span>database_type = DBType::from_url(<span class="kw-2">&</span>url).unwrap();
|
||||
s.set(<span class="string">"database.database_type"</span>, database_type.to_string())
|
||||
.unwrap();
|
||||
<span class="macro">log::info!</span>(<span class="string">"Overriding [database].url and [database].database_type with environment variable"</span>);
|
||||
}
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => {
|
||||
<span class="ident">set_database_url</span>(<span class="kw-2">&mut</span> <span class="ident">s</span>);
|
||||
<span class="prelude-val">Err</span>(e) => {
|
||||
set_database_url(<span class="kw-2">&mut </span>s);
|
||||
}
|
||||
}
|
||||
|
||||
<span class="comment">// setting default values</span>
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(<span class="string">"database.pool"</span>, <span class="number">2</span>.<span class="ident">to_string</span>())
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't set database pool count"</span>);
|
||||
<span class="comment">// setting default values
|
||||
</span><span class="attribute">#[cfg(test)]
|
||||
</span>s.set(<span class="string">"database.pool"</span>, <span class="number">2</span>.to_string())
|
||||
.expect(<span class="string">"Couldn't set database pool count"</span>);
|
||||
|
||||
<span class="kw">match</span> <span class="ident">s</span>.<span class="ident">try_into</span>() {
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">val</span>) => <span class="prelude-val">Ok</span>(<span class="ident">val</span>),
|
||||
<span class="prelude-val">Err</span>(<span class="ident">e</span>) => <span class="prelude-val">Err</span>(<span class="ident">ConfigError::Message</span>(<span class="macro">format!</span>(<span class="string">"\n\nError: {}. If it says missing fields, then please refer to https://github.com/mCaptcha/mcaptcha#configuration to learn more about how mcaptcha reads configuration\n\n"</span>, <span class="ident">e</span>))),
|
||||
<span class="kw">match </span>s.try_into() {
|
||||
<span class="prelude-val">Ok</span>(val) => <span class="prelude-val">Ok</span>(val),
|
||||
<span class="prelude-val">Err</span>(e) => <span class="prelude-val">Err</span>(ConfigError::Message(<span class="macro">format!</span>(<span class="string">"\n\nError: {}. If it says missing fields, then please refer to https://github.com/mCaptcha/mcaptcha#configuration to learn more about how mcaptcha reads configuration\n\n"</span>, e))),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">check_url</span>(<span class="ident">s</span>: <span class="kw-2">&</span><span class="ident">Config</span>) {
|
||||
<span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="ident">s</span>
|
||||
.<span class="ident">get</span>::<span class="op"><</span><span class="ident">String</span><span class="op">></span>(<span class="string">"source_code"</span>)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't access source_code"</span>);
|
||||
<span class="attribute">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">fn </span>check_url(s: <span class="kw-2">&</span>Config) {
|
||||
<span class="kw">let </span>url = s
|
||||
.get::<String>(<span class="string">"source_code"</span>)
|
||||
.expect(<span class="string">"Couldn't access source_code"</span>);
|
||||
|
||||
<span class="ident">Url::parse</span>(<span class="kw-2">&</span><span class="ident">url</span>).<span class="ident">expect</span>(<span class="string">"Please enter a URL for source_code in settings"</span>);
|
||||
Url::parse(<span class="kw-2">&</span>url).expect(<span class="string">"Please enter a URL for source_code in settings"</span>);
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">not</span>(<span class="ident">tarpaulin_include</span>))]</span>
|
||||
<span class="kw">fn</span> <span class="ident">set_database_url</span>(<span class="ident">s</span>: <span class="kw-2">&mut</span> <span class="ident">Config</span>) {
|
||||
<span class="ident">s</span>.<span class="ident">set</span>(
|
||||
<span class="attribute">#[cfg(not(tarpaulin_include))]
|
||||
</span><span class="kw">fn </span>set_database_url(s: <span class="kw-2">&mut </span>Config) {
|
||||
s.set(
|
||||
<span class="string">"database.url"</span>,
|
||||
<span class="macro">format!</span>(
|
||||
<span class="string">r"postgres://{}:{}@{}:{}/{}"</span>,
|
||||
<span class="ident">s</span>.<span class="ident">get</span>::<span class="op"><</span><span class="ident">String</span><span class="op">></span>(<span class="string">"database.username"</span>)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't access database username"</span>),
|
||||
<span class="ident">urlencoding::encode</span>(
|
||||
<span class="ident">s</span>.<span class="ident">get</span>::<span class="op"><</span><span class="ident">String</span><span class="op">></span>(<span class="string">"database.password"</span>)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't access database password"</span>)
|
||||
.<span class="ident">as_str</span>()
|
||||
s.get::<String>(<span class="string">"database.username"</span>)
|
||||
.expect(<span class="string">"Couldn't access database username"</span>),
|
||||
urlencoding::encode(
|
||||
s.get::<String>(<span class="string">"database.password"</span>)
|
||||
.expect(<span class="string">"Couldn't access database password"</span>)
|
||||
.as_str()
|
||||
),
|
||||
<span class="ident">s</span>.<span class="ident">get</span>::<span class="op"><</span><span class="ident">String</span><span class="op">></span>(<span class="string">"database.hostname"</span>)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't access database hostname"</span>),
|
||||
<span class="ident">s</span>.<span class="ident">get</span>::<span class="op"><</span><span class="ident">String</span><span class="op">></span>(<span class="string">"database.port"</span>)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't access database port"</span>),
|
||||
<span class="ident">s</span>.<span class="ident">get</span>::<span class="op"><</span><span class="ident">String</span><span class="op">></span>(<span class="string">"database.name"</span>)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't access database name"</span>)
|
||||
s.get::<String>(<span class="string">"database.hostname"</span>)
|
||||
.expect(<span class="string">"Couldn't access database hostname"</span>),
|
||||
s.get::<String>(<span class="string">"database.port"</span>)
|
||||
.expect(<span class="string">"Couldn't access database port"</span>),
|
||||
s.get::<String>(<span class="string">"database.name"</span>)
|
||||
.expect(<span class="string">"Couldn't access database name"</span>)
|
||||
),
|
||||
)
|
||||
.<span class="ident">expect</span>(<span class="string">"Couldn't set database url"</span>);
|
||||
.expect(<span class="string">"Couldn't set database url"</span>);
|
||||
}
|
||||
|
||||
<span class="comment">//#[cfg(test)]</span>
|
||||
<span class="comment">//mod tests {</span>
|
||||
<span class="comment">// use super::*;</span>
|
||||
<span class="comment">//</span>
|
||||
<span class="comment">// #[test]</span>
|
||||
<span class="comment">// fn url_prefix_test() {</span>
|
||||
<span class="comment">// let mut settings = Settings::new().unwrap();</span>
|
||||
<span class="comment">// assert!(settings.server.url_prefix.is_none());</span>
|
||||
<span class="comment">// settings.server.url_prefix = Some("test".into());</span>
|
||||
<span class="comment">// settings.server.check_url_prefix();</span>
|
||||
<span class="comment">// settings.server.url_prefix = Some(" ".into());</span>
|
||||
<span class="comment">// settings.server.check_url_prefix();</span>
|
||||
<span class="comment">// assert!(settings.server.url_prefix.is_none());</span>
|
||||
<span class="comment">// }</span>
|
||||
<span class="comment">//</span>
|
||||
<span class="comment">// #[test]</span>
|
||||
<span class="comment">// fn smtp_config_works() {</span>
|
||||
<span class="comment">// let settings = Settings::new().unwrap();</span>
|
||||
<span class="comment">// assert!(settings.smtp.is_some());</span>
|
||||
<span class="comment">// assert_eq!(settings.smtp.as_ref().unwrap().password, "password");</span>
|
||||
<span class="comment">// assert_eq!(settings.smtp.as_ref().unwrap().username, "admin");</span>
|
||||
<span class="comment">// }</span>
|
||||
<span class="comment">//}</span>
|
||||
</code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="mcaptcha" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.64.0 (a55dd71d5 2022-09-19)" ></div></body></html>
|
||||
<span class="comment">//#[cfg(test)]
|
||||
//mod tests {
|
||||
// use super::*;
|
||||
//
|
||||
// #[test]
|
||||
// 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.check_url_prefix();
|
||||
// settings.server.url_prefix = Some(" ".into());
|
||||
// settings.server.check_url_prefix();
|
||||
// assert!(settings.server.url_prefix.is_none());
|
||||
// }
|
||||
//
|
||||
// #[test]
|
||||
// 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");
|
||||
// }
|
||||
//}
|
||||
</span></code></pre></div>
|
||||
</section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="mcaptcha" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.65.0 (897e37553 2022-11-02)" ></div></body></html>
|
||||
Reference in New Issue
Block a user