compiling state [wip]

master
Mathias Rothenhaeusler 2022-11-23 18:19:09 +01:00
parent 571be93ce1
commit f105b2ef2e
3 changed files with 931 additions and 23 deletions

855
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -9,3 +9,24 @@ edition = "2021"
reqwest = { version = "0.11", features = ["json"] } reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
rss = { version = "2.0.1" } rss = { version = "2.0.1" }
actix-web = "4.1.0"
actix-rt = "2.7.0"
futures = "0.3.24"
serde = {version = "1.0.144", features = ["alloc","derive","serde_derive"]}
serde_derive = "1.0.145"
actix-service = "2.0.2"
diesel = { version = "2.0.2", features = ["postgres"]}
dotenv = "0.15.0"
bcrypt = "0.13.0"
uuid = {version = "1.2.1", features=["serde", "v4"]}
jwt = "0.16.0"
hmac = "0.12.1"
sha2 = "0.10.6"
log = "0.4.17"
env_logger = "0.9.3"
[dependencies.serde_json]
version = "1.0.86"
default-features = false
features = ["alloc"]

View File

@ -1,26 +1,58 @@
use std::error::Error; #[macro_use]
extern crate diesel;
extern crate dotenv;
use rss::Channel; use actix_service::Service;
use actix_web::{App, HttpResponse, HttpServer};
use env_logger;
use futures::future::{ok, Either};
use log;
mod models;
mod reader;
mod schema;
mod views;
async fn example_feed() -> Result<Channel, Box<dyn Error>> { #[actix_rt::main]
let content = reqwest::get("https://www.heise.de/rss/heise.rdf") async fn main() -> std::io::Result<()> {
.await? env_logger::init();
.bytes() // let feed: String = String::from("https://www.heise.de/rss/heise.rdf");
.await?; // let channel: Channel = get_feed(&feed).await?;
println!("{}", String::from("reading done"));
let channel = Channel::read_from(&content[..])?; // for item in channel.items {
Ok(channel) // println!("{:?}", item.guid().unwrap());
} // }
#[tokio::main] // Ok(())
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let channel: Channel = example_feed().await?; HttpServer::new(|| {
let app = App::new()
println!("{:?}", channel); .wrap_fn(|req, srv| {
for item in channel.items { let passed: bool;
println!("{}", item.content.unwrap()); let request_url: String = String::from(req.uri().path().clone());
}
println!("{}", String::from("test")); if req.path().contains("/reader/") {
todo!("implement");
Ok(()) } else {
passed = true;
}
let end_result = match passed {
true => Either::Left(srv.call(req)),
false => Either::Right(ok(req.into_response(
HttpResponse::Unauthorized().finish().map_into_boxed_body(),
))),
};
async move {
let result = end_result.await?;
log::info!("{} -> {}", request_url, &result.status());
Ok(result)
}
})
.configure(views::views_factory);
return app;
})
.bind("127.0.0.1:8001")?
.run()
.await
} }