<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[58822] trunk: Users: Always use HTTPS URLs for Gravatar links.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/58822">58822</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/58822","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>peterwilsoncc</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2024-07-29 01:57:11 +0000 (Mon, 29 Jul 2024)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Users: Always use HTTPS URLs for Gravatar links.
Modifies gravatar image URLs to always use the HTTPS version from secure.gravatar.com.
Gravatar now redirects HTTP image requests to their HTTPS equivalent, resulting in redirects for sites running over an HTTP connection (`is_ssl() === false`). Since the introduction of HTTP/2 the use of sub-domains for different hashes ([1-3].gravatar.com) now represents a performance hinderance rather than improvement.
The scheme passed to `get_avatar_data()` is now ignored for the generation of Gravatar URLs but the setting retained to avoid introducing bugs for sites using either local avatars or third party providers.
Props neoxx, SergeyBiryukov, sippis, peterwilsoncc, mukesh27, costdev, dd32.
Fixes <a href="https://core.trac.wordpress.org/ticket/37454">#37454</a>.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludeslinktemplatephp">trunk/src/wp-includes/link-template.php</a></li>
<li><a href="#trunktestsphpunittestsavatarphp">trunk/tests/phpunit/tests/avatar.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestschemasetupphp">trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php</a></li>
<li><a href="#trunktestsqunitfixtureswpapigeneratedjs">trunk/tests/qunit/fixtures/wp-api-generated.js</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludeslinktemplatephp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/link-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/link-template.php 2024-07-28 18:25:13 UTC (rev 58821)
+++ trunk/src/wp-includes/link-template.php 2024-07-29 01:57:11 UTC (rev 58822)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4328,6 +4328,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * Retrieves default data about the avatar.
</span><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @since 4.2.0
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @since 6.7.0 Gravatar URLs always use HTTPS.
</ins><span class="cx" style="display: block; padding: 0 10px"> *
</span><span class="cx" style="display: block; padding: 0 10px"> * @param mixed $id_or_email The avatar to retrieve. Accepts a user ID, Gravatar MD5 hash,
</span><span class="cx" style="display: block; padding: 0 10px"> * user email, WP_User object, WP_Post object, or WP_Comment object.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4358,6 +4359,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> * - 'X' (even more mature than above)
</span><span class="cx" style="display: block; padding: 0 10px"> * Default is the value of the 'avatar_rating' option.
</span><span class="cx" style="display: block; padding: 0 10px"> * @type string $scheme URL scheme to use. See set_url_scheme() for accepted values.
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * For Gravatars this setting is ignored and HTTPS is used to avoid
+ * unnecessary redirects. The setting is retained for systems using
+ * the {@see 'pre_get_avatar_data'} filter to customize avatars.
</ins><span class="cx" style="display: block; padding: 0 10px"> * Default null.
</span><span class="cx" style="display: block; padding: 0 10px"> * @type array $processed_args When the function returns, the value will be the processed/sanitized $args
</span><span class="cx" style="display: block; padding: 0 10px"> * plus a "found_avatar" guess. Pass as a reference. Default null.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4508,9 +4512,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> if ( $email_hash ) {
</span><span class="cx" style="display: block; padding: 0 10px"> $args['found_avatar'] = true;
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $gravatar_server = hexdec( $email_hash[0] ) % 3;
- } else {
- $gravatar_server = rand( 0, 2 );
</del><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $url_args = array(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4520,15 +4521,17 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'r' => $args['rating'],
</span><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- if ( is_ssl() ) {
- $url = 'https://secure.gravatar.com/avatar/' . $email_hash;
- } else {
- $url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );
- }
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ /*
+ * Gravatars are always served over HTTPS.
+ *
+ * The Gravatar website redirects HTTP requests to HTTPS URLs so always
+ * use the HTTPS scheme to avoid unnecessary redirects.
+ */
+ $url = 'https://secure.gravatar.com/avatar/' . $email_hash;
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $url = add_query_arg(
</span><span class="cx" style="display: block; padding: 0 10px"> rawurlencode_deep( array_filter( $url_args ) ),
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- set_url_scheme( $url, $args['scheme'] )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $url
</ins><span class="cx" style="display: block; padding: 0 10px"> );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span></span></pre></div>
<a id="trunktestsphpunittestsavatarphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/avatar.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/avatar.php 2024-07-28 18:25:13 UTC (rev 58821)
+++ trunk/tests/phpunit/tests/avatar.php 2024-07-29 01:57:11 UTC (rev 58822)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -11,7 +11,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> public function test_get_avatar_url_gravatar_url() {
</span><span class="cx" style="display: block; padding: 0 10px"> $url = get_avatar_url( 1 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertSame( preg_match( '|^http?://[0-9]+.gravatar.com/avatar/[0-9a-f]{32}\?|', $url ), 1 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( preg_match( '|^https?://secure.gravatar.com/avatar/[0-9a-f]{32}\?|', $url ), 1 );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -56,19 +56,29 @@
</span><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * Ensures the get_avatar_url always returns an HTTPS scheme for gravatars.
+ *
</ins><span class="cx" style="display: block; padding: 0 10px"> * @ticket 21195
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @ticket 37454
+ *
+ * @covers ::get_avatar_url
</ins><span class="cx" style="display: block; padding: 0 10px"> */
</span><span class="cx" style="display: block; padding: 0 10px"> public function test_get_avatar_url_scheme() {
</span><span class="cx" style="display: block; padding: 0 10px"> $url = get_avatar_url( 1 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertSame( preg_match( '|^http://|', $url ), 1 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Avatars should default to the HTTPS scheme' );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $args = array( 'scheme' => 'https' );
</span><span class="cx" style="display: block; padding: 0 10px"> $url = get_avatar_url( 1, $args );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertSame( preg_match( '|^https://|', $url ), 1 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Requesting the HTTPS scheme should be respected' );
</ins><span class="cx" style="display: block; padding: 0 10px">
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $args = array( 'scheme' => 'http' );
+ $url = get_avatar_url( 1, $args );
+ $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Requesting the HTTP scheme should return an HTTPS URL to avoid redirects' );
+
</ins><span class="cx" style="display: block; padding: 0 10px"> $args = array( 'scheme' => 'lolcat' );
</span><span class="cx" style="display: block; padding: 0 10px"> $url = get_avatar_url( 1, $args );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertSame( preg_match( '|^lolcat://|', $url ), 0 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertSame( preg_match( '|^lolcat://|', $url ), 0, 'Unrecognized schemes should be ignored' );
+ $this->assertSame( preg_match( '|^https://|', $url ), 1, 'Unrecognized schemes should return an HTTPS URL' );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -257,7 +267,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> $actual_data = get_avatar_data( $comment );
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> $this->assertTrue( is_avatar_comment_type( $comment_type ) );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- $this->assertMatchesRegularExpression( '|^http?://[0-9]+.gravatar.com/avatar/[0-9a-f]{32}\?|', $actual_data['url'] );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ $this->assertMatchesRegularExpression( '|^https?://secure.gravatar.com/avatar/[0-9a-f]{32}\?|', $actual_data['url'] );
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span><span class="cx" style="display: block; padding: 0 10px">
</span><span class="cx" style="display: block; padding: 0 10px"> /**
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestschemasetupphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php 2024-07-28 18:25:13 UTC (rev 58821)
+++ trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php 2024-07-29 01:57:11 UTC (rev 58822)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -729,9 +729,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 'TagModel.meta.test_multi' => array(),
</span><span class="cx" style="display: block; padding: 0 10px"> 'TagModel.meta.test_tag_meta' => '',
</span><span class="cx" style="display: block; padding: 0 10px"> 'UsersCollection.0.link' => 'http://example.org/?author=1',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- 'UsersCollection.0.avatar_urls.24' => 'http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g',
- 'UsersCollection.0.avatar_urls.48' => 'http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g',
- 'UsersCollection.0.avatar_urls.96' => 'http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ 'UsersCollection.0.avatar_urls.24' => 'https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g',
+ 'UsersCollection.0.avatar_urls.48' => 'https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g',
+ 'UsersCollection.0.avatar_urls.96' => 'https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g',
</ins><span class="cx" style="display: block; padding: 0 10px"> 'UsersCollection.0._links.self.0.href' => 'http://example.org/index.php?rest_route=/wp/v2/users/1',
</span><span class="cx" style="display: block; padding: 0 10px"> 'UsersCollection.0._links.collection.0.href' => 'http://example.org/index.php?rest_route=/wp/v2/users',
</span><span class="cx" style="display: block; padding: 0 10px"> 'UsersCollection.1.id' => 2,
</span></span></pre></div>
<a id="trunktestsqunitfixtureswpapigeneratedjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/qunit/fixtures/wp-api-generated.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/qunit/fixtures/wp-api-generated.js 2024-07-28 18:25:13 UTC (rev 58821)
+++ trunk/tests/qunit/fixtures/wp-api-generated.js 2024-07-29 01:57:11 UTC (rev 58822)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13748,9 +13748,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "link": "http://example.org/?author=1",
</span><span class="cx" style="display: block; padding: 0 10px"> "slug": "admin",
</span><span class="cx" style="display: block; padding: 0 10px"> "avatar_urls": {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "24": "http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g",
- "48": "http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g",
- "96": "http://0.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "24": "https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=24&d=mm&r=g",
+ "48": "https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=48&d=mm&r=g",
+ "96": "https://secure.gravatar.com/avatar/96614ec98aa0c0d2ee75796dced6df54?s=96&d=mm&r=g"
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "meta": {
</span><span class="cx" style="display: block; padding: 0 10px"> "meta_key": "meta_value"
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13776,9 +13776,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "link": "http://example.org/?author=2",
</span><span class="cx" style="display: block; padding: 0 10px"> "slug": "restapiclientfixtureuser",
</span><span class="cx" style="display: block; padding: 0 10px"> "avatar_urls": {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "24": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g",
- "48": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g",
- "96": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "24": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g",
+ "48": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g",
+ "96": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g"
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "meta": {
</span><span class="cx" style="display: block; padding: 0 10px"> "meta_key": ""
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13806,9 +13806,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "link": "http://example.org/?author=2",
</span><span class="cx" style="display: block; padding: 0 10px"> "slug": "restapiclientfixtureuser",
</span><span class="cx" style="display: block; padding: 0 10px"> "avatar_urls": {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "24": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g",
- "48": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g",
- "96": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "24": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g",
+ "48": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g",
+ "96": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g"
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "meta": {
</span><span class="cx" style="display: block; padding: 0 10px"> "meta_key": ""
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13823,9 +13823,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "link": "http://example.org/?author=2",
</span><span class="cx" style="display: block; padding: 0 10px"> "slug": "restapiclientfixtureuser",
</span><span class="cx" style="display: block; padding: 0 10px"> "avatar_urls": {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "24": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g",
- "48": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g",
- "96": "http://2.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "24": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=24&d=mm&r=g",
+ "48": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=48&d=mm&r=g",
+ "96": "https://secure.gravatar.com/avatar/57cbd982c963c7eb2294e2eee1b4448e?s=96&d=mm&r=g"
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "meta": {
</span><span class="cx" style="display: block; padding: 0 10px"> "meta_key": ""
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13849,9 +13849,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "status": "approved",
</span><span class="cx" style="display: block; padding: 0 10px"> "type": "comment",
</span><span class="cx" style="display: block; padding: 0 10px"> "author_avatar_urls": {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "24": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g",
- "48": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g",
- "96": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "24": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g",
+ "48": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g",
+ "96": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g"
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "meta": {
</span><span class="cx" style="display: block; padding: 0 10px"> "meta_key": "meta_value"
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -13894,9 +13894,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> "status": "approved",
</span><span class="cx" style="display: block; padding: 0 10px"> "type": "comment",
</span><span class="cx" style="display: block; padding: 0 10px"> "author_avatar_urls": {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- "24": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g",
- "48": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g",
- "96": "http://2.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ "24": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=24&d=mm&r=g",
+ "48": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=48&d=mm&r=g",
+ "96": "https://secure.gravatar.com/avatar/bd7c2b505bcf39cc71cfee564c614956?s=96&d=mm&r=g"
</ins><span class="cx" style="display: block; padding: 0 10px"> },
</span><span class="cx" style="display: block; padding: 0 10px"> "meta": {
</span><span class="cx" style="display: block; padding: 0 10px"> "meta_key": "meta_value"
</span></span></pre>
</div>
</div>
</body>
</html>