Live-Adresse * (immer blockiert) > [Pro] blockierte Vorlagen > [Pro] Regeln je Pfad und * Methode > Erlaubnisliste > [Pro] erlaubte Vorlagen > WordPress.org > * feste Ausnahmen (Lizenzserver im Pro-Build) > blockieren. * * $pro (nur im Pro-Build befuellt): 'allow' und 'block' mit Hosts der * gewaehlten Vorlagen, 'rules' mit den zerlegten Regeln. * * @param string $url Aufgerufene URL. * @param array $settings Bereinigte Einstellungen. * @param string[] $own_hosts Adressen der eigenen Website (siteurl, home). * @param string[] $always Hosts, die nie blockiert werden. * @param string $method HTTP-Methode des Aufrufs. * @param array $pro Zusaetzliche Pro-Daten. * @return array{allow: bool, host: string, reason: string, live: bool, log: bool} */ public static function decide( $url, array $settings, array $own_hosts, array $always = array(), $method = 'GET', array $pro = array() ) { $host = Wp360_Staging_Guard_Host_Matcher::host_of( $url ); if ( '' === $host ) { // Eine Adresse mit http(s)-Schema, deren Host sich nicht lesen laesst // (Zeichen ausserhalb von ASCII ohne intl, Rueckwaertsschraegstrich), // wird nicht durchgelassen: Der HTTP-Client koennte sie anders deuten. // Alles ohne Schema ("keine URL") ueberlaesst die Sperre dem Kern. if ( preg_match( '#^\s*(?:https?:)?//#i', (string) $url ) ) { return self::result( false, '', self::REASON_UNPARSABLE, false, false ); } return self::result( true, '', self::REASON_INVALID, false, false ); } if ( Wp360_Staging_Guard_Host_Matcher::is_own_host( $host, $own_hosts ) ) { return self::result( true, $host, self::REASON_OWN, false, false ); } $live_url = isset( $settings['live_url'] ) ? (string) $settings['live_url'] : ''; if ( Wp360_Staging_Guard_Host_Matcher::is_live_host( $host, $live_url ) ) { return self::result( false, $host, self::REASON_LIVE, true, true ); } $listed = isset( $settings['allowed_hosts'] ) ? (string) $settings['allowed_hosts'] : ''; if ( '' !== $listed && Wp360_Staging_Guard_Host_Matcher::matches_any( $host, $listed ) ) { return self::result( true, $host, self::REASON_LISTED, false, true ); } if ( ! empty( $settings['allow_wporg'] ) && in_array( $host, self::WPORG_HOSTS, true ) ) { return self::result( true, $host, self::REASON_WPORG, false, true ); } if ( $always && Wp360_Staging_Guard_Host_Matcher::matches_any( $host, $always ) ) { return self::result( true, $host, self::REASON_ALWAYS, false, true ); } return self::result( false, $host, self::REASON_BLOCKED, false, true ); } /** * @param bool $allow Durchlassen. * @param string $host Host. * @param string $reason Grund. * @param bool $live Ziel ist die Live-Adresse. * @param bool $log Im Protokoll zaehlen. * @return array{allow: bool, host: string, reason: string, live: bool, log: bool} */ private static function result( $allow, $host, $reason, $live, $log ) { return array( 'allow' => $allow, 'host' => $host, 'reason' => $reason, 'live' => $live, 'log' => $log, ); } }