Sfoglia il codice sorgente

Deploying to gh-pages from @ ea8264054a31c9bd86a4aa97a452a1cdd931f753 🚀

realaravinth 4 anni fa
parent
commit
36f45e01e7
43 ha cambiato i file con 423 aggiunte e 160 eliminazioni
  1. 0 0
      implementors/actix_web/service/trait.HttpServiceFactory.js
  2. 0 0
      implementors/core/clone/trait.Clone.js
  3. 0 0
      implementors/core/marker/trait.Freeze.js
  4. 0 0
      implementors/core/marker/trait.Send.js
  5. 0 0
      implementors/core/marker/trait.Sync.js
  6. 0 0
      implementors/core/marker/trait.Unpin.js
  7. 0 0
      implementors/sailfish/private/trait.Sealed.js
  8. 0 0
      implementors/sailfish/trait.TemplateOnce.js
  9. 0 0
      implementors/std/panic/trait.RefUnwindSafe.js
  10. 0 0
      implementors/std/panic/trait.UnwindSafe.js
  11. 0 0
      mcaptcha/all.html
  12. 0 0
      mcaptcha/api/v1/mcaptcha/levels/fn.get_levels_util.html
  13. 1 1
      mcaptcha/api/v1/mcaptcha/levels/fn.services.html
  14. 2 2
      mcaptcha/api/v1/mcaptcha/levels/index.html
  15. 1 1
      mcaptcha/api/v1/mcaptcha/levels/routes/index.html
  16. 0 0
      mcaptcha/api/v1/mcaptcha/levels/routes/struct.Levels.html
  17. 1 1
      mcaptcha/api/v1/mcaptcha/levels/sidebar-items.js
  18. 0 0
      mcaptcha/api/v1/mcaptcha/levels/struct.AddLevels.html
  19. 0 0
      mcaptcha/api/v1/mcaptcha/levels/struct.I32Levels.html
  20. 0 0
      mcaptcha/api/v1/mcaptcha/levels/struct.Levels.html
  21. 0 0
      mcaptcha/api/v1/mcaptcha/levels/struct.UpdateLevels.html
  22. 0 0
      mcaptcha/api/v1/mcaptcha/levels/struct.get_levels.html
  23. 0 0
      mcaptcha/api/v1/mcaptcha/levels/struct.update_levels.html
  24. 1 1
      mcaptcha/constant.GIT_COMMIT_HASH.html
  25. 5 0
      mcaptcha/pages/panel/sitekey/edit/constant.PAGE.html
  26. 8 0
      mcaptcha/pages/panel/sitekey/edit/index.html
  27. 1 0
      mcaptcha/pages/panel/sitekey/edit/sidebar-items.js
  28. 2 0
      mcaptcha/pages/panel/sitekey/edit/struct.IndexPage.html
  29. 2 0
      mcaptcha/pages/panel/sitekey/edit/struct.Level.html
  30. 2 0
      mcaptcha/pages/panel/sitekey/edit/struct.McaptchaConfig.html
  31. 1 1
      mcaptcha/pages/panel/sitekey/edit/struct.edit_sitekey.html
  32. 1 1
      mcaptcha/pages/panel/sitekey/fn.services.html
  33. 2 2
      mcaptcha/pages/panel/sitekey/index.html
  34. 1 1
      mcaptcha/pages/panel/sitekey/routes/index.html
  35. 0 0
      mcaptcha/pages/panel/sitekey/routes/struct.Sitekey.html
  36. 1 1
      mcaptcha/pages/panel/sitekey/sidebar-items.js
  37. 0 0
      search-index.js
  38. 1 1
      source-files.js
  39. 56 130
      src/mcaptcha/api/v1/mcaptcha/levels.rs.html
  40. 1 1
      src/mcaptcha/api/v1/pow/get_config.rs.html
  41. 309 0
      src/mcaptcha/pages/panel/sitekey/edit.rs.html
  42. 8 0
      src/mcaptcha/pages/panel/sitekey/mod.rs.html
  43. 16 16
      src/mcaptcha/pages/panel/sitekey/view.rs.html

File diff suppressed because it is too large
+ 0 - 0
implementors/actix_web/service/trait.HttpServiceFactory.js


File diff suppressed because it is too large
+ 0 - 0
implementors/core/clone/trait.Clone.js


File diff suppressed because it is too large
+ 0 - 0
implementors/core/marker/trait.Freeze.js


File diff suppressed because it is too large
+ 0 - 0
implementors/core/marker/trait.Send.js


File diff suppressed because it is too large
+ 0 - 0
implementors/core/marker/trait.Sync.js


File diff suppressed because it is too large
+ 0 - 0
implementors/core/marker/trait.Unpin.js


File diff suppressed because it is too large
+ 0 - 0
implementors/sailfish/private/trait.Sealed.js


File diff suppressed because it is too large
+ 0 - 0
implementors/sailfish/trait.TemplateOnce.js


File diff suppressed because it is too large
+ 0 - 0
implementors/std/panic/trait.RefUnwindSafe.js


File diff suppressed because it is too large
+ 0 - 0
implementors/std/panic/trait.UnwindSafe.js


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/all.html


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/fn.get_levels_util.html


+ 1 - 1
mcaptcha/api/v1/mcaptcha/levels/fn.services.html

@@ -1,5 +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="API documentation for the Rust `services` fn in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, services"><title>services in mcaptcha::api::v1::mcaptcha::levels - Rust</title><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="../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../storage.js"></script><script src="../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../../../../../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../down-arrow.svg");}</style></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">api</a>::<wbr><a href="../../index.html">v1</a>::<wbr><a href="../index.html">mcaptcha</a>::<wbr><a href="index.html">levels</a></p><div id="sidebar-vars" data-name="services" data-ty="fn" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">api</a>::<wbr><a href="../../index.html">v1</a>::<wbr><a href="../index.html">mcaptcha</a>::<wbr><a href="index.html">levels</a>::<wbr><a class="fn" href="">services</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/api/v1/mcaptcha/levels.rs.html#60-65" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn services(cfg: &amp;mut ServiceConfig)</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
+                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">api</a>::<wbr><a href="../../index.html">v1</a>::<wbr><a href="../index.html">mcaptcha</a>::<wbr><a href="index.html">levels</a>::<wbr><a class="fn" href="">services</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/api/v1/mcaptcha/levels.rs.html#61-65" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn services(cfg: &amp;mut ServiceConfig)</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
     <script src="../../../../../main.js"></script></body></html>

+ 2 - 2
mcaptcha/api/v1/mcaptcha/levels/index.html

@@ -1,8 +1,8 @@
 <!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="API documentation for the Rust `levels` mod in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, levels"><title>mcaptcha::api::v1::mcaptcha::levels - Rust</title><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="../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../storage.js"></script><script src="../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../../../../../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../rust-logo.png' alt='logo'></div></a><p class="location">Module levels</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#functions">Functions</a></li></ul></div><p class="location"><a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">api</a>::<wbr><a href="../../index.html">v1</a>::<wbr><a href="../index.html">mcaptcha</a></p><div id="sidebar-vars" data-name="levels" data-ty="mod" data-relpath="../"></div><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">api</a>::<wbr><a href="../../index.html">v1</a>::<wbr><a href="../index.html">mcaptcha</a>::<wbr><a class="mod" href="">levels</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/api/v1/mcaptcha/levels.rs.html#17-367" title="goto source code">[src]</a></span></h1><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
+                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">api</a>::<wbr><a href="../../index.html">v1</a>::<wbr><a href="../index.html">mcaptcha</a>::<wbr><a class="mod" href="">levels</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/api/v1/mcaptcha/levels.rs.html#17-330" title="goto source code">[src]</a></span></h1><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
 <table><tr class="module-item"><td><a class="mod" href="routes/index.html" title="mcaptcha::api::v1::mcaptcha::levels::routes mod">routes</a></td><td class="docblock-short"></td></tr></table><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
-<table><tr class="module-item"><td><a class="struct" href="struct.AddLevels.html" title="mcaptcha::api::v1::mcaptcha::levels::AddLevels struct">AddLevels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.I32Levels.html" title="mcaptcha::api::v1::mcaptcha::levels::I32Levels struct">I32Levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.Levels.html" title="mcaptcha::api::v1::mcaptcha::levels::Levels struct">Levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.UpdateLevels.html" title="mcaptcha::api::v1::mcaptcha::levels::UpdateLevels struct">UpdateLevels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.add_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::add_levels struct">add_levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.delete_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::delete_levels struct">delete_levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.get_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::get_levels struct">get_levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.update_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::update_levels struct">update_levels</a></td><td class="docblock-short"></td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
+<table><tr class="module-item"><td><a class="struct" href="struct.AddLevels.html" title="mcaptcha::api::v1::mcaptcha::levels::AddLevels struct">AddLevels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.I32Levels.html" title="mcaptcha::api::v1::mcaptcha::levels::I32Levels struct">I32Levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.Levels.html" title="mcaptcha::api::v1::mcaptcha::levels::Levels struct">Levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.UpdateLevels.html" title="mcaptcha::api::v1::mcaptcha::levels::UpdateLevels struct">UpdateLevels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.add_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::add_levels struct">add_levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.get_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::get_levels struct">get_levels</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.update_levels.html" title="mcaptcha::api::v1::mcaptcha::levels::update_levels struct">update_levels</a></td><td class="docblock-short"></td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
 <table><tr class="module-item"><td><a class="fn" href="fn.get_levels_util.html" title="mcaptcha::api::v1::mcaptcha::levels::get_levels_util fn">get_levels_util</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="fn" href="fn.services.html" title="mcaptcha::api::v1::mcaptcha::levels::services fn">services</a></td><td class="docblock-short"></td></tr></table></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
     <script src="../../../../../main.js"></script></body></html>

+ 1 - 1
mcaptcha/api/v1/mcaptcha/levels/routes/index.html

@@ -1,6 +1,6 @@
 <!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="API documentation for the Rust `routes` mod in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, routes"><title>mcaptcha::api::v1::mcaptcha::levels::routes - Rust</title><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="../../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../../storage.js"></script><script src="../../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../../../../../../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../../rust-logo.png' alt='logo'></div></a><p class="location">Module routes</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li></ul></div><p class="location"><a href="../../../../../index.html">mcaptcha</a>::<wbr><a href="../../../../index.html">api</a>::<wbr><a href="../../../index.html">v1</a>::<wbr><a href="../../index.html">mcaptcha</a>::<wbr><a href="../index.html">levels</a></p><div id="sidebar-vars" data-name="routes" data-ty="mod" data-relpath="../"></div><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../../../../../../settings.html"><img src="../../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../../index.html">mcaptcha</a>::<wbr><a href="../../../../index.html">api</a>::<wbr><a href="../../../index.html">v1</a>::<wbr><a href="../../index.html">mcaptcha</a>::<wbr><a href="../index.html">levels</a>::<wbr><a class="mod" href="">routes</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../../src/mcaptcha/api/v1/mcaptcha/levels.rs.html#28-51" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
+                <a id="settings-menu" href="../../../../../../settings.html"><img src="../../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../../index.html">mcaptcha</a>::<wbr><a href="../../../../index.html">api</a>::<wbr><a href="../../../index.html">v1</a>::<wbr><a href="../../index.html">mcaptcha</a>::<wbr><a href="../index.html">levels</a>::<wbr><a class="mod" href="">routes</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../../src/mcaptcha/api/v1/mcaptcha/levels.rs.html#29-52" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
 <table><tr class="module-item"><td><a class="struct" href="struct.Levels.html" title="mcaptcha::api::v1::mcaptcha::levels::routes::Levels struct">Levels</a></td><td class="docblock-short"></td></tr></table></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../../search-index.js" data-search-js="../../../../../../search.js"></div>
     <script src="../../../../../../main.js"></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/routes/struct.Levels.html


+ 1 - 1
mcaptcha/api/v1/mcaptcha/levels/sidebar-items.js

@@ -1 +1 @@
-initSidebarItems({"fn":[["get_levels_util",""],["services",""]],"mod":[["routes",""]],"struct":[["AddLevels",""],["I32Levels",""],["Levels",""],["UpdateLevels",""],["add_levels",""],["delete_levels",""],["get_levels",""],["update_levels",""]]});
+initSidebarItems({"fn":[["get_levels_util",""],["services",""]],"mod":[["routes",""]],"struct":[["AddLevels",""],["I32Levels",""],["Levels",""],["UpdateLevels",""],["add_levels",""],["get_levels",""],["update_levels",""]]});

File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/struct.AddLevels.html


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/struct.I32Levels.html


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/struct.Levels.html


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/struct.UpdateLevels.html


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/struct.get_levels.html


File diff suppressed because it is too large
+ 0 - 0
mcaptcha/api/v1/mcaptcha/levels/struct.update_levels.html


+ 1 - 1
mcaptcha/constant.GIT_COMMIT_HASH.html

@@ -1,5 +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="API documentation for the Rust `GIT_COMMIT_HASH` constant in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, GIT_COMMIT_HASH"><title>GIT_COMMIT_HASH in mcaptcha - Rust</title><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="../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../ayu.css" disabled ><script id="default-settings"></script><script src="../storage.js"></script><script src="../crates.js"></script><noscript><link rel="stylesheet" href="../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="index.html">mcaptcha</a></p><div id="sidebar-vars" data-name="GIT_COMMIT_HASH" data-ty="constant" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="index.html">mcaptcha</a>::<wbr><a class="constant" href="">GIT_COMMIT_HASH</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/mcaptcha/main.rs.html#87" title="goto source code">[src]</a></span></h1><pre class="rust const">pub const GIT_COMMIT_HASH: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a> = &quot;863d22f62c65c0d80c5e00e84b7928c22cd857f6&quot;;</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="mcaptcha" data-search-index-js="../search-index.js" data-search-js="../search.js"></div>
+                <a id="settings-menu" href="../settings.html"><img src="../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="index.html">mcaptcha</a>::<wbr><a class="constant" href="">GIT_COMMIT_HASH</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../src/mcaptcha/main.rs.html#87" title="goto source code">[src]</a></span></h1><pre class="rust const">pub const GIT_COMMIT_HASH: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a> = &quot;ea8264054a31c9bd86a4aa97a452a1cdd931f753&quot;;</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../" data-current-crate="mcaptcha" data-search-index-js="../search-index.js" data-search-js="../search.js"></div>
     <script src="../main.js"></script></body></html>

+ 5 - 0
mcaptcha/pages/panel/sitekey/edit/constant.PAGE.html

@@ -0,0 +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="API documentation for the Rust `PAGE` constant in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, PAGE"><title>PAGE in mcaptcha::pages::panel::sitekey::edit - Rust</title><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="../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../storage.js"></script><script src="../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../favicon.svg">
+<link rel="alternate icon" type="image/png" href="../../../../../favicon-16x16.png">
+<link rel="alternate icon" type="image/png" href="../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../down-arrow.svg");}</style></head><body class="rustdoc constant"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a>::<wbr><a href="index.html">edit</a></p><div id="sidebar-vars" data-name="PAGE" data-ty="constant" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
+                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Constant <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a>::<wbr><a href="index.html">edit</a>::<wbr><a class="constant" href="">PAGE</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/pages/panel/sitekey/edit.rs.html#26" title="goto source code">[src]</a></span></h1><pre class="rust const">const PAGE: &amp;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a> = &quot;SiteKeys&quot;;</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
+    <script src="../../../../../main.js"></script></body></html>

+ 8 - 0
mcaptcha/pages/panel/sitekey/edit/index.html

@@ -0,0 +1,8 @@
+<!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="API documentation for the Rust `edit` mod in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, edit"><title>mcaptcha::pages::panel::sitekey::edit - Rust</title><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="../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../storage.js"></script><script src="../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../favicon.svg">
+<link rel="alternate icon" type="image/png" href="../../../../../favicon-16x16.png">
+<link rel="alternate icon" type="image/png" href="../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../rust-logo.png' alt='logo'></div></a><p class="location">Module edit</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li><li><a href="#constants">Constants</a></li></ul></div><p class="location"><a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a></p><div id="sidebar-vars" data-name="edit" data-ty="mod" data-relpath="../"></div><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
+                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a>::<wbr><a class="mod" href="">edit</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/pages/panel/sitekey/edit.rs.html#17-151" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
+<table><tr class="module-item"><td><a class="struct" href="struct.IndexPage.html" title="mcaptcha::pages::panel::sitekey::edit::IndexPage struct">IndexPage</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.Level.html" title="mcaptcha::pages::panel::sitekey::edit::Level struct">Level</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.McaptchaConfig.html" title="mcaptcha::pages::panel::sitekey::edit::McaptchaConfig struct">McaptchaConfig</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="struct" href="struct.edit_sitekey.html" title="mcaptcha::pages::panel::sitekey::edit::edit_sitekey struct">edit_sitekey</a></td><td class="docblock-short"><p>route handler that renders individual views for sitekeys</p>
+</td></tr></table><h2 id="constants" class="section-header"><a href="#constants">Constants</a></h2>
+<table><tr class="module-item"><td><a class="constant" href="constant.PAGE.html" title="mcaptcha::pages::panel::sitekey::edit::PAGE constant">PAGE</a></td><td class="docblock-short"></td></tr></table></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
+    <script src="../../../../../main.js"></script></body></html>

+ 1 - 0
mcaptcha/pages/panel/sitekey/edit/sidebar-items.js

@@ -0,0 +1 @@
+initSidebarItems({"constant":[["PAGE",""]],"struct":[["IndexPage",""],["Level",""],["McaptchaConfig",""],["edit_sitekey","route handler that renders individual views for sitekeys"]]});

File diff suppressed because it is too large
+ 2 - 0
mcaptcha/pages/panel/sitekey/edit/struct.IndexPage.html


File diff suppressed because it is too large
+ 2 - 0
mcaptcha/pages/panel/sitekey/edit/struct.Level.html


File diff suppressed because it is too large
+ 2 - 0
mcaptcha/pages/panel/sitekey/edit/struct.McaptchaConfig.html


File diff suppressed because it is too large
+ 1 - 1
mcaptcha/pages/panel/sitekey/edit/struct.edit_sitekey.html


+ 1 - 1
mcaptcha/pages/panel/sitekey/fn.services.html

@@ -1,5 +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="API documentation for the Rust `services` fn in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, services"><title>services in mcaptcha::pages::panel::sitekey - Rust</title><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="../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a><div class="sidebar-elems"><p class="location"><a href="../../../index.html">mcaptcha</a>::<wbr><a href="../../index.html">pages</a>::<wbr><a href="../index.html">panel</a>::<wbr><a href="index.html">sitekey</a></p><div id="sidebar-vars" data-name="services" data-ty="fn" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../../../../settings.html"><img src="../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="../../../index.html">mcaptcha</a>::<wbr><a href="../../index.html">pages</a>::<wbr><a href="../index.html">panel</a>::<wbr><a href="index.html">sitekey</a>::<wbr><a class="fn" href="">services</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../src/mcaptcha/pages/panel/sitekey/mod.rs.html#40-44" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn services(cfg: &amp;mut ServiceConfig)</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
+                <a id="settings-menu" href="../../../../settings.html"><img src="../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Function <a href="../../../index.html">mcaptcha</a>::<wbr><a href="../../index.html">pages</a>::<wbr><a href="../index.html">panel</a>::<wbr><a href="index.html">sitekey</a>::<wbr><a class="fn" href="">services</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../src/mcaptcha/pages/panel/sitekey/mod.rs.html#43-48" title="goto source code">[src]</a></span></h1><pre class="rust fn">pub fn services(cfg: &amp;mut ServiceConfig)</pre></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
     <script src="../../../../main.js"></script></body></html>

+ 2 - 2
mcaptcha/pages/panel/sitekey/index.html

@@ -1,7 +1,7 @@
 <!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="API documentation for the Rust `sitekey` mod in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, sitekey"><title>mcaptcha::pages::panel::sitekey - Rust</title><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="../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../storage.js"></script><script src="../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../../../../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../rust-logo.png' alt='logo'></div></a><p class="location">Module sitekey</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#modules">Modules</a></li><li><a href="#functions">Functions</a></li></ul></div><p class="location"><a href="../../../index.html">mcaptcha</a>::<wbr><a href="../../index.html">pages</a>::<wbr><a href="../index.html">panel</a></p><div id="sidebar-vars" data-name="sitekey" data-ty="mod" data-relpath="../"></div><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../../../../settings.html"><img src="../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../index.html">mcaptcha</a>::<wbr><a href="../../index.html">pages</a>::<wbr><a href="../index.html">panel</a>::<wbr><a class="mod" href="">sitekey</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../src/mcaptcha/pages/panel/sitekey/mod.rs.html#18-44" title="goto source code">[src]</a></span></h1><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
-<table><tr class="module-item"><td><a class="mod" href="add/index.html" title="mcaptcha::pages::panel::sitekey::add mod">add</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="list/index.html" title="mcaptcha::pages::panel::sitekey::list mod">list</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="routes/index.html" title="mcaptcha::pages::panel::sitekey::routes mod">routes</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="view/index.html" title="mcaptcha::pages::panel::sitekey::view mod">view</a></td><td class="docblock-short"></td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
+                <a id="settings-menu" href="../../../../settings.html"><img src="../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../index.html">mcaptcha</a>::<wbr><a href="../../index.html">pages</a>::<wbr><a href="../index.html">panel</a>::<wbr><a class="mod" href="">sitekey</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../src/mcaptcha/pages/panel/sitekey/mod.rs.html#18-48" title="goto source code">[src]</a></span></h1><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
+<table><tr class="module-item"><td><a class="mod" href="add/index.html" title="mcaptcha::pages::panel::sitekey::add mod">add</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="edit/index.html" title="mcaptcha::pages::panel::sitekey::edit mod">edit</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="list/index.html" title="mcaptcha::pages::panel::sitekey::list mod">list</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="routes/index.html" title="mcaptcha::pages::panel::sitekey::routes mod">routes</a></td><td class="docblock-short"></td></tr><tr class="module-item"><td><a class="mod" href="view/index.html" title="mcaptcha::pages::panel::sitekey::view mod">view</a></td><td class="docblock-short"></td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
 <table><tr class="module-item"><td><a class="fn" href="fn.services.html" title="mcaptcha::pages::panel::sitekey::services fn">services</a></td><td class="docblock-short"></td></tr></table></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../search-index.js" data-search-js="../../../../search.js"></div>
     <script src="../../../../main.js"></script></body></html>

+ 1 - 1
mcaptcha/pages/panel/sitekey/routes/index.html

@@ -1,6 +1,6 @@
 <!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="API documentation for the Rust `routes` mod in crate `mcaptcha`."><meta name="keywords" content="rust, rustlang, rust-lang, routes"><title>mcaptcha::pages::panel::sitekey::routes - Rust</title><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="../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../storage.js"></script><script src="../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../favicon.svg">
 <link rel="alternate icon" type="image/png" href="../../../../../favicon-16x16.png">
 <link rel="alternate icon" type="image/png" href="../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../rust-logo.png' alt='logo'></div></a><p class="location">Module routes</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#structs">Structs</a></li></ul></div><p class="location"><a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a></p><div id="sidebar-vars" data-name="routes" data-ty="mod" data-relpath="../"></div><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
-                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a>::<wbr><a class="mod" href="">routes</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/pages/panel/sitekey/mod.rs.html#22-38" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
+                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="in-band">Module <a href="../../../../index.html">mcaptcha</a>::<wbr><a href="../../../index.html">pages</a>::<wbr><a href="../../index.html">panel</a>::<wbr><a href="../index.html">sitekey</a>::<wbr><a class="mod" href="">routes</a><button id="copy-path" onclick="copy_path(this)">⎘</button></span><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span><a class="srclink" href="../../../../../src/mcaptcha/pages/panel/sitekey/mod.rs.html#23-41" title="goto source code">[src]</a></span></h1><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
 <table><tr class="module-item"><td><a class="struct" href="struct.Sitekey.html" title="mcaptcha::pages::panel::sitekey::routes::Sitekey struct">Sitekey</a></td><td class="docblock-short"></td></tr></table></section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
     <script src="../../../../../main.js"></script></body></html>

File diff suppressed because it is too large
+ 0 - 0
mcaptcha/pages/panel/sitekey/routes/struct.Sitekey.html


+ 1 - 1
mcaptcha/pages/panel/sitekey/sidebar-items.js

@@ -1 +1 @@
-initSidebarItems({"fn":[["services",""]],"mod":[["add",""],["list",""],["routes",""],["view",""]]});
+initSidebarItems({"fn":[["services",""]],"mod":[["add",""],["edit",""],["list",""],["routes",""],["view",""]]});

File diff suppressed because it is too large
+ 0 - 0
search-index.js


+ 1 - 1
source-files.js

@@ -1,5 +1,5 @@
 var N = null;var sourcesIndex = {};
-sourcesIndex["mcaptcha"] = {"name":"","dirs":[{"name":"api","dirs":[{"name":"v1","dirs":[{"name":"account","files":["delete.rs","email.rs","mod.rs","secret.rs","username.rs"]},{"name":"mcaptcha","files":["captcha.rs","duration.rs","levels.rs","mod.rs"]},{"name":"notifications","files":["add.rs","get.rs","mark_read.rs","mod.rs"]},{"name":"pow","files":["get_config.rs","mod.rs","verify_pow.rs","verify_token.rs"]}],"files":["auth.rs","meta.rs","mod.rs","routes.rs"]}],"files":["mod.rs"]},{"name":"email","files":["mod.rs","verification.rs"]},{"name":"middleware","files":["auth.rs","mod.rs"]},{"name":"pages","dirs":[{"name":"auth","files":["login.rs","mod.rs","register.rs"]},{"name":"panel","dirs":[{"name":"sitekey","files":["add.rs","list.rs","mod.rs","view.rs"]}],"files":["mod.rs","notifications.rs"]}],"files":["errors.rs","mod.rs","routes.rs"]},{"name":"static_assets","files":["filemap.rs","mod.rs","static_files.rs"]},{"name":"stats","files":["fetch.rs","mod.rs","record.rs"]},{"name":"widget","files":["mod.rs"]}],"files":["data.rs","docs.rs","errors.rs","main.rs","routes.rs","settings.rs"]};
+sourcesIndex["mcaptcha"] = {"name":"","dirs":[{"name":"api","dirs":[{"name":"v1","dirs":[{"name":"account","files":["delete.rs","email.rs","mod.rs","secret.rs","username.rs"]},{"name":"mcaptcha","files":["captcha.rs","duration.rs","levels.rs","mod.rs"]},{"name":"notifications","files":["add.rs","get.rs","mark_read.rs","mod.rs"]},{"name":"pow","files":["get_config.rs","mod.rs","verify_pow.rs","verify_token.rs"]}],"files":["auth.rs","meta.rs","mod.rs","routes.rs"]}],"files":["mod.rs"]},{"name":"email","files":["mod.rs","verification.rs"]},{"name":"middleware","files":["auth.rs","mod.rs"]},{"name":"pages","dirs":[{"name":"auth","files":["login.rs","mod.rs","register.rs"]},{"name":"panel","dirs":[{"name":"sitekey","files":["add.rs","edit.rs","list.rs","mod.rs","view.rs"]}],"files":["mod.rs","notifications.rs"]}],"files":["errors.rs","mod.rs","routes.rs"]},{"name":"static_assets","files":["filemap.rs","mod.rs","static_files.rs"]},{"name":"stats","files":["fetch.rs","mod.rs","record.rs"]},{"name":"widget","files":["mod.rs"]}],"files":["data.rs","docs.rs","errors.rs","main.rs","routes.rs","settings.rs"]};
 sourcesIndex["mcaptcha_browser"] = {"name":"","files":["lib.rs"]};
 sourcesIndex["tests_migrate"] = {"name":"","files":["data.rs","settings.rs","tests-migrate.rs"]};
 createSourceSidebar();

+ 56 - 130
src/mcaptcha/api/v1/mcaptcha/levels.rs.html

@@ -331,43 +331,6 @@
 <span id="328">328</span>
 <span id="329">329</span>
 <span id="330">330</span>
-<span id="331">331</span>
-<span id="332">332</span>
-<span id="333">333</span>
-<span id="334">334</span>
-<span id="335">335</span>
-<span id="336">336</span>
-<span id="337">337</span>
-<span id="338">338</span>
-<span id="339">339</span>
-<span id="340">340</span>
-<span id="341">341</span>
-<span id="342">342</span>
-<span id="343">343</span>
-<span id="344">344</span>
-<span id="345">345</span>
-<span id="346">346</span>
-<span id="347">347</span>
-<span id="348">348</span>
-<span id="349">349</span>
-<span id="350">350</span>
-<span id="351">351</span>
-<span id="352">352</span>
-<span id="353">353</span>
-<span id="354">354</span>
-<span id="355">355</span>
-<span id="356">356</span>
-<span id="357">357</span>
-<span id="358">358</span>
-<span id="359">359</span>
-<span id="360">360</span>
-<span id="361">361</span>
-<span id="362">362</span>
-<span id="363">363</span>
-<span id="364">364</span>
-<span id="365">365</span>
-<span id="366">366</span>
-<span id="367">367</span>
 </pre><div class="example-wrap"><pre class="rust ">
 <span class="comment">/*
 * Copyright (C) 2021  Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
@@ -387,6 +350,7 @@
 */</span>
 <span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
 <span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
+<span class="kw">use</span> <span class="ident">futures::future::try_join_all</span>;
 <span class="kw">use</span> <span class="ident">libmcaptcha</span>::{<span class="ident">defense::Level</span>, <span class="ident">DefenseBuilder</span>};
 <span class="kw">use</span> <span class="ident">log::debug</span>;
 <span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
@@ -400,7 +364,7 @@
 
     <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Levels</span> {
         <span class="kw">pub</span> <span class="ident">add</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
-        <span class="kw">pub</span> <span class="ident">delete</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
+        <span class="comment">//        pub delete: &amp;&#39;static str,</span>
         <span class="kw">pub</span> <span class="ident">get</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
         <span class="kw">pub</span> <span class="ident">update</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
     }
@@ -409,11 +373,11 @@
         <span class="kw">pub</span> <span class="kw">const</span> <span class="kw">fn</span> <span class="ident">new</span>() <span class="op">-</span><span class="op">&gt;</span> <span class="ident">Levels</span> {
             <span class="kw">let</span> <span class="ident">add</span> <span class="op">=</span> <span class="string">&quot;/api/v1/mcaptcha/levels/add&quot;</span>;
             <span class="kw">let</span> <span class="ident">update</span> <span class="op">=</span> <span class="string">&quot;/api/v1/mcaptcha/levels/update&quot;</span>;
-            <span class="kw">let</span> <span class="ident">delete</span> <span class="op">=</span> <span class="string">&quot;/api/v1/mcaptcha/levels/delete&quot;</span>;
+            <span class="comment">// let delete = &quot;/api/v1/mcaptcha/levels/delete&quot;;</span>
             <span class="kw">let</span> <span class="ident">get</span> <span class="op">=</span> <span class="string">&quot;/api/v1/mcaptcha/levels/get&quot;</span>;
             <span class="ident">Levels</span> {
                 <span class="ident">add</span>,
-                <span class="ident">delete</span>,
+                <span class="comment">//      delete,</span>
                 <span class="ident">get</span>,
                 <span class="ident">update</span>,
             }
@@ -431,7 +395,6 @@
 <span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">services</span>(<span class="ident">cfg</span>: <span class="kw-2">&amp;</span><span class="kw-2">mut</span> <span class="ident">web::ServiceConfig</span>) {
     <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">add_levels</span>);
     <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">update_levels</span>);
-    <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">delete_levels</span>);
     <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">get_levels</span>);
 }
 
@@ -458,10 +421,12 @@
 
     <span class="macro">debug!</span>(<span class="string">&quot;config created&quot;</span>);
 
+    <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">futs</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">len</span>());
+
     <span class="kw">for</span> <span class="ident">level</span> <span class="kw">in</span> <span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">iter</span>() {
         <span class="kw">let</span> <span class="ident">difficulty_factor</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">difficulty_factor</span> <span class="kw">as</span> <span class="ident">i32</span>;
         <span class="kw">let</span> <span class="ident">visitor_threshold</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">visitor_threshold</span> <span class="kw">as</span> <span class="ident">i32</span>;
-        <span class="macro">sqlx::query!</span>(
+        <span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
             <span class="string">&quot;INSERT INTO mcaptcha_levels (
             difficulty_factor, 
             visitor_threshold,
@@ -476,17 +441,20 @@
             <span class="kw-2">&amp;</span><span class="ident">mcaptcha_config</span>.<span class="ident">key</span>,
             <span class="kw-2">&amp;</span><span class="ident">username</span>,
         )
-        .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)
-        .<span class="kw">await</span><span class="question-mark">?</span>;
+        .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>);
+        <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">fut</span>);
     }
 
+    <span class="ident">try_join_all</span>(<span class="ident">futs</span>).<span class="kw">await</span><span class="question-mark">?</span>;
+
     <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">mcaptcha_config</span>))
 }
 
 <span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Serialize</span>, <span class="ident">Deserialize</span>)]</span>
 <span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">UpdateLevels</span> {
     <span class="kw">pub</span> <span class="ident">levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span>,
-    <span class="doccomment">/// name is config_name</span>
+    <span class="kw">pub</span> <span class="ident">duration</span>: <span class="ident">u32</span>,
+    <span class="kw">pub</span> <span class="ident">description</span>: <span class="ident">String</span>,
     <span class="kw">pub</span> <span class="ident">key</span>: <span class="ident">String</span>,
 }
 
@@ -511,7 +479,8 @@
     <span class="comment">// still, needs to be benchmarked</span>
     <span class="ident">defense</span>.<span class="ident">build</span>()<span class="question-mark">?</span>;
 
-    <span class="macro">sqlx::query!</span>(
+    <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">futs</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">len</span>() <span class="op">+</span> <span class="number">2</span>);
+    <span class="kw">let</span> <span class="ident">del_fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
         <span class="string">&quot;DELETE FROM mcaptcha_levels 
         WHERE config_id = (
             SELECT config_id FROM mcaptcha_config where key = ($1) 
@@ -522,13 +491,26 @@
         <span class="kw-2">&amp;</span><span class="ident">payload</span>.<span class="ident">key</span>,
         <span class="kw-2">&amp;</span><span class="ident">username</span>
     )
-    .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)
-    .<span class="kw">await</span><span class="question-mark">?</span>;
+    .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>); <span class="comment">//.await?;</span>
+
+    <span class="kw">let</span> <span class="ident">update_fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
+        <span class="string">&quot;UPDATE mcaptcha_config SET name = $1, duration = $2 
+            WHERE user_id = (SELECT ID FROM mcaptcha_users WHERE name = $3)
+            AND key = $4&quot;</span>,
+        <span class="kw-2">&amp;</span><span class="ident">payload</span>.<span class="ident">description</span>,
+        <span class="ident">payload</span>.<span class="ident">duration</span> <span class="kw">as</span> <span class="ident">i32</span>,
+        <span class="kw-2">&amp;</span><span class="ident">username</span>,
+        <span class="kw-2">&amp;</span><span class="ident">payload</span>.<span class="ident">key</span>,
+    )
+    .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>); <span class="comment">//.await?;</span>
+
+    <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">del_fut</span>);
+    <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">update_fut</span>);
 
     <span class="kw">for</span> <span class="ident">level</span> <span class="kw">in</span> <span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">iter</span>() {
         <span class="kw">let</span> <span class="ident">difficulty_factor</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">difficulty_factor</span> <span class="kw">as</span> <span class="ident">i32</span>;
         <span class="kw">let</span> <span class="ident">visitor_threshold</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">visitor_threshold</span> <span class="kw">as</span> <span class="ident">i32</span>;
-        <span class="macro">sqlx::query!</span>(
+        <span class="kw">let</span> <span class="ident">fut</span> <span class="op">=</span> <span class="macro">sqlx::query!</span>(
             <span class="string">&quot;INSERT INTO mcaptcha_levels (
             difficulty_factor, 
             visitor_threshold,
@@ -544,40 +526,11 @@
             <span class="kw-2">&amp;</span><span class="ident">payload</span>.<span class="ident">key</span>,
             <span class="kw-2">&amp;</span><span class="ident">username</span>,
         )
-        .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)
-        .<span class="kw">await</span><span class="question-mark">?</span>;
-    }
-
-    <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>())
-}
-
-<span class="attribute">#[<span class="ident">my_codegen::post</span>(
-    <span class="ident">path</span> <span class="op">=</span> <span class="string">&quot;crate::V1_API_ROUTES.levels.delete&quot;</span>,
-    <span class="ident">wrap</span> <span class="op">=</span> <span class="string">&quot;crate::CheckLogin&quot;</span>
-)]</span>
-<span class="kw">async</span> <span class="kw">fn</span> <span class="ident">delete_levels</span>(
-    <span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op">&lt;</span><span class="ident">UpdateLevels</span><span class="op">&gt;</span>,
-    <span class="ident">data</span>: <span class="ident">AppData</span>,
-    <span class="ident">id</span>: <span class="ident">Identity</span>,
-) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">ServiceResult</span><span class="op">&lt;</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">&gt;</span> {
-    <span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
-
-    <span class="kw">for</span> <span class="ident">level</span> <span class="kw">in</span> <span class="ident">payload</span>.<span class="ident">levels</span>.<span class="ident">iter</span>() {
-        <span class="kw">let</span> <span class="ident">difficulty_factor</span> <span class="op">=</span> <span class="ident">level</span>.<span class="ident">difficulty_factor</span> <span class="kw">as</span> <span class="ident">i32</span>;
-        <span class="macro">sqlx::query!</span>(
-            <span class="string">&quot;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 = $3)
-                ) AND difficulty_factor = ($2);&quot;</span>,
-            <span class="kw-2">&amp;</span><span class="ident">payload</span>.<span class="ident">key</span>,
-            <span class="ident">difficulty_factor</span>,
-            <span class="kw-2">&amp;</span><span class="ident">username</span>
-        )
-        .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)
-        .<span class="kw">await</span><span class="question-mark">?</span>;
+        .<span class="ident">execute</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>); <span class="comment">//.await?;</span>
+        <span class="ident">futs</span>.<span class="ident">push</span>(<span class="ident">fut</span>);
     }
 
+    <span class="ident">try_join_all</span>(<span class="ident">futs</span>).<span class="kw">await</span><span class="question-mark">?</span>;
     <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>())
 }
 
@@ -616,7 +569,8 @@
             config_id = (
                 SELECT config_id FROM mcaptcha_config WHERE key = ($1)
                 AND user_id = (SELECT ID from mcaptcha_users WHERE name = $2)
-                );&quot;</span>,
+                )
+            ORDER BY difficulty_factor ASC;&quot;</span>,
         <span class="ident">key</span>,
         <span class="kw-2">&amp;</span><span class="ident">username</span>
     )
@@ -637,6 +591,15 @@
     <span class="kw">use</span> <span class="kw">crate</span><span class="ident">::tests</span>::<span class="kw-2">*</span>;
     <span class="kw">use</span> <span class="kw">crate</span>::<span class="kw-2">*</span>;
 
+    <span class="kw">const</span> <span class="ident">L1</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
+        <span class="ident">difficulty_factor</span>: <span class="number">100</span>,
+        <span class="ident">visitor_threshold</span>: <span class="number">10</span>,
+    };
+    <span class="kw">const</span> <span class="ident">L2</span>: <span class="ident">Level</span> <span class="op">=</span> <span class="ident">Level</span> {
+        <span class="ident">difficulty_factor</span>: <span class="number">1000</span>,
+        <span class="ident">visitor_threshold</span>: <span class="number">1000</span>,
+    };
+
     <span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
     <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">level_routes_work</span>() {
         <span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;testuserlevelroutes&quot;</span>;
@@ -655,8 +618,7 @@
 
         <span class="comment">// 2. get level</span>
 
-        <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">L1</span>, <span class="ident">L2</span>];
-
+        <span class="kw">let</span> <span class="ident">add_level</span> <span class="op">=</span> <span class="ident">get_level_data</span>();
         <span class="kw">let</span> <span class="ident">get_level_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
             <span class="kw-2">&amp;</span><span class="ident">app</span>,
             <span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">key</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
@@ -666,64 +628,28 @@
         .<span class="kw">await</span>;
         <span class="macro">assert_eq!</span>(<span class="ident">get_level_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
         <span class="kw">let</span> <span class="ident">res_levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_level_resp</span>).<span class="kw">await</span>;
-        <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">levels</span>);
+        <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">add_level</span>.<span class="ident">levels</span>);
 
         <span class="comment">// 3. update level</span>
 
-        <span class="kw">let</span> <span class="ident">l1</span> <span class="op">=</span> <span class="ident">Level</span> {
-            <span class="ident">difficulty_factor</span>: <span class="number">10</span>,
-            <span class="ident">visitor_threshold</span>: <span class="number">10</span>,
-        };
-        <span class="kw">let</span> <span class="ident">l2</span> <span class="op">=</span> <span class="ident">Level</span> {
-            <span class="ident">difficulty_factor</span>: <span class="number">5000</span>,
-            <span class="ident">visitor_threshold</span>: <span class="number">5000</span>,
-        };
-        <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">l1</span>, <span class="ident">l2</span>];
-        <span class="kw">let</span> <span class="ident">add_level</span> <span class="op">=</span> <span class="ident">UpdateLevels</span> {
-            <span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">clone</span>(),
-            <span class="ident">key</span>: <span class="ident">key</span>.<span class="ident">key</span>.<span class="ident">clone</span>(),
-        };
-        <span class="kw">let</span> <span class="ident">add_token_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
-            <span class="kw-2">&amp;</span><span class="ident">app</span>,
-            <span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">add_level</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">update</span>)
-                .<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
-                .<span class="ident">to_request</span>(),
-        )
-        .<span class="kw">await</span>;
-        <span class="macro">assert_eq!</span>(<span class="ident">add_token_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
-        <span class="kw">let</span> <span class="ident">get_level_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
-            <span class="kw-2">&amp;</span><span class="ident">app</span>,
-            <span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">key</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
-                .<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
-                .<span class="ident">to_request</span>(),
-        )
-        .<span class="kw">await</span>;
-        <span class="macro">assert_eq!</span>(<span class="ident">get_level_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
-        <span class="kw">let</span> <span class="ident">res_levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_level_resp</span>).<span class="kw">await</span>;
-        <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">levels</span>);
+        <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">L1</span>, <span class="ident">L2</span>];
 
-        <span class="comment">// 4. delete level</span>
-        <span class="kw">let</span> <span class="ident">l1</span> <span class="op">=</span> <span class="ident">Level</span> {
-            <span class="ident">difficulty_factor</span>: <span class="number">10</span>,
-            <span class="ident">visitor_threshold</span>: <span class="number">10</span>,
-        };
-        <span class="kw">let</span> <span class="ident">l2</span> <span class="op">=</span> <span class="ident">Level</span> {
-            <span class="ident">difficulty_factor</span>: <span class="number">5000</span>,
-            <span class="ident">visitor_threshold</span>: <span class="number">5000</span>,
-        };
-        <span class="kw">let</span> <span class="ident">levels</span> <span class="op">=</span> <span class="macro">vec!</span>[<span class="ident">l1</span>, <span class="ident">l2</span>];
-        <span class="kw">let</span> <span class="ident">add_level</span> <span class="op">=</span> <span class="ident">UpdateLevels</span> {
-            <span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">clone</span>(),
+        <span class="kw">let</span> <span class="ident">update_level</span> <span class="op">=</span> <span class="ident">UpdateLevels</span> {
             <span class="ident">key</span>: <span class="ident">key</span>.<span class="ident">key</span>.<span class="ident">clone</span>(),
+            <span class="ident">levels</span>: <span class="ident">levels</span>.<span class="ident">clone</span>(),
+            <span class="ident">description</span>: <span class="ident">add_level</span>.<span class="ident">description</span>,
+            <span class="ident">duration</span>: <span class="ident">add_level</span>.<span class="ident">duration</span>,
         };
+
         <span class="kw">let</span> <span class="ident">add_token_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
             <span class="kw-2">&amp;</span><span class="ident">app</span>,
-            <span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">add_level</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">delete</span>)
+            <span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">update_level</span>, <span class="kw-2">&amp;</span><span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">update</span>)
                 .<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
                 .<span class="ident">to_request</span>(),
         )
         .<span class="kw">await</span>;
         <span class="macro">assert_eq!</span>(<span class="ident">add_token_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
+
         <span class="kw">let</span> <span class="ident">get_level_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
             <span class="kw-2">&amp;</span><span class="ident">app</span>,
             <span class="macro">post_request!</span>(<span class="kw-2">&amp;</span><span class="ident">key</span>, <span class="ident">ROUTES</span>.<span class="ident">levels</span>.<span class="ident">get</span>)
@@ -733,7 +659,7 @@
         .<span class="kw">await</span>;
         <span class="macro">assert_eq!</span>(<span class="ident">get_level_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
         <span class="kw">let</span> <span class="ident">res_levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span> <span class="op">=</span> <span class="ident">test::read_body_json</span>(<span class="ident">get_level_resp</span>).<span class="kw">await</span>;
-        <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">Vec::new</span>());
+        <span class="macro">assert_eq!</span>(<span class="ident">res_levels</span>, <span class="ident">levels</span>);
     }
 }
 </pre></div>

+ 1 - 1
src/mcaptcha/api/v1/pow/get_config.rs.html

@@ -299,7 +299,7 @@
         <span class="string">&quot;SELECT difficulty_factor, visitor_threshold FROM mcaptcha_levels  WHERE
             config_id = (
                 SELECT config_id FROM mcaptcha_config WHERE key = ($1)
-                );&quot;</span>,
+                ) ORDER BY difficulty_factor ASC;&quot;</span>,
         <span class="kw-2">&amp;</span><span class="ident">key</span>,
     )
     .<span class="ident">fetch_all</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>);

+ 309 - 0
src/mcaptcha/pages/panel/sitekey/edit.rs.html

@@ -0,0 +1,309 @@
+<!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`."><meta name="keywords" content="rust, rustlang, rust-lang"><title>edit.rs - source</title><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="../../../../../light.css"  id="themeStyle"><link rel="stylesheet" type="text/css" href="../../../../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../../../../ayu.css" disabled ><script id="default-settings"></script><script src="../../../../../storage.js"></script><script src="../../../../../crates.js"></script><noscript><link rel="stylesheet" href="../../../../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../../../../favicon.svg">
+<link rel="alternate icon" type="image/png" href="../../../../../favicon-16x16.png">
+<link rel="alternate icon" type="image/png" href="../../../../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../../../../down-arrow.svg");}</style></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="sidebar"><div class="sidebar-menu" role="button">&#9776;</div><a href='../../../../../mcaptcha/index.html'><div class='logo-container rust-logo'><img src='../../../../../rust-logo.png' alt='logo'></div></a></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../../../../brush.svg" width="18" height="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><button type="button" class="help-button">?</button>
+                <a id="settings-menu" href="../../../../../settings.html"><img src="../../../../../wheel.svg" width="18" height="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><pre class="line-numbers"><span id="1">  1</span>
+<span id="2">  2</span>
+<span id="3">  3</span>
+<span id="4">  4</span>
+<span id="5">  5</span>
+<span id="6">  6</span>
+<span id="7">  7</span>
+<span id="8">  8</span>
+<span id="9">  9</span>
+<span id="10"> 10</span>
+<span id="11"> 11</span>
+<span id="12"> 12</span>
+<span id="13"> 13</span>
+<span id="14"> 14</span>
+<span id="15"> 15</span>
+<span id="16"> 16</span>
+<span id="17"> 17</span>
+<span id="18"> 18</span>
+<span id="19"> 19</span>
+<span id="20"> 20</span>
+<span id="21"> 21</span>
+<span id="22"> 22</span>
+<span id="23"> 23</span>
+<span id="24"> 24</span>
+<span id="25"> 25</span>
+<span id="26"> 26</span>
+<span id="27"> 27</span>
+<span id="28"> 28</span>
+<span id="29"> 29</span>
+<span id="30"> 30</span>
+<span id="31"> 31</span>
+<span id="32"> 32</span>
+<span id="33"> 33</span>
+<span id="34"> 34</span>
+<span id="35"> 35</span>
+<span id="36"> 36</span>
+<span id="37"> 37</span>
+<span id="38"> 38</span>
+<span id="39"> 39</span>
+<span id="40"> 40</span>
+<span id="41"> 41</span>
+<span id="42"> 42</span>
+<span id="43"> 43</span>
+<span id="44"> 44</span>
+<span id="45"> 45</span>
+<span id="46"> 46</span>
+<span id="47"> 47</span>
+<span id="48"> 48</span>
+<span id="49"> 49</span>
+<span id="50"> 50</span>
+<span id="51"> 51</span>
+<span id="52"> 52</span>
+<span id="53"> 53</span>
+<span id="54"> 54</span>
+<span id="55"> 55</span>
+<span id="56"> 56</span>
+<span id="57"> 57</span>
+<span id="58"> 58</span>
+<span id="59"> 59</span>
+<span id="60"> 60</span>
+<span id="61"> 61</span>
+<span id="62"> 62</span>
+<span id="63"> 63</span>
+<span id="64"> 64</span>
+<span id="65"> 65</span>
+<span id="66"> 66</span>
+<span id="67"> 67</span>
+<span id="68"> 68</span>
+<span id="69"> 69</span>
+<span id="70"> 70</span>
+<span id="71"> 71</span>
+<span id="72"> 72</span>
+<span id="73"> 73</span>
+<span id="74"> 74</span>
+<span id="75"> 75</span>
+<span id="76"> 76</span>
+<span id="77"> 77</span>
+<span id="78"> 78</span>
+<span id="79"> 79</span>
+<span id="80"> 80</span>
+<span id="81"> 81</span>
+<span id="82"> 82</span>
+<span id="83"> 83</span>
+<span id="84"> 84</span>
+<span id="85"> 85</span>
+<span id="86"> 86</span>
+<span id="87"> 87</span>
+<span id="88"> 88</span>
+<span id="89"> 89</span>
+<span id="90"> 90</span>
+<span id="91"> 91</span>
+<span id="92"> 92</span>
+<span id="93"> 93</span>
+<span id="94"> 94</span>
+<span id="95"> 95</span>
+<span id="96"> 96</span>
+<span id="97"> 97</span>
+<span id="98"> 98</span>
+<span id="99"> 99</span>
+<span id="100">100</span>
+<span id="101">101</span>
+<span id="102">102</span>
+<span id="103">103</span>
+<span id="104">104</span>
+<span id="105">105</span>
+<span id="106">106</span>
+<span id="107">107</span>
+<span id="108">108</span>
+<span id="109">109</span>
+<span id="110">110</span>
+<span id="111">111</span>
+<span id="112">112</span>
+<span id="113">113</span>
+<span id="114">114</span>
+<span id="115">115</span>
+<span id="116">116</span>
+<span id="117">117</span>
+<span id="118">118</span>
+<span id="119">119</span>
+<span id="120">120</span>
+<span id="121">121</span>
+<span id="122">122</span>
+<span id="123">123</span>
+<span id="124">124</span>
+<span id="125">125</span>
+<span id="126">126</span>
+<span id="127">127</span>
+<span id="128">128</span>
+<span id="129">129</span>
+<span id="130">130</span>
+<span id="131">131</span>
+<span id="132">132</span>
+<span id="133">133</span>
+<span id="134">134</span>
+<span id="135">135</span>
+<span id="136">136</span>
+<span id="137">137</span>
+<span id="138">138</span>
+<span id="139">139</span>
+<span id="140">140</span>
+<span id="141">141</span>
+<span id="142">142</span>
+<span id="143">143</span>
+<span id="144">144</span>
+<span id="145">145</span>
+<span id="146">146</span>
+<span id="147">147</span>
+<span id="148">148</span>
+<span id="149">149</span>
+<span id="150">150</span>
+<span id="151">151</span>
+</pre><div class="example-wrap"><pre class="rust ">
+<span class="comment">/*
+ * Copyright (C) 2021  Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.
+ */</span>
+<span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
+<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
+<span class="kw">use</span> <span class="ident">futures</span>::{<span class="ident">future::TryFutureExt</span>, <span class="ident">try_join</span>};
+<span class="kw">use</span> <span class="ident">sailfish::TemplateOnce</span>;
+
+<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::errors</span>::<span class="kw-2">*</span>;
+<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::stats::fetch::Stats</span>;
+<span class="kw">use</span> <span class="kw">crate</span><span class="ident">::AppData</span>;
+
+<span class="kw">const</span> <span class="ident">PAGE</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;SiteKeys&quot;</span>;
+
+<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>)]</span>
+<span class="kw">struct</span> <span class="ident">McaptchaConfig</span> {
+    <span class="ident">config_id</span>: <span class="ident">i32</span>,
+    <span class="ident">duration</span>: <span class="ident">i32</span>,
+    <span class="ident">name</span>: <span class="ident">String</span>,
+}
+
+<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Clone</span>)]</span>
+<span class="kw">struct</span> <span class="ident">Level</span> {
+    <span class="ident">difficulty_factor</span>: <span class="ident">i32</span>,
+    <span class="ident">visitor_threshold</span>: <span class="ident">i32</span>,
+}
+
+<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">TemplateOnce</span>, <span class="ident">Clone</span>)]</span>
+<span class="attribute">#[<span class="ident">template</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">&quot;panel/sitekey/edit/index.html&quot;</span>)]</span>
+<span class="kw">struct</span> <span class="ident">IndexPage</span> {
+    <span class="ident">duration</span>: <span class="ident">u32</span>,
+    <span class="ident">name</span>: <span class="ident">String</span>,
+    <span class="ident">key</span>: <span class="ident">String</span>,
+    <span class="ident">levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span>,
+}
+
+<span class="kw">impl</span> <span class="ident">IndexPage</span> {
+    <span class="kw">fn</span> <span class="ident">new</span>(<span class="ident">config</span>: <span class="ident">McaptchaConfig</span>, <span class="ident">levels</span>: <span class="ident">Vec</span><span class="op">&lt;</span><span class="ident">Level</span><span class="op">&gt;</span>, <span class="ident">key</span>: <span class="ident">String</span>) <span class="op">-</span><span class="op">&gt;</span> <span class="self">Self</span> {
+        <span class="ident">IndexPage</span> {
+            <span class="ident">duration</span>: <span class="ident">config</span>.<span class="ident">duration</span> <span class="kw">as</span> <span class="ident">u32</span>,
+            <span class="ident">name</span>: <span class="ident">config</span>.<span class="ident">name</span>,
+            <span class="ident">levels</span>,
+            <span class="ident">key</span>,
+        }
+    }
+}
+
+<span class="doccomment">/// route handler that renders individual views for sitekeys</span>
+<span class="attribute">#[<span class="ident">my_codegen::get</span>(<span class="ident">path</span> <span class="op">=</span> <span class="string">&quot;crate::PAGES.panel.sitekey.edit&quot;</span>, <span class="ident">wrap</span> <span class="op">=</span> <span class="string">&quot;crate::CheckLogin&quot;</span>)]</span>
+<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">edit_sitekey</span>(
+    <span class="ident">path</span>: <span class="ident">web::Path</span><span class="op">&lt;</span><span class="ident">String</span><span class="op">&gt;</span>,
+    <span class="ident">data</span>: <span class="ident">AppData</span>,
+    <span class="ident">id</span>: <span class="ident">Identity</span>,
+) <span class="op">-</span><span class="op">&gt;</span> <span class="ident">PageResult</span><span class="op">&lt;</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">&gt;</span> {
+    <span class="kw">let</span> <span class="ident">username</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
+    <span class="kw">let</span> <span class="ident">key</span> <span class="op">=</span> <span class="ident">path</span>.<span class="ident">into_inner</span>();
+
+    <span class="kw">let</span> <span class="ident">config</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
+        <span class="ident">McaptchaConfig</span>,
+        <span class="string">&quot;SELECT config_id, duration, name from mcaptcha_config WHERE
+        key = $1 AND
+        user_id = (SELECT ID FROM mcaptcha_users WHERE name = $2) &quot;</span>,
+        <span class="kw-2">&amp;</span><span class="ident">key</span>,
+        <span class="kw-2">&amp;</span><span class="ident">username</span>,
+    )
+    .<span class="ident">fetch_one</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)
+    .<span class="kw">await</span><span class="question-mark">?</span>;
+
+    <span class="kw">let</span> <span class="ident">levels_fut</span> <span class="op">=</span> <span class="macro">sqlx::query_as!</span>(
+        <span class="ident">Level</span>,
+        <span class="string">&quot;SELECT 
+            difficulty_factor, visitor_threshold 
+        FROM 
+            mcaptcha_levels 
+        WHERE config_id = $1 ORDER BY difficulty_factor ASC&quot;</span>,
+        <span class="kw-2">&amp;</span><span class="ident">config</span>.<span class="ident">config_id</span>
+    )
+    .<span class="ident">fetch_all</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)
+    .<span class="ident">err_into</span>();
+
+    <span class="kw">let</span> (<span class="ident">_stats</span>, <span class="ident">levels</span>) <span class="op">=</span> <span class="macro">try_join!</span>(<span class="ident">Stats::new</span>(<span class="kw-2">&amp;</span><span class="ident">key</span>, <span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>), <span class="ident">levels_fut</span>)<span class="question-mark">?</span>;
+
+    <span class="kw">let</span> <span class="ident">body</span> <span class="op">=</span> <span class="ident">IndexPage::new</span>(<span class="ident">config</span>, <span class="ident">levels</span>, <span class="ident">key</span>).<span class="ident">render_once</span>().<span class="ident">unwrap</span>();
+    <span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>()
+        .<span class="ident">content_type</span>(<span class="string">&quot;text/html; charset=utf-8&quot;</span>)
+        .<span class="ident">body</span>(<span class="ident">body</span>))
+}
+
+<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
+<span class="kw">mod</span> <span class="ident">test</span> {
+    <span class="kw">use</span> <span class="ident">actix_web::http::StatusCode</span>;
+    <span class="kw">use</span> <span class="ident">actix_web::test</span>;
+    <span class="kw">use</span> <span class="ident">actix_web::web::Bytes</span>;
+
+    <span class="kw">use</span> <span class="kw">crate</span><span class="ident">::tests</span>::<span class="kw-2">*</span>;
+    <span class="kw">use</span> <span class="kw">crate</span>::<span class="kw-2">*</span>;
+
+    <span class="attribute">#[<span class="ident">actix_rt::test</span>]</span>
+    <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">view_sitekey_work</span>() {
+        <span class="kw">const</span> <span class="ident">NAME</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;editsitekeyuser&quot;</span>;
+        <span class="kw">const</span> <span class="ident">PASSWORD</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;longpassworddomain&quot;</span>;
+        <span class="kw">const</span> <span class="ident">EMAIL</span>: <span class="kw-2">&amp;</span><span class="ident">str</span> <span class="op">=</span> <span class="string">&quot;editsitekeyuser@a.com&quot;</span>;
+
+        {
+            <span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">Data::new</span>().<span class="kw">await</span>;
+            <span class="ident">delete_user</span>(<span class="ident">NAME</span>, <span class="kw-2">&amp;</span><span class="ident">data</span>).<span class="kw">await</span>;
+        }
+
+        <span class="ident">register_and_signin</span>(<span class="ident">NAME</span>, <span class="ident">EMAIL</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
+        <span class="kw">let</span> (<span class="ident">data</span>, <span class="kw">_</span>, <span class="ident">signin_resp</span>, <span class="ident">key</span>) <span class="op">=</span> <span class="ident">add_levels_util</span>(<span class="ident">NAME</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
+        <span class="kw">let</span> <span class="ident">cookies</span> <span class="op">=</span> <span class="macro">get_cookie!</span>(<span class="ident">signin_resp</span>);
+
+        <span class="kw">let</span> <span class="ident">app</span> <span class="op">=</span> <span class="macro">get_app!</span>(<span class="ident">data</span>).<span class="kw">await</span>;
+
+        <span class="kw">let</span> <span class="ident">url</span> <span class="op">=</span> <span class="macro">format!</span>(<span class="string">&quot;/sitekey/{}/edit&quot;</span>, <span class="kw-2">&amp;</span><span class="ident">key</span>.<span class="ident">key</span>);
+
+        <span class="kw">let</span> <span class="ident">list_sitekey_resp</span> <span class="op">=</span> <span class="ident">test::call_service</span>(
+            <span class="kw-2">&amp;</span><span class="ident">app</span>,
+            <span class="ident">test::TestRequest::get</span>()
+                .<span class="ident">uri</span>(<span class="kw-2">&amp;</span><span class="ident">url</span>)
+                .<span class="ident">cookie</span>(<span class="ident">cookies</span>.<span class="ident">clone</span>())
+                .<span class="ident">to_request</span>(),
+        )
+        .<span class="kw">await</span>;
+
+        <span class="macro">assert_eq!</span>(<span class="ident">list_sitekey_resp</span>.<span class="ident">status</span>(), <span class="ident">StatusCode::OK</span>);
+
+        <span class="kw">let</span> <span class="ident">body</span>: <span class="ident">Bytes</span> <span class="op">=</span> <span class="ident">test::read_body</span>(<span class="ident">list_sitekey_resp</span>).<span class="kw">await</span>;
+        <span class="kw">let</span> <span class="ident">body</span> <span class="op">=</span> <span class="ident">String::from_utf8</span>(<span class="ident">body</span>.<span class="ident">to_vec</span>()).<span class="ident">unwrap</span>();
+
+        <span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">key</span>.<span class="ident">name</span>));
+
+        <span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">L1</span>.<span class="ident">visitor_threshold</span>.<span class="ident">to_string</span>()));
+        <span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">L1</span>.<span class="ident">difficulty_factor</span>.<span class="ident">to_string</span>()));
+        <span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">L2</span>.<span class="ident">difficulty_factor</span>.<span class="ident">to_string</span>()));
+        <span class="macro">assert!</span>(<span class="ident">body</span>.<span class="ident">contains</span>(<span class="kw-2">&amp;</span><span class="ident">L2</span>.<span class="ident">visitor_threshold</span>.<span class="ident">to_string</span>()));
+    }
+}
+</pre></div>
+</section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>
+    <script src="../../../../../main.js"></script><script src="../../../../../source-script.js"></script><script src="../../../../../source-files.js"></script></body></html>

+ 8 - 0
src/mcaptcha/pages/panel/sitekey/mod.rs.html

@@ -45,6 +45,10 @@
 <span id="42">42</span>
 <span id="43">43</span>
 <span id="44">44</span>
+<span id="45">45</span>
+<span id="46">46</span>
+<span id="47">47</span>
+<span id="48">48</span>
 </pre><div class="example-wrap"><pre class="rust ">
 <span class="comment">/*
 * Copyright (C) 2021  Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
@@ -64,6 +68,7 @@
 */</span>
 
 <span class="kw">mod</span> <span class="ident">add</span>;
+<span class="kw">mod</span> <span class="ident">edit</span>;
 <span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">list</span>;
 <span class="kw">mod</span> <span class="ident">view</span>;
 
@@ -72,6 +77,7 @@
         <span class="kw">pub</span> <span class="ident">list</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
         <span class="kw">pub</span> <span class="ident">add</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
         <span class="kw">pub</span> <span class="ident">view</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
+        <span class="kw">pub</span> <span class="ident">edit</span>: <span class="kw-2">&amp;</span><span class="lifetime">&#39;static</span> <span class="ident">str</span>,
     }
 
     <span class="kw">impl</span> <span class="ident">Sitekey</span> {
@@ -80,6 +86,7 @@
                 <span class="ident">list</span>: <span class="string">&quot;/sitekeys&quot;</span>,
                 <span class="ident">add</span>: <span class="string">&quot;/sitekeys/add&quot;</span>,
                 <span class="ident">view</span>: <span class="string">&quot;/sitekey/{key}&quot;</span>,
+                <span class="ident">edit</span>: <span class="string">&quot;/sitekey/{key}/edit&quot;</span>,
             }
         }
     }
@@ -89,6 +96,7 @@
     <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">add::add_sitekey</span>);
     <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">list::list_sitekeys</span>);
     <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">view::view_sitekey</span>);
+    <span class="ident">cfg</span>.<span class="ident">service</span>(<span class="ident">edit::edit_sitekey</span>);
 }
 </pre></div>
 </section><section id="search" class="content hidden"></section><div id="rustdoc-vars" data-root-path="../../../../../" data-current-crate="mcaptcha" data-search-index-js="../../../../../search-index.js" data-search-js="../../../../../search.js"></div>

+ 16 - 16
src/mcaptcha/pages/panel/sitekey/view.rs.html

@@ -154,21 +154,21 @@
 <span id="151">151</span>
 </pre><div class="example-wrap"><pre class="rust ">
 <span class="comment">/*
-* Copyright (C) 2021  Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Affero General Public License as
-* published by the Free Software Foundation, either version 3 of the
-* License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU Affero General Public License for more details.
-*
-* You should have received a copy of the GNU Affero General Public License
-* along with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.
-*/</span>
+ * Copyright (C) 2021  Aravinth Manivannan &lt;realaravinth@batsense.net&gt;
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see &lt;https://www.gnu.org/licenses/&gt;.
+ */</span>
 
 <span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
 <span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
@@ -240,7 +240,7 @@
             difficulty_factor, visitor_threshold 
         FROM 
             mcaptcha_levels 
-        WHERE config_id = $1&quot;</span>,
+        WHERE config_id = $1 ORDER BY difficulty_factor ASC&quot;</span>,
         <span class="kw-2">&amp;</span><span class="ident">config</span>.<span class="ident">config_id</span>
     )
     .<span class="ident">fetch_all</span>(<span class="kw-2">&amp;</span><span class="ident">data</span>.<span class="ident">db</span>)

Some files were not shown because too many files changed in this diff