From 6382f36eba6ef5eec6f722de04bb2e391ea7d903 Mon Sep 17 00:00:00 2001 From: "Bradley M. Kuhn" Date: Fri, 29 Nov 2013 13:18:39 -0500 Subject: [PATCH] Bring in PrivacyFilterICalFile from SFLC code. --- calendar-export.plx | 57 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/calendar-export.plx b/calendar-export.plx index 3e0ae02..5438ed5 100644 --- a/calendar-export.plx +++ b/calendar-export.plx @@ -22,8 +22,9 @@ # along with this program in a file in the toplevel directory called # "GPLv3". If not, see . -# The functions PrivatizeMergeAndTZIcalFile, BuildTZList, and -# FilterEmacsToICal material copyrighted and licensed as below: +# The functions PrivatizeMergeAndTZIcalFile, BuildTZList, +# PrivacyFilterICalFile, and FilterEmacsToICal material copyrighted and +# licensed as below: # Copyright © 2006 Software Freedom Law Center, Inc. # @@ -150,6 +151,58 @@ ELISP_END DieLog("Unable to remove temporary files") unless unlink($icsPublicFile, $icsWillBePrivatizedFile, $icsFullFile) == 3; } +############################################################################### +sub PrivacyFilterICalFile ($$) { + my($inputFile, $outputFile) = @_; + + my $oldCalendar = Data::ICal->new(filename => $inputFile); + my $newCalendar = Data::ICal->new(data => <entries : []; + my $x =0; + foreach my $entry (@{$entries}) { + my @newSubEntries; + foreach my $subEntry (@{$entry->{entries}}) { + my $refVal = ref $subEntry; + if (defined $refVal and $refVal =~ /Alarm/i) { + # Don't put it in the list in the public version if is an alarm + } else { + push(@newSubEntries, $subEntry); + } + } + $entry->{entries} = \@newSubEntries; + + my $classes = $entry->property('class'); + my $class; + foreach my $classProp (@{$classes}) { + $class = $classProp->value; + last if defined $class and + $class =~ /^\s*(?:PUBLIC|PRIVATE|CONFIDENTIAL)\s*/i; + } + if (defined $class and $class =~ /CONFIDENTIAL/i) { + foreach my $prop (qw/location summary description/) { + my $propList = $entry->property($prop); + $entry->add_property($prop => "Private") + if (defined $propList and @{$propList} > 0); + } + } elsif (defined $class and $class =~ /PRIVATE/i){ + # do not put this event in the output at all + next; + } + $newCalendar->add_entry($entry); + } + open(SCRUBBED_CAL, ">$outputFile") or + DieLog("Unable to overwrite $outputFile: $!", $LOCK_CLEANUP_CODE); + print SCRUBBED_CAL $newCalendar->as_string; + close SCRUBBED_CAL; + DieLog("Error when writing $outputFile: $!", $LOCK_CLEANUP_CODE) + unless $? == 0; +} ###################################################################### sub PrivatizeMergeAndTZIcalFile ($$$$$$) { my($icsPrivate, $icsPublic, $icsFull, $tzList, $user, $errorUser) = @_;