rocket 0.5-rc2 & rust 1.64
This commit is contained in:
@@ -11,14 +11,10 @@ default = ["mastlogin"]
|
|||||||
mastlogin = ["reqwest"]
|
mastlogin = ["reqwest"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rocket = { version = "=0.5.0-rc.1", features = ["json"] }
|
rocket = { version = "=0.5.0-rc.2", features = ["json"] }
|
||||||
rocket_codegen = "=0.5.0-rc.1"
|
rocket_sync_db_pools = { version = "=0.1.0-rc.2", features = ["diesel_postgres_pool"] }
|
||||||
rocket_http = "=0.5.0-rc.1"
|
|
||||||
rocket_sync_db_pools_codegen = "=0.1.0-rc.1"
|
|
||||||
rocket_sync_db_pools = { version = "=0.1.0-rc.1", features = ["diesel_postgres_pool"] }
|
|
||||||
diesel = { version = "1.4.8", features = ["postgres", "chrono"] }
|
diesel = { version = "1.4.8", features = ["postgres", "chrono"] }
|
||||||
diesel_migrations = "1.4.0"
|
diesel_migrations = "1.4.0"
|
||||||
tokio = "1.17.0"
|
|
||||||
redis = { version="0.21.5", features = ["aio", "tokio-comp"] }
|
redis = { version="0.21.5", features = ["aio", "tokio-comp"] }
|
||||||
chrono = { version="0.4.19", features = ["serde"] }
|
chrono = { version="0.4.19", features = ["serde"] }
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
@@ -28,5 +24,6 @@ log = "0.4.16"
|
|||||||
env_logger = "0.9.0"
|
env_logger = "0.9.0"
|
||||||
web-push = "0.9.2"
|
web-push = "0.9.2"
|
||||||
url = "2.2.2"
|
url = "2.2.2"
|
||||||
|
futures = "0.3.24"
|
||||||
|
|
||||||
reqwest = { version = "0.11.10", features = ["json"], optional = true }
|
reqwest = { version = "0.11.10", features = ["json"], optional = true }
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
stable
|
1.64
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ pub async fn set_notification(pid: i32, ni: Form<NotificatinInput>, _user: Curre
|
|||||||
.ok_or(UnknownPushEndpoint)?
|
.ok_or(UnknownPushEndpoint)?
|
||||||
.to_string();
|
.to_string();
|
||||||
(url_host.ends_with("googleapis.com") || url_host.ends_with("mozilla.com"))
|
(url_host.ends_with("googleapis.com") || url_host.ends_with("mozilla.com"))
|
||||||
.then(|| ())
|
.then_some(())
|
||||||
.ok_or(UnknownPushEndpoint)?;
|
.ok_or(UnknownPushEndpoint)?;
|
||||||
|
|
||||||
if ni.enable {
|
if ni.enable {
|
||||||
|
|||||||
@@ -7,9 +7,8 @@ use crate::rds_conn::RdsConn;
|
|||||||
use crate::rds_models::*;
|
use crate::rds_models::*;
|
||||||
use crate::schema;
|
use crate::schema;
|
||||||
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl};
|
use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl};
|
||||||
|
use futures::{future, join};
|
||||||
use rocket::form::Form;
|
use rocket::form::Form;
|
||||||
use rocket::futures::future;
|
|
||||||
use rocket::futures::join;
|
|
||||||
use rocket::serde::{json::json, Serialize};
|
use rocket::serde::{json::json, Serialize};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#![allow(clippy::unnecessary_lazy_evaluations)]
|
||||||
|
|
||||||
use crate::db_conn::Db;
|
use crate::db_conn::Db;
|
||||||
use crate::libs::diesel_logger::LoggingConnection;
|
use crate::libs::diesel_logger::LoggingConnection;
|
||||||
use crate::models::*;
|
use crate::models::*;
|
||||||
|
|||||||
@@ -108,10 +108,10 @@ pub async fn report(ri: Form<ReportInput>, user: CurrentUser, db: Db, rconn: Rds
|
|||||||
.await?
|
.await?
|
||||||
.unwrap_or(0)
|
.unwrap_or(0)
|
||||||
< 10)
|
< 10)
|
||||||
.then(|| ())
|
.then_some(())
|
||||||
.ok_or(NotAllowed)?;
|
.ok_or(NotAllowed)?;
|
||||||
|
|
||||||
(!ri.reason.is_empty()).then(|| ()).ok_or(NoReason)?;
|
(!ri.reason.is_empty()).then_some(()).ok_or(NoReason)?;
|
||||||
|
|
||||||
let mut p = Post::get(&db, &rconn, ri.pid).await?;
|
let mut p = Post::get(&db, &rconn, ri.pid).await?;
|
||||||
if ri.should_hide.is_some() {
|
if ri.should_hide.is_some() {
|
||||||
|
|||||||
@@ -87,23 +87,23 @@ async fn p2output(p: &Post, user: &CurrentUser, db: &Db, rconn: &RdsConn) -> Api
|
|||||||
Ok(PostOutput {
|
Ok(PostOutput {
|
||||||
pid: p.id,
|
pid: p.id,
|
||||||
room_id: p.room_id,
|
room_id: p.room_id,
|
||||||
text: can_view.then(|| p.content.clone()).unwrap_or_default(),
|
text: can_view.then_some(p.content.clone()).unwrap_or_default(),
|
||||||
cw: (!p.cw.is_empty()).then(|| p.cw.clone()),
|
cw: (!p.cw.is_empty()).then_some(p.cw.clone()),
|
||||||
n_attentions: p.n_attentions,
|
n_attentions: p.n_attentions,
|
||||||
n_comments: p.n_comments,
|
n_comments: p.n_comments,
|
||||||
create_time: p.create_time.timestamp(),
|
create_time: p.create_time.timestamp(),
|
||||||
last_comment_time: p.last_comment_time.timestamp(),
|
last_comment_time: p.last_comment_time.timestamp(),
|
||||||
allow_search: p.allow_search,
|
allow_search: p.allow_search,
|
||||||
author_title: (!p.author_title.is_empty()).then(|| p.author_title.clone()),
|
author_title: (!p.author_title.is_empty()).then_some(p.author_title.clone()),
|
||||||
is_tmp: p.is_tmp,
|
is_tmp: p.is_tmp,
|
||||||
is_reported: user.is_admin.then(|| p.is_reported),
|
is_reported: user.is_admin.then_some(p.is_reported),
|
||||||
comments: OptionFuture::from(
|
comments: OptionFuture::from(
|
||||||
comments.map(|cs| async move { c2output(p, &cs, user, &cached_block_dict).await }),
|
comments.map(|cs| async move { c2output(p, &cs, user, &cached_block_dict).await }),
|
||||||
)
|
)
|
||||||
.await,
|
.await,
|
||||||
can_del: p.check_permission(user, "wd").is_ok(),
|
can_del: p.check_permission(user, "wd").is_ok(),
|
||||||
attention: Attention::init(&user.namehash, rconn).has(p.id).await?,
|
attention: Attention::init(&user.namehash, rconn).has(p.id).await?,
|
||||||
hot_score: user.is_admin.then(|| p.hot_score),
|
hot_score: user.is_admin.then_some(p.hot_score),
|
||||||
is_blocked,
|
is_blocked,
|
||||||
/*
|
/*
|
||||||
blocked_count: if user.is_admin {
|
blocked_count: if user.is_admin {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ pub async fn get_poll_dict(pid: i32, rconn: &RdsConn, namehash: &str) -> Option<
|
|||||||
.has(namehash)
|
.has(namehash)
|
||||||
.await
|
.await
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
.then(|| opt)
|
.then_some(opt)
|
||||||
}))
|
}))
|
||||||
.await
|
.await
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
|||||||
@@ -355,7 +355,7 @@ impl BlockDictCache {
|
|||||||
|
|
||||||
let missing: Vec<(String, bool)> =
|
let missing: Vec<(String, bool)> =
|
||||||
future::try_join_all(hash_list.iter().filter_map(|hash| {
|
future::try_join_all(hash_list.iter().filter_map(|hash| {
|
||||||
(!block_dict.contains_key(&hash.to_string())).then(|| async {
|
(!block_dict.contains_key(&hash.to_string())).then_some(async {
|
||||||
Ok::<(String, bool), RedisError>((
|
Ok::<(String, bool), RedisError>((
|
||||||
hash.to_string(),
|
hash.to_string(),
|
||||||
BlockedUsers::check_if_block(&self.rconn, user, hash).await?,
|
BlockedUsers::check_if_block(&self.rconn, user, hash).await?,
|
||||||
|
|||||||
10
src/cors.rs
10
src/cors.rs
@@ -19,11 +19,11 @@ impl Fairing for Cors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut Response<'r>) {
|
async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut Response<'r>) {
|
||||||
if let Some(origin) = request
|
if let Some(origin) = request.headers().get_one("Origin").and_then(|origin| {
|
||||||
.headers()
|
self.whitelist
|
||||||
.get_one("Origin")
|
.contains(&origin.to_string())
|
||||||
.and_then(|origin| self.whitelist.contains(&origin.to_string()).then(|| origin))
|
.then_some(origin)
|
||||||
{
|
}) {
|
||||||
response.set_header(Header::new("Access-Control-Allow-Origin", origin));
|
response.set_header(Header::new("Access-Control-Allow-Origin", origin));
|
||||||
response.set_header(Header::new(
|
response.set_header(Header::new(
|
||||||
"Access-Control-Allow-Methods",
|
"Access-Control-Allow-Methods",
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#![allow(clippy::unused_unit)]
|
||||||
|
|
||||||
use crate::db_conn::Db;
|
use crate::db_conn::Db;
|
||||||
use crate::models::User;
|
use crate::models::User;
|
||||||
use rocket::request::{FromRequest, Outcome, Request};
|
use rocket::request::{FromRequest, Outcome, Request};
|
||||||
|
|||||||
11
src/main.rs
11
src/main.rs
@@ -28,17 +28,18 @@ use diesel::Connection;
|
|||||||
use random_hasher::RandomHasher;
|
use random_hasher::RandomHasher;
|
||||||
use rds_conn::{init_rds_client, RdsConn};
|
use rds_conn::{init_rds_client, RdsConn};
|
||||||
use rds_models::clear_outdate_redis_data;
|
use rds_models::clear_outdate_redis_data;
|
||||||
|
use rocket::tokio;
|
||||||
|
use rocket::tokio::time::{sleep, Duration};
|
||||||
use std::env;
|
use std::env;
|
||||||
use tokio::time::{sleep, Duration};
|
|
||||||
|
|
||||||
embed_migrations!("migrations/postgres");
|
embed_migrations!("migrations/postgres");
|
||||||
|
|
||||||
#[rocket::main]
|
#[rocket::main]
|
||||||
async fn main() -> Result<(), rocket::Error> {
|
async fn main() {
|
||||||
load_env();
|
load_env();
|
||||||
if env::args().any(|arg| arg.eq("--init-database")) {
|
if env::args().any(|arg| arg.eq("--init-database")) {
|
||||||
init_database();
|
init_database();
|
||||||
return Ok(());
|
return;
|
||||||
}
|
}
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
let rmc = init_rds_client().await;
|
let rmc = init_rds_client().await;
|
||||||
@@ -61,7 +62,7 @@ async fn main() -> Result<(), rocket::Error> {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
rocket::build()
|
let _ = rocket::build()
|
||||||
.mount(
|
.mount(
|
||||||
"/_api/v1",
|
"/_api/v1",
|
||||||
routes![
|
routes![
|
||||||
@@ -119,7 +120,7 @@ async fn main() -> Result<(), rocket::Error> {
|
|||||||
.collect::<Vec<String>>(),
|
.collect::<Vec<String>>(),
|
||||||
})
|
})
|
||||||
.launch()
|
.launch()
|
||||||
.await
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_env() {
|
fn load_env() {
|
||||||
|
|||||||
Reference in New Issue
Block a user