Impl /auth/user/change/name

This commit is contained in:
2022-10-14 00:59:27 +00:00
committed by GitHub
parent 205e23c81d
commit d10e1b4571
6 changed files with 80 additions and 2 deletions

View File

@@ -11,6 +11,8 @@ use openssl::{hash::MessageDigest, pkcs5::pbkdf2_hmac};
pub enum AuthUserAction {
/// Add a new user.
Add,
/// Change a user's name.
ChangeName,
/// Update a existed user.
Update,
}
@@ -153,6 +155,16 @@ impl AuthUserContext {
None => return Err((5, gettext("No RSA key found.")).into()),
}
}
AuthUserAction::ChangeName => {
let name = params.get("name").try_err3(18, "No name specified.")?;
let user = self
.ctx
.db
.update_user_name(user.expect("User not found.").id, name)
.await
.try_err3(-1001, gettext("Failed to operate the database:"))?;
Ok(user.to_json2())
}
AuthUserAction::Update => {
if root_user.is_some() {
if !user.as_ref().expect("User not found:").is_admin {
@@ -296,7 +308,7 @@ pub struct AuthUserRoute {
impl AuthUserRoute {
pub fn new() -> Self {
Self {
regex: Regex::new(r"^(/+api)?/+auth/+user(/+(add|update))?$").unwrap(),
regex: Regex::new(r"^(/+api)?/+auth/+user(/+(add|update|change/+name))?$").unwrap(),
}
}
}
@@ -326,7 +338,18 @@ impl MatchRoute<Body, Body> for AuthUserRoute {
match m {
"add" => Some(AuthUserAction::Add),
"update" => Some(AuthUserAction::Update),
_ => return None,
_ => {
if m.starts_with("change/") {
let m = m.trim_start_matches("change/");
let m = m.trim_start_matches("/");
match m {
"name" => Some(AuthUserAction::ChangeName),
_ => return None,
}
} else {
return None;
}
}
}
}
None => {

View File

@@ -258,5 +258,26 @@ pub async fn test(ctx: &UnitTestContext) -> Result<[(u64, Vec<u8>); 2], PixivDow
.unwrap();
let result = JSONResult::from_json(re)?.unwrap_err();
assert_eq!(result.code, 17);
let re = ctx
.request_json2_sign(
"/auth/user/change/name",
&json::object! {
"name": "sdlkasdjklasjd"
},
&token2,
token2_id,
)
.await?
.unwrap();
let result = JSONResult::from_json(re)?.unwrap();
assert_eq!(
result,
json::object! {
"id": 1,
"name": "sdlkasdjklasjd",
"username": "test1",
"is_admin": false,
}
);
Ok([(token_id, token), (token2_id, token2)])
}