From 82a81422d6265d926a14eec6ae17d9489b75f2e5 Mon Sep 17 00:00:00 2001 From: DJMrTV Date: Fri, 6 Jun 2025 12:49:16 +0200 Subject: [PATCH] feat: allow getting user profile via json api --- src/json_api/mod.rs | 3 ++- src/json_api/oauth/mod.rs | 3 ++- src/json_api/users/mod.rs | 1 + src/json_api/users/profile.rs | 10 ++++++++++ src/main.rs | 1 + src/nnid/people.rs | 11 +++++------ 6 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 src/json_api/users/mod.rs create mode 100644 src/json_api/users/profile.rs diff --git a/src/json_api/mod.rs b/src/json_api/mod.rs index 1bbea2a..47d4216 100644 --- a/src/json_api/mod.rs +++ b/src/json_api/mod.rs @@ -1 +1,2 @@ -pub mod oauth; \ No newline at end of file +pub mod oauth; +pub mod users; \ No newline at end of file diff --git a/src/json_api/oauth/mod.rs b/src/json_api/oauth/mod.rs index b734bad..0f3eae2 100644 --- a/src/json_api/oauth/mod.rs +++ b/src/json_api/oauth/mod.rs @@ -1 +1,2 @@ -pub mod generate_token; \ No newline at end of file +pub mod generate_token; + diff --git a/src/json_api/users/mod.rs b/src/json_api/users/mod.rs new file mode 100644 index 0000000..5b3bafd --- /dev/null +++ b/src/json_api/users/mod.rs @@ -0,0 +1 @@ +pub mod profile; \ No newline at end of file diff --git a/src/json_api/users/profile.rs b/src/json_api/users/profile.rs new file mode 100644 index 0000000..cd54b13 --- /dev/null +++ b/src/json_api/users/profile.rs @@ -0,0 +1,10 @@ +use rocket::serde::json::Json; +use rocket::{get, State}; +use crate::account::account::Auth; +use crate::nnid::people::{build_profile, GetOwnProfileData}; +use crate::Pool; + +#[get("/api/v2/users/@me/profile")] +pub async fn get_own_profile(pool: &State, auth: Auth) -> Json { + Json(build_profile(auth.into())) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index dec0b30..b71c60b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -149,6 +149,7 @@ async fn launch() -> _ { nnid::provider::get_service_token, nnid::mapped_ids::mapped_ids, json_api::oauth::generate_token::generate_token, + json_api::users::profile::get_own_profile, papi::login::login, papi::user::get_user, // graphql::graphiql, diff --git a/src/nnid/people.rs b/src/nnid/people.rs index 6ada655..b16a890 100644 --- a/src/nnid/people.rs +++ b/src/nnid/people.rs @@ -266,20 +266,20 @@ pub struct GetOwnProfileData{ #[get("/v1/api/people/@me/profile")] pub fn get_own_profile(user: Auth) -> Ds>{ - build_own_profile(user.into()) + Ds(Xml(build_profile(user.into()))) } #[get("/v1/api/people/@me/devices/owner")] pub fn get_device_owner(user: Auth) -> Ds>{ - build_own_profile(user.into()) + Ds(Xml(build_profile(user.into()))) } #[post("/v1/api/people/@me/devices")] pub fn get_own_device(user: Auth) -> Ds>{ - build_own_profile(user.into()) + Ds(Xml(build_profile(user.into()))) } -fn build_own_profile(user: User) -> Ds> { +pub fn build_profile(user: User) -> GetOwnProfileData { let User { username, pid, @@ -309,7 +309,7 @@ fn build_own_profile(user: User) -> Ds> { .replace("\r", "") .replace(" ", ""); - Ds(Xml( + GetOwnProfileData { active_flag: YesNoVal(true), pid, @@ -361,7 +361,6 @@ fn build_own_profile(user: User) -> Ds> { region, utc_offset: timezone_offset, } - )) } #[put("/v1/api/people/@me/miis/@primary", data = "")]