Various updates

This commit is contained in:
2023-06-08 20:49:27 -04:00
parent 3ed5acf75e
commit 9307ba330c
45 changed files with 864 additions and 188 deletions

View File

@ -0,0 +1,5 @@
<?php
$app->add($app->getContainer()->get(ProVM\Common\Middleware\Attachments::class));
$app->add($app->getContainer()->get(ProVM\Common\Middleware\Messages::class));
$app->add($app->getContainer()->get(ProVM\Common\Middleware\Mailboxes::class));
$app->add($app->getContainer()->get(ProVM\Common\Middleware\Install::class));

View File

@ -5,7 +5,7 @@ return [
'host' => $_ENV['EMAIL_HOST'],
'username' => $_ENV['EMAIL_USERNAME'],
'password' => $_ENV['EMAIL_PASSWORD'],
'folder' => $_ENV['EMAIL_FOLDER'],
//'folder' => $_ENV['EMAIL_FOLDER'],
];
if (isset($_ENV['EMAIL_PORT'])) {
$data['port'] = $_ENV['EMAIL_PORT'];
@ -27,5 +27,6 @@ return [
$arr['port'] = $_ENV['MYSQL_PORT'];
}
return (object) $arr;
}
},
'max_update_days' => 7
];

View File

@ -0,0 +1,33 @@
<?php
return [
'model_list' => function() {
function getClassesFromFolder(string $folder): array {
$classes = [];
$files = new FilesystemIterator($folder);
foreach ($files as $file) {
if ($file->isDir()) {
$classes = array_merge($classes, getClassesFromFolder($file->getRealPath()));
continue;
}
$classes []= ltrim(str_replace("\\\\", "\\", implode("\\", [
'ProVM',
'Emails',
'Model',
str_replace([implode(DIRECTORY_SEPARATOR, [
dirname(__FILE__, 3),
'src',
'Model'
]), '/'], ['', "\\"], $folder),
$file->getBasename(".{$file->getExtension()}")
])), "\\");
}
return $classes;
}
$folder = implode(DIRECTORY_SEPARATOR, [
dirname(__FILE__, 3),
'src',
'Model'
]);
return getClassesFromFolder($folder);
}
];

View File

@ -1,4 +1,5 @@
<?php
return [
'log_file' => '/logs/php.log'
];
'log_file' => '/logs/php.log',
'logstash_socket' => 'localhost:50000'
];

View File

@ -5,13 +5,13 @@ return [
Ddeboer\Imap\ServerInterface::class => function(ContainerInterface $container) {
$emails = $container->get('emails');
if (isset($emails->port)) {
return new \Ddeboer\Imap\Server($emails->host, $emails->port);
return new Ddeboer\Imap\Server($emails->host, $emails->port);
}
return new \Ddeboer\Imap\Server($emails->host);
return new Ddeboer\Imap\Server($emails->host);
},
\Ddeboer\Imap\ConnectionInterface::class => function(ContainerInterface $container) {
Ddeboer\Imap\ConnectionInterface::class => function(ContainerInterface $container) {
$emails = $container->get('emails');
$server = $container->get(\Ddeboer\Imap\ServerInterface::class);
$server = $container->get(Ddeboer\Imap\ServerInterface::class);
return $server->authenticate($emails->username, $emails->password);
},
PDO::class => function(ContainerInterface $container) {

View File

@ -18,5 +18,20 @@ return [
$container->get('attachments_folder'),
$container->get(Psr\Log\LoggerInterface::class)
);
},
ProVM\Common\Service\Mailboxes::class => function(ContainerInterface $container) {
return new ProVM\Common\Service\Mailboxes(
$container->get(ProVM\Emails\Repository\Mailbox::class),
$container->get(ProVM\Common\Service\Remote\Mailboxes::class),
$container->get(ProVM\Emails\Repository\State\Mailbox::class),
$container->get(Psr\Log\LoggerInterface::class),
$container->get('max_update_days')
);
},
ProVM\Common\Service\Install::class => function(ContainerInterface $container) {
return new ProVM\Common\Service\Install(
$container->get(ProVM\Common\Factory\Model::class),
$container->get('model_list')
);
}
];

View File

@ -2,16 +2,15 @@
use Psr\Container\ContainerInterface;
return [
\ProVM\Common\Factory\Model::class => function(ContainerInterface $container) {
$factory = new \ProVM\Common\Factory\Model($container);
$repositories = [
'Mailbox' => \ProVM\Emails\Repository\Mailbox::class,
'Message' => \ProVM\Emails\Repository\Message::class,
'Attachment' => \ProVM\Emails\Repository\Attachment::class,
"State\\Mailbox" => \ProVM\Emails\Repository\State\Mailbox::class,
"State\\Message" => \ProVM\Emails\Repository\State\Message::class,
"State\\Attachment" => \ProVM\Emails\Repository\State\Attachment::class
];
return $factory->setRepositories($repositories);
ProVM\Common\Factory\Model::class => function(ContainerInterface $container) {
$factory = new ProVM\Common\Factory\Model($container);
return $factory->setRepositories([
'Mailbox' => ProVM\Emails\Repository\Mailbox::class,
'Message' => ProVM\Emails\Repository\Message::class,
'Attachment' => ProVM\Emails\Repository\Attachment::class,
"State\\Mailbox" => ProVM\Emails\Repository\State\Mailbox::class,
"State\\Message" => ProVM\Emails\Repository\State\Message::class,
"State\\Attachment" => ProVM\Emails\Repository\State\Attachment::class
]);
}
];
];

View File

@ -10,5 +10,5 @@ return [
},
ProVM\Common\Middleware\Logging::class => function(ContainerInterface $container) {
return new ProVM\Common\Middleware\Logging($container->get('request_logger'));
}
},
];

View File

@ -2,10 +2,10 @@
use Psr\Container\ContainerInterface;
return [
\ProVM\Common\Middleware\Auth::class => function(ContainerInterface $container) {
return new \ProVM\Common\Middleware\Auth(
$container->get(\Nyholm\Psr7\Factory\Psr17Factory::class),
$container->get(\Psr\Log\LoggerInterface::class),
ProVM\Common\Middleware\Auth::class => function(ContainerInterface $container) {
return new ProVM\Common\Middleware\Auth(
$container->get(Nyholm\Psr7\Factory\Psr17Factory::class),
$container->get(Psr\Log\LoggerInterface::class),
$container->get('api_key')
);
}

View File

@ -2,31 +2,61 @@
use Psr\Container\ContainerInterface;
return [
Monolog\Handler\DeduplicationHandler::class => function(ContainerInterface $container) {
return new Monolog\Handler\DeduplicationHandler($container->get(Monolog\Handler\RotatingFileHandler::class));
'log_processors' => function(ContainerInterface $container) {
return [
$container->get(Monolog\Processor\PsrLogMessageProcessor::class),
$container->get(Monolog\Processor\IntrospectionProcessor::class),
$container->get(Monolog\Processor\MemoryPeakUsageProcessor::class),
];
},
Monolog\Handler\RotatingFileHandler::class => function(ContainerInterface $container) {
$handler = new Monolog\Handler\RotatingFileHandler($container->get('log_file'));
$handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class));
return $handler;
'request_log_handler' => function(ContainerInterface $container) {
return (new Monolog\Handler\RotatingFileHandler(implode(DIRECTORY_SEPARATOR, [$container->get('logs_folder'), 'requests.log'])))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true));
},
'request_logger' => function(ContainerInterface $container) {
$logger = new Monolog\Logger('request_logger');
$handler = new Monolog\Handler\RotatingFileHandler(implode(DIRECTORY_SEPARATOR, [$container->get('logs_folder'), 'requests.log']));
$handler->setFormatter($container->get(Monolog\Formatter\SyslogFormatter::class));
$dedupHandler = new Monolog\Handler\DeduplicationHandler($handler, null, Monolog\Level::Info);
$logger->pushHandler($dedupHandler);
$logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class));
$logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class));
$logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class));
return $logger;
return new Monolog\Logger(
'request_logger',
[$container->get('request_log_handler')],
$container->get('log_processors')
);
},
'file_log_handler' => function(ContainerInterface $container) {
return new Monolog\Handler\FilterHandler(
(new Monolog\Handler\RotatingFileHandler($container->get('log_file')))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true)),
Monolog\Level::Error
);
},
'debug_log_handler' => function(ContainerInterface $container) {
return new Monolog\Handler\FilterHandler(
(new Monolog\Handler\RotatingFileHandler(implode(DIRECTORY_SEPARATOR, [$container->get('logs_folder'), 'debug.log'])))
->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true)),
Monolog\Level::Debug,
Monolog\Level::Warning
);
},
Psr\Log\LoggerInterface::class => function(ContainerInterface $container) {
$logger = new Monolog\Logger('file_logger');
$logger->pushHandler($container->get(Monolog\Handler\DeduplicationHandler::class));
$logger->pushProcessor($container->get(Monolog\Processor\PsrLogMessageProcessor::class));
$logger->pushProcessor($container->get(Monolog\Processor\IntrospectionProcessor::class));
$logger->pushProcessor($container->get(Monolog\Processor\MemoryUsageProcessor::class));
return $logger;
return $container->get('elk_logger');
},
'file_logger' => function(ContainerInterface $container) {
return new Monolog\Logger(
'file',
[
$container->get('file_log_handler'),
$container->get('debug_log_handler')
],
$container->get('log_processors')
);
},
'elk_logger' => function(ContainerInterface $container) {
return new Monolog\Logger('elk', [
(new Monolog\Handler\SocketHandler($container->get('logstash_socket')))
->setFormatter(new Monolog\Formatter\LogstashFormatter('emails', 'docker'))
], [
new Monolog\Processor\PsrLogMessageProcessor(),
new Monolog\Processor\WebProcessor(),
new Monolog\Processor\IntrospectionProcessor(),
new Monolog\Processor\MemoryPeakUsageProcessor()
]);
}
];