Passed
Push — devel-3.0 ( f3e30e...950ad4 )
by Rubén
03:36
created

SyslogHandler::init()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * sysPass
4
 *
5
 * @author    nuxsmin
6
 * @link      https://syspass.org
7
 * @copyright 2012-2018, Rubén Domínguez nuxsmin@$syspass.org
8
 *
9
 * This file is part of sysPass.
10
 *
11
 * sysPass is free software: you can redistribute it and/or modify
12
 * it under the terms of the GNU General Public License as published by
13
 * the Free Software Foundation, either version 3 of the License, or
14
 * (at your option) any later version.
15
 *
16
 * sysPass is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 *  along with sysPass.  If not, see <http://www.gnu.org/licenses/>.
23
 */
24
25
namespace SP\Providers\Log;
26
27
use DI\Container;
28
use Monolog\Logger;
29
use SP\Core\Events\Event;
30
use SP\Core\Events\EventReceiver;
31
use SP\Core\Language;
32
use SP\Providers\EventsTrait;
33
use SP\Providers\Provider;
34
use SplSubject;
35
36
/**
37
 * Class SyslogHandler
38
 *
39
 * @package SP\Providers\Log
40
 */
41
final class SyslogHandler extends Provider implements EventReceiver
42
{
43
    use EventsTrait;
44
45
    const EVENTS = [
46
        'create.',
47
        'delete.',
48
        'edit.',
49
        'exception',
50
        'save.',
51
        'show.account.pass',
52
        'show.account.link',
53
        'copy.account.pass',
54
        'clear.eventlog',
55
        'login.',
56
        'logout',
57
        'track.',
58
        'acl.deny',
59
        'check.tempMasterPassword',
60
        'expire.tempMasterPassword',
61
        'refresh.masterPassword',
62
        'update.',
63
        'import.ldap.',
64
        'run.',
65
        'send.mail',
66
        'show.authToken'
67
    ];
68
69
    const MESSAGE_FORMAT = '%s;%s';
70
71
    /**
72
     * @var string
73
     */
74
    private $events;
75
    /**
76
     * @var Logger
77
     */
78
    private $logger;
79
    /**
80
     * @var Language
81
     */
82
    private $language;
83
84
    /**
85
     * Devuelve los eventos que implementa el observador
86
     *
87
     * @return array
88
     */
89
    public function getEvents()
90
    {
91
        return self::EVENTS;
92
    }
93
94
    /**
95
     * Devuelve los eventos que implementa el observador en formato cadena
96
     *
97
     * @return string
98
     */
99
    public function getEventsString()
100
    {
101
        return $this->events;
102
    }
103
104
    /**
105
     * Receive update from subject
106
     *
107
     * @link  http://php.net/manual/en/splobserver.update.php
108
     *
109
     * @param SplSubject $subject <p>
110
     *                            The <b>SplSubject</b> notifying the observer of an update.
111
     *                            </p>
112
     *
113
     * @return void
114
     * @since 5.1.0
115
     */
116
    public function update(SplSubject $subject)
117
    {
118
        $this->updateEvent('update', new Event($subject));
119
    }
120
121
    /**
122
     * Evento de actualización
123
     *
124
     * @param string $eventType Nombre del evento
125
     * @param Event  $event     Objeto del evento
126
     */
127
    public function updateEvent($eventType, Event $event)
128
    {
129
        $this->language->setAppLocales();
130
131
        if (($e = $event->getSource()) instanceof \Exception) {
132
            /** @var \Exception $e */
133
            $this->logger->error(sprintf(self::MESSAGE_FORMAT, $eventType, __($e->getMessage())));
134
        } elseif (($eventMessage = $event->getEventMessage()) !== null) {
135
            $this->logger->debug(sprintf(self::MESSAGE_FORMAT, $eventType, $eventMessage->composeText(';')));
136
        }
137
138
        $this->language->unsetAppLocales();
139
    }
140
141
    /**
142
     * @param Container $dic
143
     *
144
     * @throws \DI\DependencyException
145
     * @throws \DI\NotFoundException
146
     */
147
    protected function initialize(Container $dic)
148
    {
149
        $this->language = $dic->get(Language::class);
150
        $this->logger = $dic->get(Logger::class)
151
            ->pushHandler(new \Monolog\Handler\SyslogHandler('syspass'));
152
153
        $configEvents = $this->config->getConfigData()->getLogEvents();
154
155
        if (count($configEvents) === 0) {
156
            $this->events = $this->parseEventsToRegex(self::EVENTS);
157
        } else {
158
            $this->events = $this->parseEventsToRegex($configEvents);
159
        }
160
    }
161
}