summaryrefslogtreecommitdiff
path: root/Postman/PostmanLogFields.php
diff options
context:
space:
mode:
Diffstat (limited to 'Postman/PostmanLogFields.php')
-rw-r--r--Postman/PostmanLogFields.php62
1 files changed, 51 insertions, 11 deletions
diff --git a/Postman/PostmanLogFields.php b/Postman/PostmanLogFields.php
index 6e04b8d..04d24a4 100644
--- a/Postman/PostmanLogFields.php
+++ b/Postman/PostmanLogFields.php
@@ -3,17 +3,17 @@ class PostmanLogFields {
private $fields = array(
'success' => 'sanitize_text_field',
- 'from_header' => '',
- 'to_header' => '',
- 'cc_header' => '',
- 'bcc_header' => '',
- 'reply_to_header' => '',
+ 'from_header' => [ 'PostmanLogFields', 'email_header_sanitize' ],
+ 'to_header' => [ 'PostmanLogFields', 'email_header_sanitize' ],
+ 'cc_header' => [ 'PostmanLogFields', 'email_header_sanitize' ],
+ 'bcc_header' => [ 'PostmanLogFields', 'email_header_sanitize' ],
+ 'reply_to_header' => [ 'PostmanLogFields', 'email_header_sanitize' ],
'transport_uri' => 'sanitize_text_field',
'original_to' => 'sanitize_text_field',
'original_subject' => 'sanitize_text_field',
- 'original_message' => null,
- 'original_headers' => 'sanitize_text_field',
- 'session_transcript' => 'sanitize_textarea_field',
+ 'original_message' => '', // only sent to viewed
+ 'original_headers' => '', // only sent to viewed
+ 'session_transcript' => '', // escaped when viewed
);
private static $instance = null;
@@ -28,7 +28,7 @@ class PostmanLogFields {
private function __construct()
{
- $this->fields['original_message'] = array( $this, 'sanitize_message' );
+
}
public function get( $post_id ) {
@@ -73,13 +73,14 @@ class PostmanLogFields {
}
private function sanitize( $key, $value ) {
+
$callback = is_array( $value ) ? 'array_map' : 'call_user_func';
if ( ! empty( $this->fields[$key] ) ) {
return $callback( $this->fields[$key], $value );
}
- return filter_var( $value, FILTER_SANITIZE_STRING | FILTER_SANITIZE_SPECIAL_CHARS );
+ return $value;
}
private function sanitize_message( $message ) {
@@ -96,4 +97,43 @@ class PostmanLogFields {
return $value;
}
-} \ No newline at end of file
+
+ public function get_string_between($string, $start, $end){
+ $string = ' ' . $string;
+ $ini = strpos($string, $start);
+
+ if ($ini == 0) {
+ return '';
+ }
+
+ $ini += strlen($start);
+ $len = strpos($string, $end, $ini) - $ini;
+
+ return substr($string, $ini, $len);
+ }
+
+ public function email_header_sanitize($value) {
+
+ $parts = explode( ',', $value );
+
+ $sanitized = [];
+ foreach ( $parts as $part ) {
+
+ if ( strpos( $part, '<' ) !== false ) {
+ $email = $this->get_string_between( $part, '<', '>' );
+ $clean_email = $this->sanitize_email($email);
+ preg_match('/(.*)</', $part, $output_array);
+ $name = filter_var( trim( $output_array[1] ), FILTER_SANITIZE_STRING );
+
+ $sanitized[] = "{$name} <{$clean_email}>";
+ }
+ }
+
+ return ! empty( $sanitized ) ? implode( ',', $sanitized ) : implode( ',', array_map( [ $this, 'sanitize_email'], $parts ) );
+ }
+
+ public function sanitize_email( $email ) {
+ return filter_var( $email, FILTER_SANITIZE_EMAIL );
+ }
+}
+