Add loop protection
This commit is contained in:
@ -262,6 +262,20 @@ pub async fn update(m: FamilyAndMemberInPath, req: web::Json<MemberRequest>) ->
|
||||
return Ok(HttpResponse::BadRequest().body(e.to_string()));
|
||||
}
|
||||
|
||||
// Check for potential loops
|
||||
let members = members_service::get_all_of_family(member.family_id()).await?;
|
||||
let mut members_ref = Vec::with_capacity(members.len());
|
||||
members_ref.push(&member);
|
||||
for m in &members {
|
||||
if m.id() != member.id() {
|
||||
members_ref.push(m);
|
||||
}
|
||||
}
|
||||
if members_service::loop_detection::detect_loop(&members_ref) {
|
||||
log::warn!("Membership update rejected due to detected loop!");
|
||||
return Ok(HttpResponse::NotAcceptable().json("Loop detected!"));
|
||||
}
|
||||
|
||||
members_service::update(&mut member).await?;
|
||||
|
||||
Ok(HttpResponse::Accepted().finish())
|
||||
|
Reference in New Issue
Block a user