added more db stuff, NOT WORKING
This commit is contained in:
@@ -4,7 +4,7 @@ mod templates;
|
||||
|
||||
use std::sync::Mutex;
|
||||
|
||||
use actix_web::{web, App, HttpServer};
|
||||
use actix_web::{web, App, HttpServer, Route};
|
||||
use actix_files as actix_fs;
|
||||
|
||||
use crate::{config::definition::Config, database::Database};
|
||||
@@ -17,6 +17,7 @@ pub(crate) async fn start_actix(config: &Config, database: Database) -> anyhow::
|
||||
App::new()
|
||||
.app_data(actix_web::web::Data::new(Mutex::new(database.clone())))
|
||||
.route("/", web::get().to(routes::index)) // index.html
|
||||
.service(routes::api::get_scope())
|
||||
.service(actix_fs::Files::new("/static", "./static").index_file("index.html")) // static directory
|
||||
.service(web::redirect("/favicon.ico", "/static/favicon.ico")) //? special redirect for favicon
|
||||
})
|
||||
|
||||
14
src/web/routes/api/mod.rs
Normal file
14
src/web/routes/api/mod.rs
Normal file
@@ -0,0 +1,14 @@
|
||||
mod webhooks;
|
||||
|
||||
use actix_web::{web, Route, Scope};
|
||||
|
||||
|
||||
|
||||
|
||||
pub fn get_scope() -> Scope {
|
||||
Scope::new("/api")
|
||||
.service(
|
||||
webhooks::get_scope()
|
||||
)
|
||||
|
||||
}
|
||||
83
src/web/routes/api/webhooks/github.rs
Normal file
83
src/web/routes/api/webhooks/github.rs
Normal file
@@ -0,0 +1,83 @@
|
||||
use std::{borrow::BorrowMut, sync::Mutex};
|
||||
|
||||
use actix_web::{http::header, web::{self, Data}, HttpRequest, HttpResponse, HttpResponseBuilder, Responder, Result, Scope};
|
||||
use serde_json::Value;
|
||||
|
||||
use crate::database::{models::{self, tokens::Token}, Database};
|
||||
|
||||
pub fn get_scope() -> Scope {
|
||||
Scope::new("/github")
|
||||
.service(
|
||||
web::resource("/push")
|
||||
.to(handler)
|
||||
)
|
||||
}
|
||||
|
||||
pub async fn handler(req: HttpRequest, body: web::Json<Value>, db: Data<Mutex<Database>>) -> Result<impl Responder> {
|
||||
let Some(auth) = req.headers().get(header::AUTHORIZATION) else {
|
||||
return Ok(HttpResponse::Unauthorized());
|
||||
};
|
||||
|
||||
let Ok(token) = auth.to_str() else {
|
||||
return Ok(HttpResponse::Unauthorized());
|
||||
};
|
||||
|
||||
let token = models::tokens::Token::get_by_token(
|
||||
db.lock().unwrap().borrow_mut(),
|
||||
token.to_string()
|
||||
).await;
|
||||
|
||||
let Ok(token) = token else {
|
||||
return Ok(HttpResponse::Unauthorized());
|
||||
};
|
||||
|
||||
let Some(token) = token else {
|
||||
return Ok(HttpResponse::Unauthorized());
|
||||
};
|
||||
|
||||
let Some(event_type) = req.headers().get("X-GitHub-Event") else {
|
||||
return Ok(HttpResponse::BadRequest());
|
||||
};
|
||||
|
||||
let Ok(event_type) = event_type.to_str() else {
|
||||
return Ok(HttpResponse::BadRequest());
|
||||
};
|
||||
|
||||
match event_type {
|
||||
"release" => {
|
||||
release_handler(db, token, body).await
|
||||
}
|
||||
|
||||
_ => Ok(HttpResponse::Ok())
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
pub async fn release_handler(db: Data<Mutex<Database>>, token: Token, body: web::Json<Value>) -> Result<HttpResponseBuilder> {
|
||||
let Some(release) = body.get("release") else {
|
||||
return Ok(HttpResponse::BadRequest());
|
||||
};
|
||||
|
||||
let Some(origin_url) = release.get("repository") else {
|
||||
return Ok(HttpResponse::BadRequest());
|
||||
};
|
||||
|
||||
|
||||
models::posts::Post::create_new(
|
||||
db.lock().unwrap().borrow_mut(),
|
||||
title,
|
||||
descr,
|
||||
img_url,
|
||||
origin_url,
|
||||
orignal_request
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
Ok(HttpResponse::Ok())
|
||||
}
|
||||
11
src/web/routes/api/webhooks/mod.rs
Normal file
11
src/web/routes/api/webhooks/mod.rs
Normal file
@@ -0,0 +1,11 @@
|
||||
use actix_web::{web, Scope};
|
||||
|
||||
mod github;
|
||||
|
||||
|
||||
pub fn get_scope() -> Scope {
|
||||
Scope::new("/wh")
|
||||
.service(
|
||||
github::get_scope()
|
||||
)
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
pub mod api;
|
||||
|
||||
use std::sync::Mutex;
|
||||
|
||||
use actix_web_lab::respond::Html;
|
||||
|
||||
Reference in New Issue
Block a user