Compare commits

..

8 Commits

Author SHA1 Message Date
2f36ba30f5 tsk-71: Version bump
Some checks failed
Rust Build / Clippy (pull_request) Successful in 40s
Rust Build / build (pull_request) Successful in 36s
Rust Build / Check (pull_request) Successful in 58s
Rust Build / Rustfmt (pull_request) Failing after 52s
Rust Build / Test Suite (pull_request) Successful in 36s
2025-10-18 22:08:07 -04:00
56205fc0d5 tsk-71: Removed underscore from method 2025-10-18 22:07:52 -04:00
380d28a86e tsk-71: Removed default function 2025-10-18 22:06:38 -04:00
7f4adbdb9d tsk-71: Added expiration check in LoginResult 2025-10-18 22:05:54 -04:00
194cd9e622 tsk-71: Removed function
All checks were successful
Rust Build / Rustfmt (pull_request) Successful in 41s
Rust Build / Test Suite (pull_request) Successful in 43s
Rust Build / Clippy (pull_request) Successful in 43s
Rust Build / build (pull_request) Successful in 42s
Rust Build / Check (pull_request) Successful in 51s
2025-10-18 22:02:32 -04:00
25d2e38133 tsk-71: Added methods for token expiration
All checks were successful
Rust Build / Test Suite (pull_request) Successful in 53s
Rust Build / Rustfmt (pull_request) Successful in 39s
Rust Build / Clippy (pull_request) Successful in 46s
Rust Build / build (pull_request) Successful in 38s
Rust Build / Check (pull_request) Successful in 38s
2025-10-18 21:56:24 -04:00
6851fdfdde tsk-71: Updated tag release triggering 2025-10-18 21:49:38 -04:00
79758b2631 tsk-71: Simplify bearer_token() method 2025-10-18 21:49:18 -04:00
12 changed files with 71 additions and 119 deletions

View File

@@ -4,6 +4,7 @@ on:
push: push:
branches: branches:
- main - main
- next-v0.8
jobs: jobs:
release: release:

View File

@@ -7,6 +7,7 @@ on:
pull_request: pull_request:
branches: branches:
- main - main
- next-v0.8
jobs: jobs:
check: check:
@@ -60,3 +61,5 @@ jobs:
with: with:
toolchain: 1.90.0 toolchain: 1.90.0
- run: cargo build - run: cargo build

53
Cargo.lock generated
View File

@@ -31,9 +31,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "2.10.0" version = "2.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
[[package]] [[package]]
name = "bumpalo" name = "bumpalo"
@@ -53,9 +53,9 @@ dependencies = [
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
version = "1.0.4" version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
[[package]] [[package]]
name = "crc32fast" name = "crc32fast"
@@ -131,14 +131,14 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.3.4" version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"libc", "libc",
"r-efi", "r-efi",
"wasip2", "wasi",
] ]
[[package]] [[package]]
@@ -149,7 +149,7 @@ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
[[package]] [[package]]
name = "icarus_models" name = "icarus_models"
version = "0.8.3" version = "0.7.3"
dependencies = [ dependencies = [
"josekit", "josekit",
"rand", "rand",
@@ -163,9 +163,9 @@ dependencies = [
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.12.0" version = "2.11.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown",
@@ -254,9 +254,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]] [[package]]
name = "openssl" name = "openssl"
version = "0.10.74" version = "0.10.73"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cfg-if", "cfg-if",
@@ -280,9 +280,9 @@ dependencies = [
[[package]] [[package]]
name = "openssl-sys" name = "openssl-sys"
version = "0.9.110" version = "0.9.109"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",
@@ -366,9 +366,9 @@ dependencies = [
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.12.2" version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@@ -378,9 +378,9 @@ dependencies = [
[[package]] [[package]]
name = "regex-automata" name = "regex-automata"
version = "0.4.13" version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
@@ -389,9 +389,9 @@ dependencies = [
[[package]] [[package]]
name = "regex-syntax" name = "regex-syntax"
version = "0.8.8" version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298"
[[package]] [[package]]
name = "rustix" name = "rustix"
@@ -476,9 +476,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.107" version = "2.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -597,6 +597,15 @@ version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
[[package]]
name = "wasi"
version = "0.14.7+wasi-0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
dependencies = [
"wasip2",
]
[[package]] [[package]]
name = "wasip2" name = "wasip2"
version = "1.0.1+wasi-0.2.4" version = "1.0.1+wasi-0.2.4"

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "icarus_models" name = "icarus_models"
version = "0.8.3" version = "0.7.3"
edition = "2024" edition = "2024"
rust-version = "1.90" rust-version = "1.90"
description = "models used for the icarus project" description = "models used for the icarus project"

View File

@@ -1,3 +1,2 @@
A library containing commonly used structs, functions, enums, constants and other code A library containing commonly used models and functions that is used throughout
that is used throughout the icarus projects. Code from this library serves as the model icarus projects. This reduces the amount of duplicated code without a benefit.
for other projects in the icarus project.

View File

@@ -12,9 +12,3 @@ pub mod file_extensions {
pub const PNGEXTENSION: &str = ".png"; pub const PNGEXTENSION: &str = ".png";
} }
} }
pub mod error {
pub const DIRECTORY_NOT_INITIALIZED: &str = "Directory has not been initialized";
pub const FILENAME_NOT_INITIALIZED: &str = "Filename has not bee initialized";
pub const LAST_CHARACTER_IN_DIRECTORY: &str = "Could not access last character of directory";
}

View File

@@ -1,10 +1,7 @@
use std::io::Write; use std::io::Write;
use rand::Rng;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
const FILENAME_LENGTH: i32 = 16;
#[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)] #[derive(Clone, Debug, Default, Deserialize, Serialize, utoipa::ToSchema)]
pub struct CoverArt { pub struct CoverArt {
pub id: uuid::Uuid, pub id: uuid::Uuid,
@@ -68,56 +65,27 @@ impl CoverArt {
/// Gets the path of the CoverArt /// Gets the path of the CoverArt
pub fn get_path(&self) -> Result<String, std::io::Error> { pub fn get_path(&self) -> Result<String, std::io::Error> {
if self.directory.is_empty() { if self.directory.is_empty() {
return Err(std::io::Error::other( return Err(std::io::Error::other("Directory has not been initialized"));
crate::constants::error::DIRECTORY_NOT_INITIALIZED,
));
} else if self.filename.is_empty() { } else if self.filename.is_empty() {
return Err(std::io::Error::other( return Err(std::io::Error::other("Filename has not bee initialized"));
crate::constants::error::FILENAME_NOT_INITIALIZED,
));
} }
let directory = &self.directory; let directory = &self.directory;
let last_index = directory.len() - 1; let last_index = directory.len() - 1;
match crate::util::concatenate_path(directory, &self.filename, last_index) { if let Some(character) = directory.chars().nth(last_index) {
Ok(path) => Ok(path), let buffer = if character != '/' {
Err(err) => Err(err), directory.clone() + "/"
} } else {
} directory.clone()
}
/// Generates filename for a CoverArt
pub fn generate_filename(typ: crate::types::CoverArtTypes, randomize: bool) -> String {
let file_extension = match typ {
crate::types::CoverArtTypes::PngExtension => {
String::from(crate::constants::file_extensions::image::PNGEXTENSION)
}
crate::types::CoverArtTypes::JpegExtension => {
String::from(crate::constants::file_extensions::image::JPEGEXTENSION)
}
crate::types::CoverArtTypes::JpgExtension => {
String::from(crate::constants::file_extensions::image::JPGEXTENSION)
}
}; };
if randomize { Ok(buffer + &self.filename.clone())
let mut filename: String = String::from("coverart-");
let some_chars: String = String::from("abcdefghij0123456789");
let some_chars_length = some_chars.len();
let mut rng = rand::rng();
for _ in 0..FILENAME_LENGTH {
let index = rng.random_range(0..=some_chars_length);
let rando_char = some_chars.chars().nth(index);
if let Some(c) = rando_char {
filename.push(c);
}
}
filename + &file_extension
} else { } else {
"coverart-output".to_string() + &file_extension Err(std::io::Error::other(
"Could not access last character of directory",
))
}
} }
} }

View File

@@ -7,7 +7,6 @@ pub mod song;
pub mod token; pub mod token;
pub mod types; pub mod types;
pub mod user; pub mod user;
pub mod util;
pub mod init { pub mod init {
pub fn is_id_valid(num: &i32) -> bool { pub fn is_id_valid(num: &i32) -> bool {

View File

@@ -12,6 +12,7 @@ pub struct LoginResult {
pub expiration: i64, pub expiration: i64,
} }
impl LoginResult { impl LoginResult {
pub fn to_json(&self) -> Result<String, serde_json::Error> { pub fn to_json(&self) -> Result<String, serde_json::Error> {
serde_json::to_string_pretty(&self) serde_json::to_string_pretty(&self)

View File

@@ -69,24 +69,28 @@ impl Song {
} }
} }
/// Gets the path of a Song
pub fn song_path(&self) -> Result<String, std::io::Error> { pub fn song_path(&self) -> Result<String, std::io::Error> {
if self.directory.is_empty() { if self.directory.is_empty() {
return Err(std::io::Error::other( return Err(std::io::Error::other("Directory has not been initialized"));
crate::constants::error::DIRECTORY_NOT_INITIALIZED,
));
} else if self.filename.is_empty() { } else if self.filename.is_empty() {
return Err(std::io::Error::other( return Err(std::io::Error::other("Filename has not bee initialized"));
crate::constants::error::FILENAME_NOT_INITIALIZED,
));
} }
let directory = &self.directory; let directory = &self.directory;
let last_index = directory.len() - 1; let last_index = directory.len() - 1;
match crate::util::concatenate_path(directory, &self.filename, last_index) { if let Some(character) = directory.chars().nth(last_index) {
Ok(path) => Ok(path), let buffer: String = if character != '/' {
Err(err) => Err(err), directory.clone() + "/"
} else {
directory.clone()
};
Ok(buffer + &self.filename.clone())
} else {
Err(std::io::Error::other(
"Could not access last character of directory",
))
} }
} }
@@ -125,12 +129,14 @@ impl Song {
} }
} }
/// Generates a filename. In order to save a song to the filesystem /// Generates a filename. In order to save a song to the filesystem, the song must have
/// a directory and filename
pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String { pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String {
let file_extension = match typ { let file_extension = match typ {
types::MusicTypes::DefaultMusicExtension => { types::MusicTypes::DefaultMusicExtension => {
String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION) String::from(constants::file_extensions::audio::DEFAULTMUSICEXTENSION)
} }
types::MusicTypes::WavExtension => { types::MusicTypes::WavExtension => {
String::from(constants::file_extensions::audio::WAVEXTENSION) String::from(constants::file_extensions::audio::WAVEXTENSION)
} }
@@ -143,13 +149,12 @@ pub fn generate_filename(typ: types::MusicTypes, randomize: bool) -> String {
}; };
if randomize { if randomize {
let mut filename: String = String::from("track-"); let mut filename: String = String::new();
let some_chars: String = String::from("abcdefghij0123456789"); let some_chars: String = String::from("abcdefghij0123456789");
let some_chars_length = some_chars.len();
let mut rng = rand::rng(); let mut rng = rand::rng();
for _ in 0..FILENAME_LENGTH { for _ in 0..FILENAME_LENGTH {
let index = rng.random_range(0..=some_chars_length); let index = rng.random_range(0..=19);
let rando_char = some_chars.chars().nth(index); let rando_char = some_chars.chars().nth(index);
if let Some(c) = rando_char { if let Some(c) = rando_char {

View File

@@ -1,14 +1,6 @@
#[derive(Debug)]
pub enum MusicTypes { pub enum MusicTypes {
DefaultMusicExtension, DefaultMusicExtension,
WavExtension, WavExtension,
FlacExtension, FlacExtension,
MPThreeExtension, MPThreeExtension,
} }
#[derive(Debug)]
pub enum CoverArtTypes {
PngExtension,
JpegExtension,
JpgExtension,
}

View File

@@ -1,19 +0,0 @@
pub fn concatenate_path(
directory: &str,
filename: &str,
last_index: usize,
) -> Result<String, std::io::Error> {
if let Some(character) = directory.chars().nth(last_index) {
let buffer: String = if character != '/' {
format!("{directory}/")
} else {
String::from(directory)
};
Ok(format!("{buffer}{filename}"))
} else {
Err(std::io::Error::other(
crate::constants::error::LAST_CHARACTER_IN_DIRECTORY,
))
}
}