1
0
Fork 0
mirror of https://github.com/Nutomic/ibis.git synced 2025-02-04 02:51:35 +00:00

Move files into subfolders

This commit is contained in:
Felix Ableitner 2025-01-15 10:44:46 +01:00
parent a427c418a4
commit 95ee090275
35 changed files with 167 additions and 135 deletions

View file

@ -7,9 +7,8 @@ use crate::{
edit::DbEditForm, edit::DbEditForm,
IbisData, IbisData,
}, },
error::MyResult,
federation::activities::{create_article::CreateArticle, submit_article_update}, federation::activities::{create_article::CreateArticle, submit_article_update},
utils::generate_article_version, utils::{error::MyResult, generate_article_version},
}, },
common::{ common::{
utils::{extract_domain, http_protocol_str}, utils::{extract_domain, http_protocol_str},

View file

@ -1,5 +1,5 @@
use crate::{ use crate::{
backend::{database::IbisData, error::MyResult, federation::activities::follow::Follow}, backend::{database::IbisData, federation::activities::follow::Follow, utils::error::MyResult},
common::{ common::{
DbInstance, DbInstance,
FollowInstance, FollowInstance,

View file

@ -16,7 +16,7 @@ use crate::{
user::{get_user, login_user, logout_user, register_user}, user::{get_user, login_user, logout_user, register_user},
}, },
database::IbisData, database::IbisData,
error::MyResult, utils::error::MyResult,
}, },
common::{DbEdit, EditView, GetEditList, LocalUserView, SiteView}, common::{DbEdit, EditView, GetEditList, LocalUserView, SiteView},
}; };

View file

@ -2,7 +2,7 @@ use super::{check_is_admin, empty_to_none};
use crate::{ use crate::{
backend::{ backend::{
database::{conflict::DbConflict, read_jwt_secret, IbisData}, database::{conflict::DbConflict, read_jwt_secret, IbisData},
error::MyResult, utils::error::MyResult,
}, },
common::{ common::{
DbArticle, DbArticle,

View file

@ -1,4 +1,4 @@
use crate::{backend::error::MyResult, common::Options}; use crate::{backend::utils::error::MyResult, common::Options};
use config::Config; use config::Config;
use doku::Document; use doku::Document;
use serde::Deserialize; use serde::Deserialize;

View file

@ -4,8 +4,8 @@ use crate::{
schema::{article, edit, instance}, schema::{article, edit, instance},
IbisData, IbisData,
}, },
error::MyResult,
federation::objects::edits_collection::DbEditCollection, federation::objects::edits_collection::DbEditCollection,
utils::error::MyResult,
}, },
common::{ common::{
newtypes::{ArticleId, InstanceId}, newtypes::{ArticleId, InstanceId},

View file

@ -1,9 +1,8 @@
use crate::{ use crate::{
backend::{ backend::{
database::{schema::conflict, IbisData}, database::{schema::conflict, IbisData},
error::MyResult,
federation::activities::submit_article_update, federation::activities::submit_article_update,
utils::generate_article_version, utils::{error::MyResult, generate_article_version},
}, },
common::{ common::{
newtypes::{ArticleId, ConflictId, PersonId}, newtypes::{ArticleId, ConflictId, PersonId},

View file

@ -1,7 +1,7 @@
use crate::{ use crate::{
backend::{ backend::{
database::schema::{article, edit, person}, database::schema::{article, edit, person},
error::MyResult, utils::error::MyResult,
IbisData, IbisData,
}, },
common::{ common::{

View file

@ -4,11 +4,11 @@ use crate::{
schema::{instance, instance_follow}, schema::{instance, instance_follow},
IbisData, IbisData,
}, },
error::MyResult,
federation::objects::{ federation::objects::{
articles_collection::DbArticleCollection, articles_collection::DbArticleCollection,
instance_collection::DbInstanceCollection, instance_collection::DbInstanceCollection,
}, },
utils::error::MyResult,
}, },
common::{newtypes::InstanceId, DbInstance, DbPerson, InstanceView}, common::{newtypes::InstanceId, DbInstance, DbPerson, InstanceView},
}; };

View file

@ -1,4 +1,4 @@
use crate::backend::{config::IbisConfig, database::schema::jwt_secret, error::MyResult}; use crate::backend::{config::IbisConfig, database::schema::jwt_secret, utils::error::MyResult};
use diesel::{ use diesel::{
r2d2::{ConnectionManager, Pool}, r2d2::{ConnectionManager, Pool},
PgConnection, PgConnection,

View file

@ -4,8 +4,7 @@ use crate::{
schema::{instance, instance_follow, local_user, person}, schema::{instance, instance_follow, local_user, person},
IbisData, IbisData,
}, },
error::MyResult, utils::{error::MyResult, generate_keypair},
utils::generate_keypair,
}, },
common::{ common::{
newtypes::PersonId, newtypes::PersonId,

View file

@ -1,9 +1,11 @@
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::MyResult,
federation::{activities::follow::Follow, send_activity}, federation::{activities::follow::Follow, send_activity},
utils::generate_activity_id, utils::{
error::{Error, MyResult},
generate_activity_id,
},
}, },
common::DbInstance, common::DbInstance,
}; };
@ -54,7 +56,7 @@ impl Accept {
#[async_trait::async_trait] #[async_trait::async_trait]
impl ActivityHandler for Accept { impl ActivityHandler for Accept {
type DataType = IbisData; type DataType = IbisData;
type Error = crate::backend::error::Error; type Error = Error;
fn id(&self) -> &Url { fn id(&self) -> &Url {
&self.id &self.id

View file

@ -1,9 +1,11 @@
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::MyResult,
federation::objects::article::ApubArticle, federation::objects::article::ApubArticle,
utils::generate_activity_id, utils::{
error::{Error, MyResult},
generate_activity_id,
},
}, },
common::{DbArticle, DbInstance}, common::{DbArticle, DbInstance},
}; };
@ -51,7 +53,7 @@ impl CreateArticle {
#[async_trait::async_trait] #[async_trait::async_trait]
impl ActivityHandler for CreateArticle { impl ActivityHandler for CreateArticle {
type DataType = IbisData; type DataType = IbisData;
type Error = crate::backend::error::Error; type Error = Error;
fn id(&self) -> &Url { fn id(&self) -> &Url {
&self.id &self.id

View file

@ -1,9 +1,9 @@
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::MyResult,
federation::{activities::accept::Accept, send_activity}, federation::{activities::accept::Accept, send_activity},
generate_activity_id, generate_activity_id,
utils::error::{Error, MyResult},
}, },
common::{DbInstance, DbPerson}, common::{DbInstance, DbPerson},
}; };
@ -44,7 +44,7 @@ impl Follow {
#[async_trait::async_trait] #[async_trait::async_trait]
impl ActivityHandler for Follow { impl ActivityHandler for Follow {
type DataType = IbisData; type DataType = IbisData;
type Error = crate::backend::error::Error; type Error = Error;
fn id(&self) -> &Url { fn id(&self) -> &Url {
&self.id &self.id

View file

@ -1,11 +1,11 @@
use crate::{ use crate::{
backend::{ backend::{
database::{edit::DbEditForm, IbisData}, database::{edit::DbEditForm, IbisData},
error::Error,
federation::activities::{ federation::activities::{
update_local_article::UpdateLocalArticle, update_local_article::UpdateLocalArticle,
update_remote_article::UpdateRemoteArticle, update_remote_article::UpdateRemoteArticle,
}, },
utils::error::Error,
}, },
common::{ common::{
newtypes::{EditId, PersonId}, newtypes::{EditId, PersonId},

View file

@ -4,9 +4,11 @@ use crate::{
conflict::{DbConflict, DbConflictForm}, conflict::{DbConflict, DbConflictForm},
IbisData, IbisData,
}, },
error::MyResult,
federation::{objects::edit::ApubEdit, send_activity}, federation::{objects::edit::ApubEdit, send_activity},
utils::generate_activity_id, utils::{
error::{Error, MyResult},
generate_activity_id,
},
}, },
common::{DbInstance, EditVersion}, common::{DbInstance, EditVersion},
}; };
@ -61,7 +63,7 @@ impl RejectEdit {
#[async_trait::async_trait] #[async_trait::async_trait]
impl ActivityHandler for RejectEdit { impl ActivityHandler for RejectEdit {
type DataType = IbisData; type DataType = IbisData;
type Error = crate::backend::error::Error; type Error = Error;
fn id(&self) -> &Url { fn id(&self) -> &Url {
&self.id &self.id

View file

@ -1,9 +1,11 @@
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::MyResult,
federation::objects::article::ApubArticle, federation::objects::article::ApubArticle,
utils::generate_activity_id, utils::{
error::{Error, MyResult},
generate_activity_id,
},
}, },
common::{DbArticle, DbInstance}, common::{DbArticle, DbInstance},
}; };
@ -58,7 +60,7 @@ impl UpdateLocalArticle {
#[async_trait::async_trait] #[async_trait::async_trait]
impl ActivityHandler for UpdateLocalArticle { impl ActivityHandler for UpdateLocalArticle {
type DataType = IbisData; type DataType = IbisData;
type Error = crate::backend::error::Error; type Error = Error;
fn id(&self) -> &Url { fn id(&self) -> &Url {
&self.id &self.id

View file

@ -1,13 +1,15 @@
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::MyResult,
federation::{ federation::{
activities::{reject::RejectEdit, update_local_article::UpdateLocalArticle}, activities::{reject::RejectEdit, update_local_article::UpdateLocalArticle},
objects::edit::ApubEdit, objects::edit::ApubEdit,
send_activity, send_activity,
}, },
utils::generate_activity_id, utils::{
error::{Error, MyResult},
generate_activity_id,
},
}, },
common::{validation::can_edit_article, DbArticle, DbEdit, DbInstance}, common::{validation::can_edit_article, DbArticle, DbEdit, DbInstance},
}; };
@ -64,7 +66,7 @@ impl UpdateRemoteArticle {
#[async_trait::async_trait] #[async_trait::async_trait]
impl ActivityHandler for UpdateRemoteArticle { impl ActivityHandler for UpdateRemoteArticle {
type DataType = IbisData; type DataType = IbisData;
type Error = crate::backend::error::Error; type Error = Error;
fn id(&self) -> &Url { fn id(&self) -> &Url {
&self.id &self.id

View file

@ -1,8 +1,8 @@
use crate::{ use crate::{
backend::{ backend::{
database::{article::DbArticleForm, IbisData}, database::{article::DbArticleForm, IbisData},
error::Error,
federation::objects::edits_collection::DbEditCollection, federation::objects::edits_collection::DbEditCollection,
utils::error::Error,
}, },
common::{DbArticle, DbInstance, EditVersion}, common::{DbArticle, DbInstance, EditVersion},
}; };

View file

@ -1,8 +1,8 @@
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::{Error, MyResult},
federation::objects::article::ApubArticle, federation::objects::article::ApubArticle,
utils::error::{Error, MyResult},
}, },
common::{utils::http_protocol_str, DbArticle}, common::{utils::http_protocol_str, DbArticle},
}; };

View file

@ -1,7 +1,7 @@
use crate::{ use crate::{
backend::{ backend::{
database::{edit::DbEditForm, IbisData}, database::{edit::DbEditForm, IbisData},
error::Error, utils::error::Error,
}, },
common::{DbArticle, DbEdit, DbPerson, EditVersion}, common::{DbArticle, DbEdit, DbPerson, EditVersion},
}; };

View file

@ -1,5 +1,5 @@
use crate::{ use crate::{
backend::{database::IbisData, error::Error, federation::objects::edit::ApubEdit}, backend::{database::IbisData, federation::objects::edit::ApubEdit, utils::error::Error},
common::{DbArticle, DbEdit}, common::{DbArticle, DbEdit},
}; };
use activitypub_federation::{ use activitypub_federation::{

View file

@ -2,8 +2,8 @@ use super::instance_collection::DbInstanceCollection;
use crate::{ use crate::{
backend::{ backend::{
database::{instance::DbInstanceForm, IbisData}, database::{instance::DbInstanceForm, IbisData},
error::{Error, MyResult},
federation::{objects::articles_collection::DbArticleCollection, send_activity}, federation::{objects::articles_collection::DbArticleCollection, send_activity},
utils::error::{Error, MyResult},
}, },
common::{utils::extract_domain, DbInstance}, common::{utils::extract_domain, DbInstance},
}; };

View file

@ -2,7 +2,7 @@ use super::instance::ApubInstance;
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::{Error, MyResult}, utils::error::{Error, MyResult},
}, },
common::{utils::http_protocol_str, DbInstance}, common::{utils::http_protocol_str, DbInstance},
}; };

View file

@ -1,7 +1,7 @@
use crate::{ use crate::{
backend::{ backend::{
database::{user::DbPersonForm, IbisData}, database::{user::DbPersonForm, IbisData},
error::Error, utils::error::Error,
}, },
common::DbPerson, common::DbPerson,
}; };

View file

@ -2,7 +2,6 @@ use super::objects::instance_collection::{DbInstanceCollection, InstanceCollecti
use crate::{ use crate::{
backend::{ backend::{
database::IbisData, database::IbisData,
error::{Error, MyResult},
federation::{ federation::{
activities::{ activities::{
accept::Accept, accept::Accept,
@ -20,6 +19,7 @@ use crate::{
user::ApubUser, user::ApubUser,
}, },
}, },
utils::error::{Error, MyResult},
}, },
common::{DbArticle, DbInstance, DbPerson}, common::{DbArticle, DbInstance, DbPerson},
}; };

View file

@ -2,38 +2,25 @@ use crate::{
backend::{ backend::{
config::IbisConfig, config::IbisConfig,
database::{article::DbArticleForm, instance::DbInstanceForm, IbisData}, database::{article::DbArticleForm, instance::DbInstanceForm, IbisData},
error::{Error, MyResult}, federation::{activities::submit_article_update, VerifyUrlData},
federation::{activities::submit_article_update, routes::federation_routes, VerifyUrlData}, utils::{
utils::generate_activity_id, error::{Error, MyResult},
generate_activity_id,
},
}, },
common::{ common::{
utils::http_protocol_str, utils::http_protocol_str,
Auth,
DbArticle, DbArticle,
DbInstance, DbInstance,
DbPerson, DbPerson,
EditVersion, EditVersion,
MAIN_PAGE_NAME, MAIN_PAGE_NAME,
}, },
frontend::app::{shell, App},
}; };
use activitypub_federation::{ use activitypub_federation::{
config::{Data, FederationConfig, FederationMiddleware}, config::{Data, FederationConfig},
fetch::object_id::ObjectId, fetch::object_id::ObjectId,
}; };
use api::api_routes;
use assets::file_and_error_handler;
use axum::{
body::Body,
extract::State,
http::Request,
middleware::from_fn_with_state,
response::{IntoResponse, Response},
routing::get,
Extension,
Router,
ServiceExt,
};
use chrono::Utc; use chrono::Utc;
use diesel::{ use diesel::{
r2d2::{ConnectionManager, Pool}, r2d2::{ConnectionManager, Pool},
@ -44,26 +31,18 @@ use federation::objects::{
articles_collection::local_articles_url, articles_collection::local_articles_url,
instance_collection::linked_instances_url, instance_collection::linked_instances_url,
}; };
use leptos::prelude::*;
use leptos_axum::{generate_route_list, LeptosRoutes};
use log::info; use log::info;
use middleware::{auth_middleware, federation_routes_middleware, FEDERATION_ROUTES_PREFIX}; use server::start_server;
use std::{net::SocketAddr, sync::Arc, thread}; use std::{net::SocketAddr, thread};
use tokio::{net::TcpListener, sync::oneshot}; use tokio::sync::oneshot;
use tower_http::{compression::CompressionLayer, cors::CorsLayer}; use utils::{generate_keypair, scheduled_tasks};
use tower_layer::Layer;
use utils::generate_keypair;
pub mod api; pub mod api;
mod assets;
pub mod config; pub mod config;
pub mod database; pub mod database;
pub mod error;
pub mod federation; pub mod federation;
mod middleware; mod server;
mod nodeinfo; pub mod utils;
mod scheduled_tasks;
mod utils;
const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations"); const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations");
@ -85,14 +64,14 @@ pub async fn start(
let data = FederationConfig::builder() let data = FederationConfig::builder()
.domain(ibis_data.config.federation.domain.clone()) .domain(ibis_data.config.federation.domain.clone())
.url_verifier(Box::new(VerifyUrlData(ibis_data.config.clone()))) .url_verifier(Box::new(VerifyUrlData(ibis_data.config.clone())))
.app_data(ibis_data.clone()) .app_data(ibis_data)
.http_fetch_limit(1000) .http_fetch_limit(1000)
.debug(cfg!(debug_assertions)) .debug(cfg!(debug_assertions))
.build() .build()
.await?; .await?;
// Create local instance if it doesnt exist yet
if DbInstance::read_local_instance(&data).is_err() { if DbInstance::read_local_instance(&data).is_err() {
info!("Running setup for new instance");
setup(&data.to_request_data()).await?; setup(&data.to_request_data()).await?;
} }
@ -101,60 +80,11 @@ pub async fn start(
scheduled_tasks::start(db_pool); scheduled_tasks::start(db_pool);
}); });
let leptos_options = get_config_from_str(include_str!("../../Cargo.toml"))?; start_server(data, override_hostname, notify_start).await?;
let mut addr = leptos_options.site_addr;
if let Some(override_hostname) = override_hostname {
addr = override_hostname;
}
let routes = generate_route_list(App);
let config = data.clone();
let arc_data = Arc::new(ibis_data);
let app = Router::new()
.leptos_routes_with_handler(routes, get(leptos_routes_handler))
.fallback(file_and_error_handler)
.with_state(leptos_options)
.nest(FEDERATION_ROUTES_PREFIX, federation_routes())
.nest("/api/v1", api_routes())
.nest("", nodeinfo::config())
.layer(FederationMiddleware::new(config))
.layer(CorsLayer::permissive())
.layer(CompressionLayer::new())
.route_layer(from_fn_with_state(arc_data.clone(), auth_middleware));
// Rewrite federation routes
// https://docs.rs/axum/0.7.4/axum/middleware/index.html#rewriting-request-uri-in-middleware
let middleware = axum::middleware::from_fn(federation_routes_middleware);
let app_with_middleware = middleware.layer(app);
info!("Listening on {}", &addr);
let listener = TcpListener::bind(&addr).await?;
if let Some(notify_start) = notify_start {
notify_start.send(()).expect("send oneshot");
}
axum::serve(listener, app_with_middleware.into_make_service()).await?;
Ok(()) Ok(())
} }
/// Make auth token available in hydrate mode
async fn leptos_routes_handler(
auth: Option<Extension<Auth>>,
State(leptos_options): State<LeptosOptions>,
request: Request<Body>,
) -> Response {
let handler = leptos_axum::render_app_async_with_context(
move || {
if let Some(auth) = &auth {
provide_context(auth.0.clone());
}
},
move || shell(leptos_options.clone()),
);
handler(request).await.into_response()
}
const MAIN_PAGE_DEFAULT_TEXT: &str = "Welcome to Ibis, the federated Wikipedia alternative! const MAIN_PAGE_DEFAULT_TEXT: &str = "Welcome to Ibis, the federated Wikipedia alternative!
This main page can only be edited by the admin. Use it as an introduction for new users, \ This main page can only be edited by the admin. Use it as an introduction for new users, \

View file

@ -1,4 +1,4 @@
use super::error::MyResult; use crate::backend::utils::error::MyResult;
use anyhow::anyhow; use anyhow::anyhow;
use axum::{ use axum::{
body::Body, body::Body,

View file

@ -1,6 +1,5 @@
use super::api::user::validate;
use crate::{ use crate::{
backend::database::IbisData, backend::{api::user::validate, database::IbisData},
common::{Auth, AUTH_COOKIE}, common::{Auth, AUTH_COOKIE},
}; };
use axum::{body::Body, extract::State, http::Request, middleware::Next, response::Response}; use axum::{body::Body, extract::State, http::Request, middleware::Next, response::Response};

88
src/backend/server/mod.rs Normal file
View file

@ -0,0 +1,88 @@
use super::{database::IbisData, utils::error::MyResult};
use crate::{
backend::{api::api_routes, federation::routes::federation_routes},
common::Auth,
frontend::app::{shell, App},
};
use activitypub_federation::config::{FederationConfig, FederationMiddleware};
use assets::file_and_error_handler;
use axum::{
body::Body,
extract::State,
http::Request,
middleware::from_fn_with_state,
response::{IntoResponse, Response},
routing::get,
Extension,
Router,
ServiceExt,
};
use leptos::prelude::*;
use leptos_axum::{generate_route_list, LeptosRoutes};
use log::info;
use middleware::{auth_middleware, federation_routes_middleware, FEDERATION_ROUTES_PREFIX};
use std::{net::SocketAddr, ops::Deref, sync::Arc};
use tokio::{net::TcpListener, sync::oneshot};
use tower_http::{compression::CompressionLayer, cors::CorsLayer};
use tower_layer::Layer;
mod assets;
mod middleware;
mod nodeinfo;
pub(super) async fn start_server(
data: FederationConfig<IbisData>,
override_hostname: Option<SocketAddr>,
notify_start: Option<oneshot::Sender<()>>,
) -> MyResult<()> {
let leptos_options = get_config_from_str(include_str!("../../../Cargo.toml"))?;
let mut addr = leptos_options.site_addr;
if let Some(override_hostname) = override_hostname {
addr = override_hostname;
}
let routes = generate_route_list(App);
let arc_data = Arc::new(data.deref().clone());
let app = Router::new()
.leptos_routes_with_handler(routes, get(leptos_routes_handler))
.fallback(file_and_error_handler)
.with_state(leptos_options)
.nest(FEDERATION_ROUTES_PREFIX, federation_routes())
.nest("/api/v1", api_routes())
.nest("", nodeinfo::config())
.layer(FederationMiddleware::new(data))
.layer(CorsLayer::permissive())
.layer(CompressionLayer::new())
.route_layer(from_fn_with_state(arc_data, auth_middleware));
// Rewrite federation routes
// https://docs.rs/axum/0.7.4/axum/middleware/index.html#rewriting-request-uri-in-middleware
let middleware = axum::middleware::from_fn(federation_routes_middleware);
let app_with_middleware = middleware.layer(app);
info!("Listening on {}", &addr);
let listener = TcpListener::bind(&addr).await?;
if let Some(notify_start) = notify_start {
notify_start.send(()).expect("send oneshot");
}
axum::serve(listener, app_with_middleware.into_make_service()).await?;
Ok(())
}
/// Make auth token available in hydrate mode
async fn leptos_routes_handler(
auth: Option<Extension<Auth>>,
State(leptos_options): State<LeptosOptions>,
request: Request<Body>,
) -> Response {
let handler = leptos_axum::render_app_async_with_context(
move || {
if let Some(auth) = &auth {
provide_context(auth.0.clone());
}
},
move || shell(leptos_options.clone()),
);
handler(request).await.into_response()
}

View file

@ -1,6 +1,8 @@
use super::database::instance_stats::InstanceStats;
use crate::{ use crate::{
backend::{database::IbisData, error::MyResult}, backend::{
database::{instance_stats::InstanceStats, IbisData},
utils::error::MyResult,
},
common::utils::http_protocol_str, common::utils::http_protocol_str,
}; };
use activitypub_federation::config::Data; use activitypub_federation::config::Data;

View file

@ -1,5 +1,5 @@
use crate::{ use crate::{
backend::{database::IbisData, error::MyResult}, backend::{database::IbisData, utils::error::MyResult},
common::{utils, DbEdit, EditVersion}, common::{utils, DbEdit, EditVersion},
}; };
use activitypub_federation::{ use activitypub_federation::{
@ -12,7 +12,10 @@ use rand::{distributions::Alphanumeric, thread_rng, Rng};
use std::sync::LazyLock; use std::sync::LazyLock;
use url::{ParseError, Url}; use url::{ParseError, Url};
pub fn generate_activity_id(data: &Data<IbisData>) -> Result<Url, ParseError> { pub mod error;
pub(super) mod scheduled_tasks;
pub(super) fn generate_activity_id(data: &Data<IbisData>) -> Result<Url, ParseError> {
let domain = &data.config.federation.domain; let domain = &data.config.federation.domain;
let id: String = thread_rng() let id: String = thread_rng()
.sample_iter(&Alphanumeric) .sample_iter(&Alphanumeric)
@ -32,7 +35,10 @@ pub fn generate_activity_id(data: &Data<IbisData>) -> Result<Url, ParseError> {
/// ///
/// TODO: testing /// TODO: testing
/// TODO: should cache all these generated versions /// TODO: should cache all these generated versions
pub fn generate_article_version(edits: &Vec<DbEdit>, version: &EditVersion) -> MyResult<String> { pub(super) fn generate_article_version(
edits: &Vec<DbEdit>,
version: &EditVersion,
) -> MyResult<String> {
let mut generated = String::new(); let mut generated = String::new();
if version == &EditVersion::default() { if version == &EditVersion::default() {
return Ok(generated); return Ok(generated);

View file

@ -1,4 +1,4 @@
use super::{database::DbPool, error::MyResult}; use crate::backend::{database::DbPool, utils::error::MyResult};
use clokwerk::{Scheduler, TimeUnits}; use clokwerk::{Scheduler, TimeUnits};
use diesel::{sql_query, RunQueryDsl}; use diesel::{sql_query, RunQueryDsl};
use log::{error, info}; use log::{error, info};

View file

@ -1,6 +1,6 @@
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
#[tokio::main] #[tokio::main]
pub async fn main() -> ibis::backend::error::MyResult<()> { pub async fn main() -> ibis::backend::utils::error::MyResult<()> {
use ibis::backend::config::IbisConfig; use ibis::backend::config::IbisConfig;
use log::LevelFilter; use log::LevelFilter;