Merge branch 'feat/deleteaccount' into 'main'

Feat: Allow Deleting Account via JSON API

See merge request spfn/account!1
This commit is contained in:
Maple 2025-11-04 22:01:00 +01:00
commit 680f852737
5 changed files with 61 additions and 12 deletions

View file

@ -1,7 +1,5 @@
default:
image: docker:28.5.1-dind
services:
- "docker:28.5.1-dind"
image: quay.io/podman/stable
variables:
DOCKER_TLS_CERTDIR: "/certs"
@ -10,6 +8,7 @@ variables:
stages:
- test
- build-and-push-image
- push-retagged-branch
- push-retagged-latest
test:
@ -25,17 +24,28 @@ build-and-push-image:
stage: build-and-push-image
script:
- git submodule update --init
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" .
- docker push "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
- podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- podman build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" .
- podman push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
push-retagged-branch:
stage: push-retagged-branch
script:
- podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- podman pull "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"
- podman tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA" "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
- podman push "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
rules:
- if: $CI_PIPELINE_SOURCE == "push"
when: on_success
push-retagged-latest:
stage: push-retagged-latest
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
- docker tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" "$CI_REGISTRY_IMAGE:latest"
- docker push "$CI_REGISTRY_IMAGE:latest"
- podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- podman pull "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
- podman tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" "$CI_REGISTRY_IMAGE:latest"
- podman push "$CI_REGISTRY_IMAGE:latest"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE == "push"
when: on_success

View file

@ -0,0 +1,14 @@
{
"db_name": "PostgreSQL",
"query": "DELETE FROM users WHERE username = $1",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Text"
]
},
"nullable": []
},
"hash": "33c4cb3bb1675de38c7c438de08cff5a05f04c0a1a5a1703eaf975a216be6a75"
}

View file

@ -0,0 +1,23 @@
use crate::Pool;
use crate::account::account::{Auth, User};
use rocket::http::Status;
use rocket::{State, get};
#[get("/api/v2/users/@me/delete")]
pub async fn delete_account(pool: &State<Pool>, auth: Auth<true>) -> Result<(), Status> {
let pool = pool.inner();
let user: User = auth.into();
let result = sqlx::query!(
"DELETE FROM users WHERE username = $1",
user.username
).execute(pool)
.await
.map_err(|_| Status::InternalServerError)?;
if result.rows_affected() == 0 { // Account doesn't exist
Err(Status::NotFound)
} else { // Account existed and was deleted
Ok(())
}
}

View file

@ -1,2 +1,3 @@
pub mod profile;
pub mod mii;
pub mod mii;
pub mod delete;

View file

@ -151,6 +151,7 @@ async fn launch() -> _ {
json_api::oauth::generate_token::generate_token,
json_api::users::profile::get_own_profile,
json_api::users::mii::get_mii_data_by_pid,
json_api::users::delete::delete_account,
papi::login::login,
papi::user::get_user,
nnid::people::thing,