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