Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Validator/Gravatar.php
<?php

namespace XF\Validator;

class
Gravatar extends AbstractValidator
{
    protected
$options = [
       
'allow_empty' => true
   
];

    public function
isValid($value, &$errorKey = null)
    {
        if (
$this->options['allow_empty'] && $value === '')
        {
            return
true;
        }

        if (!
$this->app->isValid('Email', $value))
        {
           
$errorKey = 'invalid_email';
            return
false;
        }

        try
        {
           
$md5 = md5(strtolower(trim($value)));
           
$url = "https://secure.gravatar.com/avatar/{$md5}?d=404";

           
$response = $this->app->http()->client()->head($url, ['exceptions' => false]);
            if (
$response->getStatusCode() !== 200)
            {
               
$errorKey = 'not_found';
                return
false;
            }
        }
        catch (\
Exception $e)
        {
            if (
$e instanceof \GuzzleHttp\Exception\RequestException)
            {
                if (
strpos($e->getMessage(), 'Read timed out') === false)
                {
                    \
XF::logException($e, false);
                }
               
$errorKey = 'communication_error';
                return
false;
            }
            else
            {
                throw
$e;
            }
        }

        return
true;
    }

    public function
getPrintableErrorValue($errorKey)
    {
        switch (
$errorKey)
        {
            case
'invalid_email':
                return \
XF::phrase('gravatars_require_valid_email_addresses');

            case
'not_found':
                return \
XF::phrase('no_gravatar_found_for_specified_email_address');

            case
'communication_error':
                return \
XF::phrase('there_was_problem_communicating_with_gravatar');

            default:
                return
null;
        }
    }
}