Skip to content

Commit

Permalink
[REF. #67] Automatically create/update the list of assets when the li…
Browse files Browse the repository at this point in the history
…st of YNH domains is updated.
  • Loading branch information
csavelief committed Sep 16, 2024
1 parent c2c3ba0 commit 46a3910
Show file tree
Hide file tree
Showing 11 changed files with 32 additions and 35 deletions.
14 changes: 11 additions & 3 deletions app/Http/Controllers/YnhServerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
use App\Models\YnhOsquery;
use App\Models\YnhServer;
use App\Models\YnhUser;
use App\Modules\AdversaryMeter\Events\CreateAsset;
use App\Modules\AdversaryMeter\Events\DeleteAsset;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
Expand Down Expand Up @@ -166,6 +168,9 @@ public function configure(YnhServer $server, ConfigureHostRequest $request)
$server->ssh_username = $request->username;
$server->save();

/** @var User $user */
$user = Auth::user();

if (!$principal) {
$server->domains()->save(YnhDomain::updateOrCreate([
'ynh_server_id' => $server->id,
Expand All @@ -176,13 +181,16 @@ public function configure(YnhServer $server, ConfigureHostRequest $request)
'ynh_server_id' => $server->id,
'updated' => false,
]));
if ($user) {
event(new CreateAsset($user, $request->domain, true));
}
}

$uid = Str::random(10);
$ssh = $server->sshConnection($uid, Auth::user());
$ssh = $server->sshConnection($uid, $user);
$ssh->newTrace(SshTraceStateEnum::PENDING, "Your host is being configured!");

event(new ConfigureHost($uid, Auth::user(), $server));
event(new ConfigureHost($uid, $user, $server));

return response()->json(['success' => "Your host is being configured!"]);
}
Expand Down Expand Up @@ -244,7 +252,7 @@ public function delete(YnhServer $server, RemoveHostRequest $request)
if ($server->ip()) {

$ssh->newTrace(SshTraceStateEnum::IN_PROGRESS, 'Stopping asset monitoring...');
$server->stopMonitoringAsset(Auth::user(), $server->ip());
event(new DeleteAsset(Auth::user(), $server->ip()));
$ssh->newTrace(SshTraceStateEnum::DONE, 'Asset monitoring stopped.');

$server->sshEnableAdminConsole($ssh);
Expand Down
3 changes: 2 additions & 1 deletion app/Listeners/ConfigureHostListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Enums\SshTraceStateEnum;
use App\Events\ConfigureHost;
use App\Events\PullServerInfos;
use App\Modules\AdversaryMeter\Events\CreateAsset;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Vanilo\Order\Models\FulfillmentStatus;
Expand Down Expand Up @@ -76,7 +77,7 @@ protected function handle2($event)
// $isOk = $isOk && $server->sshRestartDocker($ssh);

$ssh->newTrace(SshTraceStateEnum::IN_PROGRESS, 'Starting asset monitoring...');
$server->startMonitoringAsset($user, $server->ip());
event(new CreateAsset($user, $server->ip(), true));
$ssh->newTrace(SshTraceStateEnum::DONE, 'Asset monitoring started.');
}
if ($isOk) {
Expand Down
3 changes: 2 additions & 1 deletion app/Listeners/InstallAppListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use App\Events\PullServerInfos;
use App\Helpers\AppStore;
use App\Models\YnhApplication;
use App\Modules\AdversaryMeter\Events\CreateAsset;
use Illuminate\Support\Facades\Auth;

class InstallAppListener extends AbstractListener
Expand Down Expand Up @@ -63,7 +64,7 @@ protected function handle2($event)
}

$ssh->newTrace(SshTraceStateEnum::IN_PROGRESS, 'Starting asset monitoring...');
$server->startMonitoringAsset($user, $domain);
event(new CreateAsset($user, $domain, true));
$ssh->newTrace(SshTraceStateEnum::DONE, 'Asset monitoring started.');
}
}
Expand Down
3 changes: 2 additions & 1 deletion app/Listeners/UninstallAppListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use App\Enums\SshTraceStateEnum;
use App\Events\PullServerInfos;
use App\Events\UninstallApp;
use App\Modules\AdversaryMeter\Events\DeleteAsset;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;

Expand Down Expand Up @@ -36,7 +37,7 @@ protected function handle2($event)
}

$ssh->newTrace(SshTraceStateEnum::IN_PROGRESS, 'Stopping asset monitoring...');
$server->stopMonitoringAsset($user, $domain);
event(new DeleteAsset($user, $domain));
$ssh->newTrace(SshTraceStateEnum::DONE, 'Asset monitoring stopped.');
}
}
Expand Down
16 changes: 3 additions & 13 deletions app/Models/YnhServer.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
use App\Helpers\SshConnection2;
use App\Helpers\SshKeyPair;
use App\Modules\AdversaryMeter\Events\CreateAsset;
use App\Modules\AdversaryMeter\Events\DeleteAsset;
use App\Traits\HasTenant2;
use App\User;
use Carbon\Carbon;
Expand Down Expand Up @@ -346,18 +345,6 @@ public function latestTraces(): Collection
->get() : collect();
}

public function startMonitoringAsset(User $user, string $domainOrIpAddress): bool
{
event(new CreateAsset($user, $domainOrIpAddress));
return true;
}

public function stopMonitoringAsset(User $user, string $domainOrIpAddress): bool
{
event(new DeleteAsset($user, $domainOrIpAddress));
return true;
}

public function sshTestConnection(): bool
{
return $this->sshKeyPair()->isSshConnectionUpAndRunning($this->ip(), $this->ssh_port, $this->ssh_username);
Expand Down Expand Up @@ -838,6 +825,9 @@ public function pullServerInfos(?string $uid = null, ?User $user = null): void
'ynh_server_id' => $this->id,
'updated' => true,
]);
if ($user) {
event(new CreateAsset($user, $domain, true));
}
}
DB::transaction(function () {
YnhDomain::where('ynh_server_id', $this->id)
Expand Down
4 changes: 3 additions & 1 deletion app/Modules/AdversaryMeter/Events/CreateAsset.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ class CreateAsset

public User $user;
public string $asset;
public bool $monitor;

public function __construct(User $user, string $asset)
public function __construct(User $user, string $asset, bool $monitor)
{
$this->user = $user;
$this->asset = $asset;
$this->monitor = $monitor;
}

public function broadcastOn()
Expand Down
11 changes: 2 additions & 9 deletions app/Modules/AdversaryMeter/Http/Controllers/AssetController.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,13 @@ public function saveAsset(Request $request): array

/** @var User $user */
$user = Auth::user();
$obj = CreateAssetListener::execute($user, $asset);
$obj = CreateAssetListener::execute($user, $asset, is_bool($watch) && $watch);

if (!$obj) {
abort(500, "The asset could not be created : {$asset}");
}
if (is_bool($watch) && $watch) {
$obj->is_monitored = true;
$obj->save();
}

$obj = $obj->refresh();

return [
'asset' => $this->convertAsset($obj),
'asset' => $this->convertAsset($obj->refresh()),
];
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function handle()
Asset::where('tld', $tld)
->get()
->each(function (Asset $asset) use ($domain) {
event(new CreateAsset($asset->createdBy(), $domain));
event(new CreateAsset($asset->createdBy(), $domain, true));
});
});
}
Expand Down
5 changes: 3 additions & 2 deletions app/Modules/AdversaryMeter/Listeners/CreateAssetListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

class CreateAssetListener extends AbstractListener
{
public static function execute(User $user, string $asset): ?Asset
public static function execute(User $user, string $asset, bool $monitor): ?Asset
{
if (!IsValidAsset::test($asset)) {
Log::error("Invalid asset : {$asset}");
Expand All @@ -36,6 +36,7 @@ public static function execute(User $user, string $asset): ?Asset
[
'asset' => $asset,
'type' => $assetType,
'is_monitored' => $monitor,
'created_by' => $user->id,
]
);
Expand All @@ -47,6 +48,6 @@ protected function handle2($event)
throw new \Exception('Invalid event type!');
}
Auth::login($event->user); // otherwise the tenant will not be properly set
self::execute($event->user, $event->asset);
self::execute($event->user, $event->asset, $event->monitor);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ protected function handle2($event)
Asset::where('tld', $tld)
->get()
->each(function (Asset $asset) use ($domain) {
event(new CreateAsset($asset->createdBy(), $domain));
event(new CreateAsset($asset->createdBy(), $domain, true));
});
});

Expand Down
4 changes: 2 additions & 2 deletions tests/AdversaryMeter/DiscoveryShallowTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ public function testItCreatesAnAssetAfterDiscovery()
'subdomains' => ['www1.example.com', 'www1.example.com' /* duplicate! */, 'www2.example.com'],
]);

event(new CreateAsset($this->user, 'example.com'));
event(new CreateAsset($this->user, 'example.com'));
event(new CreateAsset($this->user, 'example.com', false));
event(new CreateAsset($this->user, 'example.com', false));

TriggerDiscoveryShallow::dispatch();

Expand Down

0 comments on commit 46a3910

Please sign in to comment.