aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-20 12:13:20 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-20 12:13:20 +0100
commit730353601db9818d148c85bfe1ecb119abaab7cc (patch)
tree0e3deafdac53ebc612a04b3631e5cf286c825291
parent3086e768ab4e64e47a50d7f6a71a815c4f110bd3 (diff)
downloadjellything-730353601db9818d148c85bfe1ecb119abaab7cc.tar
jellything-730353601db9818d148c85bfe1ecb119abaab7cc.tar.bz2
jellything-730353601db9818d148c85bfe1ecb119abaab7cc.tar.zst
cleanup yesterdays mess
-rw-r--r--base/src/database.rs4
-rw-r--r--common/src/lib.rs2
-rw-r--r--server/src/routes/ui/admin/log.rs2
-rw-r--r--server/src/routes/ui/assets.rs1
-rw-r--r--server/src/routes/ui/error.rs16
-rw-r--r--server/src/routes/ui/node.rs1
-rw-r--r--server/src/routes/userdata.rs17
7 files changed, 28 insertions, 15 deletions
diff --git a/base/src/database.rs b/base/src/database.rs
index 2a57937..f6f21bd 100644
--- a/base/src/database.rs
+++ b/base/src/database.rs
@@ -9,6 +9,7 @@ use jellycommon::{
Node,
};
use log::info;
+use serde::{Deserialize, Serialize};
use std::{borrow::Borrow, ops::Deref, path::Path};
pub use redb::*;
@@ -32,6 +33,7 @@ impl DataAcid {
let r = Self { inner: db };
{
+ // this creates all tables such that read operations on them do not fail.
let txn = r.begin_write()?;
drop(txn.open_table(T_INVITE)?);
drop(txn.open_table(T_USER)?);
@@ -62,7 +64,7 @@ impl<'a, 'b, 'c, Key, Value, KeyRef> TableExt<Key, KeyRef, Value>
for TableDefinition<'a, Key, Ser<Value>>
where
Key: Borrow<<Key as RedbValue>::SelfType<'b>> + redb::RedbKey,
- Value: bincode::Encode + bincode::Decode + std::fmt::Debug,
+ Value: Encode + Decode + std::fmt::Debug + Serialize + for<'x> Deserialize<'x>,
KeyRef: Borrow<<Key as redb::RedbValue>::SelfType<'c>>,
{
fn get(self, db: &DataAcid, key: KeyRef) -> anyhow::Result<Option<Value>> {
diff --git a/common/src/lib.rs b/common/src/lib.rs
index a58dc48..5387679 100644
--- a/common/src/lib.rs
+++ b/common/src/lib.rs
@@ -47,7 +47,7 @@ pub struct NodePublic {
#[serde(default)] pub children: Vec<String>,
#[serde(default)] pub tagline: Option<String>,
#[serde(default)] pub description: Option<String>,
- #[serde(default)] pub release_date: Option<i64>,
+ #[serde(default)] pub release_date: Option<i64>, // in unix millis
#[serde(default)] pub index: Option<usize>,
#[serde(default)] pub media: Option<MediaInfo>,
#[serde(default)] pub ratings: BTreeMap<Rating, f64>,
diff --git a/server/src/routes/ui/admin/log.rs b/server/src/routes/ui/admin/log.rs
index de91acd..9e57bab 100644
--- a/server/src/routes/ui/admin/log.rs
+++ b/server/src/routes/ui/admin/log.rs
@@ -20,7 +20,7 @@ use std::{
sync::{LazyLock, RwLock},
};
-const MAX_LOG_LEN: usize = 4000;
+const MAX_LOG_LEN: usize = 4096;
static LOGGER: LazyLock<Log> = LazyLock::new(Log::new);
diff --git a/server/src/routes/ui/assets.rs b/server/src/routes/ui/assets.rs
index b1a13da..05ddc7c 100644
--- a/server/src/routes/ui/assets.rs
+++ b/server/src/routes/ui/assets.rs
@@ -34,6 +34,7 @@ pub async fn r_item_assets(
.get(&db, id)?
.only_if_permitted(&session.user.permissions)
.ok_or(anyhow!("node does not exist"))?;
+
let mut asset = match role {
AssetRole::Backdrop => node.private.backdrop,
AssetRole::Poster => node.private.poster,
diff --git a/server/src/routes/ui/error.rs b/server/src/routes/ui/error.rs
index 98c6b7f..c0685e1 100644
--- a/server/src/routes/ui/error.rs
+++ b/server/src/routes/ui/error.rs
@@ -103,36 +103,38 @@ impl From<serde_json::Error> for MyError {
}
impl From<jellybase::database::CommitError> for MyError {
fn from(err: jellybase::database::CommitError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!("database oopsie during commit: {err}"))
}
}
impl From<jellybase::database::CompactionError> for MyError {
fn from(err: jellybase::database::CompactionError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!("database oopsie during compaction: {err}"))
}
}
impl From<jellybase::database::DatabaseError> for MyError {
fn from(err: jellybase::database::DatabaseError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!("generic database oopsie: {err}"))
}
}
impl From<jellybase::database::SavepointError> for MyError {
fn from(err: jellybase::database::SavepointError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!(
+ "database oopsie during savepointing: {err}"
+ ))
}
}
impl From<jellybase::database::StorageError> for MyError {
fn from(err: jellybase::database::StorageError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!("database oopsie, storage error: {err}"))
}
}
impl From<jellybase::database::TableError> for MyError {
fn from(err: jellybase::database::TableError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!("database oopsie, table error: {err}"))
}
}
impl From<jellybase::database::TransactionError> for MyError {
fn from(err: jellybase::database::TransactionError) -> Self {
- MyError(anyhow::anyhow!("{err}"))
+ MyError(anyhow::anyhow!("database oopsie during transaction: {err}"))
}
}
diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs
index c055953..4b3f861 100644
--- a/server/src/routes/ui/node.rs
+++ b/server/src/routes/ui/node.rs
@@ -255,6 +255,7 @@ impl DatabaseNodeUserDataExt for DataAcid {
id.to_owned(),
T_NODE
.get(self, id)?
+ .only_if_permitted(&session.user.permissions)
.ok_or(anyhow!("node does not exist: {id}"))?
.public,
T_USER_NODE
diff --git a/server/src/routes/userdata.rs b/server/src/routes/userdata.rs
index 8803bde..c113bb6 100644
--- a/server/src/routes/userdata.rs
+++ b/server/src/routes/userdata.rs
@@ -6,7 +6,10 @@
use super::ui::{account::session::Session, error::MyResult, node::DatabaseNodeUserDataExt};
use crate::routes::ui::node::rocket_uri_macro_r_library_node;
use anyhow::anyhow;
-use jellybase::database::{DataAcid, ReadableTable, Ser, TableExt, T_NODE, T_USER_NODE};
+use jellybase::{
+ database::{DataAcid, ReadableTable, Ser, TableExt, T_NODE, T_USER_NODE},
+ permission::NodePermissionExt,
+};
use jellycommon::user::{NodeUserData, WatchedState};
use rocket::{
get, post, response::Redirect, serde::json::Json, FromFormField, State, UriDisplayQuery,
@@ -36,9 +39,10 @@ pub async fn r_player_watched(
id: &str,
state: UrlWatchedState,
) -> MyResult<Redirect> {
- T_NODE.get(db, id)?.ok_or(anyhow!("node does not exist"))?;
-
- // let key = (session.user.name.clone(), id.to_owned());
+ T_NODE
+ .get(db, id)?
+ .only_if_permitted(&session.user.permissions)
+ .ok_or(anyhow!("node does not exist"))?;
let txn = db.begin_write()?;
let mut user_nodes = txn.open_table(T_USER_NODE)?;
@@ -68,7 +72,10 @@ pub async fn r_player_progress(
id: &str,
t: f64,
) -> MyResult<()> {
- T_NODE.get(db, id)?.ok_or(anyhow!("node does not exist"))?;
+ T_NODE
+ .get(db, id)?
+ .only_if_permitted(&session.user.permissions)
+ .ok_or(anyhow!("node does not exist"))?;
let txn = db.begin_write()?;
let mut user_nodes = txn.open_table(T_USER_NODE)?;