111 lines
4.1 KiB
Rust
111 lines
4.1 KiB
Rust
use crate::model::{addressing, config, credential, activity, object, user, Audience};
|
|
use openssl::rsa::Rsa;
|
|
use sea_orm::IntoActiveModel;
|
|
|
|
pub async fn faker(ctx: crate::server::Context, count: u64) -> Result<(), sea_orm::DbErr> {
|
|
use sea_orm::{EntityTrait, Set};
|
|
|
|
let domain = ctx.domain();
|
|
let db = ctx.db();
|
|
|
|
let key = Rsa::generate(2048).unwrap();
|
|
let test_user = user::Model {
|
|
id: format!("{domain}/users/test"),
|
|
name: Some("μpub".into()),
|
|
domain: clean_domain(domain),
|
|
preferred_username: "test".to_string(),
|
|
summary: Some("hello world! i'm manually generated but served dynamically from db! check progress at https://git.alemi.dev/upub.git".to_string()),
|
|
following: None,
|
|
following_count: 0,
|
|
followers: None,
|
|
followers_count: 0,
|
|
statuses_count: count as i64,
|
|
icon: Some("https://cdn.alemi.dev/social/circle-square.png".to_string()),
|
|
image: Some("https://cdn.alemi.dev/social/someriver-xs.jpg".to_string()),
|
|
inbox: None,
|
|
shared_inbox: None,
|
|
outbox: None,
|
|
actor_type: apb::ActorType::Person,
|
|
created: chrono::Utc::now(),
|
|
updated: chrono::Utc::now(),
|
|
private_key: Some(std::str::from_utf8(&key.private_key_to_pem().unwrap()).unwrap().to_string()),
|
|
// TODO generate a fresh one every time
|
|
public_key: std::str::from_utf8(&key.public_key_to_pem().unwrap()).unwrap().to_string(),
|
|
};
|
|
|
|
user::Entity::insert(test_user.clone().into_active_model()).exec(db).await?;
|
|
|
|
config::Entity::insert(config::ActiveModel {
|
|
id: Set(test_user.id.clone()),
|
|
accept_follow_requests: Set(true),
|
|
show_followers: Set(true),
|
|
show_following: Set(true),
|
|
show_following_count: Set(true),
|
|
show_followers_count: Set(true),
|
|
}).exec(db).await?;
|
|
|
|
credential::Entity::insert(credential::ActiveModel {
|
|
id: Set(test_user.id.clone()),
|
|
email: Set("mail@example.net".to_string()),
|
|
password: Set(sha256::digest("very-strong-password")),
|
|
}).exec(db).await?;
|
|
|
|
let context = uuid::Uuid::new_v4().to_string();
|
|
|
|
for i in (0..count).rev() {
|
|
let oid = uuid::Uuid::new_v4();
|
|
let aid = uuid::Uuid::new_v4();
|
|
|
|
addressing::Entity::insert(addressing::ActiveModel {
|
|
actor: Set(apb::target::PUBLIC.to_string()),
|
|
server: Set("www.w3.org".to_string()),
|
|
activity: Set(Some(format!("{domain}/activities/{aid}"))),
|
|
object: Set(Some(format!("{domain}/objects/{oid}"))),
|
|
published: Set(chrono::Utc::now()),
|
|
..Default::default()
|
|
}).exec(db).await?;
|
|
|
|
object::Entity::insert(object::ActiveModel {
|
|
id: Set(format!("{domain}/objects/{oid}")),
|
|
name: Set(None),
|
|
object_type: Set(apb::ObjectType::Note),
|
|
attributed_to: Set(Some(format!("{domain}/users/test"))),
|
|
summary: Set(None),
|
|
context: Set(Some(context.clone())),
|
|
in_reply_to: Set(None),
|
|
content: Set(Some(format!("[{i}] Tic(k). Quasiparticle of intensive multiplicity. Tics (or ticks) are intrinsically several components of autonomously numbering anorganic populations, propagating by contagion between segmentary divisions in the order of nature. Ticks - as nonqualitative differentially-decomposable counting marks - each designate a multitude comprehended as a singular variation in tic(k)-density."))),
|
|
published: Set(chrono::Utc::now() - std::time::Duration::from_secs(60*i)),
|
|
updated: Set(None),
|
|
comments: Set(0),
|
|
likes: Set(0),
|
|
shares: Set(0),
|
|
to: Set(Audience(vec![apb::target::PUBLIC.to_string()])),
|
|
bto: Set(Audience::default()),
|
|
cc: Set(Audience(vec![])),
|
|
bcc: Set(Audience::default()),
|
|
sensitive: Set(false),
|
|
}).exec(db).await?;
|
|
|
|
activity::Entity::insert(activity::ActiveModel {
|
|
id: Set(format!("{domain}/activities/{aid}")),
|
|
activity_type: Set(apb::ActivityType::Create),
|
|
actor: Set(format!("{domain}/users/test")),
|
|
object: Set(Some(format!("{domain}/objects/{oid}"))),
|
|
target: Set(None),
|
|
published: Set(chrono::Utc::now() - std::time::Duration::from_secs(60*i)),
|
|
to: Set(Audience(vec![apb::target::PUBLIC.to_string()])),
|
|
bto: Set(Audience::default()),
|
|
cc: Set(Audience(vec![])),
|
|
bcc: Set(Audience::default()),
|
|
}).exec(db).await?;
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn clean_domain(domain: &str) -> String {
|
|
domain
|
|
.replace("http://", "")
|
|
.replace("https://", "")
|
|
.replace('/', "")
|
|
}
|