1 | <?php |
||||
2 | /** |
||||
3 | Copyright (C) 2018-2020 KANOUN Salim |
||||
4 | This program is free software; you can redistribute it and/or modify |
||||
5 | it under the terms of the Affero GNU General Public v.3 License as published by |
||||
6 | the Free Software Foundation; |
||||
7 | This program is distributed in the hope that it will be useful, |
||||
8 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
9 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
10 | Affero GNU General Public Public for more details. |
||||
11 | You should have received a copy of the Affero GNU General Public Public along |
||||
12 | with this program; if not, write to the Free Software Foundation, Inc., |
||||
13 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
||||
14 | */ |
||||
15 | |||||
16 | /** |
||||
17 | * Open Sessions, load constants, instanciate dabase connexion, write text logs for all scripts |
||||
18 | */ |
||||
19 | |||||
20 | use Monolog\Logger; |
||||
0 ignored issues
–
show
|
|||||
21 | use Monolog\Handler\RotatingFileHandler; |
||||
0 ignored issues
–
show
The type
Monolog\Handler\RotatingFileHandler was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||||
22 | use Monolog\Processor\WebProcessor; |
||||
0 ignored issues
–
show
The type
Monolog\Processor\WebProcessor was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||||
23 | |||||
24 | /** |
||||
25 | * Methods that are call by all scripts |
||||
26 | */ |
||||
27 | Class Session { |
||||
28 | |||||
29 | public static function checkSession(bool $log=true, bool $writeSession=false) { |
||||
30 | |||||
31 | if (session_status() == PHP_SESSION_NONE) { |
||||
32 | session_start(); |
||||
33 | } |
||||
34 | |||||
35 | //Write logs |
||||
36 | if ($log) { |
||||
37 | isset($_POST['id_visit']) ? $logIdVisit=$_POST['id_visit'] : $logIdVisit='N/A'; |
||||
38 | isset($_POST['patient_num']) ? $logPatientNum=$_POST['patient_num'] : $logPatientNum='N/A'; |
||||
39 | @self::logInfo('Username : '.$_SESSION['username']. |
||||
0 ignored issues
–
show
Are you sure the usage of
self::logInfo('Username ...um: ' . $logPatientNum) targeting Session::logInfo() seems to always return null.
This check looks for function or method calls that always return null and whose return value is used. class A
{
function getObject()
{
return null;
}
}
$a = new A();
if ($a->getObject()) {
The method The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes. ![]() It seems like you do not handle an error condition for
logInfo() . This can introduce security issues, and is generally not recommended.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
If you suppress an error, we recommend checking for the error condition explicitly: // For example instead of
@mkdir($dir);
// Better use
if (@mkdir($dir) === false) {
throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
![]() |
|||||
40 | ' Role: '.$_SESSION ['role'].' Study: '.$_SESSION['study'].' Visit ID: '.$logIdVisit.' Patient Num: '.$logPatientNum); |
||||
41 | |||||
42 | } |
||||
43 | |||||
44 | //Check session availability |
||||
45 | if (isset($_SESSION['LAST_ACTIVITY']) && (time()-$_SESSION['LAST_ACTIVITY'] > 1200)) { |
||||
46 | // last request was more than 30 minutes ago or unexisting |
||||
47 | session_unset(); // unset $_SESSION variable for the run-time |
||||
48 | session_destroy(); // destroy session data in storage |
||||
49 | self::redirectAndEndScript(); |
||||
50 | }else if (empty($_SESSION)) { |
||||
51 | //if session already empty |
||||
52 | self::redirectAndEndScript(); |
||||
53 | }else { |
||||
54 | $_SESSION['LAST_ACTIVITY']=time(); // update last activity time stamp |
||||
55 | } |
||||
56 | |||||
57 | //If script dosen't need to write on session data, close write to free async ajax request |
||||
58 | if (!$writeSession) { |
||||
59 | session_write_close(); |
||||
60 | } |
||||
61 | |||||
62 | } |
||||
63 | |||||
64 | /** |
||||
65 | * Redirect to index and end script execution |
||||
66 | */ |
||||
67 | private static function redirectAndEndScript() { |
||||
68 | echo '<meta http-equiv="Refresh" content="0;/index.php">'; |
||||
69 | exit("Session Lost"); |
||||
0 ignored issues
–
show
|
|||||
70 | } |
||||
71 | |||||
72 | /** |
||||
73 | * Instanciate a new PDO object for database connexion |
||||
74 | * And Fill Php constant parameter |
||||
75 | * @return PDO |
||||
76 | */ |
||||
77 | public static function getLinkpdo() { |
||||
78 | |||||
79 | //Load the config file defining constants |
||||
80 | if (!defined('DATABASE_HOST')) { |
||||
81 | require_once($_SERVER["DOCUMENT_ROOT"].'/data/_config/config.inc.php'); |
||||
82 | } |
||||
83 | |||||
84 | //Instanciate PDO connexion with SSL or not |
||||
85 | if (DATABASE_SSL) { |
||||
0 ignored issues
–
show
|
|||||
86 | $linkpdo=new PDO('mysql:host='.DATABASE_HOST.';dbname='.DATABASE_NAME.';charset=UTF8', ''.DATABASE_USERNAME.'', ''.DATABASE_PASSWORD.'', self::getSSLPDOArrayOptions()); |
||||
0 ignored issues
–
show
|
|||||
87 | }else { |
||||
88 | $linkpdo=new PDO('mysql:host='.DATABASE_HOST.';dbname='.DATABASE_NAME.';charset=UTF8', ''.DATABASE_USERNAME.'', ''.DATABASE_PASSWORD.''); |
||||
89 | } |
||||
90 | |||||
91 | $linkpdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
||||
92 | |||||
93 | //Load preferences from the database |
||||
94 | if (!defined('GAELO_PATIENT_CODE_LENGHT')) Session::loadPreferencesInConstants($linkpdo); |
||||
95 | |||||
96 | return $linkpdo; |
||||
97 | } |
||||
98 | |||||
99 | /** |
||||
100 | * Options to use SSL connexion |
||||
101 | * @return array |
||||
102 | */ |
||||
103 | public static function getSSLPDOArrayOptions() { |
||||
104 | $sslOptions=array( |
||||
105 | PDO::MYSQL_ATTR_SSL_CA => '', |
||||
106 | PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false |
||||
107 | ); |
||||
108 | |||||
109 | return $sslOptions; |
||||
110 | } |
||||
111 | |||||
112 | /** |
||||
113 | * Write log in a daily log file in log folder |
||||
114 | * @param string $stringInfo |
||||
115 | */ |
||||
116 | public static function logInfo(string $stringInfo) { |
||||
117 | |||||
118 | if (is_writable($_SERVER["DOCUMENT_ROOT"].'/data/logs/')) { |
||||
119 | // create a log channel |
||||
120 | $log=new Logger('OpenTrialProcessor'); |
||||
121 | $log->pushHandler(new RotatingFileHandler($_SERVER["DOCUMENT_ROOT"].'/data/logs/gaelO.log', Logger::INFO)); |
||||
122 | $log->pushProcessor(new WebProcessor()); |
||||
123 | $log->info($stringInfo); |
||||
124 | }else { |
||||
125 | error_log("Can't write logs folder"); |
||||
126 | } |
||||
127 | } |
||||
128 | |||||
129 | /** |
||||
130 | * Store preference from the database in PHP constants |
||||
131 | * @param PDO $linkpdo |
||||
132 | */ |
||||
133 | public static function loadPreferencesInConstants(PDO $linkpdo) { |
||||
134 | |||||
135 | $connecter=$linkpdo->prepare('SELECT * FROM preferences'); |
||||
136 | $connecter->execute(); |
||||
137 | |||||
138 | $result=$connecter->fetch(PDO::FETCH_ASSOC); |
||||
139 | |||||
140 | define('GAELO_PATIENT_CODE_LENGHT', $result['patient_code_length']); |
||||
141 | define('GAELO_PLATEFORM_NAME', $result['name']); |
||||
142 | define('GAELO_ADMIN_EMAIL', $result['admin_email']); |
||||
143 | define('GAELO_REPLY_TO', $result['email_reply_to']); |
||||
144 | define('GAELO_CORPORATION', $result['corporation']); |
||||
145 | define('GAELO_WEB_ADDRESS', $result['address']); |
||||
146 | define('GAELO_DATE_FORMAT', $result['parse_date_import']); |
||||
147 | define('GAELO_COUNTRY_LANGUAGE', $result['parse_country_name']); |
||||
148 | |||||
149 | define('TUS_SERVER', 'http://tus:1080'); |
||||
150 | |||||
151 | define('GAELO_ORTHANC_EXPOSED_INTERNAL_ADDRESS', $result['orthanc_exposed_internal_address']); |
||||
152 | define('GAELO_ORTHANC_EXPOSED_INTERNAL_PORT', $result['orthanc_exposed_internal_port']); |
||||
153 | define('GAELO_ORTHANC_EXPOSED_EXTERNAL_ADDRESS', $result['orthanc_exposed_external_address']); |
||||
154 | define('GAELO_ORTHANC_EXPOSED_EXTERNAL_PORT', $result['orthanc_exposed_external_port']); |
||||
155 | define('GAELO_ORTHANC_EXPOSED_INTERNAL_LOGIN', $result['orthanc_exposed_internal_login']); |
||||
156 | define('GAELO_ORTHANC_EXPOSED_INTERNAL_PASSWORD', $result['orthanc_exposed_internal_password']); |
||||
157 | define('GAELO_ORTHANC_EXPOSED_EXTERNAL_LOGIN', $result['orthanc_exposed_external_login']); |
||||
158 | define('GAELO_ORTHANC_EXPOSED_EXTERNAL_PASSWORD', $result['orthanc_exposed_external_password']); |
||||
159 | |||||
160 | define('GAELO_ORTHANC_PACS_ADDRESS', $result['orthanc_pacs_address']); |
||||
161 | define('GAELO_ORTHANC_PACS_PORT', $result['orthanc_pacs_port']); |
||||
162 | define('GAELO_ORTHANC_PACS_LOGIN', $result['orthanc_pacs_login']); |
||||
163 | define('GAELO_ORTHANC_PACS_PASSWORD', $result['orthanc_pacs_password']); |
||||
164 | |||||
165 | define('GAELO_USE_SMTP', $result['use_smtp']); |
||||
166 | define('GAELO_SMTP_HOST', $result['smtp_host']); |
||||
167 | define('GAELO_SMTP_PORT', $result['smtp_port']); |
||||
168 | define('GAELO_SMTP_USER', $result['smtp_user']); |
||||
169 | define('GAELO_SMTP_PASSWORD', $result['smtp_password']); |
||||
170 | define('GAELO_SMTP_SECURE', $result['smtp_secure']); |
||||
171 | |||||
172 | } |
||||
173 | |||||
174 | } |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths