From 19cce2c90d11d3ea1bc3e9287678fc83b97bff32 Mon Sep 17 00:00:00 2001 From: Fenris Wolf Date: Wed, 10 Sep 2025 15:03:44 +0200 Subject: [PATCH] [mod] auth logic --- source/base.php | 32 ++++++++++++++++++++++++++++ source/main.php | 7 ++++-- source/overwrites/auths/basic.php | 16 ++++++++------ source/overwrites/caldav_backend.php | 14 ++++++------ source/sources/ics_feed.php | 30 ++++++++++++++++++++------ 5 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 source/base.php diff --git a/source/base.php b/source/base.php new file mode 100644 index 0000000..296f7cb --- /dev/null +++ b/source/base.php @@ -0,0 +1,32 @@ + diff --git a/source/main.php b/source/main.php index 9b2c006..a4e3584 100644 --- a/source/main.php +++ b/source/main.php @@ -3,6 +3,7 @@ namespace davigil; require_once('vendor/autoload.php'); +require_once('base.php'); require_once('overwrites/principal_backend.php'); require_once('overwrites/auths/_factory.php'); require_once('overwrites/caldav_backend.php'); @@ -15,6 +16,8 @@ function main( { \davigil\conf\load('conf.json'); + \davigil\set_parameters([]); + \date_default_timezone_set(\davigil\conf\get()->settings->timezone); $source = \davigil\sources\make( @@ -49,7 +52,7 @@ function main( /** * this somehow breaks authentication, but seems to be required for calendar discovery */ - $server->addPlugin(new \Sabre\DAVACL\Plugin()); + // $server->addPlugin(new \Sabre\DAVACL\Plugin()); $server->addPlugin(new \Sabre\CalDAV\Plugin()); $server->addPlugin(new \Sabre\CalDAV\Subscriptions\Plugin()); $server->addPlugin(new \Sabre\CalDAV\Schedule\Plugin()); @@ -60,7 +63,7 @@ function main( * not required */ $server->addPlugin(new \Sabre\DAV\Browser\Plugin()); - + $server->start(); } diff --git a/source/overwrites/auths/basic.php b/source/overwrites/auths/basic.php index d4c5b5c..4bbd700 100644 --- a/source/overwrites/auths/basic.php +++ b/source/overwrites/auths/basic.php @@ -3,6 +3,7 @@ namespace davigil\overwrites; require_once('vendor/autoload.php'); +require_once('base.php'); require_once('sources/_interface.php'); @@ -37,12 +38,15 @@ class class_auth_backend_basic /*string */$password )/* : bool*/ { - $data = $this->source->get( - [ - 'username' => $username, - 'password' => $password, - ] - ); + $parameters = [ + 'username' => $username, + 'password' => $password, + ]; + /** + * @todo check for security + */ + \davigil\set_parameters($parameters); + $data = $this->source->get(/*$parameters*/[]); return ($data !== null); } diff --git a/source/overwrites/caldav_backend.php b/source/overwrites/caldav_backend.php index c005243..0039553 100644 --- a/source/overwrites/caldav_backend.php +++ b/source/overwrites/caldav_backend.php @@ -227,24 +227,24 @@ class class_caldav_backend ) { $id = $objectUri; - $data = $this->source->get([]); - $entries = \array_values( + $calendar = $this->source->get([]); + $events = \array_values( \array_filter( - $data, - fn($entry) => ($entry->id === $id) + $calendar->events, + fn($event) => ($event->id === $id) ) ); - if (\count($entries) < 1) + if (\count($events) < 1) { throw (new \Exception(\sprintf('not found: %s', $objectUri))); } - else if (\count($entries) > 1) + else if (\count($events) > 1) { throw (new \Exception(\sprintf('ambiguous: %s', $objectUri))); } else { - $vcalendar = $this->events_to_vcalendar($entries); + $vcalendar = $this->events_to_vcalendar($events); $ics = \davigil\helpers\ics\vcalendar_encode($vcalendar); return [ 'calendardata' => $ics, diff --git a/source/sources/ics_feed.php b/source/sources/ics_feed.php index 8fa0343..3bc26bd 100644 --- a/source/sources/ics_feed.php +++ b/source/sources/ics_feed.php @@ -6,6 +6,7 @@ require_once('helpers/string.php'); require_once('helpers/cache.php'); require_once('helpers/pit.php'); require_once('helpers/ics.php'); +require_once('base.php'); require_once('model.php'); @@ -17,7 +18,7 @@ class class_source_ics_feed /** */ - private string $url; + private string $url_template; /** @@ -33,12 +34,12 @@ class class_source_ics_feed /** */ public function __construct( - string $url, + string $url_template, ?int $lifetime, bool $combine ) { - $this->url = $url; + $this->url_template = $url_template; $this->lifetime = $lifetime; $this->combine = $combine; $this->cache_file = \davigil\helpers\call\convey( @@ -59,6 +60,19 @@ class class_source_ics_feed } + /** + */ + private function url( + $parameters + ) : string + { + return \davigil\helpers\string_\coin( + $this->url_template, + $parameters + ); + } + + /** */ private function vcalendar_to_calendar( @@ -122,12 +136,13 @@ class class_source_ics_feed /** */ private function retrieve( + string $url ) { $client = new \Sabre\HTTP\Client(); $request = new \Sabre\HTTP\Request( 'GET', - $this->url, + $url, [], null ); @@ -167,8 +182,11 @@ class class_source_ics_feed array $parameters ) : \davigil\model\struct_calendar { - $key = $this->url; - $f1 = fn() => $this->retrieve(); + $url = $this->url(\davigil\get_parameters()); + $key = $url; + $f1 = fn() => $this->retrieve( + $url + ); $f2 = fn() => \davigil\helpers\cache\get( $this->cache_file, $key,