blob: 37d36b802f72f9f58b605d5743805b685fb9b45d [file] [log] [blame]
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02001<?php
2
3namespace Adldap\Log;
4
5use ReflectionClass;
6use Psr\Log\LoggerInterface;
7use Adldap\Auth\Events\Failed;
8use Adldap\Auth\Events\Event as AuthEvent;
9use Adldap\Models\Events\Event as ModelEvent;
10use Adldap\Query\Events\QueryExecuted as QueryEvent;
11
12class EventLogger
13{
14 /**
15 * The logger instance.
16 *
17 * @var LoggerInterface|null
18 */
19 protected $logger;
20
21 /**
22 * Constructor.
23 *
24 * @param LoggerInterface $logger
25 */
26 public function __construct(LoggerInterface $logger = null)
27 {
28 $this->logger = $logger;
29 }
30
31 /**
32 * Logs the given event.
33 *
34 * @param mixed $event
35 */
36 public function log($event)
37 {
38 if ($event instanceof AuthEvent) {
39 $this->auth($event);
40 } elseif ($event instanceof ModelEvent) {
41 $this->model($event);
42 } elseif ($event instanceof QueryEvent) {
43 $this->query($event);
44 }
45 }
46
47 /**
48 * Logs an authentication event.
49 *
50 * @param AuthEvent $event
51 *
52 * @return void
53 */
54 public function auth(AuthEvent $event)
55 {
56 if (isset($this->logger)) {
57 $connection = $event->getConnection();
58
59 $message = "LDAP ({$connection->getHost()})"
60 ." - Connection: {$connection->getName()}"
61 ." - Operation: {$this->getOperationName($event)}"
62 ." - Username: {$event->getUsername()}";
63
64 $result = null;
65 $type = 'info';
66
67 if (is_a($event, Failed::class)) {
68 $type = 'warning';
69 $result = " - Reason: {$connection->getLastError()}";
70 }
71
72 $this->logger->$type($message.$result);
73 }
74 }
75
76 /**
77 * Logs a model event.
78 *
79 * @param ModelEvent $event
80 *
81 * @return void
82 */
83 public function model(ModelEvent $event)
84 {
85 if (isset($this->logger)) {
86 $model = $event->getModel();
87
88 $on = get_class($model);
89
90 $connection = $model->getQuery()->getConnection();
91
92 $message = "LDAP ({$connection->getHost()})"
93 ." - Connection: {$connection->getName()}"
94 ." - Operation: {$this->getOperationName($event)}"
95 ." - On: {$on}"
96 ." - Distinguished Name: {$model->getDn()}";
97
98 $this->logger->info($message);
99 }
100 }
101
102 /**
103 * Logs a query event.
104 *
105 * @param QueryEvent $event
106 *
107 * @return void
108 */
109 public function query(QueryEvent $event)
110 {
111 if (isset($this->logger)) {
112 $query = $event->getQuery();
113
114 $connection = $query->getConnection();
115
116 $selected = implode(',', $query->getSelects());
117
118 $message = "LDAP ({$connection->getHost()})"
119 ." - Connection: {$connection->getName()}"
120 ." - Operation: {$this->getOperationName($event)}"
121 ." - Base DN: {$query->getDn()}"
122 ." - Filter: {$query->getUnescapedQuery()}"
123 ." - Selected: ({$selected})"
124 ." - Time Elapsed: {$event->getTime()}";
125
126 $this->logger->info($message);
127 }
128 }
129
130 /**
131 * Returns the operational name of the given event.
132 *
133 * @param mixed $event
134 *
135 * @return string
136 */
137 protected function getOperationName($event)
138 {
139 return (new ReflectionClass($event))->getShortName();
140 }
141}