|
|
|
|
@ -86,14 +86,20 @@ pub fn register_route(
@@ -86,14 +86,20 @@ pub fn register_route(
|
|
|
|
|
|
|
|
|
|
let is_guest = matches!(body.kind, Some(RegistrationKind::Guest)); |
|
|
|
|
|
|
|
|
|
let mut missing_username = false; |
|
|
|
|
|
|
|
|
|
// Validate user id
|
|
|
|
|
let user_id = UserId::parse_with_server_name( |
|
|
|
|
if is_guest { |
|
|
|
|
utils::random_string(GUEST_NAME_LENGTH) |
|
|
|
|
} else { |
|
|
|
|
body.username.clone().ok_or_else(|| { |
|
|
|
|
Error::BadRequest(ErrorKind::MissingParam, "Missing username field.") |
|
|
|
|
})? |
|
|
|
|
body.username.clone().unwrap_or_else(|| { |
|
|
|
|
// If the user didn't send a username field, that means the client is just trying
|
|
|
|
|
// the get an UIAA error to see available flows
|
|
|
|
|
missing_username = true; |
|
|
|
|
// Just give the user a random name. He won't be able to register with it anyway.
|
|
|
|
|
utils::random_string(GUEST_NAME_LENGTH) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
.to_lowercase(), |
|
|
|
|
db.globals.server_name(), |
|
|
|
|
@ -106,7 +112,7 @@ pub fn register_route(
@@ -106,7 +112,7 @@ pub fn register_route(
|
|
|
|
|
))?; |
|
|
|
|
|
|
|
|
|
// Check if username is creative enough
|
|
|
|
|
if db.users.exists(&user_id)? { |
|
|
|
|
if !missing_username && db.users.exists(&user_id)? { |
|
|
|
|
return Err(Error::BadRequest( |
|
|
|
|
ErrorKind::UserInUse, |
|
|
|
|
"Desired user ID is already taken.", |
|
|
|
|
@ -138,6 +144,10 @@ pub fn register_route(
@@ -138,6 +144,10 @@ pub fn register_route(
|
|
|
|
|
return Err(Error::Uiaa(uiaainfo)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if missing_username { |
|
|
|
|
return Err(Error::BadRequest(ErrorKind::MissingParam, "Missing username field.")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let password = if is_guest { |
|
|
|
|
None |
|
|
|
|
} else { |
|
|
|
|
|