-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathSlimTokenAuth.php
72 lines (66 loc) · 2.51 KB
/
SlimTokenAuth.php
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
<?php
/*
* Copyright (C) 2021 Nethesis S.r.l.
* http://www.nethesis.it - nethserver@nethesis.it
*
* This script is part of NethServer.
*
* NethServer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License,
* or any later version.
*
* NethServer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with NethServer. If not, see COPYING.
*/
class SlimTokenAuth
{
private $token;
/**
* @throws \RuntimeException
*/
public function __construct() {
$this->token = $this->getToken();
if (empty($this->token)) throw new \RuntimeException('Apicall autentication token not configured', 1640251616);
}
public function __invoke($request, $response, $next)
{
if ($request->isOptions()) {
$response = $next($request, $response);
} elseif ($request->hasHeader('token')) {
if($request->getHeaderLine('token') === $this->token) {
// Correct authentication
$response = $next($request, $response);
} else {
$results = array(
'title' => 'Access to resource is forbidden with current client privileges',
'detail' => 'Invalid client credentials'
);
$response = $response->withJson($results, 403);
$response = $response->withHeader('Content-Type', 'application/problem+json');
$response = $response->withHeader('Content-Language', 'en');
}
} else {
$results = array(
'title' => 'Access to resource is forbidden with current client privileges',
'detail' => 'Missing authentication token',
);
$response = $response->withJson($results, 403);
$response = $response->withHeader('Content-Type', 'application/problem+json');
$response = $response->withHeader('Content-Language', 'en');
}
return $response;
}
public function getToken(){
include '/etc/freepbx_db.conf';
$sql = 'SELECT `val` FROM `kvstore_FreePBX_modules_Apicall` WHERE `key` = "token"';
$sth = $db->prepare($sql);
$sth->execute();
return $sth->fetchAll()[0][0];
}
}