diff --git a/src/Auth_Command.php b/src/Auth_Command.php index 17a600e..865ef5f 100644 --- a/src/Auth_Command.php +++ b/src/Auth_Command.php @@ -81,14 +81,15 @@ public function create( $args, $assoc_args ) { verify_htpasswd_is_present(); - $global = $this->populate_info( $args, __FUNCTION__ ); - $ips = \EE\Utils\get_flag_value( $assoc_args, 'ip' ); - $site_url = $global ? 'default' : $this->site_data->site_url; + $global = $this->populate_info( $args, __FUNCTION__ ); + $ips = \EE\Utils\get_flag_value( $assoc_args, 'ip' ); + $site_url = $global ? 'default' : $this->site_data->site_url; + $site_type = $global ? 'wp' : $this->site_data->app_sub_type; if ( $ips ) { $this->create_whitelist( $site_url, $ips ); } else { - $this->create_auth( $assoc_args, $global, $site_url ); + $this->create_auth( $assoc_args, $global, $site_url, $site_type ); } } @@ -98,10 +99,11 @@ public function create( $args, $assoc_args ) { * @param array $assoc_args Assoc args passed to command * @param bool $global Enable auth on global * @param string $site_url URL of site + * @param string $site_type Type of site: wp|subdir|subdom * * @throws Exception */ - private function create_auth( array $assoc_args, bool $global, string $site_url ) { + private function create_auth( array $assoc_args, bool $global, string $site_url, string $site_type ) { $user = \EE\Utils\get_flag_value( $assoc_args, 'user', 'ee-' . EE\Utils\random_password( 6 ) ); $pass = \EE\Utils\get_flag_value( $assoc_args, 'pass', EE\Utils\random_password() ); $auth_data = [ @@ -133,9 +135,9 @@ private function create_auth( array $assoc_args, bool $global, string $site_url Auth::create( $auth_data ); if ( 'default' === $site_url ) { - $this->generate_global_auth_files(); + $this->generate_global_auth_files( $site_type ); } else { - $this->generate_site_auth_files( $site_url ); + $this->generate_site_auth_files( $site_url, $site_type ); } EE::log( 'Reloading global reverse proxy.' ); @@ -221,9 +223,11 @@ private function regen_admin_tools_auth() { /** * Generates auth files for global auth and all sites. * + * @param string $site_type Type of site: wp|subdir|subdom + * * @throws Exception */ - private function generate_global_auth_files() { + private function generate_global_auth_files( $site_type ) { $global_admin_tools_auth = Auth::get_global_admin_tools_auth(); @@ -256,7 +260,7 @@ private function generate_global_auth_files() { ); foreach ( $sites as $site ) { - $this->generate_site_auth_files( $site ); + $this->generate_site_auth_files( $site, $site_type ); } } } @@ -265,11 +269,28 @@ private function generate_global_auth_files() { * Generates auth files for a site * * @param string $site_url URL of site + * @param string $site_type Type of site: wp|subdir|subdom * * @throws Exception */ - private function generate_site_auth_files( string $site_url ) { - $site_auth_file = EE_ROOT_DIR . '/services/nginx-proxy/htpasswd/' . $site_url; + private function generate_site_auth_files( string $site_url, string $site_type ) { + + $auth_file_name = ''; + switch ( $site_type ) { + case 'wp': + $auth_file_name = $site_url; + break; + case 'subdir': + $auth_file_name = $site_url; + break; + case 'subdom': + $auth_file_name = '*.' . $site_url; + break; + default: + throw new Exception( 'unexpected site type' ); + } + $site_auth_file = EE_ROOT_DIR . '/services/nginx-proxy/htpasswd/' . $auth_file_name; + $this->fs->remove( $site_auth_file ); $auths = array_merge( @@ -280,10 +301,10 @@ private function generate_site_auth_files( string $site_url ) { foreach ( $auths as $key => $auth ) { $flags = 'b'; - if ( $key === 0 ) { + if ( 0 === $key ) { $flags = 'bc'; } - EE::exec( sprintf( 'docker exec %s htpasswd -%s /etc/nginx/htpasswd/%s %s %s', EE_PROXY_TYPE, $flags, $site_url, $auth->username, $auth->password ) ); + EE::exec( sprintf( 'docker exec %s htpasswd -%s /etc/nginx/htpasswd/%s %s %s', EE_PROXY_TYPE, $flags, $auth_file_name, $auth->username, $auth->password ) ); } } @@ -390,14 +411,15 @@ public function update( $args, $assoc_args ) { verify_htpasswd_is_present(); - $global = $this->populate_info( $args, __FUNCTION__ ); - $site_url = $global ? 'default' : $this->site_data->site_url; + $global = $this->populate_info( $args, __FUNCTION__ ); + $site_url = $global ? 'default' : $this->site_data->site_url; $ips = EE\Utils\get_flag_value( $assoc_args, 'ip' ); + $site_type = $global ? 'wp' : $this->site_data->app_sub_type; if ( $ips ) { $this->update_whitelist( $site_url, $ips ); } else { - $this->update_auth( $assoc_args, $site_url ); + $this->update_auth( $assoc_args, $site_url, $site_type ); } } @@ -406,8 +428,9 @@ public function update( $args, $assoc_args ) { * * @param array $assoc_args * @param string $site_url + * @param string $site_type Type of site: wp|subdir|subdom */ - private function update_auth( array $assoc_args, string $site_url ) { + private function update_auth( array $assoc_args, string $site_url, string $site_type ) { $user = EE\Utils\get_flag_value( $assoc_args, 'user' ); if ( ! $user ) { @@ -424,9 +447,9 @@ private function update_auth( array $assoc_args, string $site_url ) { } if ( 'default' === $site_url ) { - $this->generate_global_auth_files(); + $this->generate_global_auth_files( $site_type ); } else { - $this->generate_site_auth_files( $site_url ); + $this->generate_site_auth_files( $site_url, $site_type ); } EE::log( 'Reloading global reverse proxy.' ); @@ -549,12 +572,13 @@ public function delete( $args, $assoc_args ) { verify_htpasswd_is_present(); - $global = $this->populate_info( $args, __FUNCTION__ ); - $site_url = $global ? 'default' : $this->site_data->site_url; - $ip = EE\Utils\get_flag_value( $assoc_args, 'ip' ); + $global = $this->populate_info( $args, __FUNCTION__ ); + $site_url = $global ? 'default' : $this->site_data->site_url; + $ip = EE\Utils\get_flag_value( $assoc_args, 'ip' ); + $site_type = $global ? 'wp' : $this->site_data->app_sub_type; if ( ! $ip ) { - $user = EE\Utils\get_flag_value( $assoc_args, 'user' ); + $user = EE\Utils\get_flag_value( $assoc_args, 'user' ); $auths = $this->get_auths( $site_url, $user ); foreach ( $auths as $auth ) { @@ -562,9 +586,9 @@ public function delete( $args, $assoc_args ) { } if ( 'default' === $site_url ) { - $this->generate_global_auth_files(); + $this->generate_global_auth_files( $site_type ); } else { - $this->generate_site_auth_files( $site_url ); + $this->generate_site_auth_files( $site_url, $site_type ); } if ( $user ) { @@ -682,7 +706,6 @@ public function list( $args, $assoc_args ) { if ( 'table' === $format ) { $log_msg = $admin_tools_auth ? 'This auth is applied only on admin-tools.' : ''; } - } else { $auths = $this->get_auths( $site_url, false ); }