PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.1-beta.3
Jetpack – WP Security, Backup, Speed, & Growth v16.1-beta.3
16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / vendor / wp-php-toolkit / filesystem / Layer / class-chrootlayer.php
jetpack / vendor / wp-php-toolkit / filesystem / Layer Last commit date
class-chrootlayer.php 6 days ago class-layer.php 6 days ago
class-chrootlayer.php
154 lines
1 <?php
2
3 namespace WordPress\Filesystem\Layer;
4
5 use WordPress\ByteStream\ReadStream\ByteReadStream;
6 use WordPress\ByteStream\WriteStream\ByteWriteStream;
7 use WordPress\Filesystem\Filesystem;
8 use WordPress\Filesystem\LocalFilesystem;
9
10 use function WordPress\Filesystem\wp_join_unix_paths;
11 use function WordPress\Filesystem\wp_unix_path_resolve_dots;
12
13 /**
14 * A filesystem wrapper that chroot's the filesystem to a specific path.
15 */
16 class ChrootLayer extends Layer {
17
18 /**
19 * @var string
20 */
21 private $chroot;
22
23 /**
24 * @param Filesystem $fs The filesystem to chroot.
25 * @param string $chroot The root path to chroot to.
26 */
27 public function __construct( Filesystem $fs, $chroot ) {
28 parent::__construct( $fs );
29 $this->chroot = $this->forward_slashes_on_local_filesystem_on_windows(
30 rtrim( $chroot, '/' ) . '/'
31 );
32 }
33
34 /**
35 * Transforms an absolute path or relative path to be contained within a chroot.
36 *
37 * @param string $path The path to normalize.
38 *
39 * @return string The normalized path.
40 */
41 public function chrooted_path( $path ) {
42 $path = $this->forward_slashes_on_local_filesystem_on_windows( $path );
43 return wp_join_unix_paths(
44 $this->chroot,
45 wp_unix_path_resolve_dots( $path )
46 );
47 }
48
49 /**
50 * Make sure we use forward slashes when addressing a local filesystem on
51 * a Windows host. This allows all the wp_unix_* functions to work.
52 *
53 * This is an abstraction leak! ChrootLayer is generic but it makes choices
54 * on behalf of LocalFilesystem.
55 *
56 * @TODO: Reorganize the code to avoid this. Otherwise, every Layer class
57 * will need to implement this logic. That's error-prone.
58 *
59 * @param string $path The path to normalize.
60 *
61 * @return string The normalized path.
62 */
63 private function forward_slashes_on_local_filesystem_on_windows( $path ) {
64 if ( '\\' === DIRECTORY_SEPARATOR && $this->fs instanceof LocalFilesystem ) {
65 return str_replace( '\\', '/', $path );
66 }
67 return $path;
68 }
69
70 public function exists( $path ) {
71 $path = $this->chrooted_path( $path );
72
73 return $this->fs->exists( $path );
74 }
75
76 public function is_file( $path ) {
77 $path = $this->chrooted_path( $path );
78
79 return $this->fs->is_file( $path );
80 }
81
82 public function is_dir( $path ) {
83 $path = $this->chrooted_path( $path );
84
85 return $this->fs->is_dir( $path );
86 }
87
88 public function mkdir( $path, $options = array() ) {
89 $path = $this->chrooted_path( $path );
90
91 return $this->fs->mkdir( $path, $options );
92 }
93
94 public function rm( $path, $options = array() ) {
95 $path = $this->chrooted_path( $path );
96
97 return $this->fs->rm( $path, $options );
98 }
99
100 public function rmdir( $path, $options = array() ) {
101 $path = $this->chrooted_path( $path );
102
103 return $this->fs->rmdir( $path, $options );
104 }
105
106 public function ls( $path = '/' ) {
107 $path = $this->chrooted_path( $path );
108
109 return $this->fs->ls( $path );
110 }
111
112 public function open_read_stream( $path ): ByteReadStream {
113 $path = $this->chrooted_path( $path );
114
115 return $this->fs->open_read_stream( $path );
116 }
117
118 public function open_write_stream( $path ): ByteWriteStream {
119 $path = $this->chrooted_path( $path );
120
121 return $this->fs->open_write_stream( $path );
122 }
123
124 public function copy( $source, $destination, $options = array() ) {
125 $source = $this->chrooted_path( $source );
126 $destination = $this->chrooted_path( $destination );
127
128 return $this->fs->copy( $source, $destination, $options );
129 }
130
131 public function rename( $source, $destination, $options = array() ) {
132 $source = $this->chrooted_path( $source );
133 $destination = $this->chrooted_path( $destination );
134
135 return $this->fs->rename( $source, $destination, $options );
136 }
137
138 public function get_contents( $path ) {
139 $path = $this->chrooted_path( $path );
140
141 return $this->fs->get_contents( $path );
142 }
143
144 public function put_contents( $path, $contents, $options = array() ) {
145 $path = $this->chrooted_path( $path );
146
147 return $this->fs->put_contents( $path, $contents, $options );
148 }
149
150 public function get_meta(): array {
151 return array_merge( array( 'chroot' => $this->chroot ), $this->fs->get_meta() );
152 }
153 }
154