Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
IdentifyMethodsFilePolicyApplier
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
4 / 4
6
100.00% covered (success)
100.00%
1 / 1
 apply
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 sync
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
2
 supportsCoreFlowSync
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 storeIdentifyMethodsPolicySnapshot
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4/**
5 * SPDX-FileCopyrightText: 2026 LibreCode coop and contributors
6 * SPDX-License-Identifier: AGPL-3.0-or-later
7 */
8
9namespace OCA\Libresign\Service\Policy\Provider\IdentifyMethods\FilePolicy;
10
11use OCA\Libresign\Db\File as FileEntity;
12use OCA\Libresign\Service\Policy\AbstractFilePolicyApplier;
13use OCA\Libresign\Service\Policy\Model\ResolvedPolicy;
14use OCA\Libresign\Service\Policy\Provider\IdentifyMethods\IdentifyMethodsPolicy;
15use OCA\Libresign\Service\Policy\Provider\IdentifyMethods\IdentifyMethodsPolicyValue;
16use OCP\IUser;
17
18class IdentifyMethodsFilePolicyApplier extends AbstractFilePolicyApplier {
19
20    #[\Override]
21    public function apply(FileEntity $file, array $data): void {
22        $user = ($data['userManager'] ?? null) instanceof IUser ? $data['userManager'] : null;
23        $resolvedPolicy = $this->policyService->resolveForUser(IdentifyMethodsPolicy::KEY, $user, []);
24        $this->storeIdentifyMethodsPolicySnapshot($file, $resolvedPolicy);
25    }
26
27    #[\Override]
28    public function sync(FileEntity $file, array $data): void {
29        $resolvedPolicy = $this->policyService->resolveForUserId(IdentifyMethodsPolicy::KEY, $file->getUserId(), []);
30        $metadataBeforeUpdate = $file->getMetadata() ?? [];
31        $this->storeIdentifyMethodsPolicySnapshot($file, $resolvedPolicy);
32        $metadataChanged = ($file->getMetadata() ?? []) !== $metadataBeforeUpdate;
33
34        if ($metadataChanged) {
35            $this->fileService->update($file);
36        }
37    }
38
39    #[\Override]
40    public function supportsCoreFlowSync(): bool {
41        return false;
42    }
43
44    private function storeIdentifyMethodsPolicySnapshot(FileEntity $file, ResolvedPolicy $resolvedPolicy): void {
45        $normalized = IdentifyMethodsPolicyValue::normalize($resolvedPolicy->getEffectiveValue());
46        parent::storePolicySnapshot($file, $resolvedPolicy, IdentifyMethodsPolicyValue::extractFactors($normalized));
47    }
48}