first draft library letsencrypt
This commit is contained in:
parent
84a821d58c
commit
4a14333d41
1 changed files with 56 additions and 0 deletions
56
lib/letsencrypt.php
Normal file
56
lib/letsencrypt.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
namespace lib;
|
||||
|
||||
/**
|
||||
* LetsEncrypt
|
||||
*/
|
||||
class LetsEncrypt
|
||||
{
|
||||
const HTTP_OK = 200;
|
||||
const HTTP_CHALLENGE_URL = '/.well-known/acme-challenge/';
|
||||
/**
|
||||
* perform a cURL call on the remote resource
|
||||
* the cURL call follows redirections and pushes the last valid URL to an array
|
||||
* @param Array $domains list of domains
|
||||
* @return Array $checked_domains list of checked domains
|
||||
*/
|
||||
public function checkRemoteResourceAvailability($domains)
|
||||
{
|
||||
$curl_multi = curl_multi_init();
|
||||
$curl_handles = array();
|
||||
$checked_domains = array();
|
||||
|
||||
foreach ($domains as $key => $domain) {
|
||||
$curl_handles[$key] = curl_init($domain . self::HTTP_CHALLENGE_URL);
|
||||
|
||||
// setting cURL options
|
||||
curl_setopt($curl_handles[$key], CURLOPT_TIMEOUT, 3);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_HEADER, true);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_NOBODY, true);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_FOLLOWLOCATION, true);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_MAXREDIRS, 3);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTP, CURLPROTO_HTTPS);
|
||||
curl_setopt($curl_handles[$key], CURLOPT_RETURNTRANSFER, true);
|
||||
|
||||
curl_multi_add_handle($curl_multi, $curl_handles[$key]);
|
||||
}
|
||||
|
||||
do {
|
||||
curl_multi_exec($curl_multi, $active);
|
||||
} while ($active);
|
||||
|
||||
foreach ($curl_handles as $curl_handle) {
|
||||
$returned_http_code = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);
|
||||
$returned_http_url = curl_getinfo($curl_handle, CURLINFO_EFFECTIVE_URL);
|
||||
|
||||
if ($returned_http_code === self::HTTP_OK && strpos($returned_http_url, self::HTTP_CHALLENGE_URL)) {
|
||||
array_push($checked_domains, $returned_http_url);
|
||||
}
|
||||
curl_multi_remove_handle($curl_multi, $curl_handle);
|
||||
}
|
||||
curl_multi_close($curl_multi);
|
||||
|
||||
return $checked_domains;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue