mirror of
https://github.com/nullishamy/ferri.git
synced 2025-04-29 20:29:23 +00:00
parent
918dcb60f9
commit
005c13e1d4
9 changed files with 43 additions and 14 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -335,6 +335,7 @@ dependencies = [
|
|||
"rocket",
|
||||
"server",
|
||||
"sqlx",
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
2
config.toml
Normal file
2
config.toml
Normal file
|
@ -0,0 +1,2 @@
|
|||
[server]
|
||||
host = "https://ferri.amy.mov"
|
|
@ -8,4 +8,5 @@ main = { path = "../ferri-main/" }
|
|||
server = { path = "../ferri-server" }
|
||||
rocket = { workspace = true }
|
||||
sqlx = { workspace = true }
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
clap = { version = "4", features = ["derive"] }
|
||||
toml = "0.8.20"
|
||||
|
|
|
@ -5,17 +5,30 @@ use sqlx::sqlite::SqlitePool;
|
|||
use std::env;
|
||||
|
||||
use clap::Parser;
|
||||
use main::config;
|
||||
use std::fs;
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
#[derive(Parser)]
|
||||
#[command(version, about, long_about = None)]
|
||||
struct Cli {
|
||||
#[arg(short, long)]
|
||||
init: bool,
|
||||
|
||||
#[arg(short, long)]
|
||||
config: PathBuf,
|
||||
}
|
||||
|
||||
pub fn read_config(path: impl AsRef<Path>) -> config::Config {
|
||||
let content = fs::read_to_string(path).unwrap();
|
||||
toml::from_str(&content).unwrap()
|
||||
}
|
||||
|
||||
#[rocket::main]
|
||||
async fn main() {
|
||||
let cli = Cli::parse();
|
||||
let config = read_config(cli.config);
|
||||
|
||||
if cli.init {
|
||||
// Seed DB
|
||||
let pool = SqlitePool::connect(&env::var("DATABASE_URL").unwrap())
|
||||
|
@ -28,9 +41,9 @@ async fn main() {
|
|||
INSERT INTO actor (id, inbox, outbox)
|
||||
VALUES (?1, ?2, ?3)
|
||||
"#,
|
||||
"https://ferri.amy.mov/users/c81db53f-d836-4283-a835-26606c9d14ff",
|
||||
"https://ferri.amy.mov/users/c81db53f-d836-4283-a835-26606c9d14ff/inbox",
|
||||
"https://ferri.amy.mov/users/c81db53f-d836-4283-a835-26606c9d14ff/outbox"
|
||||
"https://ferri.amy.mov/users/9b9d497b-2731-435f-a929-e609ca69dac9",
|
||||
"https://ferri.amy.mov/users/9b9d497b-2731-435f-a929-e609ca69dac9/inbox",
|
||||
"https://ferri.amy.mov/users/9b9d497b-2731-435f-a929-e609ca69dac9/outbox"
|
||||
)
|
||||
.execute(&mut *conn)
|
||||
.await
|
||||
|
@ -43,13 +56,13 @@ async fn main() {
|
|||
"#,
|
||||
"9b9d497b-2731-435f-a929-e609ca69dac9",
|
||||
"amy",
|
||||
"https://ferri.amy.mov/users/c81db53f-d836-4283-a835-26606c9d14ff",
|
||||
"https://ferri.amy.mov/users/9b9d497b-2731-435f-a929-e609ca69dac9",
|
||||
"amy"
|
||||
)
|
||||
.execute(&mut *conn)
|
||||
.await
|
||||
.unwrap();
|
||||
} else {
|
||||
let _ = launch().launch().await;
|
||||
let _ = launch(config).launch().await;
|
||||
}
|
||||
}
|
||||
|
|
11
ferri-main/src/config/mod.rs
Normal file
11
ferri-main/src/config/mod.rs
Normal file
|
@ -0,0 +1,11 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct ServerConfig {
|
||||
pub host: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
pub struct Config {
|
||||
pub server: ServerConfig,
|
||||
}
|
|
@ -1 +1,2 @@
|
|||
pub mod ap;
|
||||
pub mod config;
|
||||
|
|
|
@ -76,10 +76,7 @@ pub async fn new_follow(
|
|||
};
|
||||
|
||||
let req = ap::OutgoingActivity {
|
||||
signed_by: format!(
|
||||
"https://ferri.amy.mov/users/{}#main-key",
|
||||
follower.username()
|
||||
),
|
||||
signed_by: format!("{}#main-key", follower.uri()),
|
||||
req: activity,
|
||||
to: followed.actor().clone(),
|
||||
};
|
||||
|
|
|
@ -36,7 +36,7 @@ pub async fn finger_account(mut db: Connection<Db>, account: &str) -> status::Ac
|
|||
r#"
|
||||
INSERT INTO user (id, username, actor_id, display_name)
|
||||
VALUES (?1, ?2, ?3, ?4)
|
||||
ON CONFLICT(id) DO NOTHING
|
||||
ON CONFLICT(actor_id) DO NOTHING
|
||||
"#,
|
||||
uuid,
|
||||
username,
|
||||
|
@ -47,7 +47,7 @@ pub async fn finger_account(mut db: Connection<Db>, account: &str) -> status::Ac
|
|||
.await
|
||||
.unwrap();
|
||||
|
||||
status::Accepted(format!("https://ferri.amy.mov/users/{}", username))
|
||||
status::Accepted(format!("https://ferri.amy.mov/users/{}", uuid))
|
||||
}
|
||||
|
||||
pub async fn resolve_user(acct: &str, host: &str) -> types::Person {
|
||||
|
|
|
@ -3,6 +3,7 @@ use endpoints::{
|
|||
custom, inbox, oauth, user, well_known,
|
||||
};
|
||||
use main::ap::http;
|
||||
use main::config::Config;
|
||||
use rocket::{
|
||||
Build, Request, Rocket, build, get,
|
||||
http::ContentType,
|
||||
|
@ -20,7 +21,8 @@ mod types;
|
|||
pub struct Db(sqlx::SqlitePool);
|
||||
|
||||
#[get("/")]
|
||||
async fn user_profile() -> (ContentType, &'static str) {
|
||||
async fn user_profile(cfg: &rocket::State<Config>) -> (ContentType, &'static str) {
|
||||
dbg!(cfg);
|
||||
(ContentType::HTML, "<p>hello</p>")
|
||||
}
|
||||
|
||||
|
@ -58,9 +60,10 @@ impl<'a> FromRequest<'a> for AuthenticatedUser {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn launch() -> Rocket<Build> {
|
||||
pub fn launch(cfg: Config) -> Rocket<Build> {
|
||||
let http_client = http::HttpClient::new();
|
||||
build()
|
||||
.manage(cfg)
|
||||
.manage(http_client)
|
||||
.attach(Db::init())
|
||||
.attach(cors::CORS)
|
||||
|
|
Loading…
Add table
Reference in a new issue