diff --git a/Cargo.toml b/Cargo.toml index 2fe9797..1aa45a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "service" -version = "0.2.7" +version = "0.2.8" edition = "2021" authors = ["Ben Sherriff "] repository = "https://github.com/bensherriff/siren" @@ -12,46 +12,20 @@ name = "siren" path = "src/lib.rs" [dependencies] -actix-web = "4.5.1" -actix-cors = "0.7.0" -actix-web-httpauth = "0.8.1" -chrono = { version = "0.4.37", features = ["serde"] } dotenv = "0.15.0" -serde_json = "1.0.115" -log = "0.4.21" -env_logger = "0.11.3" +log = "0.4.22" +env_logger = "0.11.5" +serde = { version = "1.0.209", features = ["derive"] } +serde_json = "1.0.127" +serenity = { version = "0.11.6", default-features = false, features = ["client", "gateway", "rustls_backend", "model", "voice", "cache", "framework", "standard_framework"] } +songbird = { version = "0.3.2", features = ["builtin-queue", "yt-dlp"] } +diesel = { version = "2.1.5", default-features = false, features = ["postgres", "chrono", "r2d2", "32-column-tables", "serde_json", "with-deprecated"] } diesel_migrations = { version = "2.1.0", features = ["postgres"] } r2d2 = "0.8.10" -lazy_static = "1.4.0" -uuid = { version = "1.8.0", features = ["serde", "v4"] } -argon2 = "0.5.3" -redis = { version = "0.23.3", features = ["tokio-comp", "connection-manager", "r2d2"] } -rust-s3 = "0.33.0" -actix-multipart = "0.6.1" +chrono = { version = "0.4.38", features = ["serde"] } +reqwest = { version = "0.12.7", default-features = false, features = ["json"] } +lazy_static = "1.5.0" +uuid = { version = "1.10.0", features = ["serde", "v4"] } +redis = { version = "0.26.1", features = ["tokio-comp", "connection-manager", "r2d2"] } rand = "0.8.5" -rand_chacha = "0.3.1" -jsonwebtoken = "9.3.0" -tokio = { version = "1.37.0", features = ["macros", "rt-multi-thread"] } - -[dependencies.serde] -version = "1.0.197" -features = ["derive"] - -[dependencies.reqwest] -version = "0.11.22" -default-features = false -features = ["json", "rustls-tls"] - -[dependencies.diesel] -version = "2.1.5" -default-features = false -features = ["postgres", "chrono", "32-column-tables", "serde_json", "r2d2", "with-deprecated"] - -[dependencies.serenity] -version = "0.11.6" -default-features = false -features = ["client", "gateway", "rustls_backend", "model", "voice", "cache", "framework", "standard_framework"] - -[dependencies.songbird] -version = "0.3.2" -features = ["builtin-queue", "yt-dlp"] +tokio = { version = "1.40.0", features = ["macros", "rt-multi-thread"] } diff --git a/src/lib.rs b/src/lib.rs index ecde4ea..dcf1d08 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,4 @@ -use actix_web::{ResponseError, HttpResponse}; use diesel::result::Error as DieselError; -use reqwest::StatusCode; use serde::{Serialize, Deserialize}; use std::fmt; @@ -100,33 +98,12 @@ impl From for ServiceError { } } -impl From for ServiceError { - fn from(error: argon2::password_hash::Error) -> ServiceError { - ServiceError::new(500, format!("Unknown argon2 error: {}", error)) - } -} - impl From for ServiceError { fn from(error: redis::RedisError) -> ServiceError { ServiceError::new(500, format!("Unknown redis error: {}", error)) } } -impl From for ServiceError { - fn from(error: s3::error::S3Error) -> ServiceError { - match error { - s3::error::S3Error::Http(code, message) => ServiceError::new(code, message), - _ => ServiceError::new(500, format!("Unknown s3 error: {}", error)), - } - } -} - -impl From for ServiceError { - fn from(error: s3::creds::error::CredentialsError) -> ServiceError { - ServiceError::new(500, format!("Unknown credentials error: {}", error)) - } -} - impl From for ServiceError { fn from(error: uuid::Error) -> ServiceError { ServiceError::new(500, format!("Unknown uuid error: {}", error)) @@ -138,26 +115,3 @@ impl From for ServiceError { ServiceError::new(500, format!("Unknown env error: {}", error)) } } - -impl From for ServiceError { - fn from(error: jsonwebtoken::errors::Error) -> ServiceError { - ServiceError::new(500, format!("Unknown jsonwebtoken error: {}", error)) - } -} - -impl ResponseError for ServiceError { - fn error_response(&self) -> HttpResponse { - let status_code = match StatusCode::from_u16(self.status) { - Ok(status_code) => status_code, - Err(_) => StatusCode::INTERNAL_SERVER_ERROR, - }; - - let error_message = match status_code.as_u16() < 500 { - true => self.message.clone(), - false => "Internal server error".to_string(), - }; - - HttpResponse::build(status_code) - .json(serde_json::json!({ "status": status_code.as_u16(), "message": error_message })) - } -} diff --git a/src/storage/mod.rs b/src/storage/mod.rs index 840f732..b3bfd2e 100644 --- a/src/storage/mod.rs +++ b/src/storage/mod.rs @@ -1,6 +1,5 @@ use diesel::{r2d2::ConnectionManager as DieselConnectionManager, PgConnection}; use redis::{Client as RedisClient, aio::Connection as RedisConnection}; -use s3::{Region, creds::Credentials, Bucket, BucketConfiguration, request::ResponseData}; use siren::ServiceError; use crate::diesel_migrations::MigrationHarness; use lazy_static::lazy_static; @@ -38,37 +37,11 @@ lazy_static! { let url = format!("redis://{}:{}", host, port); RedisClient::open(url).expect("Failed to create redis client") }; - static ref BUCKET: Bucket = { - let url = env::var("MINIO_HOST").unwrap_or("localhost".to_string()); - let port = env::var("MINIO_PORT").unwrap_or("9000".to_string()); - let user = env::var("MINIO_ROOT_USER").expect("MINIO_ROOT_USER is not set"); - let password = env::var("MINIO_ROOT_PASSWORD").expect("MINIO_ROOT_PASSWORD is not set"); - let base_url = format!("http://{}:{}", url, port); - - let region = Region::Custom { - region: "".to_string(), - endpoint: base_url, - }; - - let credentials = Credentials { - access_key: Some(user), - secret_key: Some(password), - security_token: None, - session_token: None, - expiration: None, - }; - - Bucket::new("siren", region.clone(), credentials.clone()) - .expect("Failed to create S3 Bucket") - .with_path_style() - }; } pub async fn init() { lazy_static::initialize(&POOL); lazy_static::initialize(&REDIS); - lazy_static::initialize(&BUCKET); - create_bucket().await; let mut pool: DbConnection = connection().expect("Failed to get db connection"); match pool.run_pending_migrations(MIGRATIONS) { Ok(_) => info!("Database initialized"), @@ -91,43 +64,3 @@ pub async fn redis_async_connection() -> Result { let conn = REDIS.get_async_connection().await?; Ok(conn) } - -async fn create_bucket() { - let url = env::var("MINIO_URL").unwrap_or("localhost".to_string()); - let port = env::var("MINIO_PORT").unwrap_or("9000".to_string()); - let user = env::var("MINIO_ROOT_USER").expect("MINIO_ROOT_USER is not set"); - let password = env::var("MINIO_ROOT_PASSWORD").expect("MINIO_ROOT_PASSWORD is not set"); - let base_url = format!("http://{}:{}", url, port); - - let region = Region::Custom { - region: "".to_string(), - endpoint: base_url, - }; - - let credentials = Credentials { - access_key: Some(user), - secret_key: Some(password), - security_token: None, - session_token: None, - expiration: None, - }; - let _ = - Bucket::create_with_path_style("siren", region, credentials, BucketConfiguration::default()) - .await; -} - -pub async fn upload_file(path: &str, content: &[u8]) -> Result { - let response = BUCKET.put_object(path, content).await?; - Ok(response) -} - -pub async fn get_file(path: &str) -> Result, ServiceError> { - let response = BUCKET.get_object(path).await?; - let bytes = response.bytes(); - Ok(bytes.to_vec()) -} - -pub async fn delete_file(path: &str) -> Result { - let response = BUCKET.delete_object(path).await?; - Ok(response) -}