added feeds

This commit is contained in:
2023-09-17 11:54:37 +02:00
parent 018bbf3918
commit 43e5d473b7
21 changed files with 76 additions and 25 deletions
+5 -2
View File
@@ -1,4 +1,3 @@
use super::jwt;
use actix_web::dev::ServiceRequest;
@@ -10,9 +9,13 @@ pub fn check_password(password: String) -> Result<String, &'static str> {
}
pub fn extract_header_token(request: &ServiceRequest) -> Result<String, &'static str> {
log::info!("Request: {:?}", request);
match request.headers().get("user-token") {
Some(token) => match token.to_str() {
Ok(processed_password) => Ok(String::from(processed_password)),
Ok(processed_password) => {
log::info!("Token provided: {}", processed_password);
Ok(String::from(processed_password))
}
Err(_processed_password) => Err("there was an error processing token"),
},
None => Err("there is no token"),
+1
View File
@@ -4,4 +4,5 @@ use serde::Deserialize;
pub struct NewFeedSchema {
pub title: String,
pub url: String,
pub user_id: i32,
}
+1 -1
View File
@@ -23,7 +23,7 @@ async fn main() -> std::io::Result<()> {
let request_url: String = String::from(req.uri().path().clone());
log::info!("Request Url: {}", request_url);
if req.path().contains("/reader/") {
if req.path().contains("/article/") {
match auth::process_token(&req) {
Ok(_token) => passed = true,
Err(_message) => passed = false,
+1 -1
View File
@@ -1,2 +1,2 @@
pub mod feed;
pub mod new_feed;
pub mod rss_feed;
+7 -2
View File
@@ -6,10 +6,15 @@ use diesel::Insertable;
pub struct NewFeed {
pub title: String,
pub url: String,
pub user_id: i32,
}
impl NewFeed {
pub fn new(title: String, url: String) -> NewFeed {
NewFeed { title, url }
pub fn new(title: String, url: String, user_id: i32) -> NewFeed {
NewFeed {
title,
url,
user_id,
}
}
}
@@ -1,4 +1,4 @@
use super::super::user::user::User;
use super::super::user::rss_user::User;
use crate::schema::feed;
use diesel::{Associations, Identifiable, Queryable};
+1 -1
View File
@@ -1 +1 @@
mod feed_item;
mod rss_feed_item;
+1 -2
View File
@@ -1,3 +1,2 @@
pub mod new_user;
pub mod user;
pub mod rss_user;
+6 -2
View File
@@ -10,8 +10,9 @@ pub async fn add(new_feed: web::Json<NewFeedSchema>) -> HttpResponse {
let mut connection = establish_connection();
let title: String = new_feed.title.clone();
let url: String = new_feed.url.clone();
let user_id: i32 = new_feed.user_id;
let new_feed = NewFeed::new(title, url);
let new_feed = NewFeed::new(title, url, user_id);
let insert_result = diesel::insert_into(feed::table)
.values(&new_feed)
@@ -19,6 +20,9 @@ pub async fn add(new_feed: web::Json<NewFeedSchema>) -> HttpResponse {
match insert_result {
Ok(_) => HttpResponse::Created().await.unwrap(),
Err(_) => HttpResponse::Conflict().await.unwrap(),
Err(e) => {
log::error!("{e}");
HttpResponse::Conflict().await.unwrap()
}
}
}
+5
View File
@@ -5,6 +5,7 @@ mod add;
pub mod feeds;
mod get;
pub mod structs;
mod sync;
pub fn feed_factory(app: &mut web::ServiceConfig) {
let base_path: Path = Path {
@@ -19,4 +20,8 @@ pub fn feed_factory(app: &mut web::ServiceConfig) {
&base_path.define(String::from("/add")),
web::post().to(add::add),
);
app.route(
&base_path.define(String::from("/sync")),
web::post().to(sync::sync),
);
}
+6
View File
@@ -7,3 +7,9 @@ pub struct Feed {
pub title: String,
pub items: Vec<Article>,
}
impl Feed {
pub fn new(title: String, items: Vec<Article>) -> Feed {
Feed { title, items }
}
}
+12
View File
@@ -0,0 +1,12 @@
use actix_web::{HttpRequest, Responder};
use diesel::prelude::*;
use crate::{database::establish_connection, schema::feed};
use super::structs::feed::Feed;
pub async fn sync(req: HttpRequest) -> impl Responder {
let mut connection: diesel::PgConnection = establish_connection();
let users = feed::table.load::<Feed>(&mut connection).unwrap();
}
+4 -3
View File
@@ -1,7 +1,7 @@
use crate::database::establish_connection;
use crate::diesel;
use crate::json_serialization::login::Login;
use crate::models::user::user::User;
use crate::models::user::rss_user::User;
use crate::schema::users;
use crate::{auth::jwt::JwtToken, schema::users::username};
use actix_web::{web, HttpResponse};
@@ -13,7 +13,7 @@ pub async fn login(credentials: web::Json<Login>) -> HttpResponse {
let mut connection = establish_connection();
let users = users::table
let users: Vec<User> = users::table
.filter(username.eq(username_cred.as_str()))
.load::<User>(&mut connection)
.unwrap();
@@ -32,10 +32,11 @@ pub async fn login(credentials: web::Json<Login>) -> HttpResponse {
match user.clone().verify(password) {
true => {
log::info!("verified password successfully");
log::info!("verified password successfully for user {}", user.id);
let token: String = JwtToken::encode(user.clone().id);
HttpResponse::Ok()
.insert_header(("token", token))
.insert_header(("user_id", user.id))
.await
.unwrap()
}