ILIAS  trunk Revision v12.0_alpha-1540-g00f839d5fa1
WebDAV.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS;
22
29use Psr\Http\Message\ServerRequestInterface;
46
47class WebDAV implements Component
48{
49 public function init(
50 array|\ArrayAccess &$define,
51 array|\ArrayAccess &$implement,
52 array|\ArrayAccess &$use,
53 array|\ArrayAccess &$contribute,
54 array|\ArrayAccess &$seek,
55 array|\ArrayAccess &$provide,
56 array|\ArrayAccess &$pull,
57 array|\ArrayAccess &$internal,
58 ): void {
59 // TODO remove after HTTP service implements this
60 $define[] = ServerRequestInterface::class;
61
62 $implement[ServerRequestInterface::class] = fn(): ServerRequestInterface => new LegacyRequestProxy();
63 $internal[Config::class] = static fn(): Config => new Config();
64 $internal[RequestTranslation::class] = static fn(): RequestTranslation => new RequestTranslation(
65 $internal[Config::class],
66 $use[ServerRequestInterface::class]
67 );
68
69 $internal[AccessCheck::class] = static fn(): AccessCheck => new RBACAccessCheckLegacyProxy();
70
71 $internal[Filter::class] = static fn(): Filter => new Collection(
73 $internal[Config::class],
74 ),
75 new RBACFilter(
76 $internal[AccessCheck::class]
77 )
78 );
79
80 $internal[ProxyRepository::class] = static fn(): ProxyRepository => new TreeProxyRepository(
81 $internal[Config::class],
82 $internal[Filter::class],
83 );
84
85 $internal[Factory::class] = static fn(): Factory => new Factory(
86 $internal[RequestTranslation::class],
87 $internal[ProxyRepository::class]
88 );
89
90 $contribute[PublicAsset::class] = fn(): Endpoint => new Endpoint(
91 $this,
92 $internal[Config::class]->getEndpoint()
93 );
94
95 $internal[SecretKeyRotation::class] = static function (): SecretKeyRotation {
96 $keys = array_map(
97 static fn(string $key): SecretKey => new SecretKey($key),
98 (@include KeyRotationObjective::PATH()) ?: []
99 );
100 $current_key = array_shift($keys) ?? new SecretKey(bin2hex(random_bytes(32)));
101
102 return new SecretKeyRotation(
103 $current_key,
104 ... $keys
105 );
106 };
107
108 $internal[UriBuilder::class] = static fn(): UriBuilder => new UriBuilder(
109 $use[ServerRequestInterface::class],
110 $internal[Config::class]
111 );
112
113 $provide[Environment::class] = static fn(
114 ): Environment => new Environment(
115 $internal[Config::class],
116 $internal[UriBuilder::class]
117 );
118
119 $contribute[EntryPoint::class] = static fn(): Entrypoint => new \ILIAS\WebDAV\Entrypoint(
120 $internal[Factory::class],
121 $internal[RequestTranslation::class],
122 $internal[SecretKeyRotation::class],
123 $internal[Config::class]
124 );
125
126 $contribute[Agent::class] = static fn(): Agent
127 => new \ILIAS\WebDAV\Setup\Agent();
128 }
129}
An endpoint is a PHP file that produces output via HTTP.
Definition: Endpoint.php:29
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
Key rotation can provide an extra layer of mitigation against an attacker discovering a secret key.
Signatures are secured by the secret_key.
Definition: SecretKey.php:40
init(array|\ArrayAccess &$define, array|\ArrayAccess &$implement, array|\ArrayAccess &$use, array|\ArrayAccess &$contribute, array|\ArrayAccess &$seek, array|\ArrayAccess &$provide, array|\ArrayAccess &$pull, array|\ArrayAccess &$internal,)
Definition: WebDAV.php:49
An public asset is a file or folder that should be served via the web.
Definition: PublicAsset.php:27
A configuration for the setup.
Definition: Config.php:27
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.