|
|
|
@ -107,7 +107,7 @@ async fn _refresh_login(data: ConnectData, conn: &mut DbConn) -> JsonResult {
|
|
|
|
|
let (access_token, expires_in) = device.refresh_tokens(&user, orgs, scope_vec);
|
|
|
|
|
device.save(conn).await?;
|
|
|
|
|
|
|
|
|
|
let mut result = json!({
|
|
|
|
|
let result = json!({
|
|
|
|
|
"access_token": access_token,
|
|
|
|
|
"expires_in": expires_in,
|
|
|
|
|
"token_type": "Bearer",
|
|
|
|
@ -117,18 +117,13 @@ async fn _refresh_login(data: ConnectData, conn: &mut DbConn) -> JsonResult {
|
|
|
|
|
|
|
|
|
|
"Kdf": user.client_kdf_type,
|
|
|
|
|
"KdfIterations": user.client_kdf_iter,
|
|
|
|
|
"KdfMemory": user.client_kdf_memory,
|
|
|
|
|
"KdfParallelism": user.client_kdf_parallelism,
|
|
|
|
|
"ResetMasterPassword": false, // TODO: according to official server seems something like: user.password_hash.is_empty(), but would need testing
|
|
|
|
|
"scope": scope,
|
|
|
|
|
"unofficialServer": true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if user.client_kdf_type == UserKdfType::Argon2id as i32 {
|
|
|
|
|
result["KdfMemory"] =
|
|
|
|
|
Value::Number(user.client_kdf_memory.expect("Argon2 memory parameter is required.").into());
|
|
|
|
|
result["KdfParallelism"] =
|
|
|
|
|
Value::Number(user.client_kdf_parallelism.expect("Argon2 parallelism parameter is required.").into());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(Json(result))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -260,6 +255,8 @@ async fn _password_login(
|
|
|
|
|
|
|
|
|
|
"Kdf": user.client_kdf_type,
|
|
|
|
|
"KdfIterations": user.client_kdf_iter,
|
|
|
|
|
"KdfMemory": user.client_kdf_memory,
|
|
|
|
|
"KdfParallelism": user.client_kdf_parallelism,
|
|
|
|
|
"ResetMasterPassword": false,// TODO: Same as above
|
|
|
|
|
"scope": scope,
|
|
|
|
|
"unofficialServer": true,
|
|
|
|
@ -269,13 +266,6 @@ async fn _password_login(
|
|
|
|
|
result["TwoFactorToken"] = Value::String(token);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if user.client_kdf_type == UserKdfType::Argon2id as i32 {
|
|
|
|
|
result["KdfMemory"] =
|
|
|
|
|
Value::Number(user.client_kdf_memory.expect("Argon2 memory parameter is required.").into());
|
|
|
|
|
result["KdfParallelism"] =
|
|
|
|
|
Value::Number(user.client_kdf_parallelism.expect("Argon2 parallelism parameter is required.").into());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
info!("User {} logged in successfully. IP: {}", username, ip.ip);
|
|
|
|
|
Ok(Json(result))
|
|
|
|
|
}
|
|
|
|
@ -360,7 +350,7 @@ async fn _api_key_login(
|
|
|
|
|
|
|
|
|
|
// Note: No refresh_token is returned. The CLI just repeats the
|
|
|
|
|
// client_credentials login flow when the existing token expires.
|
|
|
|
|
let mut result = json!({
|
|
|
|
|
let result = json!({
|
|
|
|
|
"access_token": access_token,
|
|
|
|
|
"expires_in": expires_in,
|
|
|
|
|
"token_type": "Bearer",
|
|
|
|
@ -369,18 +359,13 @@ async fn _api_key_login(
|
|
|
|
|
|
|
|
|
|
"Kdf": user.client_kdf_type,
|
|
|
|
|
"KdfIterations": user.client_kdf_iter,
|
|
|
|
|
"KdfMemory": user.client_kdf_memory,
|
|
|
|
|
"KdfParallelism": user.client_kdf_parallelism,
|
|
|
|
|
"ResetMasterPassword": false, // TODO: Same as above
|
|
|
|
|
"scope": scope,
|
|
|
|
|
"unofficialServer": true,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if user.client_kdf_type == UserKdfType::Argon2id as i32 {
|
|
|
|
|
result["KdfMemory"] =
|
|
|
|
|
Value::Number(user.client_kdf_memory.expect("Argon2 memory parameter is required.").into());
|
|
|
|
|
result["KdfParallelism"] =
|
|
|
|
|
Value::Number(user.client_kdf_parallelism.expect("Argon2 parallelism parameter is required.").into());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(Json(result))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|