mirror of
https://github.com/laravel/valet.git
synced 2026-02-06 16:50:09 +01:00
added ngrok class
This commit is contained in:
@@ -33,5 +33,6 @@ class CommandLine extends Facade {}
|
|||||||
class Configuration extends Facade {}
|
class Configuration extends Facade {}
|
||||||
class DnsMasq extends Facade {}
|
class DnsMasq extends Facade {}
|
||||||
class Filesystem extends Facade {}
|
class Filesystem extends Facade {}
|
||||||
|
class Ngrok extends Facade {}
|
||||||
class PhpFpm extends Facade {}
|
class PhpFpm extends Facade {}
|
||||||
class Site extends Facade {}
|
class Site extends Facade {}
|
||||||
|
|||||||
47
src/Ngrok.php
Normal file
47
src/Ngrok.php
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Valet;
|
||||||
|
|
||||||
|
use Httpful\Request;
|
||||||
|
use DomainException;
|
||||||
|
|
||||||
|
class Ngrok
|
||||||
|
{
|
||||||
|
public $tunnelsEndpoint = 'http://127.0.0.1:4040/api/tunnels';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current tunnel URL from the Ngrok API.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function currentTunnelUrl()
|
||||||
|
{
|
||||||
|
return retry(20, function () {
|
||||||
|
$body = Request::get($this->tunnelsEndpoint)->send()->body;
|
||||||
|
|
||||||
|
// If there are active tunnels on the Ngrok instance we will spin through them and
|
||||||
|
// find the one responding on HTTP. Each tunnel has an HTTP and a HTTPS address
|
||||||
|
// but for local testing purposes we just desire the plain HTTP URL endpoint.
|
||||||
|
if (isset($body->tunnels) && count($body->tunnels) > 0) {
|
||||||
|
return $this->findHttpTunnelUrl($body->tunnels);
|
||||||
|
} else {
|
||||||
|
throw new DomainException("Tunnel not established.");
|
||||||
|
}
|
||||||
|
}, 250);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the HTTP tunnel URL from the list of tunnels.
|
||||||
|
*
|
||||||
|
* @param array $tunnels
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function findHttpTunnelUrl(array $tunnels)
|
||||||
|
{
|
||||||
|
foreach ($tunnels as $tunnel) {
|
||||||
|
if ($tunnel->proto == 'http') {
|
||||||
|
return $tunnel->public_url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
17
valet.php
17
valet.php
@@ -14,6 +14,7 @@
|
|||||||
use Valet\Facades\Brew;
|
use Valet\Facades\Brew;
|
||||||
use Valet\Facades\Site;
|
use Valet\Facades\Site;
|
||||||
use Valet\Facades\Caddy;
|
use Valet\Facades\Caddy;
|
||||||
|
use Valet\Facades\Ngrok;
|
||||||
use Valet\Facades\PhpFpm;
|
use Valet\Facades\PhpFpm;
|
||||||
use Valet\Facades\DnsMasq;
|
use Valet\Facades\DnsMasq;
|
||||||
use Valet\Facades\Filesystem;
|
use Valet\Facades\Filesystem;
|
||||||
@@ -164,21 +165,7 @@
|
|||||||
* Echo the currently tunneled URL.
|
* Echo the currently tunneled URL.
|
||||||
*/
|
*/
|
||||||
$app->command('fetch-share-url', function () {
|
$app->command('fetch-share-url', function () {
|
||||||
retry(20, function () {
|
output(Ngrok::currentTunnelUrl());
|
||||||
$response = Httpful\Request::get('http://127.0.0.1:4040/api/tunnels')->send();
|
|
||||||
|
|
||||||
$body = $response->body;
|
|
||||||
|
|
||||||
if (isset($body->tunnels) && count($body->tunnels) > 0) {
|
|
||||||
foreach ($body->tunnels as $tunnel) {
|
|
||||||
if ($tunnel->proto == 'http') {
|
|
||||||
return output($tunnel->public_url);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Exception("Tunnel not established.");
|
|
||||||
}, 250);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user