This commit is contained in:
parent
6051aaa985
commit
389b07e0b6
6 changed files with 32 additions and 19 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -158,7 +158,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "based"
|
name = "based"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://git.hydrar.de/jmarya/based#4e3107ce08aaf6f149880a00707f86f1e94683eb"
|
source = "git+https://git.hydrar.de/jmarya/based#04852f2fbcc301d0c2b4098f613b9450b4474363"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bcrypt 0.16.0",
|
"bcrypt 0.16.0",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
use crate::library::track::Track;
|
use crate::library::track::Track;
|
||||||
use crate::library::Libary;
|
use crate::library::Libary;
|
||||||
use based::auth::User;
|
use based::auth::APIUser;
|
||||||
use based::request::api::{vec_to_api, FallibleApiResponse};
|
use based::request::api::{vec_to_api, FallibleApiResponse};
|
||||||
use based::{check_admin, get_pg};
|
use based::{check_admin, get_pg};
|
||||||
use rocket::{get, State};
|
use rocket::{get, State};
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
#[get("/library/clean")]
|
#[get("/library/clean")]
|
||||||
pub async fn clean_library(lib: &State<Libary>, u: User) -> FallibleApiResponse {
|
pub async fn clean_library(lib: &State<Libary>, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
check_admin!(u);
|
check_admin!(u);
|
||||||
lib.clean_lost_files().await;
|
lib.clean_lost_files().await;
|
||||||
Ok(json!({"ok": 1}))
|
Ok(json!({"ok": 1}))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/library/singles")]
|
#[get("/library/singles")]
|
||||||
pub async fn get_singles_route(u: User) -> FallibleApiResponse {
|
pub async fn get_singles_route(u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
check_admin!(u);
|
check_admin!(u);
|
||||||
let singles: Vec<Track> =
|
let singles: Vec<Track> =
|
||||||
sqlx::query_as("SELECT * FROM track WHERE album IS NULL AND artist IS NOT NULL")
|
sqlx::query_as("SELECT * FROM track WHERE album IS NULL AND artist IS NOT NULL")
|
||||||
|
@ -26,7 +28,8 @@ pub async fn get_singles_route(u: User) -> FallibleApiResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/library/orphans")]
|
#[get("/library/orphans")]
|
||||||
pub async fn get_orphans_route(u: User) -> FallibleApiResponse {
|
pub async fn get_orphans_route(u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
check_admin!(u);
|
check_admin!(u);
|
||||||
let orphans = Track::get_orphans().await;
|
let orphans = Track::get_orphans().await;
|
||||||
Ok(json!(vec_to_api(&orphans).await))
|
Ok(json!(vec_to_api(&orphans).await))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use crate::library::event::Event;
|
use crate::library::event::Event;
|
||||||
use crate::library::event::EventKind;
|
use crate::library::event::EventKind;
|
||||||
use crate::library::track::Track;
|
use crate::library::track::Track;
|
||||||
use based::auth::User;
|
use based::auth::APIUser;
|
||||||
use based::request::api::api_error;
|
use based::request::api::api_error;
|
||||||
use based::request::api::to_uuid;
|
use based::request::api::to_uuid;
|
||||||
use based::request::api::FallibleApiResponse;
|
use based::request::api::FallibleApiResponse;
|
||||||
|
@ -17,7 +17,8 @@ pub struct EventJson {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/report", data = "<report>")]
|
#[post("/report", data = "<report>")]
|
||||||
pub async fn event_report_route(report: Json<EventJson>, u: User) -> FallibleApiResponse {
|
pub async fn event_report_route(report: Json<EventJson>, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
let track = &report.track;
|
let track = &report.track;
|
||||||
Event::create(
|
Event::create(
|
||||||
report.kind.clone(),
|
report.kind.clone(),
|
||||||
|
|
|
@ -2,7 +2,7 @@ use crate::get_pg;
|
||||||
use crate::library::playlist::Playlist;
|
use crate::library::playlist::Playlist;
|
||||||
use crate::library::playlist::Visibility;
|
use crate::library::playlist::Visibility;
|
||||||
use crate::library::track::Track;
|
use crate::library::track::Track;
|
||||||
use based::auth::User;
|
use based::auth::APIUser;
|
||||||
use based::request::api::api_error;
|
use based::request::api::api_error;
|
||||||
use based::request::api::to_uuid;
|
use based::request::api::to_uuid;
|
||||||
use based::request::api::vec_to_api;
|
use based::request::api::vec_to_api;
|
||||||
|
@ -13,7 +13,8 @@ use rocket::serde::json::Json;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
|
||||||
#[get("/playlists")]
|
#[get("/playlists")]
|
||||||
pub async fn playlists_route(u: User) -> FallibleApiResponse {
|
pub async fn playlists_route(u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
let mut playlists = vec![
|
let mut playlists = vec![
|
||||||
json!({"id": "recents", "name": "Recently Played"}),
|
json!({"id": "recents", "name": "Recently Played"}),
|
||||||
json!({"id": "recentlyAdded", "name": "Recently Added"}),
|
json!({"id": "recentlyAdded", "name": "Recently Added"}),
|
||||||
|
@ -37,7 +38,8 @@ pub async fn recently_added_playlist() -> FallibleApiResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/playlist/<id>")]
|
#[get("/playlist/<id>")]
|
||||||
pub async fn playlist_route(id: &str, u: User) -> FallibleApiResponse {
|
pub async fn playlist_route(id: &str, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
if id == "recents" {
|
if id == "recents" {
|
||||||
return Ok(Playlist {
|
return Ok(Playlist {
|
||||||
id: uuid::Uuid::nil(),
|
id: uuid::Uuid::nil(),
|
||||||
|
@ -76,7 +78,8 @@ pub async fn playlist_route(id: &str, u: User) -> FallibleApiResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/playlist/<id>/tracks")]
|
#[get("/playlist/<id>/tracks")]
|
||||||
pub async fn playlist_tracks_route(id: &str, u: User) -> FallibleApiResponse {
|
pub async fn playlist_tracks_route(id: &str, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
if id == "recents" {
|
if id == "recents" {
|
||||||
let tracks = Track::get_latest_of_user(&u).await;
|
let tracks = Track::get_latest_of_user(&u).await;
|
||||||
return Ok(json!(vec_to_api(&tracks).await));
|
return Ok(json!(vec_to_api(&tracks).await));
|
||||||
|
@ -117,7 +120,8 @@ pub struct PlaylistData {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/playlist", data = "<playlist>")]
|
#[post("/playlist", data = "<playlist>")]
|
||||||
pub async fn playlist_add_route(playlist: Json<PlaylistData>, u: User) -> FallibleApiResponse {
|
pub async fn playlist_add_route(playlist: Json<PlaylistData>, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
let playlist = Playlist::create(
|
let playlist = Playlist::create(
|
||||||
u,
|
u,
|
||||||
&playlist
|
&playlist
|
||||||
|
@ -140,8 +144,9 @@ pub async fn playlist_add_route(playlist: Json<PlaylistData>, u: User) -> Fallib
|
||||||
pub async fn playlist_edit_route(
|
pub async fn playlist_edit_route(
|
||||||
id: &str,
|
id: &str,
|
||||||
edit: Json<PlaylistData>,
|
edit: Json<PlaylistData>,
|
||||||
u: User,
|
u: APIUser,
|
||||||
) -> FallibleApiResponse {
|
) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
let playlist = Playlist::get(&to_uuid(id)?)
|
let playlist = Playlist::get(&to_uuid(id)?)
|
||||||
.await
|
.await
|
||||||
.ok_or_else(|| api_error("No playlist with that ID found"))?;
|
.ok_or_else(|| api_error("No playlist with that ID found"))?;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::library::Libary;
|
use crate::library::Libary;
|
||||||
use based::{
|
use based::{
|
||||||
auth::User,
|
auth::APIUser,
|
||||||
check_admin,
|
check_admin,
|
||||||
request::{
|
request::{
|
||||||
api::{api_error, to_uuid, FallibleApiResponse, ToAPI},
|
api::{api_error, to_uuid, FallibleApiResponse, ToAPI},
|
||||||
|
@ -29,8 +29,9 @@ pub async fn track_route(track_id: &str, lib: &State<Libary>) -> FallibleApiResp
|
||||||
pub async fn track_reload_meta_route(
|
pub async fn track_reload_meta_route(
|
||||||
track_id: &str,
|
track_id: &str,
|
||||||
lib: &State<Libary>,
|
lib: &State<Libary>,
|
||||||
u: User,
|
u: APIUser,
|
||||||
) -> FallibleApiResponse {
|
) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
check_admin!(u);
|
check_admin!(u);
|
||||||
lib.reload_metadata(&to_uuid(track_id)?)
|
lib.reload_metadata(&to_uuid(track_id)?)
|
||||||
.await
|
.await
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use based::auth::{Sessions, User, UserRole};
|
use based::auth::{APIUser, Sessions, User, UserRole};
|
||||||
use based::check_admin;
|
use based::check_admin;
|
||||||
use based::request::api::{api_error, vec_to_api, FallibleApiResponse};
|
use based::request::api::{api_error, vec_to_api, FallibleApiResponse};
|
||||||
use rocket::get;
|
use rocket::get;
|
||||||
|
@ -32,7 +32,8 @@ pub struct PasswdData {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/passwd", data = "<passwd>")]
|
#[post("/passwd", data = "<passwd>")]
|
||||||
pub async fn passwd_route(passwd: Json<PasswdData>, u: User) -> FallibleApiResponse {
|
pub async fn passwd_route(passwd: Json<PasswdData>, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
u.passwd(&passwd.old, &passwd.new)
|
u.passwd(&passwd.old, &passwd.new)
|
||||||
.await
|
.await
|
||||||
.map_err(|()| api_error("Password change failed"))?;
|
.map_err(|()| api_error("Password change failed"))?;
|
||||||
|
@ -43,7 +44,8 @@ pub async fn passwd_route(passwd: Json<PasswdData>, u: User) -> FallibleApiRespo
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/users")]
|
#[get("/users")]
|
||||||
pub async fn users_route(u: User) -> FallibleApiResponse {
|
pub async fn users_route(u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
check_admin!(u);
|
check_admin!(u);
|
||||||
|
|
||||||
let users: Vec<_> = vec_to_api(&User::find_all().await).await;
|
let users: Vec<_> = vec_to_api(&User::find_all().await).await;
|
||||||
|
@ -52,7 +54,8 @@ pub async fn users_route(u: User) -> FallibleApiResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[post("/userCreate", data = "<user>")]
|
#[post("/userCreate", data = "<user>")]
|
||||||
pub async fn user_create_route(user: Json<LoginData>, u: User) -> FallibleApiResponse {
|
pub async fn user_create_route(user: Json<LoginData>, u: APIUser) -> FallibleApiResponse {
|
||||||
|
let u = u.0;
|
||||||
check_admin!(u);
|
check_admin!(u);
|
||||||
|
|
||||||
let new_user = User::create(&user.username, &user.password, UserRole::Regular)
|
let new_user = User::create(&user.username, &user.password, UserRole::Regular)
|
||||||
|
|
Loading…
Reference in a new issue