# -*- perl -*- @ScripActions = ( { Name => 'Extract Custom Field Values', # loc Description => 'extract cf-values out of a message', # loc ExecModule => 'ExtractCustomFieldValues' } ); @Templates = ( { Queue => '0', Name => 'CustomFieldScannerExample', # loc Description => 'Example Template for ExtractCustomFieldValues', # loc Content => <<'EOTEXT' #### Syntax: # CF Name | Header name or "Body" | MatchString(re) | Postcmd | Options #### Allowed Options: # q - (quiet) Don't record a transaction for adding the custom field # value # * - (wildcard) The MatchString regex should contain _two_ # capturing groups, the first of which is the CF name, # the second of which is the value. If this option is # given, the field is ignored. #### Examples: # 1. Put the content of the "X-MI-Test" header into the "testcf" # custom field: # testcf|X-MI-Test|.* # 2. Scan the body for Host:name and put name into the "bodycf" custom # field: # bodycf|Body|Host:\s*(\w+) # 3. Scan the "X-MI-IP" header for an IP-Adresse and get the hostname # by reverse-resolving it: # Hostname|X-MI-IP|\d+\.\d+\.\d+\.\d+|use Socket; ($value) = gethostbyaddr(inet_aton($value),AF_INET); # 4. scan the "CC" header for an many email addresses, and add them to # a custom field named "parsedCCs". If "parsedCCs" is a multivalue # CF, then this should yield separate values for all email adress # found. # parsedCCs|CC|.*|$value =~ s/^\s+//; $value =~ s/\s+$//; # 5. Looks for an "Email:" field in the body of the email, then loads # up that user and makes them privileged The blank first field # means the automatic CustomField setting is not invoked. # |Body|Email:\s*(.+)$|my $u = RT::User->new($RT::SystemUser); $u->LoadByEmail($value); $u->SetPrivileged(1)| # 6. Looks for any text of the form "Set CF Name: Value" in the body, # and sets the CF named "CF Name" to the given value, which may be # multi-line. The '*' option controls the wildcard nature of this # example. # Separator=! # !Body!^Set ([^\n:]*?):\s*((?s).*?)(?:\Z|\n\Z|\n\n)!!* # 7. Looks for the regex anywhere in the headers and stores the match # in the AllHeaderSearch CF # AllHeaderSearch|Headers|Site:\s*(\w+) EOTEXT } ); 1;