Completed
Push — master ( 034246...d4e9a8 )
by
unknown
19:42 queued 13s
created
apps/files_external/lib/Lib/Storage/SFTPWriteStream.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
 		if (isset($context[$name])) {
71 71
 			$context = $context[$name];
72 72
 		} else {
73
-			throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
73
+			throw new \BadMethodCallException('Invalid context, "'.$name.'" options not set');
74 74
 		}
75 75
 		if (isset($context['session']) and $context['session'] instanceof \phpseclib\Net\SFTP) {
76 76
 			$this->sftp = $context['session'];
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
 
83 83
 	public function stream_open($path, $mode, $options, &$opened_path) {
84 84
 		[, $path] = explode('://', $path);
85
-		$path = '/' . ltrim($path);
85
+		$path = '/'.ltrim($path);
86 86
 		$path = str_replace('//', '/', $path);
87 87
 
88 88
 		$this->loadContext('sftp');
Please login to merge, or discard this patch.
Indentation   +150 added lines, -150 removed lines patch added patch discarded remove patch
@@ -12,154 +12,154 @@
 block discarded – undo
12 12
 use phpseclib\Net\SSH2;
13 13
 
14 14
 class SFTPWriteStream implements File {
15
-	/** @var resource */
16
-	public $context;
17
-
18
-	/** @var \phpseclib\Net\SFTP */
19
-	private $sftp;
20
-
21
-	/** @var string */
22
-	private $handle;
23
-
24
-	/** @var int */
25
-	private $internalPosition = 0;
26
-
27
-	/** @var int */
28
-	private $writePosition = 0;
29
-
30
-	/** @var bool */
31
-	private $eof = false;
32
-
33
-	private $buffer = '';
34
-
35
-	public static function register($protocol = 'sftpwrite') {
36
-		if (in_array($protocol, stream_get_wrappers(), true)) {
37
-			return false;
38
-		}
39
-		return stream_wrapper_register($protocol, get_called_class());
40
-	}
41
-
42
-	/**
43
-	 * Load the source from the stream context and return the context options
44
-	 *
45
-	 * @throws \BadMethodCallException
46
-	 */
47
-	protected function loadContext(string $name) {
48
-		$context = stream_context_get_options($this->context);
49
-		if (isset($context[$name])) {
50
-			$context = $context[$name];
51
-		} else {
52
-			throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
53
-		}
54
-		if (isset($context['session']) and $context['session'] instanceof \phpseclib\Net\SFTP) {
55
-			$this->sftp = $context['session'];
56
-		} else {
57
-			throw new \BadMethodCallException('Invalid context, session not set');
58
-		}
59
-		return $context;
60
-	}
61
-
62
-	public function stream_open($path, $mode, $options, &$opened_path) {
63
-		[, $path] = explode('://', $path);
64
-		$path = '/' . ltrim($path);
65
-		$path = str_replace('//', '/', $path);
66
-
67
-		$this->loadContext('sftp');
68
-
69
-		if (!($this->sftp->bitmap & SSH2::MASK_LOGIN)) {
70
-			return false;
71
-		}
72
-
73
-		$remote_file = $this->sftp->_realpath($path);
74
-		if ($remote_file === false) {
75
-			return false;
76
-		}
77
-
78
-		$packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_TRUNCATE, 0);
79
-		if (!$this->sftp->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
80
-			return false;
81
-		}
82
-
83
-		$response = $this->sftp->_get_sftp_packet();
84
-		switch ($this->sftp->packet_type) {
85
-			case NET_SFTP_HANDLE:
86
-				$this->handle = substr($response, 4);
87
-				break;
88
-			case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
89
-				$this->sftp->_logError($response);
90
-				return false;
91
-			default:
92
-				user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
93
-				return false;
94
-		}
95
-
96
-		return true;
97
-	}
98
-
99
-	public function stream_seek($offset, $whence = SEEK_SET) {
100
-		return false;
101
-	}
102
-
103
-	public function stream_tell() {
104
-		return $this->writePosition;
105
-	}
106
-
107
-	public function stream_read($count) {
108
-		return false;
109
-	}
110
-
111
-	public function stream_write($data) {
112
-		$written = strlen($data);
113
-		$this->writePosition += $written;
114
-
115
-		$this->buffer .= $data;
116
-
117
-		if (strlen($this->buffer) > 64 * 1024) {
118
-			if (!$this->stream_flush()) {
119
-				return false;
120
-			}
121
-		}
122
-
123
-		return $written;
124
-	}
125
-
126
-	public function stream_set_option($option, $arg1, $arg2) {
127
-		return false;
128
-	}
129
-
130
-	public function stream_truncate($size) {
131
-		return false;
132
-	}
133
-
134
-	public function stream_stat() {
135
-		return false;
136
-	}
137
-
138
-	public function stream_lock($operation) {
139
-		return false;
140
-	}
141
-
142
-	public function stream_flush() {
143
-		$size = strlen($this->buffer);
144
-		$packet = pack('Na*N3a*', strlen($this->handle), $this->handle, $this->internalPosition / 4294967296, $this->internalPosition, $size, $this->buffer);
145
-		if (!$this->sftp->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
146
-			return false;
147
-		}
148
-		$this->internalPosition += $size;
149
-		$this->buffer = '';
150
-
151
-		return $this->sftp->_read_put_responses(1);
152
-	}
153
-
154
-	public function stream_eof() {
155
-		return $this->eof;
156
-	}
157
-
158
-	public function stream_close() {
159
-		$this->stream_flush();
160
-		if (!$this->sftp->_close_handle($this->handle)) {
161
-			return false;
162
-		}
163
-		return true;
164
-	}
15
+    /** @var resource */
16
+    public $context;
17
+
18
+    /** @var \phpseclib\Net\SFTP */
19
+    private $sftp;
20
+
21
+    /** @var string */
22
+    private $handle;
23
+
24
+    /** @var int */
25
+    private $internalPosition = 0;
26
+
27
+    /** @var int */
28
+    private $writePosition = 0;
29
+
30
+    /** @var bool */
31
+    private $eof = false;
32
+
33
+    private $buffer = '';
34
+
35
+    public static function register($protocol = 'sftpwrite') {
36
+        if (in_array($protocol, stream_get_wrappers(), true)) {
37
+            return false;
38
+        }
39
+        return stream_wrapper_register($protocol, get_called_class());
40
+    }
41
+
42
+    /**
43
+     * Load the source from the stream context and return the context options
44
+     *
45
+     * @throws \BadMethodCallException
46
+     */
47
+    protected function loadContext(string $name) {
48
+        $context = stream_context_get_options($this->context);
49
+        if (isset($context[$name])) {
50
+            $context = $context[$name];
51
+        } else {
52
+            throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
53
+        }
54
+        if (isset($context['session']) and $context['session'] instanceof \phpseclib\Net\SFTP) {
55
+            $this->sftp = $context['session'];
56
+        } else {
57
+            throw new \BadMethodCallException('Invalid context, session not set');
58
+        }
59
+        return $context;
60
+    }
61
+
62
+    public function stream_open($path, $mode, $options, &$opened_path) {
63
+        [, $path] = explode('://', $path);
64
+        $path = '/' . ltrim($path);
65
+        $path = str_replace('//', '/', $path);
66
+
67
+        $this->loadContext('sftp');
68
+
69
+        if (!($this->sftp->bitmap & SSH2::MASK_LOGIN)) {
70
+            return false;
71
+        }
72
+
73
+        $remote_file = $this->sftp->_realpath($path);
74
+        if ($remote_file === false) {
75
+            return false;
76
+        }
77
+
78
+        $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_TRUNCATE, 0);
79
+        if (!$this->sftp->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
80
+            return false;
81
+        }
82
+
83
+        $response = $this->sftp->_get_sftp_packet();
84
+        switch ($this->sftp->packet_type) {
85
+            case NET_SFTP_HANDLE:
86
+                $this->handle = substr($response, 4);
87
+                break;
88
+            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
89
+                $this->sftp->_logError($response);
90
+                return false;
91
+            default:
92
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
93
+                return false;
94
+        }
95
+
96
+        return true;
97
+    }
98
+
99
+    public function stream_seek($offset, $whence = SEEK_SET) {
100
+        return false;
101
+    }
102
+
103
+    public function stream_tell() {
104
+        return $this->writePosition;
105
+    }
106
+
107
+    public function stream_read($count) {
108
+        return false;
109
+    }
110
+
111
+    public function stream_write($data) {
112
+        $written = strlen($data);
113
+        $this->writePosition += $written;
114
+
115
+        $this->buffer .= $data;
116
+
117
+        if (strlen($this->buffer) > 64 * 1024) {
118
+            if (!$this->stream_flush()) {
119
+                return false;
120
+            }
121
+        }
122
+
123
+        return $written;
124
+    }
125
+
126
+    public function stream_set_option($option, $arg1, $arg2) {
127
+        return false;
128
+    }
129
+
130
+    public function stream_truncate($size) {
131
+        return false;
132
+    }
133
+
134
+    public function stream_stat() {
135
+        return false;
136
+    }
137
+
138
+    public function stream_lock($operation) {
139
+        return false;
140
+    }
141
+
142
+    public function stream_flush() {
143
+        $size = strlen($this->buffer);
144
+        $packet = pack('Na*N3a*', strlen($this->handle), $this->handle, $this->internalPosition / 4294967296, $this->internalPosition, $size, $this->buffer);
145
+        if (!$this->sftp->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
146
+            return false;
147
+        }
148
+        $this->internalPosition += $size;
149
+        $this->buffer = '';
150
+
151
+        return $this->sftp->_read_put_responses(1);
152
+    }
153
+
154
+    public function stream_eof() {
155
+        return $this->eof;
156
+    }
157
+
158
+    public function stream_close() {
159
+        $this->stream_flush();
160
+        if (!$this->sftp->_close_handle($this->handle)) {
161
+            return false;
162
+        }
163
+        return true;
164
+    }
165 165
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/Storage/SFTPReadStream.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -70,7 +70,7 @@  discard block
 block discarded – undo
70 70
 		if (isset($context[$name])) {
71 71
 			$context = $context[$name];
72 72
 		} else {
73
-			throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
73
+			throw new \BadMethodCallException('Invalid context, "'.$name.'" options not set');
74 74
 		}
75 75
 		if (isset($context['session']) and $context['session'] instanceof \phpseclib\Net\SFTP) {
76 76
 			$this->sftp = $context['session'];
@@ -82,7 +82,7 @@  discard block
 block discarded – undo
82 82
 
83 83
 	public function stream_open($path, $mode, $options, &$opened_path) {
84 84
 		[, $path] = explode('://', $path);
85
-		$path = '/' . ltrim($path);
85
+		$path = '/'.ltrim($path);
86 86
 		$path = str_replace('//', '/', $path);
87 87
 
88 88
 		$this->loadContext('sftp');
Please login to merge, or discard this patch.
Indentation   +202 added lines, -202 removed lines patch added patch discarded remove patch
@@ -12,206 +12,206 @@
 block discarded – undo
12 12
 use phpseclib\Net\SSH2;
13 13
 
14 14
 class SFTPReadStream implements File {
15
-	/** @var resource */
16
-	public $context;
17
-
18
-	/** @var \phpseclib\Net\SFTP */
19
-	private $sftp;
20
-
21
-	/** @var string */
22
-	private $handle;
23
-
24
-	/** @var int */
25
-	private $internalPosition = 0;
26
-
27
-	/** @var int */
28
-	private $readPosition = 0;
29
-
30
-	/** @var bool */
31
-	private $eof = false;
32
-
33
-	private $buffer = '';
34
-	private bool $pendingRead = false;
35
-	private int $size = 0;
36
-
37
-	public static function register($protocol = 'sftpread') {
38
-		if (in_array($protocol, stream_get_wrappers(), true)) {
39
-			return false;
40
-		}
41
-		return stream_wrapper_register($protocol, get_called_class());
42
-	}
43
-
44
-	/**
45
-	 * Load the source from the stream context and return the context options
46
-	 *
47
-	 * @throws \BadMethodCallException
48
-	 */
49
-	protected function loadContext(string $name) {
50
-		$context = stream_context_get_options($this->context);
51
-		if (isset($context[$name])) {
52
-			$context = $context[$name];
53
-		} else {
54
-			throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
55
-		}
56
-		if (isset($context['session']) and $context['session'] instanceof \phpseclib\Net\SFTP) {
57
-			$this->sftp = $context['session'];
58
-		} else {
59
-			throw new \BadMethodCallException('Invalid context, session not set');
60
-		}
61
-		if (isset($context['size'])) {
62
-			$this->size = $context['size'];
63
-		}
64
-		return $context;
65
-	}
66
-
67
-	public function stream_open($path, $mode, $options, &$opened_path) {
68
-		[, $path] = explode('://', $path);
69
-		$path = '/' . ltrim($path);
70
-		$path = str_replace('//', '/', $path);
71
-
72
-		$this->loadContext('sftp');
73
-
74
-		if (!($this->sftp->bitmap & SSH2::MASK_LOGIN)) {
75
-			return false;
76
-		}
77
-
78
-		$remote_file = $this->sftp->_realpath($path);
79
-		if ($remote_file === false) {
80
-			return false;
81
-		}
82
-
83
-		$packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0);
84
-		if (!$this->sftp->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
85
-			return false;
86
-		}
87
-
88
-		$response = $this->sftp->_get_sftp_packet();
89
-		switch ($this->sftp->packet_type) {
90
-			case NET_SFTP_HANDLE:
91
-				$this->handle = substr($response, 4);
92
-				break;
93
-			case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
94
-				$this->sftp->_logError($response);
95
-				return false;
96
-			default:
97
-				user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
98
-				return false;
99
-		}
100
-
101
-		$this->request_chunk(256 * 1024);
102
-
103
-		return true;
104
-	}
105
-
106
-	public function stream_seek($offset, $whence = SEEK_SET) {
107
-		switch ($whence) {
108
-			case SEEK_SET:
109
-				$this->seekTo($offset);
110
-				break;
111
-			case SEEK_CUR:
112
-				$this->seekTo($this->readPosition + $offset);
113
-				break;
114
-			case SEEK_END:
115
-				$this->seekTo($this->size + $offset);
116
-				break;
117
-		}
118
-		return true;
119
-	}
120
-
121
-	private function seekTo(int $offset): void {
122
-		$this->internalPosition = $offset;
123
-		$this->readPosition = $offset;
124
-		$this->buffer = '';
125
-		$this->request_chunk(256 * 1024);
126
-	}
127
-
128
-	public function stream_tell() {
129
-		return $this->readPosition;
130
-	}
131
-
132
-	public function stream_read($count) {
133
-		if (!$this->eof && strlen($this->buffer) < $count) {
134
-			$chunk = $this->read_chunk();
135
-			$this->buffer .= $chunk;
136
-			if (!$this->eof) {
137
-				$this->request_chunk(256 * 1024);
138
-			}
139
-		}
140
-
141
-		$data = substr($this->buffer, 0, $count);
142
-		$this->buffer = substr($this->buffer, $count);
143
-		$this->readPosition += strlen($data);
144
-
145
-		return $data;
146
-	}
147
-
148
-	private function request_chunk(int $size) {
149
-		if ($this->pendingRead) {
150
-			$this->sftp->_get_sftp_packet();
151
-		}
152
-
153
-		$packet = pack('Na*N3', strlen($this->handle), $this->handle, $this->internalPosition / 4294967296, $this->internalPosition, $size);
154
-		$this->pendingRead = true;
155
-		return $this->sftp->_send_sftp_packet(NET_SFTP_READ, $packet);
156
-	}
157
-
158
-	private function read_chunk() {
159
-		$this->pendingRead = false;
160
-		$response = $this->sftp->_get_sftp_packet();
161
-
162
-		switch ($this->sftp->packet_type) {
163
-			case NET_SFTP_DATA:
164
-				$temp = substr($response, 4);
165
-				$len = strlen($temp);
166
-				$this->internalPosition += $len;
167
-				return $temp;
168
-			case NET_SFTP_STATUS:
169
-				[1 => $status] = unpack('N', substr($response, 0, 4));
170
-				if ($status == NET_SFTP_STATUS_EOF) {
171
-					$this->eof = true;
172
-				}
173
-				return '';
174
-			default:
175
-				return '';
176
-		}
177
-	}
178
-
179
-	public function stream_write($data) {
180
-		return false;
181
-	}
182
-
183
-	public function stream_set_option($option, $arg1, $arg2) {
184
-		return false;
185
-	}
186
-
187
-	public function stream_truncate($size) {
188
-		return false;
189
-	}
190
-
191
-	public function stream_stat() {
192
-		return false;
193
-	}
194
-
195
-	public function stream_lock($operation) {
196
-		return false;
197
-	}
198
-
199
-	public function stream_flush() {
200
-		return false;
201
-	}
202
-
203
-	public function stream_eof() {
204
-		return $this->eof;
205
-	}
206
-
207
-	public function stream_close() {
208
-		// we still have a read request incoming that needs to be handled before we can close
209
-		if ($this->pendingRead) {
210
-			$this->sftp->_get_sftp_packet();
211
-		}
212
-		if (!$this->sftp->_close_handle($this->handle)) {
213
-			return false;
214
-		}
215
-		return true;
216
-	}
15
+    /** @var resource */
16
+    public $context;
17
+
18
+    /** @var \phpseclib\Net\SFTP */
19
+    private $sftp;
20
+
21
+    /** @var string */
22
+    private $handle;
23
+
24
+    /** @var int */
25
+    private $internalPosition = 0;
26
+
27
+    /** @var int */
28
+    private $readPosition = 0;
29
+
30
+    /** @var bool */
31
+    private $eof = false;
32
+
33
+    private $buffer = '';
34
+    private bool $pendingRead = false;
35
+    private int $size = 0;
36
+
37
+    public static function register($protocol = 'sftpread') {
38
+        if (in_array($protocol, stream_get_wrappers(), true)) {
39
+            return false;
40
+        }
41
+        return stream_wrapper_register($protocol, get_called_class());
42
+    }
43
+
44
+    /**
45
+     * Load the source from the stream context and return the context options
46
+     *
47
+     * @throws \BadMethodCallException
48
+     */
49
+    protected function loadContext(string $name) {
50
+        $context = stream_context_get_options($this->context);
51
+        if (isset($context[$name])) {
52
+            $context = $context[$name];
53
+        } else {
54
+            throw new \BadMethodCallException('Invalid context, "' . $name . '" options not set');
55
+        }
56
+        if (isset($context['session']) and $context['session'] instanceof \phpseclib\Net\SFTP) {
57
+            $this->sftp = $context['session'];
58
+        } else {
59
+            throw new \BadMethodCallException('Invalid context, session not set');
60
+        }
61
+        if (isset($context['size'])) {
62
+            $this->size = $context['size'];
63
+        }
64
+        return $context;
65
+    }
66
+
67
+    public function stream_open($path, $mode, $options, &$opened_path) {
68
+        [, $path] = explode('://', $path);
69
+        $path = '/' . ltrim($path);
70
+        $path = str_replace('//', '/', $path);
71
+
72
+        $this->loadContext('sftp');
73
+
74
+        if (!($this->sftp->bitmap & SSH2::MASK_LOGIN)) {
75
+            return false;
76
+        }
77
+
78
+        $remote_file = $this->sftp->_realpath($path);
79
+        if ($remote_file === false) {
80
+            return false;
81
+        }
82
+
83
+        $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0);
84
+        if (!$this->sftp->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
85
+            return false;
86
+        }
87
+
88
+        $response = $this->sftp->_get_sftp_packet();
89
+        switch ($this->sftp->packet_type) {
90
+            case NET_SFTP_HANDLE:
91
+                $this->handle = substr($response, 4);
92
+                break;
93
+            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
94
+                $this->sftp->_logError($response);
95
+                return false;
96
+            default:
97
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
98
+                return false;
99
+        }
100
+
101
+        $this->request_chunk(256 * 1024);
102
+
103
+        return true;
104
+    }
105
+
106
+    public function stream_seek($offset, $whence = SEEK_SET) {
107
+        switch ($whence) {
108
+            case SEEK_SET:
109
+                $this->seekTo($offset);
110
+                break;
111
+            case SEEK_CUR:
112
+                $this->seekTo($this->readPosition + $offset);
113
+                break;
114
+            case SEEK_END:
115
+                $this->seekTo($this->size + $offset);
116
+                break;
117
+        }
118
+        return true;
119
+    }
120
+
121
+    private function seekTo(int $offset): void {
122
+        $this->internalPosition = $offset;
123
+        $this->readPosition = $offset;
124
+        $this->buffer = '';
125
+        $this->request_chunk(256 * 1024);
126
+    }
127
+
128
+    public function stream_tell() {
129
+        return $this->readPosition;
130
+    }
131
+
132
+    public function stream_read($count) {
133
+        if (!$this->eof && strlen($this->buffer) < $count) {
134
+            $chunk = $this->read_chunk();
135
+            $this->buffer .= $chunk;
136
+            if (!$this->eof) {
137
+                $this->request_chunk(256 * 1024);
138
+            }
139
+        }
140
+
141
+        $data = substr($this->buffer, 0, $count);
142
+        $this->buffer = substr($this->buffer, $count);
143
+        $this->readPosition += strlen($data);
144
+
145
+        return $data;
146
+    }
147
+
148
+    private function request_chunk(int $size) {
149
+        if ($this->pendingRead) {
150
+            $this->sftp->_get_sftp_packet();
151
+        }
152
+
153
+        $packet = pack('Na*N3', strlen($this->handle), $this->handle, $this->internalPosition / 4294967296, $this->internalPosition, $size);
154
+        $this->pendingRead = true;
155
+        return $this->sftp->_send_sftp_packet(NET_SFTP_READ, $packet);
156
+    }
157
+
158
+    private function read_chunk() {
159
+        $this->pendingRead = false;
160
+        $response = $this->sftp->_get_sftp_packet();
161
+
162
+        switch ($this->sftp->packet_type) {
163
+            case NET_SFTP_DATA:
164
+                $temp = substr($response, 4);
165
+                $len = strlen($temp);
166
+                $this->internalPosition += $len;
167
+                return $temp;
168
+            case NET_SFTP_STATUS:
169
+                [1 => $status] = unpack('N', substr($response, 0, 4));
170
+                if ($status == NET_SFTP_STATUS_EOF) {
171
+                    $this->eof = true;
172
+                }
173
+                return '';
174
+            default:
175
+                return '';
176
+        }
177
+    }
178
+
179
+    public function stream_write($data) {
180
+        return false;
181
+    }
182
+
183
+    public function stream_set_option($option, $arg1, $arg2) {
184
+        return false;
185
+    }
186
+
187
+    public function stream_truncate($size) {
188
+        return false;
189
+    }
190
+
191
+    public function stream_stat() {
192
+        return false;
193
+    }
194
+
195
+    public function stream_lock($operation) {
196
+        return false;
197
+    }
198
+
199
+    public function stream_flush() {
200
+        return false;
201
+    }
202
+
203
+    public function stream_eof() {
204
+        return $this->eof;
205
+    }
206
+
207
+    public function stream_close() {
208
+        // we still have a read request incoming that needs to be handled before we can close
209
+        if ($this->pendingRead) {
210
+            $this->sftp->_get_sftp_packet();
211
+        }
212
+        if (!$this->sftp->_close_handle($this->handle)) {
213
+            return false;
214
+        }
215
+        return true;
216
+    }
217 217
 }
Please login to merge, or discard this patch.
core/Command/Db/Migrations/StatusCommand.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -62,10 +62,10 @@
 block discarded – undo
62 62
 			if (is_array($value)) {
63 63
 				$output->writeln("    <comment>>></comment> $key:");
64 64
 				foreach ($value as $subKey => $subValue) {
65
-					$output->writeln("        <comment>>></comment> $subKey: " . str_repeat(' ', 46 - strlen($subKey)) . $subValue);
65
+					$output->writeln("        <comment>>></comment> $subKey: ".str_repeat(' ', 46 - strlen($subKey)).$subValue);
66 66
 				}
67 67
 			} else {
68
-				$output->writeln("    <comment>>></comment> $key: " . str_repeat(' ', 50 - strlen($key)) . $value);
68
+				$output->writeln("    <comment>>></comment> $key: ".str_repeat(' ', 50 - strlen($key)).$value);
69 69
 			}
70 70
 		}
71 71
 		return 0;
Please login to merge, or discard this patch.
Indentation   +93 added lines, -93 removed lines patch added patch discarded remove patch
@@ -34,109 +34,109 @@
 block discarded – undo
34 34
 use Symfony\Component\Console\Output\OutputInterface;
35 35
 
36 36
 class StatusCommand extends Command implements CompletionAwareInterface {
37
-	public function __construct(
38
-		private Connection $connection,
39
-	) {
40
-		parent::__construct();
41
-	}
37
+    public function __construct(
38
+        private Connection $connection,
39
+    ) {
40
+        parent::__construct();
41
+    }
42 42
 
43
-	protected function configure() {
44
-		$this
45
-			->setName('migrations:status')
46
-			->setDescription('View the status of a set of migrations.')
47
-			->addArgument('app', InputArgument::REQUIRED, 'Name of the app this migration command shall work on');
48
-	}
43
+    protected function configure() {
44
+        $this
45
+            ->setName('migrations:status')
46
+            ->setDescription('View the status of a set of migrations.')
47
+            ->addArgument('app', InputArgument::REQUIRED, 'Name of the app this migration command shall work on');
48
+    }
49 49
 
50
-	public function execute(InputInterface $input, OutputInterface $output): int {
51
-		$appName = $input->getArgument('app');
52
-		$ms = new MigrationService($appName, $this->connection, new ConsoleOutput($output));
50
+    public function execute(InputInterface $input, OutputInterface $output): int {
51
+        $appName = $input->getArgument('app');
52
+        $ms = new MigrationService($appName, $this->connection, new ConsoleOutput($output));
53 53
 
54
-		$infos = $this->getMigrationsInfos($ms);
55
-		foreach ($infos as $key => $value) {
56
-			if (is_array($value)) {
57
-				$output->writeln("    <comment>>></comment> $key:");
58
-				foreach ($value as $subKey => $subValue) {
59
-					$output->writeln("        <comment>>></comment> $subKey: " . str_repeat(' ', 46 - strlen($subKey)) . $subValue);
60
-				}
61
-			} else {
62
-				$output->writeln("    <comment>>></comment> $key: " . str_repeat(' ', 50 - strlen($key)) . $value);
63
-			}
64
-		}
65
-		return 0;
66
-	}
54
+        $infos = $this->getMigrationsInfos($ms);
55
+        foreach ($infos as $key => $value) {
56
+            if (is_array($value)) {
57
+                $output->writeln("    <comment>>></comment> $key:");
58
+                foreach ($value as $subKey => $subValue) {
59
+                    $output->writeln("        <comment>>></comment> $subKey: " . str_repeat(' ', 46 - strlen($subKey)) . $subValue);
60
+                }
61
+            } else {
62
+                $output->writeln("    <comment>>></comment> $key: " . str_repeat(' ', 50 - strlen($key)) . $value);
63
+            }
64
+        }
65
+        return 0;
66
+    }
67 67
 
68
-	/**
69
-	 * @param string $optionName
70
-	 * @param CompletionContext $context
71
-	 * @return string[]
72
-	 */
73
-	public function completeOptionValues($optionName, CompletionContext $context) {
74
-		return [];
75
-	}
68
+    /**
69
+     * @param string $optionName
70
+     * @param CompletionContext $context
71
+     * @return string[]
72
+     */
73
+    public function completeOptionValues($optionName, CompletionContext $context) {
74
+        return [];
75
+    }
76 76
 
77
-	/**
78
-	 * @param string $argumentName
79
-	 * @param CompletionContext $context
80
-	 * @return string[]
81
-	 */
82
-	public function completeArgumentValues($argumentName, CompletionContext $context) {
83
-		if ($argumentName === 'app') {
84
-			$allApps = \OC_App::getAllApps();
85
-			return array_diff($allApps, \OC_App::getEnabledApps(true, true));
86
-		}
87
-		return [];
88
-	}
77
+    /**
78
+     * @param string $argumentName
79
+     * @param CompletionContext $context
80
+     * @return string[]
81
+     */
82
+    public function completeArgumentValues($argumentName, CompletionContext $context) {
83
+        if ($argumentName === 'app') {
84
+            $allApps = \OC_App::getAllApps();
85
+            return array_diff($allApps, \OC_App::getEnabledApps(true, true));
86
+        }
87
+        return [];
88
+    }
89 89
 
90
-	/**
91
-	 * @param MigrationService $ms
92
-	 * @return array associative array of human readable info name as key and the actual information as value
93
-	 */
94
-	public function getMigrationsInfos(MigrationService $ms) {
95
-		$executedMigrations = $ms->getMigratedVersions();
96
-		$availableMigrations = $ms->getAvailableVersions();
97
-		$executedUnavailableMigrations = array_diff($executedMigrations, array_keys($availableMigrations));
90
+    /**
91
+     * @param MigrationService $ms
92
+     * @return array associative array of human readable info name as key and the actual information as value
93
+     */
94
+    public function getMigrationsInfos(MigrationService $ms) {
95
+        $executedMigrations = $ms->getMigratedVersions();
96
+        $availableMigrations = $ms->getAvailableVersions();
97
+        $executedUnavailableMigrations = array_diff($executedMigrations, array_keys($availableMigrations));
98 98
 
99
-		$numExecutedUnavailableMigrations = count($executedUnavailableMigrations);
100
-		$numNewMigrations = count(array_diff(array_keys($availableMigrations), $executedMigrations));
101
-		$pending = $ms->describeMigrationStep('lastest');
99
+        $numExecutedUnavailableMigrations = count($executedUnavailableMigrations);
100
+        $numNewMigrations = count(array_diff(array_keys($availableMigrations), $executedMigrations));
101
+        $pending = $ms->describeMigrationStep('lastest');
102 102
 
103
-		$infos = [
104
-			'App' => $ms->getApp(),
105
-			'Version Table Name' => $ms->getMigrationsTableName(),
106
-			'Migrations Namespace' => $ms->getMigrationsNamespace(),
107
-			'Migrations Directory' => $ms->getMigrationsDirectory(),
108
-			'Previous Version' => $this->getFormattedVersionAlias($ms, 'prev'),
109
-			'Current Version' => $this->getFormattedVersionAlias($ms, 'current'),
110
-			'Next Version' => $this->getFormattedVersionAlias($ms, 'next'),
111
-			'Latest Version' => $this->getFormattedVersionAlias($ms, 'latest'),
112
-			'Executed Migrations' => count($executedMigrations),
113
-			'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations,
114
-			'Available Migrations' => count($availableMigrations),
115
-			'New Migrations' => $numNewMigrations,
116
-			'Pending Migrations' => count($pending) ? $pending : 'None'
117
-		];
103
+        $infos = [
104
+            'App' => $ms->getApp(),
105
+            'Version Table Name' => $ms->getMigrationsTableName(),
106
+            'Migrations Namespace' => $ms->getMigrationsNamespace(),
107
+            'Migrations Directory' => $ms->getMigrationsDirectory(),
108
+            'Previous Version' => $this->getFormattedVersionAlias($ms, 'prev'),
109
+            'Current Version' => $this->getFormattedVersionAlias($ms, 'current'),
110
+            'Next Version' => $this->getFormattedVersionAlias($ms, 'next'),
111
+            'Latest Version' => $this->getFormattedVersionAlias($ms, 'latest'),
112
+            'Executed Migrations' => count($executedMigrations),
113
+            'Executed Unavailable Migrations' => $numExecutedUnavailableMigrations,
114
+            'Available Migrations' => count($availableMigrations),
115
+            'New Migrations' => $numNewMigrations,
116
+            'Pending Migrations' => count($pending) ? $pending : 'None'
117
+        ];
118 118
 
119
-		return $infos;
120
-	}
119
+        return $infos;
120
+    }
121 121
 
122
-	/**
123
-	 * @param MigrationService $migrationService
124
-	 * @param string $alias
125
-	 * @return mixed|null|string
126
-	 */
127
-	private function getFormattedVersionAlias(MigrationService $migrationService, $alias) {
128
-		$migration = $migrationService->getMigration($alias);
129
-		//No version found
130
-		if ($migration === null) {
131
-			if ($alias === 'next') {
132
-				return 'Already at latest migration step';
133
-			}
122
+    /**
123
+     * @param MigrationService $migrationService
124
+     * @param string $alias
125
+     * @return mixed|null|string
126
+     */
127
+    private function getFormattedVersionAlias(MigrationService $migrationService, $alias) {
128
+        $migration = $migrationService->getMigration($alias);
129
+        //No version found
130
+        if ($migration === null) {
131
+            if ($alias === 'next') {
132
+                return 'Already at latest migration step';
133
+            }
134 134
 
135
-			if ($alias === 'prev') {
136
-				return 'Already at first migration step';
137
-			}
138
-		}
135
+            if ($alias === 'prev') {
136
+                return 'Already at first migration step';
137
+            }
138
+        }
139 139
 
140
-		return $migration;
141
-	}
140
+        return $migration;
141
+    }
142 142
 }
Please login to merge, or discard this patch.
core/Command/Security/ListCertificates.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 	protected function execute(InputInterface $input, OutputInterface $output): int {
54 54
 		$outputType = $input->getOption('output');
55 55
 		if ($outputType === self::OUTPUT_FORMAT_JSON || $outputType === self::OUTPUT_FORMAT_JSON_PRETTY) {
56
-			$certificates = array_map(function (ICertificate $certificate) {
56
+			$certificates = array_map(function(ICertificate $certificate) {
57 57
 				return [
58 58
 					'name' => $certificate->getName(),
59 59
 					'common_name' => $certificate->getCommonName(),
@@ -79,7 +79,7 @@  discard block
 block discarded – undo
79 79
 				'Issued By'
80 80
 			]);
81 81
 
82
-			$rows = array_map(function (ICertificate $certificate) {
82
+			$rows = array_map(function(ICertificate $certificate) {
83 83
 				return [
84 84
 					$certificate->getName(),
85 85
 					$certificate->getCommonName(),
Please login to merge, or discard this patch.
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -17,64 +17,64 @@
 block discarded – undo
17 17
 use Symfony\Component\Console\Output\OutputInterface;
18 18
 
19 19
 class ListCertificates extends Base {
20
-	protected IL10N $l;
20
+    protected IL10N $l;
21 21
 
22
-	public function __construct(
23
-		protected ICertificateManager $certificateManager,
24
-		IL10NFactory $l10nFactory,
25
-	) {
26
-		parent::__construct();
27
-		$this->l = $l10nFactory->get('core');
28
-	}
22
+    public function __construct(
23
+        protected ICertificateManager $certificateManager,
24
+        IL10NFactory $l10nFactory,
25
+    ) {
26
+        parent::__construct();
27
+        $this->l = $l10nFactory->get('core');
28
+    }
29 29
 
30
-	protected function configure() {
31
-		$this
32
-			->setName('security:certificates')
33
-			->setDescription('list trusted certificates');
34
-		parent::configure();
35
-	}
30
+    protected function configure() {
31
+        $this
32
+            ->setName('security:certificates')
33
+            ->setDescription('list trusted certificates');
34
+        parent::configure();
35
+    }
36 36
 
37
-	protected function execute(InputInterface $input, OutputInterface $output): int {
38
-		$outputType = $input->getOption('output');
39
-		if ($outputType === self::OUTPUT_FORMAT_JSON || $outputType === self::OUTPUT_FORMAT_JSON_PRETTY) {
40
-			$certificates = array_map(function (ICertificate $certificate) {
41
-				return [
42
-					'name' => $certificate->getName(),
43
-					'common_name' => $certificate->getCommonName(),
44
-					'organization' => $certificate->getOrganization(),
45
-					'expire' => $certificate->getExpireDate()->format(\DateTimeInterface::ATOM),
46
-					'issuer' => $certificate->getIssuerName(),
47
-					'issuer_organization' => $certificate->getIssuerOrganization(),
48
-					'issue_date' => $certificate->getIssueDate()->format(\DateTimeInterface::ATOM)
49
-				];
50
-			}, $this->certificateManager->listCertificates());
51
-			if ($outputType === self::OUTPUT_FORMAT_JSON) {
52
-				$output->writeln(json_encode(array_values($certificates)));
53
-			} else {
54
-				$output->writeln(json_encode(array_values($certificates), JSON_PRETTY_PRINT));
55
-			}
56
-		} else {
57
-			$table = new Table($output);
58
-			$table->setHeaders([
59
-				'File Name',
60
-				'Common Name',
61
-				'Organization',
62
-				'Valid Until',
63
-				'Issued By'
64
-			]);
37
+    protected function execute(InputInterface $input, OutputInterface $output): int {
38
+        $outputType = $input->getOption('output');
39
+        if ($outputType === self::OUTPUT_FORMAT_JSON || $outputType === self::OUTPUT_FORMAT_JSON_PRETTY) {
40
+            $certificates = array_map(function (ICertificate $certificate) {
41
+                return [
42
+                    'name' => $certificate->getName(),
43
+                    'common_name' => $certificate->getCommonName(),
44
+                    'organization' => $certificate->getOrganization(),
45
+                    'expire' => $certificate->getExpireDate()->format(\DateTimeInterface::ATOM),
46
+                    'issuer' => $certificate->getIssuerName(),
47
+                    'issuer_organization' => $certificate->getIssuerOrganization(),
48
+                    'issue_date' => $certificate->getIssueDate()->format(\DateTimeInterface::ATOM)
49
+                ];
50
+            }, $this->certificateManager->listCertificates());
51
+            if ($outputType === self::OUTPUT_FORMAT_JSON) {
52
+                $output->writeln(json_encode(array_values($certificates)));
53
+            } else {
54
+                $output->writeln(json_encode(array_values($certificates), JSON_PRETTY_PRINT));
55
+            }
56
+        } else {
57
+            $table = new Table($output);
58
+            $table->setHeaders([
59
+                'File Name',
60
+                'Common Name',
61
+                'Organization',
62
+                'Valid Until',
63
+                'Issued By'
64
+            ]);
65 65
 
66
-			$rows = array_map(function (ICertificate $certificate) {
67
-				return [
68
-					$certificate->getName(),
69
-					$certificate->getCommonName(),
70
-					$certificate->getOrganization(),
71
-					$this->l->l('date', $certificate->getExpireDate()),
72
-					$certificate->getIssuerName()
73
-				];
74
-			}, $this->certificateManager->listCertificates());
75
-			$table->setRows($rows);
76
-			$table->render();
77
-		}
78
-		return 0;
79
-	}
66
+            $rows = array_map(function (ICertificate $certificate) {
67
+                return [
68
+                    $certificate->getName(),
69
+                    $certificate->getCommonName(),
70
+                    $certificate->getOrganization(),
71
+                    $this->l->l('date', $certificate->getExpireDate()),
72
+                    $certificate->getIssuerName()
73
+                ];
74
+            }, $this->certificateManager->listCertificates());
75
+            $table->setRows($rows);
76
+            $table->render();
77
+        }
78
+        return 0;
79
+    }
80 80
 }
Please login to merge, or discard this patch.
core/Command/Encryption/SetDefaultModule.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -76,11 +76,11 @@
 block discarded – undo
76 76
 		$moduleId = $input->getArgument('module');
77 77
 
78 78
 		if ($moduleId === $this->encryptionManager->getDefaultEncryptionModuleId()) {
79
-			$output->writeln('"' . $moduleId . '"" is already the default module');
79
+			$output->writeln('"'.$moduleId.'"" is already the default module');
80 80
 		} elseif ($this->encryptionManager->setDefaultEncryptionModule($moduleId)) {
81
-			$output->writeln('<info>Set default module to "' . $moduleId . '"</info>');
81
+			$output->writeln('<info>Set default module to "'.$moduleId.'"</info>');
82 82
 		} else {
83
-			$output->writeln('<error>The specified module "' . $moduleId . '" does not exist</error>');
83
+			$output->writeln('<error>The specified module "'.$moduleId.'" does not exist</error>');
84 84
 			return 1;
85 85
 		}
86 86
 		return 0;
Please login to merge, or discard this patch.
Indentation   +41 added lines, -41 removed lines patch added patch discarded remove patch
@@ -15,45 +15,45 @@
 block discarded – undo
15 15
 use Symfony\Component\Console\Output\OutputInterface;
16 16
 
17 17
 class SetDefaultModule extends Command {
18
-	public function __construct(
19
-		protected IManager $encryptionManager,
20
-		protected IConfig $config,
21
-	) {
22
-		parent::__construct();
23
-	}
24
-
25
-	protected function configure() {
26
-		parent::configure();
27
-
28
-		$this
29
-			->setName('encryption:set-default-module')
30
-			->setDescription('Set the encryption default module')
31
-			->addArgument(
32
-				'module',
33
-				InputArgument::REQUIRED,
34
-				'ID of the encryption module that should be used'
35
-			)
36
-		;
37
-	}
38
-
39
-	protected function execute(InputInterface $input, OutputInterface $output): int {
40
-		$isMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false);
41
-		if ($isMaintenanceModeEnabled) {
42
-			$output->writeln('Maintenance mode must be disabled when setting default module,');
43
-			$output->writeln('in order to load the relevant encryption modules correctly.');
44
-			return 1;
45
-		}
46
-
47
-		$moduleId = $input->getArgument('module');
48
-
49
-		if ($moduleId === $this->encryptionManager->getDefaultEncryptionModuleId()) {
50
-			$output->writeln('"' . $moduleId . '"" is already the default module');
51
-		} elseif ($this->encryptionManager->setDefaultEncryptionModule($moduleId)) {
52
-			$output->writeln('<info>Set default module to "' . $moduleId . '"</info>');
53
-		} else {
54
-			$output->writeln('<error>The specified module "' . $moduleId . '" does not exist</error>');
55
-			return 1;
56
-		}
57
-		return 0;
58
-	}
18
+    public function __construct(
19
+        protected IManager $encryptionManager,
20
+        protected IConfig $config,
21
+    ) {
22
+        parent::__construct();
23
+    }
24
+
25
+    protected function configure() {
26
+        parent::configure();
27
+
28
+        $this
29
+            ->setName('encryption:set-default-module')
30
+            ->setDescription('Set the encryption default module')
31
+            ->addArgument(
32
+                'module',
33
+                InputArgument::REQUIRED,
34
+                'ID of the encryption module that should be used'
35
+            )
36
+        ;
37
+    }
38
+
39
+    protected function execute(InputInterface $input, OutputInterface $output): int {
40
+        $isMaintenanceModeEnabled = $this->config->getSystemValue('maintenance', false);
41
+        if ($isMaintenanceModeEnabled) {
42
+            $output->writeln('Maintenance mode must be disabled when setting default module,');
43
+            $output->writeln('in order to load the relevant encryption modules correctly.');
44
+            return 1;
45
+        }
46
+
47
+        $moduleId = $input->getArgument('module');
48
+
49
+        if ($moduleId === $this->encryptionManager->getDefaultEncryptionModuleId()) {
50
+            $output->writeln('"' . $moduleId . '"" is already the default module');
51
+        } elseif ($this->encryptionManager->setDefaultEncryptionModule($moduleId)) {
52
+            $output->writeln('<info>Set default module to "' . $moduleId . '"</info>');
53
+        } else {
54
+            $output->writeln('<error>The specified module "' . $moduleId . '" does not exist</error>');
55
+            return 1;
56
+        }
57
+        return 0;
58
+    }
59 59
 }
Please login to merge, or discard this patch.
core/Command/Db/ConvertFilecacheBigInt.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -93,7 +93,7 @@
 block discarded – undo
93 93
 					$column->setType(Type::getType(Types::BIGINT));
94 94
 					$column->setOptions(['length' => 20]);
95 95
 
96
-					$updates[] = '* ' . $tableName . '.' . $columnName;
96
+					$updates[] = '* '.$tableName.'.'.$columnName;
97 97
 				}
98 98
 			}
99 99
 		}
Please login to merge, or discard this patch.
Indentation   +86 added lines, -86 removed lines patch added patch discarded remove patch
@@ -18,90 +18,90 @@
 block discarded – undo
18 18
 use Symfony\Component\Console\Question\ConfirmationQuestion;
19 19
 
20 20
 class ConvertFilecacheBigInt extends Command {
21
-	public function __construct(
22
-		private Connection $connection,
23
-	) {
24
-		parent::__construct();
25
-	}
26
-
27
-	protected function configure() {
28
-		$this
29
-			->setName('db:convert-filecache-bigint')
30
-			->setDescription('Convert the ID columns of the filecache to BigInt');
31
-	}
32
-
33
-	/**
34
-	 * @return array<string,string[]>
35
-	 */
36
-	public static function getColumnsByTable(): array {
37
-		return [
38
-			'activity' => ['activity_id', 'object_id'],
39
-			'activity_mq' => ['mail_id'],
40
-			'authtoken' => ['id'],
41
-			'bruteforce_attempts' => ['id'],
42
-			'federated_reshares' => ['share_id'],
43
-			'filecache' => ['fileid', 'storage', 'parent', 'mimetype', 'mimepart', 'mtime', 'storage_mtime'],
44
-			'filecache_extended' => ['fileid'],
45
-			'files_trash' => ['auto_id'],
46
-			'file_locks' => ['id'],
47
-			'file_metadata' => ['id'],
48
-			'jobs' => ['id'],
49
-			'mimetypes' => ['id'],
50
-			'mounts' => ['id', 'storage_id', 'root_id', 'mount_id'],
51
-			'share_external' => ['id', 'parent'],
52
-			'storages' => ['numeric_id'],
53
-		];
54
-	}
55
-
56
-	protected function execute(InputInterface $input, OutputInterface $output): int {
57
-		$schema = new SchemaWrapper($this->connection);
58
-		$isSqlite = $this->connection->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE;
59
-		$updates = [];
60
-
61
-		$tables = static::getColumnsByTable();
62
-		foreach ($tables as $tableName => $columns) {
63
-			if (!$schema->hasTable($tableName)) {
64
-				continue;
65
-			}
66
-
67
-			$table = $schema->getTable($tableName);
68
-
69
-			foreach ($columns as $columnName) {
70
-				$column = $table->getColumn($columnName);
71
-				$isAutoIncrement = $column->getAutoincrement();
72
-				$isAutoIncrementOnSqlite = $isSqlite && $isAutoIncrement;
73
-				if ($column->getType()->getName() !== Types::BIGINT && !$isAutoIncrementOnSqlite) {
74
-					$column->setType(Type::getType(Types::BIGINT));
75
-					$column->setOptions(['length' => 20]);
76
-
77
-					$updates[] = '* ' . $tableName . '.' . $columnName;
78
-				}
79
-			}
80
-		}
81
-
82
-		if (empty($updates)) {
83
-			$output->writeln('<info>All tables already up to date!</info>');
84
-			return 0;
85
-		}
86
-
87
-		$output->writeln('<comment>Following columns will be updated:</comment>');
88
-		$output->writeln('');
89
-		$output->writeln($updates);
90
-		$output->writeln('');
91
-		$output->writeln('<comment>This can take up to hours, depending on the number of files in your instance!</comment>');
92
-
93
-		if ($input->isInteractive()) {
94
-			/** @var QuestionHelper $helper */
95
-			$helper = $this->getHelper('question');
96
-			$question = new ConfirmationQuestion('Continue with the conversion (y/n)? [n] ', false);
97
-
98
-			if (!$helper->ask($input, $output, $question)) {
99
-				return 1;
100
-			}
101
-		}
102
-
103
-		$this->connection->migrateToSchema($schema->getWrappedSchema());
104
-
105
-		return 0;
106
-	}
21
+    public function __construct(
22
+        private Connection $connection,
23
+    ) {
24
+        parent::__construct();
25
+    }
26
+
27
+    protected function configure() {
28
+        $this
29
+            ->setName('db:convert-filecache-bigint')
30
+            ->setDescription('Convert the ID columns of the filecache to BigInt');
31
+    }
32
+
33
+    /**
34
+     * @return array<string,string[]>
35
+     */
36
+    public static function getColumnsByTable(): array {
37
+        return [
38
+            'activity' => ['activity_id', 'object_id'],
39
+            'activity_mq' => ['mail_id'],
40
+            'authtoken' => ['id'],
41
+            'bruteforce_attempts' => ['id'],
42
+            'federated_reshares' => ['share_id'],
43
+            'filecache' => ['fileid', 'storage', 'parent', 'mimetype', 'mimepart', 'mtime', 'storage_mtime'],
44
+            'filecache_extended' => ['fileid'],
45
+            'files_trash' => ['auto_id'],
46
+            'file_locks' => ['id'],
47
+            'file_metadata' => ['id'],
48
+            'jobs' => ['id'],
49
+            'mimetypes' => ['id'],
50
+            'mounts' => ['id', 'storage_id', 'root_id', 'mount_id'],
51
+            'share_external' => ['id', 'parent'],
52
+            'storages' => ['numeric_id'],
53
+        ];
54
+    }
55
+
56
+    protected function execute(InputInterface $input, OutputInterface $output): int {
57
+        $schema = new SchemaWrapper($this->connection);
58
+        $isSqlite = $this->connection->getDatabaseProvider() === IDBConnection::PLATFORM_SQLITE;
59
+        $updates = [];
60
+
61
+        $tables = static::getColumnsByTable();
62
+        foreach ($tables as $tableName => $columns) {
63
+            if (!$schema->hasTable($tableName)) {
64
+                continue;
65
+            }
66
+
67
+            $table = $schema->getTable($tableName);
68
+
69
+            foreach ($columns as $columnName) {
70
+                $column = $table->getColumn($columnName);
71
+                $isAutoIncrement = $column->getAutoincrement();
72
+                $isAutoIncrementOnSqlite = $isSqlite && $isAutoIncrement;
73
+                if ($column->getType()->getName() !== Types::BIGINT && !$isAutoIncrementOnSqlite) {
74
+                    $column->setType(Type::getType(Types::BIGINT));
75
+                    $column->setOptions(['length' => 20]);
76
+
77
+                    $updates[] = '* ' . $tableName . '.' . $columnName;
78
+                }
79
+            }
80
+        }
81
+
82
+        if (empty($updates)) {
83
+            $output->writeln('<info>All tables already up to date!</info>');
84
+            return 0;
85
+        }
86
+
87
+        $output->writeln('<comment>Following columns will be updated:</comment>');
88
+        $output->writeln('');
89
+        $output->writeln($updates);
90
+        $output->writeln('');
91
+        $output->writeln('<comment>This can take up to hours, depending on the number of files in your instance!</comment>');
92
+
93
+        if ($input->isInteractive()) {
94
+            /** @var QuestionHelper $helper */
95
+            $helper = $this->getHelper('question');
96
+            $question = new ConfirmationQuestion('Continue with the conversion (y/n)? [n] ', false);
97
+
98
+            if (!$helper->ask($input, $output, $question)) {
99
+                return 1;
100
+            }
101
+        }
102
+
103
+        $this->connection->migrateToSchema($schema->getWrappedSchema());
104
+
105
+        return 0;
106
+    }
107 107
 }
Please login to merge, or discard this patch.
core/Migrations/Version16000Date20190212081545.php 1 patch
Indentation   +66 added lines, -66 removed lines patch added patch discarded remove patch
@@ -35,72 +35,72 @@
 block discarded – undo
35 35
 use OCP\Migration\SimpleMigrationStep;
36 36
 
37 37
 class Version16000Date20190212081545 extends SimpleMigrationStep {
38
-	/**
39
-	 * @param IOutput $output
40
-	 * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
41
-	 * @param array $options
42
-	 *
43
-	 * @return ISchemaWrapper
44
-	 */
45
-	public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper {
46
-		/** @var ISchemaWrapper $schema */
47
-		$schema = $schemaClosure();
38
+    /**
39
+     * @param IOutput $output
40
+     * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
41
+     * @param array $options
42
+     *
43
+     * @return ISchemaWrapper
44
+     */
45
+    public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ISchemaWrapper {
46
+        /** @var ISchemaWrapper $schema */
47
+        $schema = $schemaClosure();
48 48
 
49
-		$table = $schema->createTable('login_flow_v2');
50
-		$table->addColumn('id', Types::BIGINT, [
51
-			'autoincrement' => true,
52
-			'notnull' => true,
53
-			'length' => 20,
54
-			'unsigned' => true,
55
-		]);
56
-		$table->addColumn('timestamp', Types::BIGINT, [
57
-			'notnull' => true,
58
-			'length' => 20,
59
-			'unsigned' => true,
60
-		]);
61
-		$table->addColumn('started', Types::SMALLINT, [
62
-			'notnull' => true,
63
-			'length' => 1,
64
-			'unsigned' => true,
65
-			'default' => 0,
66
-		]);
67
-		$table->addColumn('poll_token', Types::STRING, [
68
-			'notnull' => true,
69
-			'length' => 255,
70
-		]);
71
-		$table->addColumn('login_token', Types::STRING, [
72
-			'notnull' => true,
73
-			'length' => 255,
74
-		]);
75
-		$table->addColumn('public_key', Types::TEXT, [
76
-			'notnull' => true,
77
-			'length' => 32768,
78
-		]);
79
-		$table->addColumn('private_key', Types::TEXT, [
80
-			'notnull' => true,
81
-			'length' => 32768,
82
-		]);
83
-		$table->addColumn('client_name', Types::STRING, [
84
-			'notnull' => true,
85
-			'length' => 255,
86
-		]);
87
-		$table->addColumn('login_name', Types::STRING, [
88
-			'notnull' => false,
89
-			'length' => 255,
90
-		]);
91
-		$table->addColumn('server', Types::STRING, [
92
-			'notnull' => false,
93
-			'length' => 255,
94
-		]);
95
-		$table->addColumn('app_password', Types::STRING, [
96
-			'notnull' => false,
97
-			'length' => 1024,
98
-		]);
99
-		$table->setPrimaryKey(['id']);
100
-		$table->addUniqueIndex(['poll_token'], 'poll_token');
101
-		$table->addUniqueIndex(['login_token'], 'login_token');
102
-		$table->addIndex(['timestamp'], 'timestamp');
49
+        $table = $schema->createTable('login_flow_v2');
50
+        $table->addColumn('id', Types::BIGINT, [
51
+            'autoincrement' => true,
52
+            'notnull' => true,
53
+            'length' => 20,
54
+            'unsigned' => true,
55
+        ]);
56
+        $table->addColumn('timestamp', Types::BIGINT, [
57
+            'notnull' => true,
58
+            'length' => 20,
59
+            'unsigned' => true,
60
+        ]);
61
+        $table->addColumn('started', Types::SMALLINT, [
62
+            'notnull' => true,
63
+            'length' => 1,
64
+            'unsigned' => true,
65
+            'default' => 0,
66
+        ]);
67
+        $table->addColumn('poll_token', Types::STRING, [
68
+            'notnull' => true,
69
+            'length' => 255,
70
+        ]);
71
+        $table->addColumn('login_token', Types::STRING, [
72
+            'notnull' => true,
73
+            'length' => 255,
74
+        ]);
75
+        $table->addColumn('public_key', Types::TEXT, [
76
+            'notnull' => true,
77
+            'length' => 32768,
78
+        ]);
79
+        $table->addColumn('private_key', Types::TEXT, [
80
+            'notnull' => true,
81
+            'length' => 32768,
82
+        ]);
83
+        $table->addColumn('client_name', Types::STRING, [
84
+            'notnull' => true,
85
+            'length' => 255,
86
+        ]);
87
+        $table->addColumn('login_name', Types::STRING, [
88
+            'notnull' => false,
89
+            'length' => 255,
90
+        ]);
91
+        $table->addColumn('server', Types::STRING, [
92
+            'notnull' => false,
93
+            'length' => 255,
94
+        ]);
95
+        $table->addColumn('app_password', Types::STRING, [
96
+            'notnull' => false,
97
+            'length' => 1024,
98
+        ]);
99
+        $table->setPrimaryKey(['id']);
100
+        $table->addUniqueIndex(['poll_token'], 'poll_token');
101
+        $table->addUniqueIndex(['login_token'], 'login_token');
102
+        $table->addIndex(['timestamp'], 'timestamp');
103 103
 
104
-		return $schema;
105
-	}
104
+        return $schema;
105
+    }
106 106
 }
Please login to merge, or discard this patch.
core/Migrations/Version13000Date20170705121758.php 1 patch
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -30,65 +30,65 @@
 block discarded – undo
30 30
 use OCP\Migration\SimpleMigrationStep;
31 31
 
32 32
 class Version13000Date20170705121758 extends SimpleMigrationStep {
33
-	/**
34
-	 * @param IOutput $output
35
-	 * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
36
-	 * @param array $options
37
-	 * @return null|ISchemaWrapper
38
-	 * @since 13.0.0
39
-	 */
40
-	public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
41
-		/** @var ISchemaWrapper $schema */
42
-		$schema = $schemaClosure();
33
+    /**
34
+     * @param IOutput $output
35
+     * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
36
+     * @param array $options
37
+     * @return null|ISchemaWrapper
38
+     * @since 13.0.0
39
+     */
40
+    public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
41
+        /** @var ISchemaWrapper $schema */
42
+        $schema = $schemaClosure();
43 43
 
44
-		if (!$schema->hasTable('personal_sections')) {
45
-			$table = $schema->createTable('personal_sections');
44
+        if (!$schema->hasTable('personal_sections')) {
45
+            $table = $schema->createTable('personal_sections');
46 46
 
47
-			$table->addColumn('id', Types::STRING, [
48
-				'notnull' => false,
49
-				'length' => 64,
50
-			]);
51
-			$table->addColumn('class', Types::STRING, [
52
-				'notnull' => true,
53
-				'length' => 255,
54
-			]);
55
-			$table->addColumn('priority', Types::INTEGER, [
56
-				'notnull' => true,
57
-				'length' => 6,
58
-				'default' => 0,
59
-			]);
47
+            $table->addColumn('id', Types::STRING, [
48
+                'notnull' => false,
49
+                'length' => 64,
50
+            ]);
51
+            $table->addColumn('class', Types::STRING, [
52
+                'notnull' => true,
53
+                'length' => 255,
54
+            ]);
55
+            $table->addColumn('priority', Types::INTEGER, [
56
+                'notnull' => true,
57
+                'length' => 6,
58
+                'default' => 0,
59
+            ]);
60 60
 
61
-			$table->setPrimaryKey(['id'], 'personal_sections_id_index');
62
-			$table->addUniqueIndex(['class'], 'personal_sections_class');
63
-		}
61
+            $table->setPrimaryKey(['id'], 'personal_sections_id_index');
62
+            $table->addUniqueIndex(['class'], 'personal_sections_class');
63
+        }
64 64
 
65
-		if (!$schema->hasTable('personal_settings')) {
66
-			$table = $schema->createTable('personal_settings');
65
+        if (!$schema->hasTable('personal_settings')) {
66
+            $table = $schema->createTable('personal_settings');
67 67
 
68
-			$table->addColumn('id', Types::INTEGER, [
69
-				'autoincrement' => true,
70
-				'notnull' => true,
71
-				'length' => 20,
72
-			]);
73
-			$table->addColumn('class', Types::STRING, [
74
-				'notnull' => true,
75
-				'length' => 255,
76
-			]);
77
-			$table->addColumn('section', Types::STRING, [
78
-				'notnull' => false,
79
-				'length' => 64,
80
-			]);
81
-			$table->addColumn('priority', Types::INTEGER, [
82
-				'notnull' => true,
83
-				'length' => 6,
84
-				'default' => 0,
85
-			]);
68
+            $table->addColumn('id', Types::INTEGER, [
69
+                'autoincrement' => true,
70
+                'notnull' => true,
71
+                'length' => 20,
72
+            ]);
73
+            $table->addColumn('class', Types::STRING, [
74
+                'notnull' => true,
75
+                'length' => 255,
76
+            ]);
77
+            $table->addColumn('section', Types::STRING, [
78
+                'notnull' => false,
79
+                'length' => 64,
80
+            ]);
81
+            $table->addColumn('priority', Types::INTEGER, [
82
+                'notnull' => true,
83
+                'length' => 6,
84
+                'default' => 0,
85
+            ]);
86 86
 
87
-			$table->setPrimaryKey(['id'], 'personal_settings_id_index');
88
-			$table->addUniqueIndex(['class'], 'personal_settings_class');
89
-			$table->addIndex(['section'], 'personal_settings_section');
90
-		}
87
+            $table->setPrimaryKey(['id'], 'personal_settings_id_index');
88
+            $table->addUniqueIndex(['class'], 'personal_settings_class');
89
+            $table->addIndex(['section'], 'personal_settings_section');
90
+        }
91 91
 
92
-		return $schema;
93
-	}
92
+        return $schema;
93
+    }
94 94
 }
Please login to merge, or discard this patch.
apps/dav/lib/Migration/Version1006Date20180619154313.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -35,61 +35,61 @@
 block discarded – undo
35 35
  */
36 36
 class Version1006Date20180619154313 extends SimpleMigrationStep {
37 37
 
38
-	/**
39
-	 * @param IOutput $output
40
-	 * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
41
-	 * @param array $options
42
-	 * @return null|ISchemaWrapper
43
-	 * @since 13.0.0
44
-	 */
45
-	public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
46
-		/** @var ISchemaWrapper $schema */
47
-		$schema = $schemaClosure();
38
+    /**
39
+     * @param IOutput $output
40
+     * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
41
+     * @param array $options
42
+     * @return null|ISchemaWrapper
43
+     * @since 13.0.0
44
+     */
45
+    public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
46
+        /** @var ISchemaWrapper $schema */
47
+        $schema = $schemaClosure();
48 48
 
49
-		if (!$schema->hasTable('calendar_invitations')) {
50
-			$table = $schema->createTable('calendar_invitations');
49
+        if (!$schema->hasTable('calendar_invitations')) {
50
+            $table = $schema->createTable('calendar_invitations');
51 51
 
52
-			$table->addColumn('id', Types::BIGINT, [
53
-				'autoincrement' => true,
54
-				'notnull' => true,
55
-				'length' => 11,
56
-				'unsigned' => true,
57
-			]);
58
-			$table->addColumn('uid', Types::STRING, [
59
-				'notnull' => true,
60
-				'length' => 255,
61
-			]);
62
-			$table->addColumn('recurrenceid', Types::STRING, [
63
-				'notnull' => false,
64
-				'length' => 255,
65
-			]);
66
-			$table->addColumn('attendee', Types::STRING, [
67
-				'notnull' => true,
68
-				'length' => 255,
69
-			]);
70
-			$table->addColumn('organizer', Types::STRING, [
71
-				'notnull' => true,
72
-				'length' => 255,
73
-			]);
74
-			$table->addColumn('sequence', Types::BIGINT, [
75
-				'notnull' => false,
76
-				'length' => 11,
77
-				'unsigned' => true,
78
-			]);
79
-			$table->addColumn('token', Types::STRING, [
80
-				'notnull' => true,
81
-				'length' => 60,
82
-			]);
83
-			$table->addColumn('expiration', Types::BIGINT, [
84
-				'notnull' => true,
85
-				'length' => 11,
86
-				'unsigned' => true,
87
-			]);
52
+            $table->addColumn('id', Types::BIGINT, [
53
+                'autoincrement' => true,
54
+                'notnull' => true,
55
+                'length' => 11,
56
+                'unsigned' => true,
57
+            ]);
58
+            $table->addColumn('uid', Types::STRING, [
59
+                'notnull' => true,
60
+                'length' => 255,
61
+            ]);
62
+            $table->addColumn('recurrenceid', Types::STRING, [
63
+                'notnull' => false,
64
+                'length' => 255,
65
+            ]);
66
+            $table->addColumn('attendee', Types::STRING, [
67
+                'notnull' => true,
68
+                'length' => 255,
69
+            ]);
70
+            $table->addColumn('organizer', Types::STRING, [
71
+                'notnull' => true,
72
+                'length' => 255,
73
+            ]);
74
+            $table->addColumn('sequence', Types::BIGINT, [
75
+                'notnull' => false,
76
+                'length' => 11,
77
+                'unsigned' => true,
78
+            ]);
79
+            $table->addColumn('token', Types::STRING, [
80
+                'notnull' => true,
81
+                'length' => 60,
82
+            ]);
83
+            $table->addColumn('expiration', Types::BIGINT, [
84
+                'notnull' => true,
85
+                'length' => 11,
86
+                'unsigned' => true,
87
+            ]);
88 88
 
89
-			$table->setPrimaryKey(['id']);
90
-			$table->addIndex(['token'], 'calendar_invitation_tokens');
89
+            $table->setPrimaryKey(['id']);
90
+            $table->addIndex(['token'], 'calendar_invitation_tokens');
91 91
 
92
-			return $schema;
93
-		}
94
-	}
92
+            return $schema;
93
+        }
94
+    }
95 95
 }
Please login to merge, or discard this patch.