aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes')
-rw-r--r--server/src/routes/api/mod.rs5
-rw-r--r--server/src/routes/mod.rs9
-rw-r--r--server/src/routes/stream.rs29
-rw-r--r--server/src/routes/ui/account/admin.rs4
-rw-r--r--server/src/routes/ui/error.rs7
5 files changed, 30 insertions, 24 deletions
diff --git a/server/src/routes/api/mod.rs b/server/src/routes/api/mod.rs
index e74b134..cc87525 100644
--- a/server/src/routes/api/mod.rs
+++ b/server/src/routes/api/mod.rs
@@ -4,8 +4,6 @@
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
-use std::ops::Deref;
-
use super::ui::{
account::{login_logic, LoginForm},
error::MyResult,
@@ -22,6 +20,7 @@ use rocket::{
Request, State,
};
use serde_json::{json, Value};
+use std::ops::Deref;
#[get("/api")]
pub fn r_api_root() -> Redirect {
@@ -33,7 +32,7 @@ pub fn r_api_version() -> &'static str {
"2"
}
-#[post("/api/account/login", data = "<data>")]
+#[post("/api/create_session", data = "<data>")]
pub fn r_api_account_login(database: &State<Database>, data: Json<LoginForm>) -> MyResult<Value> {
let token = login_logic(database, &data.username, &data.password)?;
Ok(json!(token))
diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs
index be4d2cb..42eae1b 100644
--- a/server/src/routes/mod.rs
+++ b/server/src/routes/mod.rs
@@ -3,7 +3,7 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
-use crate::{database::Database, routes::ui::error::MyResult, CONF};
+use crate::{database::Database, federation::Federation, routes::ui::error::MyResult, CONF};
use api::{r_api_account_login, r_api_root, r_api_version};
use base64::Engine;
use jellyremuxer::RemuxerContext;
@@ -45,7 +45,11 @@ macro_rules! uri {
};
}
-pub fn build_rocket(remuxer: RemuxerContext, database: Database) -> Rocket<Build> {
+pub fn build_rocket(
+ remuxer: RemuxerContext,
+ database: Database,
+ federation: Federation,
+) -> Rocket<Build> {
rocket::build()
.configure(Config {
secret_key: SecretKey::derive_from(
@@ -61,6 +65,7 @@ pub fn build_rocket(remuxer: RemuxerContext, database: Database) -> Rocket<Build
})
.manage(remuxer)
.manage(database)
+ .manage(federation)
.attach(AdHoc::on_response("set server header", |_req, res| {
res.set_header(Header::new("server", "jellything"));
Box::pin(async {})
diff --git a/server/src/routes/stream.rs b/server/src/routes/stream.rs
index 1277646..ee7880c 100644
--- a/server/src/routes/stream.rs
+++ b/server/src/routes/stream.rs
@@ -4,7 +4,7 @@
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
use super::ui::{account::session::Session, error::MyError};
-use crate::{database::Database, CONF};
+use crate::{database::Database, federation::Federation, CONF};
use anyhow::{anyhow, Result};
use jellycommon::MediaSource;
use jellyremuxer::RemuxerContext;
@@ -30,6 +30,7 @@ pub async fn r_stream(
webm: Option<bool>,
tracks: String,
remuxer: &State<RemuxerContext>,
+ federation: &State<Federation>,
db: &State<Database>,
range: Option<RequestRange>,
) -> Result<Either<StreamResponse, Redirect>, MyError> {
@@ -47,27 +48,21 @@ pub async fn r_stream(
let source_tracks = match source {
MediaSource::Local { tracks } => tracks,
MediaSource::Remote { host, remote_id } => {
- let (username, password, tls) = CONF
+ let (username, password, _) = CONF
.remote_credentials
.get(&host)
.ok_or(anyhow!("no credentials on the server-side"))?;
- let instance = jellyclient::Instance { host, tls: *tls };
- let session = jellyclient::login(
- &instance,
- username.to_owned(),
- password.to_owned(),
- Duration::from_secs(60),
- )
- .await?;
+ let instance = federation.get_instance(&host)?.to_owned();
+ let session = instance
+ .login(
+ username.to_owned(),
+ password.to_owned(),
+ Duration::from_secs(60),
+ )
+ .await?;
- let uri = jellyclient::stream(
- &instance,
- &session,
- &remote_id,
- &tracks,
- webm.unwrap_or(false),
- );
+ let uri = session.stream(&remote_id, &tracks, webm.unwrap_or(false));
return Ok(Either::Right(Redirect::found(uri)));
}
};
diff --git a/server/src/routes/ui/account/admin.rs b/server/src/routes/ui/account/admin.rs
index 7124f4a..d0ad433 100644
--- a/server/src/routes/ui/account/admin.rs
+++ b/server/src/routes/ui/account/admin.rs
@@ -5,6 +5,7 @@
*/
use crate::{
database::Database,
+ federation::Federation,
import::import,
routes::ui::{
account::session::Session,
@@ -135,11 +136,12 @@ pub fn r_account_admin_remove_invite(
pub async fn r_account_admin_import(
session: Session,
database: &State<Database>,
+ federation: &State<Federation>,
) -> MyResult<DynLayoutPage<'static>> {
if !session.user.admin {
Err(anyhow!("you not admin"))?
}
- let r = import(&database).await;
+ let r = import(&database, &federation).await;
admin_dashboard(
&database,
Some(r.map_err(|e| e.into()).map(|_| "Import successful".into())),
diff --git a/server/src/routes/ui/error.rs b/server/src/routes/ui/error.rs
index 190650f..b538a06 100644
--- a/server/src/routes/ui/error.rs
+++ b/server/src/routes/ui/error.rs
@@ -36,7 +36,6 @@ pub fn r_api_catch<'a>(status: Status, _request: &Request) -> Value {
pub type MyResult<T> = Result<T, MyError>;
-#[derive(Debug)]
pub struct MyError(pub anyhow::Error);
impl<'r> Responder<'r, 'static> for MyError {
@@ -61,6 +60,12 @@ impl<'r> Responder<'r, 'static> for MyError {
}
}
+impl std::fmt::Debug for MyError {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.write_fmt(format_args!("{:?}", self.0))
+ }
+}
+
impl Display for MyError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
self.0.fmt(f)