diff --git a/includes/class-indieauth-client-discovery.php b/includes/class-indieauth-client-discovery.php index 5fc0e66..1714f61 100644 --- a/includes/class-indieauth-client-discovery.php +++ b/includes/class-indieauth-client-discovery.php @@ -5,6 +5,7 @@ class IndieAuth_Client_Discovery { protected $manifest = array(); protected $html = array(); protected $mf2 = array(); + protected $json = array(); public $client_id = ''; public $client_name = ''; public $client_icon = ''; @@ -74,45 +75,63 @@ private function parse( $url ) { return $response; } - $content = wp_remote_retrieve_body( $response ); - - if ( class_exists( 'Masterminds\\HTML5' ) ) { - $domdocument = new \Masterminds\HTML5( array( 'disable_html_ns' => true ) ); - $domdocument = $domdocument->loadHTML( $content ); - } else { - $domdocument = new DOMDocument(); - libxml_use_internal_errors( true ); - if ( function_exists( 'mb_convert_encoding' ) ) { - $content = mb_convert_encoding( $content, 'HTML-ENTITIES', mb_detect_encoding( $content ) ); + $content_type = wp_remote_retrieve_header( $response, 'content-type' ); + if ( 'application/json' === $content_type ) { + $json = json_decode( wp_remote_retrieve_body( $response ), true ); + if ( ! is_array( $json ) && empty( $json ) ) { + return; } - $domdocument->loadHTML( $content ); - libxml_use_internal_errors( false ); - } - - $this->get_mf2( $domdocument, $url ); - if ( ! empty( $this->mf2 ) ) { - if ( array_key_exists( 'name', $this->mf2 ) ) { - $this->client_name = $this->mf2['name'][0]; + if ( ! array_key_exists( 'client_id', $json ) ) { + return; + } + $this->client_id = $json['client_id']; + if ( array_key_exists( 'client_name', $json ) ) { + $this->client_name = $json['client_name']; + } + if ( array_key_exists( 'logo_uri', $json ) ) { + $this->client_icon = $json['logo_uri']; } - if ( array_key_exists( 'logo', $this->mf2 ) ) { - if ( is_string( $this->mf2['logo'][0] ) ) { - $this->client_icon = $this->mf2['logo'][0]; - } else { - $this->client_icon = $this->mf2['logo'][0]['value']; + } elseif ( 'text/html' === $content_type ) { + $content = wp_remote_retrieve_body( $response ); + + if ( class_exists( 'Masterminds\\HTML5' ) ) { + $domdocument = new \Masterminds\HTML5( array( 'disable_html_ns' => true ) ); + $domdocument = $domdocument->loadHTML( $content ); + } else { + $domdocument = new DOMDocument(); + libxml_use_internal_errors( true ); + if ( function_exists( 'mb_convert_encoding' ) ) { + $content = mb_convert_encoding( $content, 'HTML-ENTITIES', mb_detect_encoding( $content ) ); } + $domdocument->loadHTML( $content ); + libxml_use_internal_errors( false ); } - } elseif ( isset( $this->rels['manifest'] ) ) { - self::get_manifest( $this->rels['manifest'] ); - $this->client_icon = $this->determine_icon( $this->manifest ); - $this->client_name = $this->manifest['name']; - } else { - $this->client_icon = $this->determine_icon( $this->rels ); - $this->get_html( $domdocument ); - $this->client_name = $this->html['title']; - } - if ( ! empty( $this->client_icon ) ) { - $this->client_icon = WP_Http::make_absolute_url( $this->client_icon, $url ); + $this->get_mf2( $domdocument, $url ); + if ( ! empty( $this->mf2 ) ) { + if ( array_key_exists( 'name', $this->mf2 ) ) { + $this->client_name = $this->mf2['name'][0]; + } + if ( array_key_exists( 'logo', $this->mf2 ) ) { + if ( is_string( $this->mf2['logo'][0] ) ) { + $this->client_icon = $this->mf2['logo'][0]; + } else { + $this->client_icon = $this->mf2['logo'][0]['value']; + } + } + } elseif ( isset( $this->rels['manifest'] ) ) { + self::get_manifest( $this->rels['manifest'] ); + $this->client_icon = $this->determine_icon( $this->manifest ); + $this->client_name = $this->manifest['name']; + } else { + $this->client_icon = $this->determine_icon( $this->rels ); + $this->get_html( $domdocument ); + $this->client_name = $this->html['title']; + } + + if ( ! empty( $this->client_icon ) ) { + $this->client_icon = WP_Http::make_absolute_url( $this->client_icon, $url ); + } } } diff --git a/indieauth.php b/indieauth.php index aa7319a..ae2f6ba 100644 --- a/indieauth.php +++ b/indieauth.php @@ -3,7 +3,7 @@ * Plugin Name: IndieAuth * Plugin URI: https://github.com/indieweb/wordpress-indieauth/ * Description: IndieAuth is a way to allow users to use their own domain to sign into other websites and services - * Version: 4.4.2 + * Version: 4.4.3 * Author: IndieWeb WordPress Outreach Club * Author URI: https://indieweb.org/WordPress_Outreach_Club * License: MIT diff --git a/languages/indieauth.pot b/languages/indieauth.pot index 2ff7a33..7970c68 100644 --- a/languages/indieauth.pot +++ b/languages/indieauth.pot @@ -1,11 +1,10 @@ -# Copyright (C) 2024 IndieWebCamp WordPress Outreach Club +# Copyright (C) 2024 IndieWeb WordPress Outreach Club # This file is distributed under the MIT. msgid "" msgstr "" -"Project-Id-Version: IndieAuth 4.4.2\n" -"Report-Msgid-Bugs-To: " -"https://wordpress.org/support/plugin/wordpress-indieauth\n" -"POT-Creation-Date: 2024-01-12 20:14:40+00:00\n" +"Project-Id-Version: IndieAuth 4.4.3\n" +"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/indieauth\n" +"POT-Creation-Date: 2024-06-17 21:55:46+00:00\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -376,11 +375,11 @@ msgstr "" msgid "Invalid access token" msgstr "" -#: includes/class-indieauth-client-discovery.php:33 +#: includes/class-indieauth-client-discovery.php:34 msgid "Failed to Retrieve IndieAuth Client Details " msgstr "" -#: includes/class-indieauth-client-discovery.php:63 +#: includes/class-indieauth-client-discovery.php:64 msgid "Failed to Retrieve Client Details" msgstr "" @@ -900,7 +899,7 @@ msgid "" msgstr "" #. Author of the plugin/theme -msgid "IndieWebCamp WordPress Outreach Club" +msgid "IndieWeb WordPress Outreach Club" msgstr "" #. Author URI of the plugin/theme diff --git a/readme.md b/readme.md index c10311a..fb86142 100644 --- a/readme.md +++ b/readme.md @@ -3,8 +3,8 @@ **Tags:** IndieAuth, IndieWeb, IndieWebCamp, login **Requires at least:** 4.9.9 **Requires PHP:** 5.6 -**Tested up to:** 6.4 -**Stable tag:** 4.4.2 +**Tested up to:** 6.5 +**Stable tag:** 4.4.3 **License:** MIT **License URI:** http://opensource.org/licenses/MIT **Donate link:** https://opencollective.com/indieweb diff --git a/readme.txt b/readme.txt index 43c8466..095e1d1 100644 --- a/readme.txt +++ b/readme.txt @@ -3,8 +3,8 @@ Contributors: indieweb, pfefferle, dshanske Tags: IndieAuth, IndieWeb, IndieWebCamp, login Requires at least: 4.9.9 Requires PHP: 5.6 -Tested up to: 6.4 -Stable tag: 4.4.2 +Tested up to: 6.5 +Stable tag: 4.4.3 License: MIT License URI: http://opensource.org/licenses/MIT Donate link: https://opencollective.com/indieweb