[mod] auth logic

This commit is contained in:
fenris 2025-09-10 15:03:44 +02:00
parent 855b1c398b
commit 19cce2c90d
5 changed files with 78 additions and 21 deletions

32
source/base.php Normal file
View file

@ -0,0 +1,32 @@
<?php
namespace davigil;
/**
*/
class _state
{
public static $parameters = null;
}
/**
*/
function set_parameters(
$parameters
) : void
{
_state::$parameters = $parameters;
}
/**
*/
function get_parameters(
)
{
return _state::$parameters;
}
?>

View file

@ -3,6 +3,7 @@
namespace davigil; namespace davigil;
require_once('vendor/autoload.php'); require_once('vendor/autoload.php');
require_once('base.php');
require_once('overwrites/principal_backend.php'); require_once('overwrites/principal_backend.php');
require_once('overwrites/auths/_factory.php'); require_once('overwrites/auths/_factory.php');
require_once('overwrites/caldav_backend.php'); require_once('overwrites/caldav_backend.php');
@ -15,6 +16,8 @@ function main(
{ {
\davigil\conf\load('conf.json'); \davigil\conf\load('conf.json');
\davigil\set_parameters([]);
\date_default_timezone_set(\davigil\conf\get()->settings->timezone); \date_default_timezone_set(\davigil\conf\get()->settings->timezone);
$source = \davigil\sources\make( $source = \davigil\sources\make(
@ -49,7 +52,7 @@ function main(
/** /**
* this somehow breaks authentication, but seems to be required for calendar discovery * 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\Plugin());
$server->addPlugin(new \Sabre\CalDAV\Subscriptions\Plugin()); $server->addPlugin(new \Sabre\CalDAV\Subscriptions\Plugin());
$server->addPlugin(new \Sabre\CalDAV\Schedule\Plugin()); $server->addPlugin(new \Sabre\CalDAV\Schedule\Plugin());

View file

@ -3,6 +3,7 @@
namespace davigil\overwrites; namespace davigil\overwrites;
require_once('vendor/autoload.php'); require_once('vendor/autoload.php');
require_once('base.php');
require_once('sources/_interface.php'); require_once('sources/_interface.php');
@ -37,12 +38,15 @@ class class_auth_backend_basic
/*string */$password /*string */$password
)/* : bool*/ )/* : bool*/
{ {
$data = $this->source->get( $parameters = [
[
'username' => $username, 'username' => $username,
'password' => $password, 'password' => $password,
] ];
); /**
* @todo check for security
*/
\davigil\set_parameters($parameters);
$data = $this->source->get(/*$parameters*/[]);
return ($data !== null); return ($data !== null);
} }

View file

@ -227,24 +227,24 @@ class class_caldav_backend
) )
{ {
$id = $objectUri; $id = $objectUri;
$data = $this->source->get([]); $calendar = $this->source->get([]);
$entries = \array_values( $events = \array_values(
\array_filter( \array_filter(
$data, $calendar->events,
fn($entry) => ($entry->id === $id) fn($event) => ($event->id === $id)
) )
); );
if (\count($entries) < 1) if (\count($events) < 1)
{ {
throw (new \Exception(\sprintf('not found: %s', $objectUri))); 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))); throw (new \Exception(\sprintf('ambiguous: %s', $objectUri)));
} }
else else
{ {
$vcalendar = $this->events_to_vcalendar($entries); $vcalendar = $this->events_to_vcalendar($events);
$ics = \davigil\helpers\ics\vcalendar_encode($vcalendar); $ics = \davigil\helpers\ics\vcalendar_encode($vcalendar);
return [ return [
'calendardata' => $ics, 'calendardata' => $ics,

View file

@ -6,6 +6,7 @@ require_once('helpers/string.php');
require_once('helpers/cache.php'); require_once('helpers/cache.php');
require_once('helpers/pit.php'); require_once('helpers/pit.php');
require_once('helpers/ics.php'); require_once('helpers/ics.php');
require_once('base.php');
require_once('model.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( public function __construct(
string $url, string $url_template,
?int $lifetime, ?int $lifetime,
bool $combine bool $combine
) )
{ {
$this->url = $url; $this->url_template = $url_template;
$this->lifetime = $lifetime; $this->lifetime = $lifetime;
$this->combine = $combine; $this->combine = $combine;
$this->cache_file = \davigil\helpers\call\convey( $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( private function vcalendar_to_calendar(
@ -122,12 +136,13 @@ class class_source_ics_feed
/** /**
*/ */
private function retrieve( private function retrieve(
string $url
) )
{ {
$client = new \Sabre\HTTP\Client(); $client = new \Sabre\HTTP\Client();
$request = new \Sabre\HTTP\Request( $request = new \Sabre\HTTP\Request(
'GET', 'GET',
$this->url, $url,
[], [],
null null
); );
@ -167,8 +182,11 @@ class class_source_ics_feed
array $parameters array $parameters
) : \davigil\model\struct_calendar ) : \davigil\model\struct_calendar
{ {
$key = $this->url; $url = $this->url(\davigil\get_parameters());
$f1 = fn() => $this->retrieve(); $key = $url;
$f1 = fn() => $this->retrieve(
$url
);
$f2 = fn() => \davigil\helpers\cache\get( $f2 = fn() => \davigil\helpers\cache\get(
$this->cache_file, $this->cache_file,
$key, $key,