97 lines
3.2 KiB
PHP
97 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Intune;
|
|
|
|
use Illuminate\Support\Arr;
|
|
|
|
class ScriptsPolicyNormalizer implements PolicyTypeNormalizer
|
|
{
|
|
public function __construct(private readonly DefaultPolicyNormalizer $defaultNormalizer) {}
|
|
|
|
public function supports(string $policyType): bool
|
|
{
|
|
return in_array($policyType, [
|
|
'deviceManagementScript',
|
|
'deviceShellScript',
|
|
'deviceHealthScript',
|
|
], true);
|
|
}
|
|
|
|
/**
|
|
* @return array{status: string, settings: array<int, array<string, mixed>>, settings_table?: array<string, mixed>, warnings: array<int, string>}
|
|
*/
|
|
public function normalize(?array $snapshot, string $policyType, ?string $platform = null): array
|
|
{
|
|
$snapshot = is_array($snapshot) ? $snapshot : [];
|
|
|
|
$displayName = Arr::get($snapshot, 'displayName') ?? Arr::get($snapshot, 'name');
|
|
$description = Arr::get($snapshot, 'description');
|
|
|
|
$entries = [];
|
|
|
|
$entries[] = ['key' => 'Type', 'value' => $policyType];
|
|
|
|
if (is_string($displayName) && $displayName !== '') {
|
|
$entries[] = ['key' => 'Display name', 'value' => $displayName];
|
|
}
|
|
|
|
if (is_string($description) && $description !== '') {
|
|
$entries[] = ['key' => 'Description', 'value' => $description];
|
|
}
|
|
|
|
// Script content and large blobs should not dominate normalized output.
|
|
// Keep only safe summary fields if present.
|
|
$contentKeys = [
|
|
'scriptContent',
|
|
'scriptContentBase64',
|
|
'detectionScriptContent',
|
|
'remediationScriptContent',
|
|
];
|
|
|
|
foreach ($contentKeys as $key) {
|
|
$value = Arr::get($snapshot, $key);
|
|
|
|
if (is_string($value) && $value !== '') {
|
|
$entries[] = ['key' => $key, 'value' => sprintf('[content: %d chars]', strlen($value))];
|
|
}
|
|
}
|
|
|
|
$schedule = Arr::get($snapshot, 'runSchedule');
|
|
if (is_array($schedule) && $schedule !== []) {
|
|
$entries[] = ['key' => 'Run schedule', 'value' => Arr::except($schedule, ['@odata.type'])];
|
|
}
|
|
|
|
$frequency = Arr::get($snapshot, 'runFrequency');
|
|
if (is_string($frequency) && $frequency !== '') {
|
|
$entries[] = ['key' => 'Run frequency', 'value' => $frequency];
|
|
}
|
|
|
|
$roleScopeTagIds = Arr::get($snapshot, 'roleScopeTagIds');
|
|
if (is_array($roleScopeTagIds) && $roleScopeTagIds !== []) {
|
|
$entries[] = ['key' => 'Scope tag IDs', 'value' => array_values($roleScopeTagIds)];
|
|
}
|
|
|
|
return [
|
|
'status' => 'ok',
|
|
'settings' => [
|
|
[
|
|
'type' => 'keyValue',
|
|
'title' => 'Script settings',
|
|
'entries' => $entries,
|
|
],
|
|
],
|
|
'warnings' => [],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function flattenForDiff(?array $snapshot, string $policyType, ?string $platform = null): array
|
|
{
|
|
$normalized = $this->normalize($snapshot, $policyType, $platform);
|
|
|
|
return $this->defaultNormalizer->flattenNormalizedForDiff($normalized);
|
|
}
|
|
}
|