. namespace core\aws; use Aws\AwsClient; /** * AWS Client factory. Retrieves a client with moodle specific HTTP configuration. * * @copyright 2022 Catalyst IT * @author Peter Burnett * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @deprecated Since Moodle 4.5 * @todo MDL-82459 Final deprecation in Moodle 5.0. */ class client_factory { /** * Get an AWS client with moodle specific HTTP configuration. * * @param string $class Fully qualified AWS classname e.g. \Aws\S3\S3Client * @param array $opts array of constructor options for AWS Client. * @return AwsClient * @deprecated Since Moodle 4.5 */ #[\core\attribute\deprecated( 'client_factory::get_client()', since: '4.5', mdl: 'MDL-80962', )] public static function get_client(string $class, array $opts): AwsClient { \core\deprecation::emit_deprecation_if_present(__FUNCTION__); // Modify the opts to add HTTP timeouts. if (empty($opts['http'])) { $opts['http'] = ['connect_timeout' => HOURSECS]; } else if (!array_key_exists('connect_timeout', $opts['http'])) { // Try not to override existing settings. $opts['http']['connect_timeout'] = HOURSECS; } // Blindly trust the call here. If it exceptions, the raw message is the most useful. $client = new $class($opts); if (!$client instanceof \Aws\AwsClient) { throw new \moodle_exception('clientnotfound', 'factor_sms'); } // Now we can configure the proxy with the routing aware middleware. return aws_helper::configure_client_proxy($client); } }