tab_spaces = 2
-edition="2018"
\ No newline at end of file
+edition="2018"
+imports_layout="HorizontalVertical"
+merge_imports=true
+reorder_imports=true
# It is not intended for manual editing.
[[package]]
name = "activitystreams"
-version = "0.6.0"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd5b29a0f2c64cc56f2b79ec29cab68a9dab3b714d811a55668d072f18a8638e"
+checksum = "464cb473bfb402b857cc15b1153974c203a43f1485da4dda15cd17a738548958"
dependencies = [
"activitystreams-derive",
"chrono",
"syn",
]
+[[package]]
+name = "activitystreams-new"
+version = "0.1.0"
+source = "git+https://git.asonix.dog/asonix/activitystreams-sketch#3f75e56190bd2e942621e8265435c74132639a47"
+dependencies = [
+ "activitystreams",
+ "serde 1.0.106",
+ "serde_json 1.0.51",
+ "typed-builder",
+]
+
[[package]]
name = "actix"
version = "0.9.0"
version = "0.0.1"
dependencies = [
"activitystreams",
+ "activitystreams-new",
"actix",
"actix-files",
"actix-rt",
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9b2228007eba4120145f785df0f6c92ea538f5a3635a612ecf4e334c8c1446d"
+[[package]]
+name = "typed-builder"
+version = "0.5.1"
+source = "git+https://git.asonix.dog/asonix/typed-builder#3dadcaaa6184ef720093c8f0632a7d423d2537b0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "typenum"
version = "1.12.0"
authors = ["Dessalines <happydooby@gmail.com>"]
edition = "2018"
+[patch.crates-io]
+typed-builder = { git = "https://git.asonix.dog/asonix/typed-builder" }
+
[dependencies]
diesel = { version = "1.4.4", features = ["postgres","chrono","r2d2","64-column-tables","serde_json"] }
diesel_migrations = "1.4.0"
dotenv = "0.15.0"
-activitystreams = "0.6.0"
+activitystreams = "0.6.2"
+activitystreams-new = { version = "0.1.0", git = "https://git.asonix.dog/asonix/activitystreams-sketch" }
bcrypt = "0.6.2"
chrono = { version = "0.4.7", features = ["serde"] }
failure = "0.1.5"
-use super::*;
+use crate::{
+ api::{APIError, Oper, Perform},
+ apub::{ApubLikeableType, ApubObjectType},
+ db::{
+ comment::*,
+ comment_view::*,
+ community_view::*,
+ moderator::*,
+ post::*,
+ site_view::*,
+ user::*,
+ user_mention::*,
+ user_view::*,
+ Crud,
+ Likeable,
+ ListingType,
+ Saveable,
+ SortType,
+ },
+ extract_usernames,
+ naive_now,
+ remove_slurs,
+ send_email,
+ settings::Settings,
+ websocket::{
+ server::{JoinCommunityRoom, SendComment},
+ UserOperation,
+ WebsocketInfo,
+ },
+};
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
+use failure::Error;
+use log::error;
+use serde::{Deserialize, Serialize};
+use std::str::FromStr;
#[derive(Serialize, Deserialize)]
pub struct CreateComment {
-use super::*;
+use crate::{
+ api::{APIError, Oper, Perform},
+ apub::{
+ extensions::signatures::generate_actor_keypair,
+ make_apub_endpoint,
+ ActorType,
+ EndpointType,
+ },
+ db::{
+ community::*,
+ community_view::*,
+ moderator::*,
+ site::*,
+ user::*,
+ user_view::*,
+ Bannable,
+ Crud,
+ Followable,
+ Joinable,
+ SortType,
+ },
+ naive_from_unix,
+ naive_now,
+ slur_check,
+ slurs_vec_to_str,
+ websocket::{
+ server::{JoinCommunityRoom, SendCommunityRoomMessage},
+ UserOperation,
+ WebsocketInfo,
+ },
+};
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
+use failure::Error;
+use serde::{Deserialize, Serialize};
+use std::str::FromStr;
#[derive(Serialize, Deserialize)]
pub struct GetCommunity {
-use crate::db::category::*;
-use crate::db::comment::*;
-use crate::db::comment_view::*;
-use crate::db::community::*;
-use crate::db::community_view::*;
-use crate::db::moderator::*;
-use crate::db::moderator_views::*;
-use crate::db::password_reset_request::*;
-use crate::db::post::*;
-use crate::db::post_view::*;
-use crate::db::private_message::*;
-use crate::db::private_message_view::*;
-use crate::db::site::*;
-use crate::db::site_view::*;
-use crate::db::user::*;
-use crate::db::user_mention::*;
-use crate::db::user_mention_view::*;
-use crate::db::user_view::*;
-use crate::db::*;
-use crate::{
- extract_usernames, fetch_iframely_and_pictshare_data, generate_random_string, naive_from_unix,
- naive_now, remove_slurs, send_email, slur_check, slurs_vec_to_str,
+use crate::websocket::WebsocketInfo;
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
};
-
-use crate::apub::{
- extensions::signatures::generate_actor_keypair,
- fetcher::search_by_apub_id,
- {make_apub_endpoint, ActorType, ApubLikeableType, ApubObjectType, EndpointType},
-};
-use crate::settings::Settings;
-use crate::websocket::{
- server::{
- JoinCommunityRoom, JoinPostRoom, JoinUserRoom, SendAllMessage, SendComment,
- SendCommunityRoomMessage, SendPost, SendUserRoomMessage,
- },
- UserOperation, WebsocketInfo,
-};
-use diesel::r2d2::{ConnectionManager, Pool};
-use diesel::PgConnection;
use failure::Error;
-use log::{debug, error, info};
-use serde::{Deserialize, Serialize};
-use std::str::FromStr;
pub mod comment;
pub mod community;
-use super::*;
+use crate::{
+ api::{APIError, Oper, Perform},
+ apub::{ApubLikeableType, ApubObjectType},
+ db::{
+ comment_view::*,
+ community_view::*,
+ moderator::*,
+ post::*,
+ post_view::*,
+ site::*,
+ site_view::*,
+ user::*,
+ user_view::*,
+ Crud,
+ Likeable,
+ ListingType,
+ Saveable,
+ SortType,
+ },
+ fetch_iframely_and_pictshare_data,
+ naive_now,
+ slur_check,
+ slurs_vec_to_str,
+ websocket::{
+ server::{JoinCommunityRoom, JoinPostRoom, SendPost},
+ UserOperation,
+ WebsocketInfo,
+ },
+};
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
+use failure::Error;
+use serde::{Deserialize, Serialize};
+use std::str::FromStr;
#[derive(Serialize, Deserialize, Debug)]
pub struct CreatePost {
use super::user::Register;
-use super::*;
+use crate::{
+ api::{APIError, Oper, Perform},
+ apub::fetcher::search_by_apub_id,
+ db::{
+ category::*,
+ comment_view::*,
+ community_view::*,
+ moderator::*,
+ moderator_views::*,
+ post_view::*,
+ site::*,
+ site_view::*,
+ user::*,
+ user_view::*,
+ Crud,
+ SearchType,
+ SortType,
+ },
+ naive_now,
+ settings::Settings,
+ slur_check,
+ slurs_vec_to_str,
+ websocket::{server::SendAllMessage, UserOperation, WebsocketInfo},
+};
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
+use failure::Error;
+use log::{debug, info};
+use serde::{Deserialize, Serialize};
+use std::str::FromStr;
#[derive(Serialize, Deserialize)]
pub struct ListCategories {}
-use super::*;
+use crate::{
+ api::{APIError, Oper, Perform},
+ apub::{
+ extensions::signatures::generate_actor_keypair,
+ make_apub_endpoint,
+ ApubObjectType,
+ EndpointType,
+ },
+ db::{
+ comment::*,
+ comment_view::*,
+ community::*,
+ community_view::*,
+ moderator::*,
+ password_reset_request::*,
+ post::*,
+ post_view::*,
+ private_message::*,
+ private_message_view::*,
+ site::*,
+ site_view::*,
+ user::*,
+ user_mention::*,
+ user_mention_view::*,
+ user_view::*,
+ Crud,
+ Followable,
+ Joinable,
+ ListingType,
+ SortType,
+ },
+ generate_random_string,
+ naive_from_unix,
+ naive_now,
+ remove_slurs,
+ send_email,
+ settings::Settings,
+ slur_check,
+ slurs_vec_to_str,
+ websocket::{
+ server::{JoinUserRoom, SendAllMessage, SendUserRoomMessage},
+ UserOperation,
+ WebsocketInfo,
+ },
+};
use bcrypt::verify;
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
+use failure::Error;
+use log::error;
+use serde::{Deserialize, Serialize};
+use std::str::FromStr;
#[derive(Serialize, Deserialize, Debug)]
pub struct Login {
-use super::*;
+use crate::apub::{extensions::signatures::sign, is_apub_id_valid, ActorType};
+use activitystreams::{context, object::properties::ObjectProperties, public};
+use failure::{Error, _core::fmt::Debug};
+use isahc::prelude::*;
+use log::debug;
+use serde::Serialize;
+use url::Url;
pub fn populate_object_props(
props: &mut ObjectProperties,
-use super::*;
+use crate::{
+ apub::{
+ activities::{populate_object_props, send_activity},
+ create_apub_response,
+ create_apub_tombstone_response,
+ create_tombstone,
+ fetcher::get_or_fetch_and_upsert_remote_user,
+ ActorType,
+ ApubLikeableType,
+ ApubObjectType,
+ FromApub,
+ ToApub,
+ },
+ convert_datetime,
+ db::{
+ activity::insert_activity,
+ comment::{Comment, CommentForm},
+ community::Community,
+ post::Post,
+ user::User_,
+ Crud,
+ },
+ routes::DbPoolParam,
+};
+use activitystreams::{
+ activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
+ context,
+ object::{kind::NoteType, properties::ObjectProperties, Note, Tombstone},
+};
+use actix_web::{body::Body, web::Path, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::Error;
+use serde::Deserialize;
#[derive(Deserialize)]
pub struct CommentQuery {
-use super::*;
+use crate::{
+ apub::{
+ activities::{populate_object_props, send_activity},
+ create_apub_response,
+ create_apub_tombstone_response,
+ create_tombstone,
+ extensions::{group_extensions::GroupExtension, signatures::PublicKey},
+ fetcher::get_or_fetch_and_upsert_remote_user,
+ get_shared_inbox,
+ ActorType,
+ FromApub,
+ GroupExt,
+ ToApub,
+ },
+ convert_datetime,
+ db::{
+ activity::insert_activity,
+ community::{Community, CommunityForm},
+ community_view::{CommunityFollowerView, CommunityModeratorView},
+ user::User_,
+ },
+ naive_now,
+ routes::DbPoolParam,
+};
+use activitystreams::{
+ activity::{Accept, Delete, Follow, Remove, Undo},
+ actor::{kind::GroupType, properties::ApActorProperties, Group},
+ collection::UnorderedCollection,
+ context,
+ endpoint::EndpointProperties,
+ ext::Extensible,
+ object::{properties::ObjectProperties, Tombstone},
+ BaseBox,
+};
+use actix_web::{body::Body, web::Path, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::Error;
+use itertools::Itertools;
+use serde::Deserialize;
#[derive(Deserialize)]
pub struct CommunityQuery {
-use super::*;
+use crate::{
+ apub::{
+ extensions::signatures::verify,
+ fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
+ ActorType,
+ },
+ db::{
+ activity::insert_activity,
+ community::{Community, CommunityFollower, CommunityFollowerForm},
+ user::User_,
+ Followable,
+ },
+ routes::{ChatServerParam, DbPoolParam},
+};
+use activitystreams::activity::{Follow, Undo};
+use actix_web::{web, HttpRequest, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::{Error, _core::fmt::Debug};
+use log::debug;
+use serde::Deserialize;
#[serde(untagged)]
#[derive(Deserialize, Debug)]
-use crate::db::category::Category;
-use crate::db::Crud;
-use activitystreams::ext::Extension;
-use activitystreams::Actor;
+use crate::db::{category::Category, Crud};
+use activitystreams::{ext::Extension, Actor};
use diesel::PgConnection;
use failure::Error;
use serde::{Deserialize, Serialize};
-use activitystreams::ext::Extension;
-use activitystreams::Base;
+use activitystreams::{ext::Extension, Base};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
use http::request::Builder;
use http_signature_normalization::Config;
use log::debug;
-use openssl::hash::MessageDigest;
-use openssl::sign::{Signer, Verifier};
-use openssl::{pkey::PKey, rsa::Rsa};
+use openssl::{
+ hash::MessageDigest,
+ pkey::PKey,
+ rsa::Rsa,
+ sign::{Signer, Verifier},
+};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
-use super::*;
+use activitystreams::object::Note;
+use actix_web::Result;
+use diesel::{result::Error::NotFound, PgConnection};
+use failure::{Error, _core::fmt::Debug};
+use isahc::prelude::*;
+use log::debug;
+use serde::Deserialize;
+use std::time::Duration;
+use url::Url;
+
+use crate::{
+ api::site::SearchResponse,
+ db::{
+ comment::{Comment, CommentForm},
+ comment_view::CommentView,
+ community::{Community, CommunityForm, CommunityModerator, CommunityModeratorForm},
+ community_view::CommunityView,
+ post::{Post, PostForm},
+ post_view::PostView,
+ user::{UserForm, User_},
+ Crud,
+ Joinable,
+ SearchType,
+ },
+ naive_now,
+ routes::nodeinfo::{NodeInfo, NodeInfoWellKnown},
+};
+
+use crate::{
+ apub::{
+ get_apub_protocol_string,
+ is_apub_id_valid,
+ FromApub,
+ GroupExt,
+ PageExt,
+ PersonExt,
+ APUB_JSON_CONTENT_TYPE,
+ },
+ db::user_view::UserView,
+};
// Fetch nodeinfo metadata from a remote instance.
fn _fetch_node_info(domain: &str) -> Result<NodeInfo, Error> {
pub mod user;
pub mod user_inbox;
-use crate::api::community::CommunityResponse;
-use crate::db::activity::insert_activity;
-use crate::websocket::server::SendCommunityRoomMessage;
-use activitystreams::object::kind::{NoteType, PageType};
+use crate::{
+ apub::extensions::{
+ group_extensions::GroupExtension,
+ page_extension::PageExtension,
+ signatures::{PublicKey, PublicKeyExtension},
+ },
+ convert_datetime,
+ db::user::User_,
+ Settings,
+};
use activitystreams::{
- activity::{Accept, Create, Delete, Dislike, Follow, Like, Remove, Undo, Update},
- actor::{kind::GroupType, properties::ApActorProperties, Group, Person},
- collection::UnorderedCollection,
- context,
- endpoint::EndpointProperties,
- ext::{Ext, Extensible},
- object::{properties::ObjectProperties, Note, Page, Tombstone},
- public, BaseBox,
+ activity::Follow,
+ actor::{properties::ApActorProperties, Group, Person},
+ ext::Ext,
+ object::{Page, Tombstone},
};
-use actix_web::body::Body;
-use actix_web::web::Path;
-use actix_web::{web, HttpRequest, HttpResponse, Result};
-use diesel::result::Error::NotFound;
+use actix_web::{body::Body, HttpResponse, Result};
+use chrono::NaiveDateTime;
use diesel::PgConnection;
use failure::Error;
-use failure::_core::fmt::Debug;
-use isahc::prelude::*;
-use itertools::Itertools;
-use log::debug;
-use serde::{Deserialize, Serialize};
-use std::time::Duration;
+use serde::Serialize;
use url::Url;
-use crate::api::comment::CommentResponse;
-use crate::api::post::PostResponse;
-use crate::api::site::SearchResponse;
-use crate::api::user::PrivateMessageResponse;
-use crate::db::comment::{Comment, CommentForm, CommentLike, CommentLikeForm};
-use crate::db::comment_view::CommentView;
-use crate::db::community::{
- Community, CommunityFollower, CommunityFollowerForm, CommunityForm, CommunityModerator,
- CommunityModeratorForm,
-};
-use crate::db::community_view::{CommunityFollowerView, CommunityModeratorView, CommunityView};
-use crate::db::post::{Post, PostForm, PostLike, PostLikeForm};
-use crate::db::post_view::PostView;
-use crate::db::private_message::{PrivateMessage, PrivateMessageForm};
-use crate::db::private_message_view::PrivateMessageView;
-use crate::db::user::{UserForm, User_};
-use crate::db::user_view::UserView;
-use crate::db::{Crud, Followable, Joinable, Likeable, SearchType};
-use crate::routes::nodeinfo::{NodeInfo, NodeInfoWellKnown};
-use crate::routes::{ChatServerParam, DbPoolParam};
-use crate::websocket::{
- server::{SendComment, SendPost, SendUserRoomMessage},
- UserOperation,
-};
-use crate::{convert_datetime, naive_now, Settings};
-
-use crate::apub::extensions::group_extensions::GroupExtension;
-use crate::apub::extensions::page_extension::PageExtension;
-use activities::{populate_object_props, send_activity};
-use chrono::NaiveDateTime;
-use extensions::signatures::verify;
-use extensions::signatures::{sign, PublicKey, PublicKeyExtension};
-use fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user};
-
type GroupExt = Ext<Ext<Ext<Group, GroupExtension>, ApActorProperties>, PublicKeyExtension>;
type PersonExt = Ext<Ext<Person, ApActorProperties>, PublicKeyExtension>;
type PageExt = Ext<Page, PageExtension>;
-use super::*;
+use crate::{
+ apub::{
+ activities::{populate_object_props, send_activity},
+ create_apub_response,
+ create_apub_tombstone_response,
+ create_tombstone,
+ extensions::page_extension::PageExtension,
+ fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
+ ActorType,
+ ApubLikeableType,
+ ApubObjectType,
+ FromApub,
+ PageExt,
+ ToApub,
+ },
+ convert_datetime,
+ db::{
+ activity::insert_activity,
+ community::Community,
+ post::{Post, PostForm},
+ user::User_,
+ Crud,
+ },
+ routes::DbPoolParam,
+};
+use activitystreams::{
+ activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
+ context,
+ ext::Extensible,
+ object::{kind::PageType, properties::ObjectProperties, Page, Tombstone},
+};
+use actix_web::{body::Body, web::Path, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::Error;
+use serde::Deserialize;
#[derive(Deserialize)]
pub struct PostQuery {
-use super::*;
+use crate::{
+ apub::{
+ activities::send_activity,
+ create_tombstone,
+ fetcher::get_or_fetch_and_upsert_remote_user,
+ ApubObjectType,
+ FromApub,
+ ToApub,
+ },
+ convert_datetime,
+ db::{
+ activity::insert_activity,
+ private_message::{PrivateMessage, PrivateMessageForm},
+ user::User_,
+ Crud,
+ },
+};
+use activitystreams::{
+ activity::{Create, Delete, Undo, Update},
+ context,
+ object::{kind::NoteType, properties::ObjectProperties, Note, Tombstone},
+};
+use actix_web::Result;
+use diesel::PgConnection;
+use failure::Error;
impl ToApub for PrivateMessage {
type Response = Note;
-use super::*;
+use crate::{
+ api::{comment::CommentResponse, community::CommunityResponse, post::PostResponse},
+ apub::{
+ extensions::signatures::verify,
+ fetcher::get_or_fetch_and_upsert_remote_user,
+ FromApub,
+ GroupExt,
+ PageExt,
+ },
+ db::{
+ activity::insert_activity,
+ comment::{Comment, CommentForm, CommentLike, CommentLikeForm},
+ comment_view::CommentView,
+ community::{Community, CommunityForm},
+ community_view::CommunityView,
+ post::{Post, PostForm, PostLike, PostLikeForm},
+ post_view::PostView,
+ Crud,
+ Likeable,
+ },
+ naive_now,
+ routes::{ChatServerParam, DbPoolParam},
+ websocket::{
+ server::{SendComment, SendCommunityRoomMessage, SendPost},
+ UserOperation,
+ },
+};
+use activitystreams::{
+ activity::{Create, Delete, Dislike, Like, Remove, Undo, Update},
+ object::Note,
+ BaseBox,
+};
+use actix_web::{web, HttpRequest, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::{Error, _core::fmt::Debug};
+use log::debug;
+use serde::{Deserialize, Serialize};
#[serde(untagged)]
#[derive(Serialize, Deserialize, Debug)]
-use super::*;
+use crate::{
+ apub::{
+ activities::send_activity,
+ create_apub_response,
+ extensions::signatures::PublicKey,
+ ActorType,
+ FromApub,
+ PersonExt,
+ ToApub,
+ },
+ convert_datetime,
+ db::{
+ activity::insert_activity,
+ user::{UserForm, User_},
+ },
+ naive_now,
+ routes::DbPoolParam,
+};
+use activitystreams::{
+ activity::{Follow, Undo},
+ actor::{properties::ApActorProperties, Person},
+ context,
+ endpoint::EndpointProperties,
+ ext::Extensible,
+ object::{properties::ObjectProperties, Tombstone},
+};
+use actix_web::{body::Body, web::Path, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::Error;
+use serde::Deserialize;
#[derive(Deserialize)]
pub struct UserQuery {
-use super::*;
+use crate::{
+ api::user::PrivateMessageResponse,
+ apub::{
+ extensions::signatures::verify,
+ fetcher::{get_or_fetch_and_upsert_remote_community, get_or_fetch_and_upsert_remote_user},
+ FromApub,
+ },
+ db::{
+ activity::insert_activity,
+ community::{CommunityFollower, CommunityFollowerForm},
+ private_message::{PrivateMessage, PrivateMessageForm},
+ private_message_view::PrivateMessageView,
+ user::User_,
+ Crud,
+ Followable,
+ },
+ naive_now,
+ routes::{ChatServerParam, DbPoolParam},
+ websocket::{server::SendUserRoomMessage, UserOperation},
+};
+use activitystreams::{
+ activity::{Accept, Create, Delete, Undo, Update},
+ object::Note,
+};
+use actix_web::{web, HttpRequest, HttpResponse, Result};
+use diesel::PgConnection;
+use failure::{Error, _core::fmt::Debug};
+use log::debug;
+use serde::Deserialize;
#[serde(untagged)]
#[derive(Deserialize, Debug)]
-use super::*;
-use crate::schema::activity;
+use crate::{db::Crud, schema::activity};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[cfg(test)]
mod tests {
- use super::super::user::*;
- use super::*;
+ use super::{super::user::*, *};
+ use crate::db::{establish_unpooled_connection, Crud, ListingType, SortType};
#[test]
fn test_crud() {
-use super::*;
-use crate::schema::category;
-use crate::schema::category::dsl::*;
+use crate::{
+ db::Crud,
+ schema::{category, category::dsl::*},
+};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[table_name = "category"]
#[cfg(test)]
mod tests {
use super::*;
+ use crate::db::establish_unpooled_connection;
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
// This is for db migrations that require code
-use super::comment::Comment;
-use super::community::{Community, CommunityForm};
-use super::post::Post;
-use super::private_message::PrivateMessage;
-use super::user::{UserForm, User_};
-use super::*;
-use crate::apub::extensions::signatures::generate_actor_keypair;
-use crate::apub::{make_apub_endpoint, EndpointType};
-use crate::naive_now;
+use super::{
+ comment::Comment,
+ community::{Community, CommunityForm},
+ post::Post,
+ private_message::PrivateMessage,
+ user::{UserForm, User_},
+};
+use crate::{
+ apub::{extensions::signatures::generate_actor_keypair, make_apub_endpoint, EndpointType},
+ db::Crud,
+ naive_now,
+};
+use diesel::*;
use failure::Error;
use log::info;
-use super::post::Post;
-use super::*;
-use crate::apub::{make_apub_endpoint, EndpointType};
-use crate::naive_now;
-use crate::schema::{comment, comment_like, comment_saved};
+use super::{post::Post, *};
+use crate::{
+ apub::{make_apub_endpoint, EndpointType},
+ naive_now,
+ schema::{comment, comment_like, comment_saved},
+};
// WITH RECURSIVE MyTree AS (
// SELECT * FROM comment WHERE parent_id IS NULL
#[cfg(test)]
mod tests {
- use super::super::community::*;
- use super::super::post::*;
- use super::super::user::*;
- use super::*;
+ use super::{
+ super::{community::*, post::*, user::*},
+ *,
+ };
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
-use super::*;
-use diesel::pg::Pg;
+use crate::db::{fuzzy_search, limit_and_offset, ListingType, MaybeOptional, SortType};
+use diesel::{dsl::*, pg::Pg, result::Error, *};
+use serde::{Deserialize, Serialize};
// The faked schema since diesel doesn't do views
table! {
#[cfg(test)]
mod tests {
- use super::super::comment::*;
- use super::super::community::*;
- use super::super::post::*;
- use super::super::user::*;
- use super::*;
+ use super::{
+ super::{comment::*, community::*, post::*, user::*},
+ *,
+ };
+ use crate::db::{establish_unpooled_connection, Crud, Likeable};
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
-use super::*;
-use crate::schema::{community, community_follower, community_moderator, community_user_ban};
+use crate::{
+ db::{Bannable, Crud, Followable, Joinable},
+ schema::{community, community_follower, community_moderator, community_user_ban},
+ settings::Settings,
+};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[table_name = "community"]
#[cfg(test)]
mod tests {
- use super::super::user::*;
- use super::*;
+ use super::{super::user::*, *};
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
use super::community_view::community_mview::BoxedQuery;
-use super::*;
-use diesel::pg::Pg;
+use crate::db::{fuzzy_search, limit_and_offset, MaybeOptional, SortType};
+use diesel::{pg::Pg, result::Error, *};
+use serde::{Deserialize, Serialize};
table! {
community_view (id) {
use crate::settings::Settings;
-use diesel::dsl::*;
-use diesel::result::Error;
-use diesel::*;
+use diesel::{dsl::*, result::Error, *};
use serde::{Deserialize, Serialize};
pub mod activity;
-use super::*;
-use crate::schema::{
- mod_add, mod_add_community, mod_ban, mod_ban_from_community, mod_lock_post, mod_remove_comment,
- mod_remove_community, mod_remove_post, mod_sticky_post,
+use crate::{
+ db::Crud,
+ schema::{
+ mod_add,
+ mod_add_community,
+ mod_ban,
+ mod_ban_from_community,
+ mod_lock_post,
+ mod_remove_comment,
+ mod_remove_community,
+ mod_remove_post,
+ mod_sticky_post,
+ },
};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[table_name = "mod_remove_post"]
#[cfg(test)]
mod tests {
- use super::super::comment::*;
- use super::super::community::*;
- use super::super::post::*;
- use super::super::user::*;
- use super::*;
+ use super::{
+ super::{comment::*, community::*, post::*, user::*},
+ *,
+ };
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
+
// use Crud;
#[test]
fn test_crud() {
-use super::*;
+use crate::db::limit_and_offset;
+use diesel::{result::Error, *};
+use serde::{Deserialize, Serialize};
table! {
mod_remove_post_view (id) {
-use super::*;
-use crate::schema::password_reset_request;
-use crate::schema::password_reset_request::dsl::*;
+use crate::{
+ db::Crud,
+ schema::{password_reset_request, password_reset_request::dsl::*},
+};
+use diesel::{dsl::*, result::Error, *};
use sha2::{Digest, Sha256};
#[derive(Queryable, Identifiable, PartialEq, Debug)]
#[cfg(test)]
mod tests {
- use super::super::user::*;
- use super::*;
+ use super::{super::user::*, *};
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
#[test]
fn test_crud() {
-use super::*;
-use crate::apub::{make_apub_endpoint, EndpointType};
-use crate::naive_now;
-use crate::schema::{post, post_like, post_read, post_saved};
+use crate::{
+ apub::{make_apub_endpoint, EndpointType},
+ db::{Crud, Likeable, Readable, Saveable},
+ naive_now,
+ schema::{post, post_like, post_read, post_saved},
+};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[table_name = "post"]
#[cfg(test)]
mod tests {
- use super::super::community::*;
- use super::super::user::*;
- use super::*;
+ use super::{
+ super::{community::*, user::*},
+ *,
+ };
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
use super::post_view::post_mview::BoxedQuery;
-use super::*;
-use diesel::pg::Pg;
+use crate::db::{fuzzy_search, limit_and_offset, ListingType, MaybeOptional, SortType};
+use diesel::{dsl::*, pg::Pg, result::Error, *};
+use serde::{Deserialize, Serialize};
// The faked schema since diesel doesn't do views
table! {
#[cfg(test)]
mod tests {
- use super::super::community::*;
- use super::super::post::*;
- use super::super::user::*;
- use super::*;
+ use super::{
+ super::{community::*, post::*, user::*},
+ *,
+ };
+ use crate::db::{establish_unpooled_connection, Crud, Likeable};
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
-use super::*;
-use crate::apub::{make_apub_endpoint, EndpointType};
-use crate::schema::private_message;
+use crate::{
+ apub::{make_apub_endpoint, EndpointType},
+ db::Crud,
+ schema::private_message,
+};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[table_name = "private_message"]
#[cfg(test)]
mod tests {
- use super::super::user::*;
- use super::*;
+ use super::{super::user::*, *};
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
-use super::*;
-use diesel::pg::Pg;
+use crate::db::{limit_and_offset, MaybeOptional};
+use diesel::{pg::Pg, result::Error, *};
+use serde::{Deserialize, Serialize};
// The faked schema since diesel doesn't do views
table! {
-use super::*;
-use crate::schema::site;
+use crate::{db::Crud, schema::site};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[table_name = "site"]
-use super::*;
+use diesel::{result::Error, *};
+use serde::{Deserialize, Serialize};
table! {
site_view (id) {
-use super::*;
-use crate::schema::user_;
-use crate::schema::user_::dsl::*;
-use crate::{is_email_regex, naive_now, Settings};
+use crate::{
+ db::Crud,
+ is_email_regex,
+ naive_now,
+ schema::{user_, user_::dsl::*},
+ settings::Settings,
+};
use bcrypt::{hash, DEFAULT_COST};
+use diesel::{dsl::*, result::Error, *};
use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, TokenData, Validation};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Identifiable, PartialEq, Debug)]
#[table_name = "user_"]
#[cfg(test)]
mod tests {
- use super::User_;
- use super::*;
+ use super::{User_, *};
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
#[test]
fn test_crud() {
use super::comment::Comment;
-use super::*;
-use crate::schema::user_mention;
+use crate::{db::Crud, schema::user_mention};
+use diesel::{dsl::*, result::Error, *};
+use serde::{Deserialize, Serialize};
#[derive(Queryable, Associations, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
#[belongs_to(Comment)]
#[cfg(test)]
mod tests {
- use super::super::comment::*;
- use super::super::community::*;
- use super::super::post::*;
- use super::super::user::*;
- use super::*;
+ use super::{
+ super::{comment::*, community::*, post::*, user::*},
+ *,
+ };
+ use crate::db::{establish_unpooled_connection, ListingType, SortType};
+
#[test]
fn test_crud() {
let conn = establish_unpooled_connection();
-use super::*;
-use diesel::pg::Pg;
+use crate::db::{limit_and_offset, MaybeOptional, SortType};
+use diesel::{dsl::*, pg::Pg, result::Error, *};
+use serde::{Deserialize, Serialize};
// The faked schema since diesel doesn't do views
table! {
use super::user_view::user_mview::BoxedQuery;
-use super::*;
-use diesel::pg::Pg;
+use crate::db::{fuzzy_search, limit_and_offset, MaybeOptional, SortType};
+use diesel::{dsl::*, pg::Pg, result::Error, *};
+use serde::{Deserialize, Serialize};
table! {
user_view (id) {
use actix_web::dev::ConnectionInfo;
use chrono::{DateTime, FixedOffset, Local, NaiveDateTime, Utc};
use isahc::prelude::*;
-use lettre::smtp::authentication::{Credentials, Mechanism};
-use lettre::smtp::extension::ClientId;
-use lettre::smtp::ConnectionReuseParameters;
-use lettre::{ClientSecurity, SmtpClient, Transport};
+use lettre::{
+ smtp::{
+ authentication::{Credentials, Mechanism},
+ extension::ClientId,
+ ConnectionReuseParameters,
+ },
+ ClientSecurity,
+ SmtpClient,
+ Transport,
+};
use lettre_email::Email;
use log::error;
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
-use rand::distributions::Alphanumeric;
-use rand::{thread_rng, Rng};
+use rand::{distributions::Alphanumeric, thread_rng, Rng};
use regex::{Regex, RegexBuilder};
use serde::Deserialize;
use actix::prelude::*;
use actix_web::*;
-use diesel::r2d2::{ConnectionManager, Pool};
-use diesel::PgConnection;
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
use failure::Error;
use lemmy_server::{
db::code_migrations::run_advanced_migrations,
-pub mod rate_limiter;
-
use super::{IPAddr, Settings};
-use crate::api::APIError;
-use crate::get_ip;
-use crate::settings::RateLimitConfig;
+use crate::{api::APIError, get_ip, settings::RateLimitConfig};
use actix_web::dev::{Service, ServiceRequest, ServiceResponse, Transform};
-use failure::Error;
use futures::future::{ok, Ready};
-use log::debug;
use rate_limiter::{RateLimitType, RateLimiter};
-use std::collections::HashMap;
-use std::future::Future;
-use std::pin::Pin;
-use std::sync::Arc;
-use std::task::{Context, Poll};
-use std::time::SystemTime;
-use strum::IntoEnumIterator;
+use std::{
+ future::Future,
+ pin::Pin,
+ sync::Arc,
+ task::{Context, Poll},
+};
use tokio::sync::Mutex;
+pub mod rate_limiter;
+
#[derive(Debug, Clone)]
pub struct RateLimit {
pub rate_limiter: Arc<Mutex<RateLimiter>>,
}
RateLimitType::Post => {
limiter.check_rate_limit_full(
- self.type_.clone(),
+ self.type_,
&ip_addr,
rate_limit.post,
rate_limit.post_per_second,
-use super::*;
+use super::IPAddr;
+use crate::api::APIError;
+use failure::Error;
+use log::debug;
+use std::{collections::HashMap, time::SystemTime};
+use strum::IntoEnumIterator;
#[derive(Debug, Clone)]
pub struct RateLimitBucket {
-use super::*;
-use crate::api::comment::*;
-use crate::api::community::*;
-use crate::api::post::*;
-use crate::api::site::*;
-use crate::api::user::*;
-use crate::rate_limit::RateLimit;
+use crate::{
+ api::{comment::*, community::*, post::*, site::*, user::*, Oper, Perform},
+ rate_limit::RateLimit,
+ routes::{ChatServerParam, DbPoolParam},
+ websocket::WebsocketInfo,
+};
+use actix_web::{error::ErrorBadRequest, *};
+use serde::Serialize;
pub fn config(cfg: &mut web::ServiceConfig, rate_limit: &RateLimit) {
cfg.service(
-use super::*;
-use crate::apub::comment::get_apub_comment;
-use crate::apub::community::*;
-use crate::apub::community_inbox::community_inbox;
-use crate::apub::post::get_apub_post;
-use crate::apub::shared_inbox::shared_inbox;
-use crate::apub::user::*;
-use crate::apub::user_inbox::user_inbox;
-use crate::apub::APUB_JSON_CONTENT_TYPE;
+use crate::{
+ apub::{
+ comment::get_apub_comment,
+ community::*,
+ community_inbox::community_inbox,
+ post::get_apub_post,
+ shared_inbox::shared_inbox,
+ user::*,
+ user_inbox::user_inbox,
+ APUB_JSON_CONTENT_TYPE,
+ },
+ settings::Settings,
+};
+use actix_web::*;
pub fn config(cfg: &mut web::ServiceConfig) {
if Settings::get().federation.enabled {
-use super::*;
-use crate::db::comment_view::{ReplyQueryBuilder, ReplyView};
-use crate::db::community::Community;
-use crate::db::post_view::{PostQueryBuilder, PostView};
-use crate::db::site_view::SiteView;
-use crate::db::user::{Claims, User_};
-use crate::db::user_mention_view::{UserMentionQueryBuilder, UserMentionView};
-use crate::db::{ListingType, SortType};
+use crate::{
+ db::{
+ comment_view::{ReplyQueryBuilder, ReplyView},
+ community::Community,
+ post_view::{PostQueryBuilder, PostView},
+ site_view::SiteView,
+ user::{Claims, User_},
+ user_mention_view::{UserMentionQueryBuilder, UserMentionView},
+ ListingType,
+ SortType,
+ },
+ markdown_to_html,
+ routes::DbPoolParam,
+ settings::Settings,
+};
+use actix_web::{error::ErrorBadRequest, *};
+use chrono::{DateTime, NaiveDateTime, Utc};
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
+use rss::{CategoryBuilder, ChannelBuilder, GuidBuilder, Item, ItemBuilder};
+use serde::Deserialize;
+use std::str::FromStr;
+use strum::ParseError;
#[derive(Deserialize)]
pub struct Params {
pub fn config(cfg: &mut web::ServiceConfig) {
cfg
- .route("/feeds/{type}/{name}.xml", web::get().to(feeds::get_feed))
- .route("/feeds/all.xml", web::get().to(feeds::get_all_feed));
+ .route("/feeds/{type}/{name}.xml", web::get().to(get_feed))
+ .route("/feeds/all.xml", web::get().to(get_all_feed));
}
async fn get_all_feed(info: web::Query<Params>, db: DbPoolParam) -> Result<HttpResponse, Error> {
-use super::*;
+use crate::settings::Settings;
+use actix_files::NamedFile;
+use actix_web::*;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg
-use crate::api::{Oper, Perform};
-use crate::apub::get_apub_protocol_string;
-use crate::db::site_view::SiteView;
-use crate::rate_limit::rate_limiter::RateLimiter;
-use crate::websocket::{server::ChatServer, WebsocketInfo};
-use crate::{get_ip, markdown_to_html, version, Settings};
+pub mod api;
+pub mod federation;
+pub mod feeds;
+pub mod index;
+pub mod nodeinfo;
+pub mod webfinger;
+pub mod websocket;
+
+use crate::{rate_limit::rate_limiter::RateLimiter, websocket::server::ChatServer};
use actix::prelude::*;
-use actix_files::NamedFile;
-use actix_web::{body::Body, error::ErrorBadRequest, web::Query, *};
-use actix_web_actors::ws;
-use chrono::{DateTime, NaiveDateTime, Utc};
+use actix_web::*;
use diesel::{
r2d2::{ConnectionManager, Pool},
PgConnection,
};
-use log::{error, info};
-use regex::Regex;
-use rss::{CategoryBuilder, ChannelBuilder, GuidBuilder, Item, ItemBuilder};
-use serde::{Deserialize, Serialize};
-use serde_json::json;
-use std::str::FromStr;
use std::sync::{Arc, Mutex};
-use std::time::{Duration, Instant};
-use strum::ParseError;
-use url::Url;
pub type DbPoolParam = web::Data<Pool<ConnectionManager<PgConnection>>>;
pub type RateLimitParam = web::Data<Arc<Mutex<RateLimiter>>>;
pub type ChatServerParam = web::Data<Addr<ChatServer>>;
-
-pub mod api;
-pub mod federation;
-pub mod feeds;
-pub mod index;
-pub mod nodeinfo;
-pub mod webfinger;
-pub mod websocket;
-use super::*;
+use crate::{
+ apub::get_apub_protocol_string,
+ db::site_view::SiteView,
+ routes::DbPoolParam,
+ version,
+ Settings,
+};
+use actix_web::{body::Body, error::ErrorBadRequest, *};
+use serde::{Deserialize, Serialize};
+use url::Url;
pub fn config(cfg: &mut web::ServiceConfig) {
cfg
-use super::*;
-use crate::db::community::Community;
+use crate::{db::community::Community, routes::DbPoolParam, Settings};
+use actix_web::{error::ErrorBadRequest, web::Query, *};
+use regex::Regex;
+use serde::Deserialize;
+use serde_json::json;
#[derive(Deserialize)]
pub struct Params {
-use super::*;
-use crate::websocket::server::*;
+use crate::{
+ get_ip,
+ websocket::server::{ChatServer, *},
+};
+use actix::prelude::*;
+use actix_web::*;
+use actix_web_actors::ws;
+use log::{error, info};
+use std::time::{Duration, Instant};
/// How often heartbeat pings are sent
const HEARTBEAT_INTERVAL: Duration = Duration::from_secs(5);
use config::{Config, ConfigError, Environment, File};
use failure::Error;
use serde::Deserialize;
-use std::env;
-use std::fs;
-use std::net::IpAddr;
-use std::sync::RwLock;
+use std::{env, fs, net::IpAddr, sync::RwLock};
static CONFIG_FILE_DEFAULTS: &str = "config/defaults.hjson";
static CONFIG_FILE: &str = "config/config.hjson";
use crate::ConnectionId;
use actix::prelude::*;
-use diesel::r2d2::{ConnectionManager, Pool};
-use diesel::PgConnection;
+use diesel::{
+ r2d2::{ConnectionManager, Pool},
+ PgConnection,
+};
use failure::Error;
use log::{error, info};
use rand::{rngs::ThreadRng, Rng};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use server::ChatServer;
-use std::collections::{HashMap, HashSet};
-use std::str::FromStr;
+use std::{
+ collections::{HashMap, HashSet},
+ str::FromStr,
+};
#[derive(EnumString, ToString, Debug, Clone)]
pub enum UserOperation {
//! room through `ChatServer`.
use super::*;
-use crate::api::comment::*;
-use crate::api::community::*;
-use crate::api::post::*;
-use crate::api::site::*;
-use crate::api::user::*;
-use crate::api::*;
-use crate::rate_limit::RateLimit;
-use crate::websocket::UserOperation;
-use crate::{CommunityId, ConnectionId, IPAddr, PostId, UserId};
+use crate::{
+ api::{comment::*, community::*, post::*, site::*, user::*, *},
+ rate_limit::RateLimit,
+ websocket::UserOperation,
+ CommunityId,
+ ConnectionId,
+ IPAddr,
+ PostId,
+ UserId,
+};
/// Chat server sends this messages to session
#[derive(Message)]
id,
SessionInfo {
addr: msg.addr,
- ip: msg.ip.to_owned(),
+ ip: msg.ip,
},
);