mirror of
https://git.joinplu.me/Plume/Plume.git
synced 2024-11-25 21:11:01 +00:00
Use the ApRequest guard for routes that need it + Fix a few issues with its impl
Also fixes some Rocket warnings!
This commit is contained in:
parent
8e47219d82
commit
b95e384ed7
8 changed files with 177 additions and 22 deletions
|
@ -60,22 +60,25 @@ impl<'r, O: Object> Responder<'r> for ActivityStream<O> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
pub struct ApRequest;
|
pub struct ApRequest;
|
||||||
impl<'a, 'r> FromRequest<'a, 'r> for ApRequest {
|
impl<'a, 'r> FromRequest<'a, 'r> for ApRequest {
|
||||||
type Error = ();
|
type Error = ();
|
||||||
|
|
||||||
fn from_request(request: &'a Request<'r>) -> Outcome<Self, (Status, Self::Error), ()> {
|
fn from_request(request: &'a Request<'r>) -> Outcome<Self, (Status, Self::Error), ()> {
|
||||||
request.headers().get_one("Content-Type").map(|header| header.split(",").map(|ct| match ct {
|
request.headers().get_one("Accept").map(|header| header.split(",").map(|ct| match ct.trim() {
|
||||||
"application/ld+json; profile=\"w3.org/ns/activitystreams\"" |
|
// bool for Forward: true if found a valid Content-Type for Plume first (HTML), false otherwise
|
||||||
"application/ld+json;profile=\"w3.org/ns/activitystreams\"" |
|
"application/ld+json; profile=\"https://w3.org/ns/activitystreams\"" |
|
||||||
|
"application/ld+json;profile=\"https://w3.org/ns/activitystreams\"" |
|
||||||
"application/activity+json" |
|
"application/activity+json" |
|
||||||
"application/ld+json" => Outcome::Success(ApRequest),
|
"application/ld+json" => Outcome::Success(ApRequest),
|
||||||
_ => Outcome::Forward(())
|
"text/html" => Outcome::Forward(true),
|
||||||
}).fold(Outcome::Forward(()), |out, ct| if out.is_success() {
|
_ => Outcome::Forward(false)
|
||||||
|
}).fold(Outcome::Forward(false), |out, ct| if out.is_success() || (out.is_forward() && out.clone().forwarded().unwrap()) {
|
||||||
out
|
out
|
||||||
} else {
|
} else {
|
||||||
ct
|
ct
|
||||||
})).unwrap_or(Outcome::Forward(()))
|
}).map_forward(|_| ())).unwrap_or(Outcome::Forward(()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
55
po/de.po
55
po/de.po
|
@ -47,7 +47,9 @@ msgid "Something broke on our side."
|
||||||
msgstr "Bei dir ist etwas schief gegangen."
|
msgstr "Bei dir ist etwas schief gegangen."
|
||||||
|
|
||||||
msgid "Sorry about that. If you think this is a bug, please report it."
|
msgid "Sorry about that. If you think this is a bug, please report it."
|
||||||
msgstr "Entschuldige. Wenn du denkst einen Bug gefunden zu haben, kannst du diesen gerne melden."
|
msgstr ""
|
||||||
|
"Entschuldige. Wenn du denkst einen Bug gefunden zu haben, kannst du diesen "
|
||||||
|
"gerne melden."
|
||||||
|
|
||||||
msgid "Configuration"
|
msgid "Configuration"
|
||||||
msgstr "Konfiguration"
|
msgstr "Konfiguration"
|
||||||
|
@ -67,8 +69,11 @@ msgstr "Willkommen auf {{ instance_name | escape }}"
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr "Benachrichtigungen"
|
msgstr "Benachrichtigungen"
|
||||||
|
|
||||||
msgid "Written by {{ link_1 }}{{ url }}{{ link_2 }}{{ name | escape }}{{ link_3 }}"
|
msgid ""
|
||||||
msgstr "Geschrieben von {{ link_1 }}{{ url }}{{ link_2 }}{{ name | escape }}{{ link_3 }}"
|
"Written by {{ link_1 }}{{ url }}{{ link_2 }}{{ name | escape }}{{ link_3 }}"
|
||||||
|
msgstr ""
|
||||||
|
"Geschrieben von {{ link_1 }}{{ url }}{{ link_2 }}{{ name | escape }}"
|
||||||
|
"{{ link_3 }}"
|
||||||
|
|
||||||
msgid "This article is under the {{ license }} license."
|
msgid "This article is under the {{ license }} license."
|
||||||
msgstr "Dieser Artikel steht unter der {{ license }} Lizenz."
|
msgstr "Dieser Artikel steht unter der {{ license }} Lizenz."
|
||||||
|
@ -132,7 +137,9 @@ msgid "Your Blogs"
|
||||||
msgstr "Deine Blogs"
|
msgstr "Deine Blogs"
|
||||||
|
|
||||||
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
msgid "You don't have any blog yet. Create your own, or ask to join one."
|
||||||
msgstr "Du hast bisher keinen Blog. Erstelle deinen eigenen oder tritt einem Blog bei."
|
msgstr ""
|
||||||
|
"Du hast bisher keinen Blog. Erstelle deinen eigenen oder tritt einem Blog "
|
||||||
|
"bei."
|
||||||
|
|
||||||
msgid "Start a new blog"
|
msgid "Start a new blog"
|
||||||
msgstr "Starte einen neuen Blog"
|
msgstr "Starte einen neuen Blog"
|
||||||
|
@ -251,7 +258,8 @@ msgid "You need to be logged in order to edit your profile"
|
||||||
msgstr "Du musst eingeloggt sein, um dein Profil zu editieren"
|
msgstr "Du musst eingeloggt sein, um dein Profil zu editieren"
|
||||||
|
|
||||||
msgid "By {{ link_1 }}{{ link_2 }}{{ link_3 }}{{ name | escape }}{{ link_4 }}"
|
msgid "By {{ link_1 }}{{ link_2 }}{{ link_3 }}{{ name | escape }}{{ link_4 }}"
|
||||||
msgstr "Von {{ link_1 }}{{ link_2 }}{{ link_3 }}{{ name | escape }}{{ link_4 }}"
|
msgstr ""
|
||||||
|
"Von {{ link_1 }}{{ link_2 }}{{ link_3 }}{{ name | escape }}{{ link_4 }}"
|
||||||
|
|
||||||
msgid "{{ data }} reshared your article"
|
msgid "{{ data }} reshared your article"
|
||||||
msgstr "{{ data }} hat deinen Artikel reshared"
|
msgstr "{{ data }} hat deinen Artikel reshared"
|
||||||
|
@ -282,3 +290,40 @@ msgstr "{{ data }} hat dich erwähnt."
|
||||||
|
|
||||||
msgid "Your comment"
|
msgid "Your comment"
|
||||||
msgstr "Dein Kommentar"
|
msgstr "Dein Kommentar"
|
||||||
|
|
||||||
|
msgid "Unknown error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Invalid name"
|
||||||
|
msgstr "Nutzername oder Passwort ungültig"
|
||||||
|
|
||||||
|
msgid "A blog with the same name already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Your comment can't be empty"
|
||||||
|
msgstr "Dein Kommentar"
|
||||||
|
|
||||||
|
msgid "A post with the same title already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "We need an email or a username to identify you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Your password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Passwords are not matching"
|
||||||
|
msgstr "Passwort Wiederholung"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Username can't be empty"
|
||||||
|
msgstr "Nutzername oder E-Mail"
|
||||||
|
|
||||||
|
msgid "Invalid email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
33
po/en.po
33
po/en.po
|
@ -288,3 +288,36 @@ msgstr ""
|
||||||
|
|
||||||
msgid "Your comment"
|
msgid "Your comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Unknown error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Invalid name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "A blog with the same name already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Your comment can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "A post with the same title already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "We need an email or a username to identify you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Your password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Passwords are not matching"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Username can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Invalid email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
37
po/fr.po
37
po/fr.po
|
@ -291,3 +291,40 @@ msgstr ""
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Your comment"
|
msgid "Your comment"
|
||||||
msgstr "Envoyer le commentaire"
|
msgstr "Envoyer le commentaire"
|
||||||
|
|
||||||
|
msgid "Unknown error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Invalid name"
|
||||||
|
msgstr "Nom d'utilisateur ou mot de passe invalide"
|
||||||
|
|
||||||
|
msgid "A blog with the same name already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Your comment can't be empty"
|
||||||
|
msgstr "Envoyer le commentaire"
|
||||||
|
|
||||||
|
msgid "A post with the same title already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "We need an email or a username to identify you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Your password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Passwords are not matching"
|
||||||
|
msgstr "Confirmation du mot de passe"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Username can't be empty"
|
||||||
|
msgstr "Nom d'utilisateur ou email"
|
||||||
|
|
||||||
|
msgid "Invalid email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
37
po/pl.po
37
po/pl.po
|
@ -295,5 +295,42 @@ msgstr "{{ data }} wspomniał o Tobie."
|
||||||
msgid "Your comment"
|
msgid "Your comment"
|
||||||
msgstr "Twój komentarz"
|
msgstr "Twój komentarz"
|
||||||
|
|
||||||
|
msgid "Unknown error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Invalid name"
|
||||||
|
msgstr "Nieprawidłowa nazwa użytkownika lub hasło"
|
||||||
|
|
||||||
|
msgid "A blog with the same name already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Your comment can't be empty"
|
||||||
|
msgstr "Twój komentarz"
|
||||||
|
|
||||||
|
msgid "A post with the same title already exists."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "We need an email or a username to identify you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Your password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Passwords are not matching"
|
||||||
|
msgstr "Potwierdzenie hasła"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
msgid "Username can't be empty"
|
||||||
|
msgstr "Nazwa użytkownika lub adres e-mail"
|
||||||
|
|
||||||
|
msgid "Invalid email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
msgid "Password should be at least 8 characters long"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "Logowanie"
|
#~ msgid "Logowanie"
|
||||||
#~ msgstr "Zaloguj się"
|
#~ msgstr "Zaloguj się"
|
||||||
|
|
|
@ -8,7 +8,7 @@ use serde_json;
|
||||||
use std::{collections::HashMap, borrow::Cow};
|
use std::{collections::HashMap, borrow::Cow};
|
||||||
use validator::{Validate, ValidationError, ValidationErrors};
|
use validator::{Validate, ValidationError, ValidationErrors};
|
||||||
|
|
||||||
use plume_common::activity_pub::ActivityStream;
|
use plume_common::activity_pub::{ActivityStream, ApRequest};
|
||||||
use plume_common::utils;
|
use plume_common::utils;
|
||||||
use plume_models::{
|
use plume_models::{
|
||||||
blog_authors::*,
|
blog_authors::*,
|
||||||
|
@ -33,8 +33,8 @@ fn details(name: String, conn: DbConn, user: Option<User>) -> Template {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/~/<name>", format = "application/activity+json", rank = 1)]
|
#[get("/~/<name>", rank = 1)]
|
||||||
fn activity_details(name: String, conn: DbConn) -> ActivityStream<CustomGroup> {
|
fn activity_details(name: String, conn: DbConn, _ap: ApRequest) -> ActivityStream<CustomGroup> {
|
||||||
let blog = Blog::find_local(&*conn, name).unwrap();
|
let blog = Blog::find_local(&*conn, name).unwrap();
|
||||||
ActivityStream::new(blog.into_activity(&*conn))
|
ActivityStream::new(blog.into_activity(&*conn))
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ use serde_json;
|
||||||
use std::{collections::HashMap, borrow::Cow};
|
use std::{collections::HashMap, borrow::Cow};
|
||||||
use validator::{Validate, ValidationError, ValidationErrors};
|
use validator::{Validate, ValidationError, ValidationErrors};
|
||||||
|
|
||||||
use plume_common::activity_pub::{broadcast, ActivityStream};
|
use plume_common::activity_pub::{broadcast, ActivityStream, ApRequest};
|
||||||
use plume_common::utils;
|
use plume_common::utils;
|
||||||
use plume_models::{
|
use plume_models::{
|
||||||
blogs::*,
|
blogs::*,
|
||||||
|
@ -55,8 +55,8 @@ fn details_response(blog: String, slug: String, conn: DbConn, user: Option<User>
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/~/<blog>/<slug>", rank = 3, format = "application/activity+json")]
|
#[get("/~/<blog>/<slug>", rank = 3)]
|
||||||
fn activity_details(blog: String, slug: String, conn: DbConn) -> ActivityStream<Article> {
|
fn activity_details(blog: String, slug: String, conn: DbConn, _ap: ApRequest) -> ActivityStream<Article> {
|
||||||
let blog = Blog::find_by_fqn(&*conn, blog).unwrap();
|
let blog = Blog::find_by_fqn(&*conn, blog).unwrap();
|
||||||
let post = Post::find_by_slug(&*conn, slug, blog.id).unwrap();
|
let post = Post::find_by_slug(&*conn, slug, blog.id).unwrap();
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ use serde_json;
|
||||||
use validator::{Validate, ValidationError};
|
use validator::{Validate, ValidationError};
|
||||||
|
|
||||||
use plume_common::activity_pub::{
|
use plume_common::activity_pub::{
|
||||||
ActivityStream, broadcast, Id, IntoId,
|
ActivityStream, broadcast, Id, IntoId, ApRequest,
|
||||||
inbox::{Notify}
|
inbox::{Notify}
|
||||||
};
|
};
|
||||||
use plume_common::utils;
|
use plume_common::utils;
|
||||||
|
@ -112,8 +112,8 @@ fn followers(name: String, conn: DbConn, account: Option<User>) -> Template {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/@/<name>", format = "application/activity+json", rank = 1)]
|
#[get("/@/<name>", rank = 1)]
|
||||||
fn activity_details(name: String, conn: DbConn) -> ActivityStream<CustomPerson> {
|
fn activity_details(name: String, conn: DbConn, _ap: ApRequest) -> ActivityStream<CustomPerson> {
|
||||||
let user = User::find_local(&*conn, name).unwrap();
|
let user = User::find_local(&*conn, name).unwrap();
|
||||||
ActivityStream::new(user.into_activity(&*conn))
|
ActivityStream::new(user.into_activity(&*conn))
|
||||||
}
|
}
|
||||||
|
@ -222,8 +222,8 @@ fn inbox(name: String, conn: DbConn, data: String) -> String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/@/<name>/followers", format = "application/activity+json")]
|
#[get("/@/<name>/followers")]
|
||||||
fn ap_followers(name: String, conn: DbConn) -> ActivityStream<OrderedCollection> {
|
fn ap_followers(name: String, conn: DbConn, _ap: ApRequest) -> ActivityStream<OrderedCollection> {
|
||||||
let user = User::find_local(&*conn, name).unwrap();
|
let user = User::find_local(&*conn, name).unwrap();
|
||||||
let followers = user.get_followers(&*conn).into_iter().map(|f| Id::new(f.ap_url)).collect::<Vec<Id>>();
|
let followers = user.get_followers(&*conn).into_iter().map(|f| Id::new(f.ap_url)).collect::<Vec<Id>>();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue