Passed
Push — master ( df1ecb...5579aa )
by John
24:13 queued 14s
created
lib/private/Log/ExceptionSerializer.php 1 patch
Indentation   +179 added lines, -179 removed lines patch added patch discarded remove patch
@@ -35,183 +35,183 @@
 block discarded – undo
35 35
 use OCP\HintException;
36 36
 
37 37
 class ExceptionSerializer {
38
-	public const methodsWithSensitiveParameters = [
39
-		// Session/User
40
-		'completeLogin',
41
-		'login',
42
-		'checkPassword',
43
-		'checkPasswordNoLogging',
44
-		'loginWithPassword',
45
-		'updatePrivateKeyPassword',
46
-		'validateUserPass',
47
-		'loginWithToken',
48
-		'{closure}',
49
-		'createSessionToken',
50
-
51
-		// Provisioning
52
-		'addUser',
53
-
54
-		// TokenProvider
55
-		'getToken',
56
-		'isTokenPassword',
57
-		'getPassword',
58
-		'decryptPassword',
59
-		'logClientIn',
60
-		'generateToken',
61
-		'validateToken',
62
-
63
-		// TwoFactorAuth
64
-		'solveChallenge',
65
-		'verifyChallenge',
66
-
67
-		// ICrypto
68
-		'calculateHMAC',
69
-		'encrypt',
70
-		'decrypt',
71
-
72
-		// LoginController
73
-		'tryLogin',
74
-		'confirmPassword',
75
-
76
-		// LDAP
77
-		'bind',
78
-		'areCredentialsValid',
79
-		'invokeLDAPMethod',
80
-
81
-		// Encryption
82
-		'storeKeyPair',
83
-		'setupUser',
84
-		'checkSignature',
85
-
86
-		// files_external: OCA\Files_External\MountConfig
87
-		'getBackendStatus',
88
-
89
-		// files_external: UserStoragesController
90
-		'update',
91
-
92
-		// Preview providers, don't log big data strings
93
-		'imagecreatefromstring',
94
-	];
95
-
96
-	/** @var SystemConfig */
97
-	private $systemConfig;
98
-
99
-	public function __construct(SystemConfig $systemConfig) {
100
-		$this->systemConfig = $systemConfig;
101
-	}
102
-
103
-	public const methodsWithSensitiveParametersByClass = [
104
-		SetupController::class => [
105
-			'run',
106
-			'display',
107
-			'loadAutoConfig',
108
-		],
109
-		Setup::class => [
110
-			'install'
111
-		],
112
-		Key::class => [
113
-			'__construct'
114
-		],
115
-		\Redis::class => [
116
-			'auth'
117
-		],
118
-		\RedisCluster::class => [
119
-			'__construct'
120
-		]
121
-	];
122
-
123
-	private function editTrace(array &$sensitiveValues, array $traceLine): array {
124
-		if (isset($traceLine['args'])) {
125
-			$sensitiveValues = array_merge($sensitiveValues, $traceLine['args']);
126
-		}
127
-		$traceLine['args'] = ['*** sensitive parameters replaced ***'];
128
-		return $traceLine;
129
-	}
130
-
131
-	private function filterTrace(array $trace) {
132
-		$sensitiveValues = [];
133
-		$trace = array_map(function (array $traceLine) use (&$sensitiveValues) {
134
-			$className = $traceLine['class'] ?? '';
135
-			if ($className && isset(self::methodsWithSensitiveParametersByClass[$className])
136
-				&& in_array($traceLine['function'], self::methodsWithSensitiveParametersByClass[$className], true)) {
137
-				return $this->editTrace($sensitiveValues, $traceLine);
138
-			}
139
-			foreach (self::methodsWithSensitiveParameters as $sensitiveMethod) {
140
-				if (strpos($traceLine['function'], $sensitiveMethod) !== false) {
141
-					return $this->editTrace($sensitiveValues, $traceLine);
142
-				}
143
-			}
144
-			return $traceLine;
145
-		}, $trace);
146
-		return array_map(function (array $traceLine) use ($sensitiveValues) {
147
-			if (isset($traceLine['args'])) {
148
-				$traceLine['args'] = $this->removeValuesFromArgs($traceLine['args'], $sensitiveValues);
149
-			}
150
-			return $traceLine;
151
-		}, $trace);
152
-	}
153
-
154
-	private function removeValuesFromArgs($args, $values) {
155
-		foreach ($args as &$arg) {
156
-			if (in_array($arg, $values, true)) {
157
-				$arg = '*** sensitive parameter replaced ***';
158
-			} elseif (is_array($arg)) {
159
-				$arg = $this->removeValuesFromArgs($arg, $values);
160
-			}
161
-		}
162
-		return $args;
163
-	}
164
-
165
-	private function encodeTrace($trace) {
166
-		$filteredTrace = $this->filterTrace($trace);
167
-		return array_map(function (array $line) {
168
-			if (isset($line['args'])) {
169
-				$line['args'] = array_map([$this, 'encodeArg'], $line['args']);
170
-			}
171
-			return $line;
172
-		}, $filteredTrace);
173
-	}
174
-
175
-	private function encodeArg($arg) {
176
-		if (is_object($arg)) {
177
-			$data = get_object_vars($arg);
178
-			$data['__class__'] = get_class($arg);
179
-			return array_map([$this, 'encodeArg'], $data);
180
-		}
181
-
182
-		if (is_array($arg)) {
183
-			// Only log the first 5 elements of an array unless we are on debug
184
-			if ((int)$this->systemConfig->getValue('loglevel', 2) !== 0) {
185
-				$elemCount = count($arg);
186
-				if ($elemCount > 5) {
187
-					$arg = array_slice($arg, 0, 5);
188
-					$arg[] = 'And ' . ($elemCount - 5) . ' more entries, set log level to debug to see all entries';
189
-				}
190
-			}
191
-			return array_map([$this, 'encodeArg'], $arg);
192
-		}
193
-
194
-		return $arg;
195
-	}
196
-
197
-	public function serializeException(\Throwable $exception) {
198
-		$data = [
199
-			'Exception' => get_class($exception),
200
-			'Message' => $exception->getMessage(),
201
-			'Code' => $exception->getCode(),
202
-			'Trace' => $this->encodeTrace($exception->getTrace()),
203
-			'File' => $exception->getFile(),
204
-			'Line' => $exception->getLine(),
205
-		];
206
-
207
-		if ($exception instanceof HintException) {
208
-			$data['Hint'] = $exception->getHint();
209
-		}
210
-
211
-		if ($exception->getPrevious()) {
212
-			$data['Previous'] = $this->serializeException($exception->getPrevious());
213
-		}
214
-
215
-		return $data;
216
-	}
38
+    public const methodsWithSensitiveParameters = [
39
+        // Session/User
40
+        'completeLogin',
41
+        'login',
42
+        'checkPassword',
43
+        'checkPasswordNoLogging',
44
+        'loginWithPassword',
45
+        'updatePrivateKeyPassword',
46
+        'validateUserPass',
47
+        'loginWithToken',
48
+        '{closure}',
49
+        'createSessionToken',
50
+
51
+        // Provisioning
52
+        'addUser',
53
+
54
+        // TokenProvider
55
+        'getToken',
56
+        'isTokenPassword',
57
+        'getPassword',
58
+        'decryptPassword',
59
+        'logClientIn',
60
+        'generateToken',
61
+        'validateToken',
62
+
63
+        // TwoFactorAuth
64
+        'solveChallenge',
65
+        'verifyChallenge',
66
+
67
+        // ICrypto
68
+        'calculateHMAC',
69
+        'encrypt',
70
+        'decrypt',
71
+
72
+        // LoginController
73
+        'tryLogin',
74
+        'confirmPassword',
75
+
76
+        // LDAP
77
+        'bind',
78
+        'areCredentialsValid',
79
+        'invokeLDAPMethod',
80
+
81
+        // Encryption
82
+        'storeKeyPair',
83
+        'setupUser',
84
+        'checkSignature',
85
+
86
+        // files_external: OCA\Files_External\MountConfig
87
+        'getBackendStatus',
88
+
89
+        // files_external: UserStoragesController
90
+        'update',
91
+
92
+        // Preview providers, don't log big data strings
93
+        'imagecreatefromstring',
94
+    ];
95
+
96
+    /** @var SystemConfig */
97
+    private $systemConfig;
98
+
99
+    public function __construct(SystemConfig $systemConfig) {
100
+        $this->systemConfig = $systemConfig;
101
+    }
102
+
103
+    public const methodsWithSensitiveParametersByClass = [
104
+        SetupController::class => [
105
+            'run',
106
+            'display',
107
+            'loadAutoConfig',
108
+        ],
109
+        Setup::class => [
110
+            'install'
111
+        ],
112
+        Key::class => [
113
+            '__construct'
114
+        ],
115
+        \Redis::class => [
116
+            'auth'
117
+        ],
118
+        \RedisCluster::class => [
119
+            '__construct'
120
+        ]
121
+    ];
122
+
123
+    private function editTrace(array &$sensitiveValues, array $traceLine): array {
124
+        if (isset($traceLine['args'])) {
125
+            $sensitiveValues = array_merge($sensitiveValues, $traceLine['args']);
126
+        }
127
+        $traceLine['args'] = ['*** sensitive parameters replaced ***'];
128
+        return $traceLine;
129
+    }
130
+
131
+    private function filterTrace(array $trace) {
132
+        $sensitiveValues = [];
133
+        $trace = array_map(function (array $traceLine) use (&$sensitiveValues) {
134
+            $className = $traceLine['class'] ?? '';
135
+            if ($className && isset(self::methodsWithSensitiveParametersByClass[$className])
136
+                && in_array($traceLine['function'], self::methodsWithSensitiveParametersByClass[$className], true)) {
137
+                return $this->editTrace($sensitiveValues, $traceLine);
138
+            }
139
+            foreach (self::methodsWithSensitiveParameters as $sensitiveMethod) {
140
+                if (strpos($traceLine['function'], $sensitiveMethod) !== false) {
141
+                    return $this->editTrace($sensitiveValues, $traceLine);
142
+                }
143
+            }
144
+            return $traceLine;
145
+        }, $trace);
146
+        return array_map(function (array $traceLine) use ($sensitiveValues) {
147
+            if (isset($traceLine['args'])) {
148
+                $traceLine['args'] = $this->removeValuesFromArgs($traceLine['args'], $sensitiveValues);
149
+            }
150
+            return $traceLine;
151
+        }, $trace);
152
+    }
153
+
154
+    private function removeValuesFromArgs($args, $values) {
155
+        foreach ($args as &$arg) {
156
+            if (in_array($arg, $values, true)) {
157
+                $arg = '*** sensitive parameter replaced ***';
158
+            } elseif (is_array($arg)) {
159
+                $arg = $this->removeValuesFromArgs($arg, $values);
160
+            }
161
+        }
162
+        return $args;
163
+    }
164
+
165
+    private function encodeTrace($trace) {
166
+        $filteredTrace = $this->filterTrace($trace);
167
+        return array_map(function (array $line) {
168
+            if (isset($line['args'])) {
169
+                $line['args'] = array_map([$this, 'encodeArg'], $line['args']);
170
+            }
171
+            return $line;
172
+        }, $filteredTrace);
173
+    }
174
+
175
+    private function encodeArg($arg) {
176
+        if (is_object($arg)) {
177
+            $data = get_object_vars($arg);
178
+            $data['__class__'] = get_class($arg);
179
+            return array_map([$this, 'encodeArg'], $data);
180
+        }
181
+
182
+        if (is_array($arg)) {
183
+            // Only log the first 5 elements of an array unless we are on debug
184
+            if ((int)$this->systemConfig->getValue('loglevel', 2) !== 0) {
185
+                $elemCount = count($arg);
186
+                if ($elemCount > 5) {
187
+                    $arg = array_slice($arg, 0, 5);
188
+                    $arg[] = 'And ' . ($elemCount - 5) . ' more entries, set log level to debug to see all entries';
189
+                }
190
+            }
191
+            return array_map([$this, 'encodeArg'], $arg);
192
+        }
193
+
194
+        return $arg;
195
+    }
196
+
197
+    public function serializeException(\Throwable $exception) {
198
+        $data = [
199
+            'Exception' => get_class($exception),
200
+            'Message' => $exception->getMessage(),
201
+            'Code' => $exception->getCode(),
202
+            'Trace' => $this->encodeTrace($exception->getTrace()),
203
+            'File' => $exception->getFile(),
204
+            'Line' => $exception->getLine(),
205
+        ];
206
+
207
+        if ($exception instanceof HintException) {
208
+            $data['Hint'] = $exception->getHint();
209
+        }
210
+
211
+        if ($exception->getPrevious()) {
212
+            $data['Previous'] = $this->serializeException($exception->getPrevious());
213
+        }
214
+
215
+        return $data;
216
+    }
217 217
 }
Please login to merge, or discard this patch.