From 8f5d1100120d1a4e75d1fb34fe8fb8616a7c2bd7 Mon Sep 17 00:00:00 2001 From: James Rouzier Date: Mon, 30 Dec 2024 20:35:22 +0000 Subject: [PATCH 1/2] Add pre and post remove hooks --- lib/pf/UnifiedApi/Controller/Crud.pm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/pf/UnifiedApi/Controller/Crud.pm b/lib/pf/UnifiedApi/Controller/Crud.pm index 42e38e6a9971..89c6125f1fda 100644 --- a/lib/pf/UnifiedApi/Controller/Crud.pm +++ b/lib/pf/UnifiedApi/Controller/Crud.pm @@ -384,9 +384,19 @@ sub do_remove { return ($status, $msg); } - return $self->dal->remove_by_id($self->build_item_lookup); + $self->pre_remove(); + ($status, $msg) = $self->dal->remove_by_id($self->build_item_lookup); + if (is_error($status)) { + return ($status, $msg); + } + + $self->post_remove(); + return ($status, $msg); } +sub pre_remove { } +sub post_remove { } + sub can_remove { return (200, ''); } From 36a60a290ae8d4e74ee496678ca2ea524bead00b Mon Sep 17 00:00:00 2001 From: James Rouzier Date: Mon, 30 Dec 2024 21:01:25 +0000 Subject: [PATCH 2/2] Clean the person lookup cache after deleting --- lib/pf/UnifiedApi/Controller/Users.pm | 13 +++++++++++++ lib/pf/lookup/person.pm | 10 +++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/pf/UnifiedApi/Controller/Users.pm b/lib/pf/UnifiedApi/Controller/Users.pm index dab7a6729f8e..d5b2a3e271fb 100644 --- a/lib/pf/UnifiedApi/Controller/Users.pm +++ b/lib/pf/UnifiedApi/Controller/Users.pm @@ -23,9 +23,12 @@ use pf::security_event; use pf::constants; use pf::person qw(person_security_events person_unassign_nodes person_delete person_modify); use pf::node; +use pf::lookup::person; use pf::constants qw($default_pid); +use pf::constants::realm; use pf::error qw(is_error is_success); use pf::UnifiedApi::Search::Builder::Users; +use pf::lookup::person qw(); has 'search_builder_class' => 'pf::UnifiedApi::Search::Builder::Users'; @@ -658,6 +661,16 @@ sub _can_remove { } } +sub post_delete { + my ($self) = @_; + my $item = $self->item; + my $source = $item->{source}; + for my $ctx ('', @pf::constants::realm::CONTEXTS) { + pf::lookup::person::clear_lookup_person($self->id, $item->{source}, $ctx); + } + +} + =head1 AUTHOR Inverse inc. diff --git a/lib/pf/lookup/person.pm b/lib/pf/lookup/person.pm index 064372722718..a1b5291d0ac7 100644 --- a/lib/pf/lookup/person.pm +++ b/lib/pf/lookup/person.pm @@ -26,7 +26,7 @@ use pf::authentication; use pf::pfqueue::producer::redis; use pf::CHI; -my $CHI_CACHE = pf::CHI->new( namespace => 'person_lookup' ); +our $CHI_CACHE = pf::CHI->new( namespace => 'person_lookup' ); =head2 lookup_person @@ -91,6 +91,14 @@ sub async_lookup_person { $client->submit("general", person_lookup => {pid => $pid, source_id => $source_id, context => $context}); } +sub clear_lookup_person { + my ($pid, $source_id, $context) = @_; + my $logger = get_logger(); + my $cache_key = "$source_id.$pid.$context"; + $CHI_CACHE->remove($cache_key); + $logger->info("Clear cache for pid $pid with key $cache_key"); +} + =head1 AUTHOR Inverse inc.