You've already forked pilot-sdk
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2f4cb1ee7a | |||
| 162688ceb4 | |||
| 95be4fc5a9 | |||
| dec195e619 | |||
| 31dd5ec559 | |||
| 264e0b72ba | |||
| 48c509d1c9 | |||
| b69480ccb3 |
@@ -2,16 +2,24 @@
|
|||||||
|
|
||||||
namespace Bluesquare\Pilot\Entity;
|
namespace Bluesquare\Pilot\Entity;
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
abstract class Action extends Entity
|
abstract class Action extends Entity
|
||||||
{
|
{
|
||||||
public function action(
|
public function action(
|
||||||
$type = 'info',
|
string $type = 'info',
|
||||||
$title = null,
|
?string $title = null,
|
||||||
$message = null,
|
?string $message = null,
|
||||||
$button = null,
|
?string $button = null,
|
||||||
$url = null,
|
?string $url = null,
|
||||||
$files = [],
|
array $files = [],
|
||||||
) {
|
) {
|
||||||
|
foreach ($files as $i => $file) {
|
||||||
|
if (isset($file['content'])) {
|
||||||
|
$files[$i]['content'] = base64_encode($file['content']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'json' => [
|
'json' => [
|
||||||
'type' => 'action',
|
'type' => 'action',
|
||||||
@@ -21,16 +29,69 @@ abstract class Action extends Entity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function file(
|
public function file(
|
||||||
$contents,
|
string $path,
|
||||||
$name = '',
|
string $name = '',
|
||||||
$type = ''
|
string $type = '',
|
||||||
|
bool $deleteAfterDownload = false,
|
||||||
) {
|
) {
|
||||||
return [
|
return [
|
||||||
'file' => compact('contents', 'name', 'type'),
|
'file' => compact('path', 'name', 'type', 'deleteAfterDownload'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function error($message)
|
public function iframe(string $url, int $expires = 240)
|
||||||
|
{
|
||||||
|
$key = 'pilot_action_' . Str::random(10);
|
||||||
|
$token = Str::random(40);
|
||||||
|
|
||||||
|
cache()->add($key, $token, now()->addMinutes($expires));
|
||||||
|
|
||||||
|
$url = $url . (str_contains($url, '?') ? '&' : '?') . "pilot_token=$key|$token";
|
||||||
|
|
||||||
|
return [
|
||||||
|
'json' => [
|
||||||
|
'type' => 'iframe',
|
||||||
|
'url' => $url,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function link(string $url, int $expires = 5)
|
||||||
|
{
|
||||||
|
$key = 'pilot_action_' . Str::random(10);
|
||||||
|
$token = Str::random(40);
|
||||||
|
|
||||||
|
cache()->add($key, $token, now()->addMinutes($expires));
|
||||||
|
|
||||||
|
$url = $url . (str_contains($url, '?') ? '&' : '?') . "pilot_token=$key|$token";
|
||||||
|
|
||||||
|
return [
|
||||||
|
'json' => [
|
||||||
|
'type' => 'link',
|
||||||
|
'url' => $url,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function exportMetrics(
|
||||||
|
?string $entry = null,
|
||||||
|
?array $entries = null,
|
||||||
|
?string $filter = null,
|
||||||
|
?array $metrics = null
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'json' => [
|
||||||
|
'type' => 'export-metrics',
|
||||||
|
'entry' => $entry,
|
||||||
|
'entries' => $entries,
|
||||||
|
'filter' => $filter,
|
||||||
|
'metrics' => $metrics,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function error(string $message)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'json' => [
|
'json' => [
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ abstract class Entity
|
|||||||
{
|
{
|
||||||
protected $slug = null;
|
protected $slug = null;
|
||||||
|
|
||||||
public function __construct($slug = null)
|
public function __construct(?string $slug = null)
|
||||||
{
|
{
|
||||||
if (! is_null($slug)) {
|
if (! is_null($slug)) {
|
||||||
$this->slug = $slug;
|
$this->slug = $slug;
|
||||||
|
|||||||
@@ -62,12 +62,12 @@ abstract class Metric extends Widget
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function filter($label, $value, callable $callback)
|
public function filter(string $label, $value, callable $callback)
|
||||||
{
|
{
|
||||||
return ['label' => $label, 'value' => $value, 'callback' => $callback];
|
return ['label' => $label, 'value' => $value, 'callback' => $callback];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function filters($filters)
|
public function filters(array $filters)
|
||||||
{
|
{
|
||||||
return $this->resolveFilter($filters);
|
return $this->resolveFilter($filters);
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@ abstract class Metric extends Widget
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function trend($values)
|
public function trend(array $values)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'type' => 'trend',
|
'type' => 'trend',
|
||||||
@@ -89,7 +89,7 @@ abstract class Metric extends Widget
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function partition($values)
|
public function partition(array $values)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'type' => 'partition',
|
'type' => 'partition',
|
||||||
@@ -106,7 +106,7 @@ abstract class Metric extends Widget
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function monitor($available)
|
public function monitor(bool $available)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'type' => 'monitor',
|
'type' => 'monitor',
|
||||||
|
|||||||
28
src/Laravel/Middlewares/CheckPilotToken.php
Normal file
28
src/Laravel/Middlewares/CheckPilotToken.php
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Bluesquare\Pilot\Laravel\Middlewares;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class CheckPilotToken
|
||||||
|
{
|
||||||
|
public function handle(Request $request, Closure $next)
|
||||||
|
{
|
||||||
|
if (request('pilot_token')) {
|
||||||
|
list($key, $token) = explode('|', request('pilot_token'));
|
||||||
|
if (cache()->get($key) == $token) {
|
||||||
|
cache()->set($key, $token, now()->addHour());
|
||||||
|
session()->put('pilot_token', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! session('pilot_token') && ! app()->environment('local')) {
|
||||||
|
abort(403, "Pilot session expired.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace Bluesquare\Pilot\Laravel;
|
namespace Bluesquare\Pilot\Laravel;
|
||||||
|
|
||||||
|
use Bluesquare\Pilot\Laravel\Middlewares\CheckPilotToken;
|
||||||
use Bluesquare\Pilot\Pilot;
|
use Bluesquare\Pilot\Pilot;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
@@ -36,6 +37,8 @@ class PilotServiceProvider extends ServiceProvider
|
|||||||
return $this->handleRequest($request);
|
return $this->handleRequest($request);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::aliasMiddleware('pilot', CheckPilotToken::class);
|
||||||
|
|
||||||
$this->commands([
|
$this->commands([
|
||||||
\Bluesquare\Pilot\Laravel\Commands\MakeAction::class,
|
\Bluesquare\Pilot\Laravel\Commands\MakeAction::class,
|
||||||
\Bluesquare\Pilot\Laravel\Commands\MakeMetric::class,
|
\Bluesquare\Pilot\Laravel\Commands\MakeMetric::class,
|
||||||
@@ -93,12 +96,12 @@ class PilotServiceProvider extends ServiceProvider
|
|||||||
|
|
||||||
if (isset($output['file'])) {
|
if (isset($output['file'])) {
|
||||||
return response()->download(
|
return response()->download(
|
||||||
$output['file']['content'],
|
$output['file']['path'],
|
||||||
$output['file']['name'],
|
$output['file']['name'] ?? null,
|
||||||
[
|
! empty($output['file']['type']) ? [
|
||||||
'Content-Type' => $output['file']['type'],
|
'Content-Type' => $output['file']['type'],
|
||||||
]
|
] : []
|
||||||
);
|
)->deleteFileAfterSend(isset($output['file']['deleteAfterDownload']) ? $output['file']['deleteAfterDownload'] : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return response();
|
return response();
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ class Pilot
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function authorize($token, $user_token)
|
public function authorize(string $token, string $user_token)
|
||||||
{
|
{
|
||||||
if ($token !== $user_token) {
|
if ($token !== $user_token) {
|
||||||
throw new \Exception('Unauthorized Pilot request');
|
throw new \Exception('Unauthorized Pilot request');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function form($slug, callable $function)
|
public function form(string $slug, callable $function)
|
||||||
{
|
{
|
||||||
$this->register('form', $slug, function () use ($function) {
|
$this->register('form', $slug, function () use ($function) {
|
||||||
return [
|
return [
|
||||||
@@ -36,17 +36,17 @@ class Pilot
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function action($slug, callable $function)
|
public function action(string $slug, callable $function)
|
||||||
{
|
{
|
||||||
$this->register('action', $slug, $function);
|
$this->register('action', $slug, $function);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function metric($slug, callable $function)
|
public function metric(string $slug, callable $function)
|
||||||
{
|
{
|
||||||
$this->register('metric', $slug, $function);
|
$this->register('metric', $slug, $function);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function register($type, $slug, callable $function)
|
protected function register(string $type, string $slug, callable $function)
|
||||||
{
|
{
|
||||||
$this->registry[$type][$slug] = $function;
|
$this->registry[$type][$slug] = $function;
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ class Pilot
|
|||||||
return Response::error("Unknown {$type} {$slug}");
|
return Response::error("Unknown {$type} {$slug}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resolveDependencies($slug, $function, $data, $files)
|
public function resolveDependencies(string $slug, $function, $data, $files)
|
||||||
{
|
{
|
||||||
$entries = isset($data['entries']) && is_array($data['entries']) ? $data['entries'] : [];
|
$entries = isset($data['entries']) && is_array($data['entries']) ? $data['entries'] : [];
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,12 @@ namespace Bluesquare\Pilot;
|
|||||||
class Response
|
class Response
|
||||||
{
|
{
|
||||||
public static function action(
|
public static function action(
|
||||||
$type = 'info',
|
string $type = 'info',
|
||||||
$title = null,
|
?string $title = null,
|
||||||
$message = null,
|
?string $message = null,
|
||||||
$button = null,
|
?string $button = null,
|
||||||
$url = null,
|
?string $url = null,
|
||||||
$files = [],
|
array $files = [],
|
||||||
) {
|
) {
|
||||||
return [
|
return [
|
||||||
'json' => [
|
'json' => [
|
||||||
@@ -20,7 +20,7 @@ class Response
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function error($message)
|
public static function error(string $message)
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'json' => [
|
'json' => [
|
||||||
@@ -31,9 +31,9 @@ class Response
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static function file(
|
public static function file(
|
||||||
$contents,
|
string $contents,
|
||||||
$name = '',
|
string $name = '',
|
||||||
$type = ''
|
string $type = ''
|
||||||
) {
|
) {
|
||||||
return [
|
return [
|
||||||
'file' => compact('contents', 'name', 'type'),
|
'file' => compact('contents', 'name', 'type'),
|
||||||
|
|||||||
Reference in New Issue
Block a user