mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2026-02-13 02:55:39 +00:00
Deploying to gh-pages from @ 3710c8f653 🚀
This commit is contained in:
@@ -106,25 +106,22 @@
|
||||
<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>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
|
||||
@@ -133,8 +130,10 @@
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::errors</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::AppData</span>;
|
||||
|
||||
<span class="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">AddNotification</span> {
|
||||
<span class="kw">use</span> <span class="ident">db_core::AddNotification</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Debug</span>, <span class="ident">Clone</span>, <span class="ident">PartialEq</span>, <span class="ident">Default</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">AddNotificationRequest</span> {
|
||||
<span class="kw">pub</span> <span class="ident">to</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">heading</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">message</span>: <span class="ident">String</span>,
|
||||
@@ -146,32 +145,27 @@
|
||||
<span class="ident">wrap</span> <span class="op">=</span> <span class="string">"crate::api::v1::get_middleware()"</span>
|
||||
)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">add_notification</span>(
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">AddNotification</span><span class="op">></span>,
|
||||
<span class="ident">payload</span>: <span class="ident">web::Json</span><span class="op"><</span><span class="ident">AddNotificationRequest</span><span class="op">></span>,
|
||||
<span class="ident">data</span>: <span class="ident">AppData</span>,
|
||||
<span class="ident">id</span>: <span class="ident">Identity</span>,
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="kw">impl</span> <span class="ident">Responder</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="ident">sender</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
<span class="macro">sqlx::query!</span>(
|
||||
<span class="string">"INSERT INTO mcaptcha_notifications (
|
||||
heading, message, tx, rx)
|
||||
VALUES (
|
||||
$1, $2,
|
||||
(SELECT ID FROM mcaptcha_users WHERE name = $3),
|
||||
(SELECT ID FROM mcaptcha_users WHERE name = $4)
|
||||
);"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">heading</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">message</span>,
|
||||
<span class="kw-2">&</span><span class="ident">sender</span>,
|
||||
<span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">to</span>,
|
||||
)
|
||||
.<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
||||
.<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
|
||||
<span class="kw">let</span> <span class="ident">p</span> <span class="op">=</span> <span class="ident">AddNotification</span> {
|
||||
<span class="ident">from</span>: <span class="kw-2">&</span><span class="ident">sender</span>,
|
||||
<span class="ident">to</span>: <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">to</span>,
|
||||
<span class="ident">message</span>: <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">message</span>,
|
||||
<span class="ident">heading</span>: <span class="kw-2">&</span><span class="ident">payload</span>.<span class="ident">heading</span>,
|
||||
};
|
||||
|
||||
<span class="ident">data</span>.<span class="ident">db</span>.<span class="ident">create_notification</span>(<span class="kw-2">&</span><span class="ident">p</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">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">tests</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>;
|
||||
|
||||
@@ -180,26 +174,26 @@
|
||||
<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">notification_works</span>() {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">notification_works</span>() {
|
||||
<span class="kw">const</span> <span class="ident">NAME1</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"notifuser1"</span>;
|
||||
<span class="kw">const</span> <span class="ident">NAME2</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"notiuser2"</span>;
|
||||
<span class="kw">const</span> <span class="ident">PASSWORD</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"longpassworddomain"</span>;
|
||||
<span class="kw">const</span> <span class="ident">EMAIL1</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testnotification1@a.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">EMAIL2</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testnotification2@a.com"</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">NAME1</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME2</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">get_data</span>().<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="kw-2">&</span><span class="ident">data</span>;
|
||||
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME1</span>, <span class="ident">EMAIL1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME2</span>, <span class="ident">EMAIL2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="ident">_creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">NAME1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME2</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>, <span class="ident">EMAIL1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME2</span>, <span class="ident">EMAIL2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">data</span>, <span class="ident">NAME1</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">msg</span> <span class="op">=</span> <span class="ident">AddNotification</span> {
|
||||
<span class="kw">let</span> <span class="ident">msg</span> <span class="op">=</span> <span class="ident">AddNotificationRequest</span> {
|
||||
<span class="ident">to</span>: <span class="ident">NAME2</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">heading</span>: <span class="string">"Test notification"</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">message</span>: <span class="string">"Testeing notifications with a dummy message"</span>.<span class="ident">into</span>(),
|
||||
|
||||
@@ -147,61 +147,33 @@
|
||||
<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>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
<span id="156">156</span>
|
||||
<span id="157">157</span>
|
||||
<span id="158">158</span>
|
||||
<span id="159">159</span>
|
||||
<span id="160">160</span>
|
||||
<span id="161">161</span>
|
||||
<span id="162">162</span>
|
||||
<span id="163">163</span>
|
||||
<span id="164">164</span>
|
||||
<span id="165">165</span>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
|
||||
<span class="kw">use</span> <span class="ident">serde</span>::{<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>};
|
||||
<span class="kw">use</span> <span class="ident">sqlx::types::time::OffsetDateTime</span>;
|
||||
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::errors</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::AppData</span>;
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">Notification</span> {
|
||||
<span class="kw">pub</span> <span class="ident">name</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">heading</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">message</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">String</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">received</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">OffsetDateTime</span><span class="op">></span>,
|
||||
<span class="kw">pub</span> <span class="ident">id</span>: <span class="prelude-ty">Option</span><span class="op"><</span><span class="ident">i32</span><span class="op">></span>,
|
||||
}
|
||||
<span class="kw">use</span> <span class="ident">db_core::Notification</span>;
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>)]</span>
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Default</span>, <span class="ident">PartialEq</span>, <span class="ident">Clone</span>, <span class="ident">Deserialize</span>, <span class="ident">Serialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">NotificationResp</span> {
|
||||
<span class="kw">pub</span> <span class="ident">name</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">heading</span>: <span class="ident">String</span>,
|
||||
@@ -215,13 +187,26 @@
|
||||
<span class="ident">NotificationResp</span> {
|
||||
<span class="ident">name</span>: <span class="ident">n</span>.<span class="ident">name</span>.<span class="ident">unwrap</span>(),
|
||||
<span class="ident">heading</span>: <span class="ident">n</span>.<span class="ident">heading</span>.<span class="ident">unwrap</span>(),
|
||||
<span class="ident">received</span>: <span class="ident">n</span>.<span class="ident">received</span>.<span class="ident">unwrap</span>().<span class="ident">unix_timestamp</span>(),
|
||||
<span class="ident">received</span>: <span class="ident">n</span>.<span class="ident">received</span>.<span class="ident">unwrap</span>(),
|
||||
<span class="ident">id</span>: <span class="ident">n</span>.<span class="ident">id</span>.<span class="ident">unwrap</span>(),
|
||||
<span class="ident">message</span>: <span class="ident">n</span>.<span class="ident">message</span>.<span class="ident">unwrap</span>(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">impl</span> <span class="ident">NotificationResp</span> {
|
||||
<span class="kw">pub</span> <span class="kw">fn</span> <span class="ident">from_notifications</span>(<span class="kw-2">mut</span> <span class="ident">n</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span>) -> <span class="ident">Vec</span><span class="op"><</span><span class="self">Self</span><span class="op">></span> {
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">notifications</span> <span class="op">=</span> <span class="ident">Vec::with_capacity</span>(<span class="ident">n</span>.<span class="ident">len</span>());
|
||||
|
||||
<span class="ident">n</span>.<span class="ident">drain</span>(<span class="number">0</span>..).<span class="ident">for_each</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> {
|
||||
<span class="kw">let</span> <span class="ident">y</span>: <span class="ident">NotificationResp</span> <span class="op">=</span> <span class="ident">x</span>.<span class="ident">into</span>();
|
||||
<span class="ident">notifications</span>.<span class="ident">push</span>(<span class="ident">y</span>)
|
||||
});
|
||||
|
||||
<span class="ident">notifications</span>
|
||||
}
|
||||
}
|
||||
|
||||
<span class="doccomment">/// route handler that gets all unread notifications</span>
|
||||
<span class="attribute">#[<span class="ident">my_codegen::get</span>(
|
||||
<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.notifications.get"</span>,
|
||||
@@ -234,50 +219,23 @@
|
||||
<span class="kw">let</span> <span class="ident">receiver</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
<span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">notifications</span> <span class="op">=</span> <span class="ident">runner::get_notification</span>(<span class="kw-2">&</span><span class="ident">data</span>, <span class="kw-2">&</span><span class="ident">receiver</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">resp</span>: <span class="ident">Vec</span><span class="op"><</span><span class="ident">NotificationResp</span><span class="op">></span> <span class="op">=</span> <span class="ident">notifications</span>
|
||||
.<span class="ident">drain</span>(<span class="number">0</span>..)
|
||||
.<span class="ident">map</span>(<span class="op">|</span><span class="ident">x</span><span class="op">|</span> {
|
||||
<span class="kw">let</span> <span class="ident">y</span>: <span class="ident">NotificationResp</span> <span class="op">=</span> <span class="ident">x</span>.<span class="ident">into</span>();
|
||||
<span class="ident">y</span>
|
||||
})
|
||||
.<span class="ident">collect</span>();
|
||||
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">resp</span>))
|
||||
}
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">runner</span> {
|
||||
<span class="kw">use</span> <span class="kw">super</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">get_notification</span>(
|
||||
<span class="ident">data</span>: <span class="kw-2">&</span><span class="ident">AppData</span>,
|
||||
<span class="ident">receiver</span>: <span class="kw-2">&</span><span class="ident">str</span>,
|
||||
) -> <span class="ident">ServiceResult</span><span class="op"><</span><span class="ident">Vec</span><span class="op"><</span><span class="ident">Notification</span><span class="op">></span><span class="op">></span> {
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
<span class="kw">let</span> <span class="ident">notifications</span> <span class="op">=</span> <span class="macro">sqlx::query_file_as!</span>(
|
||||
<span class="ident">Notification</span>,
|
||||
<span class="string">"src/api/v1/notifications/get_all_unread.sql"</span>,
|
||||
<span class="kw-2">&</span><span class="ident">receiver</span>
|
||||
)
|
||||
.<span class="ident">fetch_all</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
||||
.<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">notifications</span>)
|
||||
}
|
||||
<span class="kw">let</span> <span class="ident">notifications</span> <span class="op">=</span> <span class="ident">data</span>.<span class="ident">db</span>.<span class="ident">get_all_unread_notifications</span>(<span class="kw-2">&</span><span class="ident">receiver</span>).<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="kw">let</span> <span class="ident">notifications</span> <span class="op">=</span> <span class="ident">NotificationResp::from_notifications</span>(<span class="ident">notifications</span>);
|
||||
<span class="prelude-val">Ok</span>(<span class="ident">HttpResponse::Ok</span>().<span class="ident">json</span>(<span class="ident">notifications</span>))
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">tests</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="kw">super</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::notifications::add::AddNotification</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::notifications::add::AddNotificationRequest</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::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">notification_get_works</span>() {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">notification_get_works</span>() {
|
||||
<span class="kw">const</span> <span class="ident">NAME1</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"notifuser12"</span>;
|
||||
<span class="kw">const</span> <span class="ident">NAME2</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"notiuser22"</span>;
|
||||
<span class="kw">const</span> <span class="ident">PASSWORD</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"longpassworddomain"</span>;
|
||||
@@ -286,21 +244,21 @@
|
||||
<span class="kw">const</span> <span class="ident">HEADING</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testing notifications get"</span>;
|
||||
<span class="kw">const</span> <span class="ident">MESSAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testing notifications get message"</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">NAME1</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME2</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">get_data</span>().<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="kw-2">&</span><span class="ident">data</span>;
|
||||
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME1</span>, <span class="ident">EMAIL1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME2</span>, <span class="ident">EMAIL2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="ident">_creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">NAME1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_data</span>, <span class="ident">_creds2</span>, <span class="ident">signin_resp2</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">NAME2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME2</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>, <span class="ident">EMAIL1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME2</span>, <span class="ident">EMAIL2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_creds2</span>, <span class="ident">signin_resp2</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">data</span>, <span class="ident">NAME2</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">cookies2</span> <span class="op">=</span> <span class="macro">get_cookie!</span>(<span class="ident">signin_resp2</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">msg</span> <span class="op">=</span> <span class="ident">AddNotification</span> {
|
||||
<span class="kw">let</span> <span class="ident">msg</span> <span class="op">=</span> <span class="ident">AddNotificationRequest</span> {
|
||||
<span class="ident">to</span>: <span class="ident">NAME2</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">heading</span>: <span class="ident">HEADING</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">message</span>: <span class="ident">MESSAGE</span>.<span class="ident">into</span>(),
|
||||
|
||||
@@ -145,35 +145,22 @@
|
||||
<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>
|
||||
<span id="152">152</span>
|
||||
<span id="153">153</span>
|
||||
<span id="154">154</span>
|
||||
<span id="155">155</span>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
|
||||
<span class="kw">use</span> <span class="ident">actix_identity::Identity</span>;
|
||||
<span class="kw">use</span> <span class="ident">actix_web</span>::{<span class="ident">web</span>, <span class="ident">HttpResponse</span>, <span class="ident">Responder</span>};
|
||||
@@ -187,15 +174,6 @@
|
||||
<span class="kw">pub</span> <span class="ident">id</span>: <span class="ident">i32</span>,
|
||||
}
|
||||
|
||||
<span class="attribute">#[<span class="ident">derive</span>(<span class="ident">Deserialize</span>, <span class="ident">Serialize</span>)]</span>
|
||||
<span class="kw">pub</span> <span class="kw">struct</span> <span class="ident">NotificationResp</span> {
|
||||
<span class="kw">pub</span> <span class="ident">name</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">heading</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">message</span>: <span class="ident">String</span>,
|
||||
<span class="kw">pub</span> <span class="ident">received</span>: <span class="ident">i64</span>,
|
||||
<span class="kw">pub</span> <span class="ident">id</span>: <span class="ident">i32</span>,
|
||||
}
|
||||
|
||||
<span class="doccomment">/// route handler that marks a notification read</span>
|
||||
<span class="attribute">#[<span class="ident">my_codegen::post</span>(
|
||||
<span class="ident">path</span> <span class="op">=</span> <span class="string">"crate::V1_API_ROUTES.notifications.mark_read"</span>,
|
||||
@@ -209,30 +187,27 @@
|
||||
<span class="kw">let</span> <span class="ident">receiver</span> <span class="op">=</span> <span class="ident">id</span>.<span class="ident">identity</span>().<span class="ident">unwrap</span>();
|
||||
<span class="comment">// TODO handle error where payload.to doesnt exist</span>
|
||||
|
||||
<span class="macro">sqlx::query_file_as!</span>(
|
||||
<span class="ident">Notification</span>,
|
||||
<span class="string">"src/api/v1/notifications/mark_read.sql"</span>,
|
||||
<span class="ident">payload</span>.<span class="ident">id</span>,
|
||||
<span class="kw-2">&</span><span class="ident">receiver</span>
|
||||
)
|
||||
.<span class="ident">execute</span>(<span class="kw-2">&</span><span class="ident">data</span>.<span class="ident">db</span>)
|
||||
.<span class="kw">await</span><span class="question-mark">?</span>;
|
||||
<span class="comment">// TODO get payload from path /api/v1/notifications/{id}/read"</span>
|
||||
<span class="ident">data</span>.<span class="ident">db</span>
|
||||
.<span class="ident">mark_notification_read</span>(<span class="kw-2">&</span><span class="ident">receiver</span>, <span class="ident">payload</span>.<span class="ident">id</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">cfg</span>(<span class="ident">test</span>)]</span>
|
||||
<span class="kw">mod</span> <span class="ident">tests</span> {
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">tests</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="kw">super</span>::<span class="kw-2">*</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::notifications::add::AddNotification</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::notifications::add::AddNotificationRequest</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::api::v1::notifications::get::NotificationResp</span>;
|
||||
<span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::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">notification_mark_read_works</span>() {
|
||||
<span class="kw">pub</span> <span class="kw">async</span> <span class="kw">fn</span> <span class="ident">notification_mark_read_works</span>() {
|
||||
<span class="kw">const</span> <span class="ident">NAME1</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"notifuser122"</span>;
|
||||
<span class="kw">const</span> <span class="ident">NAME2</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"notiuser222"</span>;
|
||||
<span class="kw">const</span> <span class="ident">PASSWORD</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"longpassworddomain"</span>;
|
||||
@@ -240,22 +215,21 @@
|
||||
<span class="kw">const</span> <span class="ident">EMAIL2</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testnotification222@a.com"</span>;
|
||||
<span class="kw">const</span> <span class="ident">HEADING</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testing notifications get"</span>;
|
||||
<span class="kw">const</span> <span class="ident">MESSAGE</span>: <span class="kw-2">&</span><span class="ident">str</span> <span class="op">=</span> <span class="string">"testing notifications get message"</span>;
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="ident">get_data</span>().<span class="kw">await</span>;
|
||||
<span class="kw">let</span> <span class="ident">data</span> <span class="op">=</span> <span class="kw-2">&</span><span class="ident">data</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">NAME1</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">NAME2</span>, <span class="kw-2">&</span><span class="ident">data</span>).<span class="kw">await</span>;
|
||||
}
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>).<span class="kw">await</span>;
|
||||
<span class="ident">delete_user</span>(<span class="ident">data</span>, <span class="ident">NAME2</span>).<span class="kw">await</span>;
|
||||
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME1</span>, <span class="ident">EMAIL1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">NAME2</span>, <span class="ident">EMAIL2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">data</span>, <span class="ident">_creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">NAME1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_data</span>, <span class="ident">_creds2</span>, <span class="ident">signin_resp2</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">NAME2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>, <span class="ident">EMAIL1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="ident">register_and_signin</span>(<span class="ident">data</span>, <span class="ident">NAME2</span>, <span class="ident">EMAIL2</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_creds</span>, <span class="ident">signin_resp</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">data</span>, <span class="ident">NAME1</span>, <span class="ident">PASSWORD</span>).<span class="kw">await</span>;
|
||||
<span class="kw">let</span> (<span class="ident">_creds2</span>, <span class="ident">signin_resp2</span>) <span class="op">=</span> <span class="ident">signin</span>(<span class="ident">data</span>, <span class="ident">NAME2</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">cookies2</span> <span class="op">=</span> <span class="macro">get_cookie!</span>(<span class="ident">signin_resp2</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">msg</span> <span class="op">=</span> <span class="ident">AddNotification</span> {
|
||||
<span class="kw">let</span> <span class="ident">msg</span> <span class="op">=</span> <span class="ident">AddNotificationRequest</span> {
|
||||
<span class="ident">to</span>: <span class="ident">NAME2</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">heading</span>: <span class="ident">HEADING</span>.<span class="ident">into</span>(),
|
||||
<span class="ident">message</span>: <span class="ident">MESSAGE</span>.<span class="ident">into</span>(),
|
||||
|
||||
@@ -49,21 +49,21 @@
|
||||
<span id="44">44</span>
|
||||
<span id="45">45</span>
|
||||
</pre><pre class="rust"><code><span class="comment">/*
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
* Copyright (C) 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/</span>
|
||||
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">add</span>;
|
||||
<span class="kw">pub</span> <span class="kw">mod</span> <span class="ident">get</span>;
|
||||
|
||||
Reference in New Issue
Block a user