From 37a2329c6c41f20e5b1f166f93db23a447881fa4 Mon Sep 17 00:00:00 2001 From: Andrea Toska Date: Sat, 26 Apr 2025 21:03:07 +0200 Subject: [PATCH] chore: fix unused imports and warnings --- Cargo.lock | 1 + mii/Cargo.toml | 4 +--- mii/src/lib.rs | 8 ++++--- src/account/account.rs | 35 +++++++------------------------ src/data_wrapper.rs | 3 ++- src/dsresponse.rs | 5 +---- src/error.rs | 5 +---- src/graphql/mod.rs | 5 ++--- src/main.rs | 36 ++++++++++++++++++++++++-------- src/nnid/agreements.rs | 4 +--- src/nnid/devices.rs | 1 - src/nnid/mapped_ids.rs | 2 +- src/nnid/oauth/generate_token.rs | 2 +- src/nnid/oauth/mod.rs | 21 ++++--------------- src/nnid/people.rs | 22 +++++++++---------- src/nnid/person_exists.rs | 2 -- src/nnid/provider.rs | 9 +------- src/nnid/support.rs | 4 ++-- src/nnid/timezones.rs | 3 +-- src/xml.rs | 13 ++++-------- 20 files changed, 73 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b4679e1..31fa8ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1828,6 +1828,7 @@ dependencies = [ "base64", "bytemuck", "reqwest", + "tokio", ] [[package]] diff --git a/mii/Cargo.toml b/mii/Cargo.toml index 6c13e74..f865870 100644 --- a/mii/Cargo.toml +++ b/mii/Cargo.toml @@ -7,6 +7,4 @@ edition = "2024" base64 = "0.22.1" bytemuck = { version = "1.21.0", features = ["derive"] } reqwest = "0.12.12" - -[dev-dependencies] -tokio = { version = "1.43.0", features = ["macros"] } \ No newline at end of file +tokio = { version = "1.43.0", features = ["macros"] } diff --git a/mii/src/lib.rs b/mii/src/lib.rs index 9ab1cba..3b01e62 100644 --- a/mii/src/lib.rs +++ b/mii/src/lib.rs @@ -1,6 +1,5 @@ -use std::ops::Index; use std::str::FromStr; -use bytemuck::{from_bytes, try_from_bytes, Pod, Zeroable}; +use bytemuck::{try_from_bytes, Pod, Zeroable}; use base64::Engine; use base64::prelude::BASE64_STANDARD; use reqwest::Url; @@ -73,7 +72,10 @@ pub async fn get_image_tga(data: &str) -> Option>{ #[cfg(test)] mod test{ - #[tokio::test] + use std::fs; +use crate::get_image_png; + +#[tokio::test] async fn test_image_get(){ let image = get_image_png("AAEAQDrPvmeBxJIQ3cL/BYp4iCWDvgAA8FVEAEoATQByAFQAVgAAAGgAZQByAAB/BAApBBpK4xiXEqQMAhgXbAoACClQQkhQTQBFAAAALQBTAHcAaQB0AGMAaAAAAMqP").await.unwrap(); diff --git a/src/account/account.rs b/src/account/account.rs index 77c6447..c937c2d 100644 --- a/src/account/account.rs +++ b/src/account/account.rs @@ -1,18 +1,17 @@ use std::io::Write; use std::ops::{Deref, DerefMut}; -use argon2::{Algorithm, Argon2, PasswordHash, PasswordHasher, PasswordVerifier}; -use argon2::password_hash::rand_core::OsRng; -use argon2::password_hash::SaltString; +// Don't import until required. +// use argon2::{Algorithm, Argon2, PasswordHash, PasswordHasher, PasswordVerifier}; +// use argon2::password_hash::rand_core::OsRng; +// use argon2::password_hash::SaltString; use base64::Engine; use base64::prelude::BASE64_STANDARD; use bytemuck::bytes_of; -use chrono::{NaiveDate, NaiveDateTime, NaiveTime, TimeZone, Utc}; -use log::{error, warn}; +use chrono::{NaiveDate, NaiveDateTime, Utc}; use rocket::http::Status; use rocket::{async_trait, Request}; use rocket::request::{FromRequest, Outcome}; use sha2::{Digest, Sha256}; -use sha2::digest::FixedOutput; use crate::error::{Error, Errors}; use crate::nnid::oauth::TokenData; use crate::Pool; @@ -35,15 +34,6 @@ const INVALID_TOKEN_ERRORS: Errors<'static> = Errors{ ] }; -const INVALID_TOKEN_ERRORS_DBG: Errors<'static> = Errors{ - error: &[ - Error{ - message: "Test err 1", - code: "0305" - } - ] -}; - // optimization note: add token caching #[derive(Debug)] pub struct User { @@ -112,8 +102,6 @@ pub fn generate_password(pid: i32, cleartext_password: &str) -> Option{ pub async fn read_basic_auth_token(connection: &Pool, token: &str) -> Option { - println!("Received token (base64): {:?}", token); - let data = match BASE64_STANDARD.decode(&token) { Ok(d) => d, Err(e) => { @@ -121,7 +109,6 @@ pub async fn read_basic_auth_token(connection: &Pool, token: &str) -> Option s, @@ -130,7 +117,6 @@ pub async fn read_basic_auth_token(connection: &Pool, token: &str) -> Option parts, @@ -139,8 +125,6 @@ pub async fn read_basic_auth_token(connection: &Pool, token: &str) -> Option Option u, Err(e) => { println!("Failed to fetch user from database: {:?}", e); @@ -157,13 +141,10 @@ pub async fn read_basic_auth_token(connection: &Pool, token: &str) -> Option Option FromRequest<'r> for Auth(pub T); diff --git a/src/error.rs b/src/error.rs index 5b9f03d..cbc3c19 100644 --- a/src/error.rs +++ b/src/error.rs @@ -1,11 +1,8 @@ -use log::error; use rocket::http::Status; use rocket::{Request, Response}; -use rocket::response::content::RawXml; use rocket::response::Responder; use rocket::serde::Serialize; -use crate::nnid::timezones::Timezone; -use crate::xml::{serialize_with_version, Xml}; +use crate::xml::Xml; #[derive(Serialize, Debug)] pub struct Error<'a>{ diff --git a/src/graphql/mod.rs b/src/graphql/mod.rs index 8f100b4..86655d5 100644 --- a/src/graphql/mod.rs +++ b/src/graphql/mod.rs @@ -1,9 +1,8 @@ -use std::fmt::Display; use chrono::NaiveDateTime; -use juniper::{graphql_object, EmptyMutation, EmptySubscription, GraphQLObject, RootNode, ScalarValue}; +use juniper::{graphql_object, EmptyMutation, EmptySubscription, GraphQLObject, RootNode}; use rocket::response::content::RawHtml; use rocket::State; -use crate::account::account::{read_basic_auth_token, read_bearer_auth_token}; +// use crate::account::account::{read_basic_auth_token, read_bearer_auth_token}; use crate::nnid::oauth::TokenData; use crate::Pool; diff --git a/src/main.rs b/src/main.rs index 76f0823..acaab31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,12 @@ - - use std::env; -use std::net::{IpAddr, Ipv4Addr, SocketAddr, SocketAddrV4}; -use std::sync::Arc; +use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use std::time::{SystemTime, UNIX_EPOCH}; use dotenvy::dotenv; use juniper::{EmptyMutation, EmptySubscription}; -use log::info; use rocket::fairing::AdHoc; -use rocket::futures::FutureExt; -use rocket::http::Header; -use rocket::routes; +use rocket::http::{ContentType, Header, Status}; +use rocket::{catch, catchers, routes, Request}; +use rocket::response::content::RawXml; use sqlx::Postgres; use sqlx::postgres::PgPoolOptions; use tonic::transport::Server; @@ -23,7 +19,7 @@ mod account; mod error; mod dsresponse; mod data_wrapper; -#[deprecated] +// #[deprecated] mod grpc; mod graphql; mod email; @@ -62,6 +58,26 @@ async fn start_grpc(){ } +#[catch(404)] +fn not_found(_req: &Request) -> (Status, (ContentType, RawXml<&'static str>)) { + ( + Status::NotFound, + ( + ContentType::XML, + RawXml( + r#" + + + + 0008 + Not found + +"#, + ), + ), + ) +} + #[rocket::launch] async fn launch() -> _ { dotenv().ok(); @@ -116,6 +132,7 @@ async fn launch() -> _ { nnid::people::get_own_profile, nnid::people::get_device_owner, nnid::people::get_own_device, + nnid::people::change_mii, nnid::oauth::generate_token::generate_token, nnid::provider::get_nex_token, nnid::provider::get_service_token, @@ -126,4 +143,5 @@ async fn launch() -> _ { graphql::get_graphql, graphql::post_graphql, ]) + .register("/", catchers![not_found]) } diff --git a/src/nnid/agreements.rs b/src/nnid/agreements.rs index 78fc6a4..16e9700 100644 --- a/src/nnid/agreements.rs +++ b/src/nnid/agreements.rs @@ -1,11 +1,9 @@ -use std::{env, fs, io}; +use std::{env, io}; use rocket::fs::NamedFile; use rocket::get; use rocket::response::content::RawXml; use tokio::fs::try_exists; use crate::dsresponse::Ds; -use crate::nnid::devices::Device; -use crate::xml::Xml; #[get("/v1/api/content/agreements/Nintendo-Network-EULA//@latest")] pub async fn get_agreement(lang: &str) -> io::Result>>{ diff --git a/src/nnid/devices.rs b/src/nnid/devices.rs index 5ec86eb..0f7d5fc 100644 --- a/src/nnid/devices.rs +++ b/src/nnid/devices.rs @@ -13,7 +13,6 @@ pub fn current_device_status() -> Xml{ #[cfg(test)] mod tests { - use std::str::from_utf8; use crate::nnid::devices::Device; #[test] diff --git a/src/nnid/mapped_ids.rs b/src/nnid/mapped_ids.rs index c6bbc75..0658adb 100644 --- a/src/nnid/mapped_ids.rs +++ b/src/nnid/mapped_ids.rs @@ -12,7 +12,7 @@ struct MappedId { #[derive(Serialize)] #[serde(rename = "mapped_ids")] -struct MappedIds { +pub struct MappedIds { mapped_id: Vec, } diff --git a/src/nnid/oauth/generate_token.rs b/src/nnid/oauth/generate_token.rs index 6ffdb49..ba2bd9e 100644 --- a/src/nnid/oauth/generate_token.rs +++ b/src/nnid/oauth/generate_token.rs @@ -1,6 +1,6 @@ use rocket::{post, FromForm, State}; use rocket::form::Form; -use serde::{Deserialize, Serialize}; +use serde::{Serialize}; use crate::account::account::User; use crate::error::{Error, Errors}; use crate::nnid::oauth::generate_token::token_type::{AUTH_REFRESH_TOKEN, AUTH_TOKEN}; diff --git a/src/nnid/oauth/mod.rs b/src/nnid/oauth/mod.rs index bea5a2a..4af8aa8 100644 --- a/src/nnid/oauth/mod.rs +++ b/src/nnid/oauth/mod.rs @@ -1,13 +1,8 @@ use std::env; -use std::io::Write; -use aes::{Aes128, Aes256, Block}; -use aes::cipher::consts::{U32, U64}; +use aes::{Aes128, Block}; use aes::cipher::{BlockDecryptMut, BlockEncryptMut, Iv, Key}; use aes::cipher::generic_array::sequence::GenericSequence; -use bytemuck::{bytes_of, bytes_of_mut, from_bytes, from_bytes_mut, Pod, Zeroable}; -use chrono::NaiveTime; -use hmac::{Hmac, Mac}; -use md5::Md5; +use bytemuck::{bytes_of, from_bytes, Pod, Zeroable}; use once_cell::sync::Lazy; use aes::cipher::KeyIvInit; use base64::Engine; @@ -23,26 +18,18 @@ pub struct TokenData{ pub token_id: i64 } - -static HMAC_SECRET: Lazy> = Lazy::new(||{ - Key::::clone_from_slice(&hex::decode( - env::var("ACCOUNT_HMAC_SECRET").expect("hmac secret has not been set") - ).expect("unable to decode ACCOUNT_HMAC_SECRET")) -}); - static AES_KEY: Lazy> = Lazy::new(||{ Key::::clone_from_slice(&hex::decode( env::var("ACCOUNT_AES_KEY").expect("hmac secret has not been set") ).expect("unable to decode ACCOUNT_AES_KEY")) }); -type HmacMd5 = Hmac; type Aes128CbcEnc = cbc::Encryptor; type Aes128CbcDec = cbc::Decryptor; impl TokenData{ pub fn decode(token: &str) -> Option{ - let mut data = BASE64_STANDARD.decode(token).ok()?; + let data = BASE64_STANDARD.decode(token).ok()?; let data: [u8; 16] = data.try_into().ok()?; @@ -82,7 +69,7 @@ impl TokenData{ #[cfg(test)] mod test{ use std::env; - use crate::nnid::oauth::{TokenData, AES_KEY}; + use crate::nnid::oauth::{TokenData}; #[test] fn test_encode_decode(){ diff --git a/src/nnid/people.rs b/src/nnid/people.rs index 35ece60..c84910a 100644 --- a/src/nnid/people.rs +++ b/src/nnid/people.rs @@ -1,13 +1,10 @@ use std::env; -use std::io::Cursor; -use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; +use chrono::{NaiveDate, NaiveDateTime}; use gxhash::{gxhash32, gxhash64}; -use minio::s3::args::PutObjectArgs; -use minio::s3::builders::{ObjectContent, SegmentedBytes}; +use minio::s3::builders::{ObjectContent}; use minio::s3::client::ClientBuilder; use minio::s3::creds::StaticProvider; use minio::s3::http::BaseUrl; -use minio::s3::utils::crc32; use once_cell::sync::Lazy; use rocket::{get, post, put, State}; use rocket::serde::{Deserialize, Serialize}; @@ -15,7 +12,7 @@ use crate::account::account::{generate_password, Auth, User}; use crate::dsresponse::Ds; use crate::error::Errors; use crate::nnid::pid_distribution::next_pid; -use crate::nnid::timezones::{OFFSET_FROM_TIMEZONE, ZONE_TO_TIMEZONES}; +use crate::nnid::timezones::{OFFSET_FROM_TIMEZONE}; use crate::Pool; use crate::xml::{Xml, YesNoVal}; use crate::email::send_verification_email; @@ -191,10 +188,10 @@ pub async fn create_account(database: &State, data: Xml Ds> { let User { username, pid, - account_level, + // account_level, mii_data, gender, birthdate, @@ -292,6 +289,7 @@ fn build_own_profile(user: User) -> Ds> { marketing_allowed, off_device_allowed, region, + // verification_code, .. } = user.into(); diff --git a/src/nnid/person_exists.rs b/src/nnid/person_exists.rs index ddc5c98..51c2416 100644 --- a/src/nnid/person_exists.rs +++ b/src/nnid/person_exists.rs @@ -1,8 +1,6 @@ use rocket::{get, State}; -use sqlx::Row; use crate::error::{Error, Errors}; use crate::Pool; -use crate::xml::Xml; #[get("/v1/api/people/")] diff --git a/src/nnid/provider.rs b/src/nnid/provider.rs index 889e5b7..e46858b 100644 --- a/src/nnid/provider.rs +++ b/src/nnid/provider.rs @@ -1,21 +1,14 @@ use std::net::Ipv4Addr; -use std::str::FromStr; use rocket::{get, State}; use serde::Serialize; use sqlx::types::ipnetwork::IpNetwork::V4; use crate::account::account::Auth; use crate::error::{Error, Errors}; -use crate::nnid::oauth::generate_token::{create_token, TokenRequestReturnData}; +use crate::nnid::oauth::generate_token::{create_token}; use crate::nnid::oauth::generate_token::token_type::NEX_TOKEN; -use crate::nnid::provider::Test::{A, B}; use crate::Pool; use crate::xml::Xml; -enum Test{ - A(String), - B(i32) -} - const NO_IPV4_ERROR: Errors = Errors{ error: &[ Error{ diff --git a/src/nnid/support.rs b/src/nnid/support.rs index 95dc1e0..439aeac 100644 --- a/src/nnid/support.rs +++ b/src/nnid/support.rs @@ -1,4 +1,4 @@ -use rocket::{get, State, post, FromForm, put}; +use rocket::{State, post, FromForm, put}; use crate::Pool; use rocket::form::Form; use crate::email::send_verification_email; @@ -15,7 +15,7 @@ const BAD_CODE_ERROR: Errors = Errors{ }; #[derive(FromForm)] -struct ValidateEmailInput{ +pub struct ValidateEmailInput{ email: String, } #[post("/v1/api/support/validate/email", data="")] diff --git a/src/nnid/timezones.rs b/src/nnid/timezones.rs index 3f0ff3e..8373059 100644 --- a/src/nnid/timezones.rs +++ b/src/nnid/timezones.rs @@ -3,8 +3,7 @@ use std::{env, fs}; use once_cell::sync::Lazy; use rocket::get; use serde::{Deserialize, Serialize}; -use serde_json::from_slice; -use crate::xml::{serialize_with_version, Xml}; +use crate::xml::{Xml}; #[derive(Serialize, Deserialize)] #[serde(rename(serialize = "timezone"))] diff --git a/src/xml.rs b/src/xml.rs index 88af660..a9a15d0 100644 --- a/src/xml.rs +++ b/src/xml.rs @@ -1,5 +1,4 @@ use std::fmt::Formatter; -use std::io::Cursor; use std::ops::{Deref, DerefMut}; use std::result; use rocket::http::Status; @@ -8,15 +7,11 @@ use rocket::response::Responder; use serde::{Deserialize, Deserializer, Serialize}; use rocket::response::Result; use log::error; -use quick_xml::events::{BytesDecl, Event}; use quick_xml::se::Serializer; use quick_xml::{DeError, SeError}; use rocket::data::{ByteUnit, FromData, Outcome}; use rocket::response::content::RawXml; -use rocket::response::status::BadRequest; -use serde::__private::de::UntaggedUnitVisitor; use serde::de::{DeserializeOwned, Error, Visitor}; -use thiserror::Error; pub fn serialize_with_version(serializable: &impl Serialize) -> result::Result, SeError>{ let mut write_dest = "".to_owned(); @@ -61,7 +56,7 @@ impl<'r, 'o: 'r, T: Serialize> Responder<'r, 'o> for Xml{ impl<'r, T: DeserializeOwned> FromData<'r> for Xml{ type Error = Option; - async fn from_data(req: &'r Request<'_>, data: Data<'r>) -> Outcome<'r, Self> { + async fn from_data(_req: &'r Request<'_>, data: Data<'r>) -> Outcome<'r, Self> { let data = data.open(1 * ByteUnit::MB); let Ok(data) = data.into_string().await else { @@ -83,9 +78,9 @@ pub struct YesNoVal(pub bool); struct YesNoVisitor; -#[derive(Debug, Error)] -#[error("did not find Y or N")] -struct NotYNError; +// #[derive(Debug, Error)] +// #[error("did not find Y or N")] +// struct NotYNError;