-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.php
More file actions
89 lines (74 loc) · 2.83 KB
/
Copy pathindex.php
File metadata and controls
89 lines (74 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
declare(strict_types=1);
use Barnslig\Jmap\Core\Capabilities\CoreCapability;
use Barnslig\Jmap\Core\CapabilityFactory;
use Barnslig\Jmap\Core\Controllers\AbstractControllerFactory;
use Barnslig\Jmap\Core\Controllers\ApiController;
use Barnslig\Jmap\Core\Controllers\SessionController;
use Barnslig\Jmap\Core\RequestContext;
use Barnslig\Jmap\Core\RequestContextFactory;
use Barnslig\Jmap\Core\Schemas\ValidatorFactory;
use Barnslig\Jmap\Core\Schemas\ValidatorInterface;
use Barnslig\Jmap\Core\Session;
use Barnslig\Jmap\Core\SessionFactory;
use Barnslig\Jmap\Mail\MailCapability;
use Laminas\Diactoros\ServerRequestFactory;
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
use Laminas\ServiceManager\ServiceManager;
require_once __DIR__ . '/../vendor/autoload.php';
// SETUP JMAP
$container = new ServiceManager([
'services' => [
'config' => [
'session' => [
'capabilities' => [
CoreCapability::class,
MailCapability::class,
],
],
CoreCapability::class => [
'maxSizeUpload' => 50000000,
'maxConcurrentUpload' => 4,
'maxSizeRequest' => 10000000,
'maxConcurrentRequests' => 4,
'maxCallsInRequest' => 16,
'maxObjectsInGet' => 500,
'maxObjectsInSet' => 500,
'collationAlgorithms' => [],
],
MailCapability::class => [
"maxMailboxesPerEmail" => null,
"maxMailboxDepth" => null,
"maxSizeMailboxName" => 100,
"maxSizeAttachmentsPerEmail" => 50000000,
"emailQuerySortOptions" => [],
"mayCreateTopLevelMailbox" => true
],
],
],
'factories' => [
// JMAP Core
RequestContext::class => RequestContextFactory::class,
Session::class => SessionFactory::class,
ValidatorInterface::class => ValidatorFactory::class,
// JMAP Capabilities
CoreCapability::class => CapabilityFactory::class,
MailCapability::class => CapabilityFactory::class,
// PSR-15 HTTP Controllers
ApiController::class => AbstractControllerFactory::class,
SessionController::class => AbstractControllerFactory::class,
]
]);
// SETUP ROUTER
$router = new League\Route\Router();
$router->get('/.well-known/jmap', [$container->get(SessionController::class), 'handle']);
$router->post('/jmap', [$container->get(ApiController::class), 'handle']);
// DISPATCH REQUEST
$request = ServerRequestFactory::fromGlobals();
try {
$response = $router->dispatch($request);
(new SapiEmitter())->emit($response);
} catch (\League\Route\Http\Exception\NotFoundException $exception) {
// pass on so php -S can serve static files
return false;
}