Skip to content

Commit d242e65

Browse files
Osticoriccio82renovate[bot]
authored
Socket server 2 (#3726)
* NOT working * Base server completed - No message handling from MQ * 0-ALPHA * Fixed run script * Improvements * Checking bug on apache configuration * Testable version * Stable release * Re-activated SocketListener Component * Fixed not resolved path from outside server directory * Updated submodule * Fix api token * Fixed comments delivery * Fixed test-script * Improvement on Languages class * Updates internal * Update dependency webpack to v5.96.1 (#3710) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency react-hotkeys-hook to v4.6.1 (#3709) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * Update dependency eslint-plugin-testing-library to v7 (#3711) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * yarn.lock update * Fixed broadcast logout on password change * Update yarn lock * redis adapter first version (bad behaviour) * Socket server v2 * Check property exists in TmKeyStruct * Fixed invalid test --------- Co-authored-by: riccio82 <[email protected]> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 parent 036b037 commit d242e65

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1335
-536
lines changed

docker

inc/INIT.php

+34-34
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class INIT {
4848
public static $QUEUE_CREDENTIALS;
4949
public static $USE_COMPILED_ASSETS = false;
5050
public static $ENABLE_MULTI_DOMAIN_API = false;
51-
public static $XSRF_TOKEN = 'xsrf-token';
51+
public static $XSRF_TOKEN = 'xsrf-token';
5252

5353
/**
5454
* Use or not the js tracking codes macro import ( Ex: google analytics code injection )
@@ -59,9 +59,9 @@ class INIT {
5959
*/
6060
public static $TRACKING_CODES_VIEW_PATH = "";
6161

62-
public static $COMMENTS_ENABLED = true;
63-
public static $SSE_NOTIFICATIONS_QUEUE_NAME = "/topic/matecat_sse_notifications";
64-
public static $SSE_BASE_URL;
62+
public static $COMMENTS_ENABLED = true;
63+
public static string $SOCKET_NOTIFICATIONS_QUEUE_NAME = "/queue/matecat_socket_notifications";
64+
public static string $SOCKET_BASE_URL;
6565

6666
public static $SMTP_HOST;
6767
public static $SMTP_PORT;
@@ -209,7 +209,7 @@ class INIT {
209209
*/
210210
public static $DEFAULT_MMT_KEY = '';
211211

212-
public static $ENABLED_BROWSERS = [ 'applewebkit', 'chrome', 'safari', 'edge', 'firefox' ];
212+
public static $ENABLED_BROWSERS = [ 'applewebkit', 'chrome', 'safari', 'edge', 'firefox' ];
213213

214214
/**
215215
* If you don't have a client id and client secret, please visit
@@ -285,7 +285,7 @@ class INIT {
285285
public static $FACEBOOK_OAUTH_CLIENT_SECRET;
286286
public static $FACEBOOK_OAUTH_REDIRECT_URL;
287287

288-
public static $UNLOCKABLE_TAGS = false;
288+
public static $UNLOCKABLE_TAGS = false;
289289

290290
public static $SKIP_SQL_CACHE = false;
291291

@@ -310,35 +310,35 @@ class INIT {
310310

311311
public function __construct() {
312312

313-
self::$GITHUB_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG['GITHUB_OAUTH_CONFIG']['GITHUB_OAUTH_CLIENT_ID'] ?? null;
314-
self::$GITHUB_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG['GITHUB_OAUTH_CONFIG']['GITHUB_OAUTH_CLIENT_SECRET'] ?? null;
315-
self::$GITHUB_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG['GITHUB_OAUTH_CONFIG']['GITHUB_OAUTH_REDIRECT_URL'] ?? null;
313+
self::$GITHUB_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG[ 'GITHUB_OAUTH_CONFIG' ][ 'GITHUB_OAUTH_CLIENT_ID' ] ?? null;
314+
self::$GITHUB_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG[ 'GITHUB_OAUTH_CONFIG' ][ 'GITHUB_OAUTH_CLIENT_SECRET' ] ?? null;
315+
self::$GITHUB_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG[ 'GITHUB_OAUTH_CONFIG' ][ 'GITHUB_OAUTH_REDIRECT_URL' ] ?? null;
316316

317-
self::$LINKEDIN_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG['LINKEDIN_OAUTH_CONFIG']['LINKEDIN_OAUTH_CLIENT_ID'] ?? null;
318-
self::$LINKEDIN_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG['LINKEDIN_OAUTH_CONFIG']['LINKEDIN_OAUTH_CLIENT_SECRET'] ?? null;
319-
self::$LINKEDIN_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG['LINKEDIN_OAUTH_CONFIG']['LINKEDIN_OAUTH_REDIRECT_URL'] ?? null;
317+
self::$LINKEDIN_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG[ 'LINKEDIN_OAUTH_CONFIG' ][ 'LINKEDIN_OAUTH_CLIENT_ID' ] ?? null;
318+
self::$LINKEDIN_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG[ 'LINKEDIN_OAUTH_CONFIG' ][ 'LINKEDIN_OAUTH_CLIENT_SECRET' ] ?? null;
319+
self::$LINKEDIN_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG[ 'LINKEDIN_OAUTH_CONFIG' ][ 'LINKEDIN_OAUTH_REDIRECT_URL' ] ?? null;
320320

321-
self::$MICROSOFT_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG['MICROSOFT_OAUTH_CONFIG']['MICROSOFT_OAUTH_CLIENT_ID'] ?? null;
322-
self::$MICROSOFT_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG['MICROSOFT_OAUTH_CONFIG']['MICROSOFT_OAUTH_CLIENT_SECRET'] ?? null;
323-
self::$MICROSOFT_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG['MICROSOFT_OAUTH_CONFIG']['MICROSOFT_OAUTH_REDIRECT_URL'] ?? null;
321+
self::$MICROSOFT_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG[ 'MICROSOFT_OAUTH_CONFIG' ][ 'MICROSOFT_OAUTH_CLIENT_ID' ] ?? null;
322+
self::$MICROSOFT_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG[ 'MICROSOFT_OAUTH_CONFIG' ][ 'MICROSOFT_OAUTH_CLIENT_SECRET' ] ?? null;
323+
self::$MICROSOFT_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG[ 'MICROSOFT_OAUTH_CONFIG' ][ 'MICROSOFT_OAUTH_REDIRECT_URL' ] ?? null;
324324

325-
self::$FACEBOOK_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG['FACEBOOK_OAUTH_CONFIG']['FACEBOOK_OAUTH_CLIENT_ID'] ?? null;
326-
self::$FACEBOOK_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG['FACEBOOK_OAUTH_CONFIG']['FACEBOOK_OAUTH_CLIENT_SECRET'] ?? null;
327-
self::$FACEBOOK_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG['FACEBOOK_OAUTH_CONFIG']['FACEBOOK_OAUTH_REDIRECT_URL'] ?? null;
325+
self::$FACEBOOK_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG[ 'FACEBOOK_OAUTH_CONFIG' ][ 'FACEBOOK_OAUTH_CLIENT_ID' ] ?? null;
326+
self::$FACEBOOK_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG[ 'FACEBOOK_OAUTH_CONFIG' ][ 'FACEBOOK_OAUTH_CLIENT_SECRET' ] ?? null;
327+
self::$FACEBOOK_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG[ 'FACEBOOK_OAUTH_CONFIG' ][ 'FACEBOOK_OAUTH_REDIRECT_URL' ] ?? null;
328328

329-
self::$GOOGLE_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG['GOOGLE_OAUTH_CONFIG'][ 'GOOGLE_OAUTH_CLIENT_ID' ] ?? null;
330-
self::$GOOGLE_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG['GOOGLE_OAUTH_CONFIG'][ 'GOOGLE_OAUTH_CLIENT_SECRET' ] ?? null;
331-
self::$GOOGLE_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG['GOOGLE_OAUTH_CONFIG'][ 'GOOGLE_OAUTH_REDIRECT_URL' ] ?? null;
329+
self::$GOOGLE_OAUTH_CLIENT_ID = INIT::$OAUTH_CONFIG[ 'GOOGLE_OAUTH_CONFIG' ][ 'GOOGLE_OAUTH_CLIENT_ID' ] ?? null;
330+
self::$GOOGLE_OAUTH_CLIENT_SECRET = INIT::$OAUTH_CONFIG[ 'GOOGLE_OAUTH_CONFIG' ][ 'GOOGLE_OAUTH_CLIENT_SECRET' ] ?? null;
331+
self::$GOOGLE_OAUTH_REDIRECT_URL = INIT::$OAUTH_CONFIG[ 'GOOGLE_OAUTH_CONFIG' ][ 'GOOGLE_OAUTH_REDIRECT_URL' ] ?? null;
332332

333333
# Drive
334-
self::$GOOGLE_OAUTH_CLIENT_APP_NAME = INIT::$OAUTH_CONFIG['GOOGLE_OAUTH_CONFIG'][ 'GOOGLE_OAUTH_CLIENT_APP_NAME' ] ?? null;
335-
self::$GOOGLE_OAUTH_BROWSER_API_KEY = INIT::$OAUTH_CONFIG['GOOGLE_OAUTH_CONFIG'][ 'GOOGLE_OAUTH_BROWSER_API_KEY' ] ?? null;
334+
self::$GOOGLE_OAUTH_CLIENT_APP_NAME = INIT::$OAUTH_CONFIG[ 'GOOGLE_OAUTH_CONFIG' ][ 'GOOGLE_OAUTH_CLIENT_APP_NAME' ] ?? null;
335+
self::$GOOGLE_OAUTH_BROWSER_API_KEY = INIT::$OAUTH_CONFIG[ 'GOOGLE_OAUTH_CONFIG' ][ 'GOOGLE_OAUTH_BROWSER_API_KEY' ] ?? null;
336336

337337
self::$MIME_TYPES = include( 'Mime2Extension.php' );
338338

339339
}
340340

341-
public static $SUPPORTED_FILE_TYPES = [
341+
public static $SUPPORTED_FILE_TYPES = [
342342
'Office' => [
343343
'pages' => [ '', '', 'extdoc' ],
344344
'doc' => [ '', '', 'extdoc' ],
@@ -379,18 +379,18 @@ public function __construct() {
379379
'zip' => [ '', '', 'extzip' ],
380380
],
381381
'Web' => [
382-
'htm' => [ '', '', 'exthtm' ],
383-
'html' => [ '', '', 'exthtm' ],
384-
'xhtml' => [ '', '', 'exthtm' ],
385-
'xml' => [ '', '', 'extxml' ],
386-
'dtd' => [ '', '', 'extxml' ],
382+
'htm' => [ '', '', 'exthtm' ],
383+
'html' => [ '', '', 'exthtm' ],
384+
'xhtml' => [ '', '', 'exthtm' ],
385+
'xml' => [ '', '', 'extxml' ],
386+
'dtd' => [ '', '', 'extxml' ],
387387
// 'php' => array( '', '', 'extxml' ),
388-
'json' => [ '', '', 'extxml' ],
389-
'jsont' => [ '', '', 'extxml' ],
388+
'json' => [ '', '', 'extxml' ],
389+
'jsont' => [ '', '', 'extxml' ],
390390
'jsont2' => [ '', '', 'extxml' ],
391-
'yaml' => [ '', '', 'extxml' ],
392-
'yml' => [ '', '', 'extxml' ],
393-
'md' => [ '', '', 'extxml' ],
391+
'yaml' => [ '', '', 'extxml' ],
392+
'yml' => [ '', '', 'extxml' ],
393+
'md' => [ '', '', 'extxml' ],
394394
],
395395
'Scanned Files' => [
396396
'pdf' => [ '', '', 'extpdf' ],

inc/config.ini.sample

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ REDIS_SERVERS = "tcp://localhost:6379?database=0"
2727
QUEUE_BROKER_ADDRESS = "tcp://localhost:61613"
2828
QUEUE_JMX_ADDRESS = "http://localhost:8161"
2929
QUEUE_CREDENTIALS = "admin:admin"
30-
SSE_BASE_URL = "localhost/sse" ;no trailing slash here
30+
SOCKET_BASE_URL = "localhost/sse" ;no trailing slash here
3131
STORAGE_DIR = "/home/matecat/cattool/local_storage" ;provide an absolute path
3232

3333
SMTP_HOST = 'localhost'
@@ -80,7 +80,7 @@ REDIS_SERVERS = "tcp://localhost:6379"
8080
QUEUE_BROKER_ADDRESS = "tcp://localhost:61613"
8181
QUEUE_JMX_ADDRESS = "http://localhost:8161"
8282
QUEUE_CREDENTIALS = "admin:admin"
83-
SSE_BASE_URL = "localhost/sse" ;no trailing slash here
83+
SOCKET_BASE_URL = "localhost/sse" ;no trailing slash here
8484
STORAGE_DIR = "/home/matecat/cattool/local_storage" ;provide an absolute path
8585

8686
SMTP_HOST = 'localhost'
@@ -124,7 +124,7 @@ REDIS_SERVERS = "tcp://localhost:6379"
124124
QUEUE_BROKER_ADDRESS = "tcp://localhost:61613"
125125
QUEUE_JMX_ADDRESS = "http://localhost:8161"
126126
QUEUE_CREDENTIALS = "admin:admin"
127-
SSE_BASE_URL = "localhost/sse" ;no trailing slash here
127+
SOCKET_BASE_URL = "localhost/sse" ;no trailing slash here
128128
STORAGE_DIR = "/home/matecat/cattool/storage" ;provide an absolute path
129129

130130
SMTP_HOST = 'localhost'

internal_scripts

lib/Controller/API/App/Authentication/LoginController.php

+30-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?php
22
/**
33
* Created by PhpStorm.
4-
* User: fregini
5-
* Date: 22/11/2016
4+
* User: Domenico <[email protected]>, <[email protected]>
5+
* Date: 19/09/2024
66
* Time: 09:38
77
*/
88

@@ -132,4 +132,32 @@ public function token() {
132132
$this->response->code( 200 );
133133
}
134134

135+
/**
136+
* Signed Double-Submit Cookie
137+
* @throws Exception
138+
*/
139+
public function socketToken() {
140+
141+
if ( empty( $_SESSION[ 'user' ] ) ) {
142+
$this->response->code( 406 );
143+
return;
144+
}
145+
146+
$jwt = new SimpleJWT( [ "uid" => $_SESSION[ 'user' ]->uid ] );
147+
$jwt->setTimeToLive( 60 );
148+
149+
CookieManager::setCookie( INIT::$XSRF_TOKEN, $jwt->jsonSerialize(),
150+
[
151+
'expires' => time() + 60, /* now + 60 seconds */
152+
'path' => '/',
153+
'domain' => INIT::$COOKIE_DOMAIN,
154+
'secure' => true,
155+
'httponly' => false,
156+
'samesite' => 'Strict',
157+
]
158+
);
159+
160+
$this->response->code( 200 );
161+
}
162+
135163
}

lib/Controller/API/Commons/Authentication/AuthenticationTrait.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public function broadcastLogout() {
7777
]
7878
]
7979
] );
80-
$queueHandler->publishToTopic( INIT::$SSE_NOTIFICATIONS_QUEUE_NAME, new Message( $message ) );
80+
$queueHandler->publishToNodeJsClients( INIT::$SOCKET_NOTIFICATIONS_QUEUE_NAME, new Message( $message ) );
8181
}
8282

8383
public function logout() {

lib/Controller/catController.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ public function setTemplateVars() {
442442

443443
if ( INIT::$COMMENTS_ENABLED ) {
444444
$this->template->comments_enabled = true;
445-
$this->template->sse_base_url = INIT::$SSE_BASE_URL;
445+
$this->template->socket_base_url = INIT::$SOCKET_BASE_URL;
446446
}
447447

448448
$projectMetaDataDao = new Projects_MetadataDao();

lib/Controller/commentController.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ private function enqueueDeleteCommentMessage( int $id, int $idSegment, int $sour
497497
] );
498498

499499
$queueHandler = new AMQHandler();
500-
$queueHandler->publishToTopic( INIT::$SSE_NOTIFICATIONS_QUEUE_NAME, new Message( $message ) );
500+
$queueHandler->publishToNodeJsClients( INIT::$SOCKET_NOTIFICATIONS_QUEUE_NAME, new Message( $message ) );
501501

502502
}
503503

@@ -517,7 +517,7 @@ private function enqueueComment() {
517517
] );
518518

519519
$queueHandler = new AMQHandler();
520-
$queueHandler->publishToTopic( INIT::$SSE_NOTIFICATIONS_QUEUE_NAME, new Message( $message ) );
520+
$queueHandler->publishToNodeJsClients( INIT::$SOCKET_NOTIFICATIONS_QUEUE_NAME, new Message( $message ) );
521521

522522
}
523523

lib/Routes/utils_routes.php

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
route( '/login', 'POST', [ 'API\App\Authentication\LoginController', 'login' ] );
2121
route( '/logout', 'POST', [ 'API\App\Authentication\LoginController', 'directLogout' ] );
2222
route( '/login/token', 'GET', [ 'API\App\Authentication\LoginController', 'token' ] );
23+
route( '/login/socket', 'GET', [ 'API\App\Authentication\LoginController', 'socketToken' ] );
2324

2425
route( '/metadata', 'POST', [ 'API\App\UserMetadataController', 'update' ] );
2526

lib/Utils/AMQHandler.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public function subscribe( $destination, $selector = null, $ack = 'client-indivi
155155
*
156156
* @return bool
157157
*/
158-
public function publishToQueues( $destination, Message $message ) {
158+
public function publishToQueues( string $destination, Message $message ): bool {
159159

160160
$this->clientType = self::CLIENT_TYPE_PUBLISHER;
161161

@@ -177,7 +177,7 @@ public function __destruct() {
177177
*
178178
* @return bool
179179
*/
180-
public function publishToTopic( $destination, Message $message ) {
180+
public function publishToNodeJsClients( string $destination, Message $message ): bool {
181181

182182
$this->clientType = self::CLIENT_TYPE_PUBLISHER;
183183

@@ -188,12 +188,12 @@ public function publishToTopic( $destination, Message $message ) {
188188
/**
189189
* Get the queue Length
190190
*
191-
* @param $queueName
191+
* @param string|null $queueName
192192
*
193193
* @return mixed
194194
* @throws Exception
195195
*/
196-
public function getQueueLength( $queueName = null ) {
196+
public function getQueueLength( ?string $queueName = null ) {
197197

198198
if ( !empty( $queueName ) ) {
199199
$queue = $queueName;
@@ -212,12 +212,12 @@ public function getQueueLength( $queueName = null ) {
212212
/**
213213
* Get the number of consumers for this queue
214214
*
215-
* @param null $queueName
215+
* @param string|null $queueName
216216
*
217217
* @return mixed
218218
* @throws Exception
219219
*/
220-
public function getConsumerCount( $queueName = null ) {
220+
public function getConsumerCount( ?string $queueName = null ) {
221221

222222
if ( !empty( $queueName ) ) {
223223
$queue = $queueName;

lib/Utils/AsyncTasks/Workers/AIAssistantWorker.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ private function emitErrorMessage( $message, $payload ) {
179179
* @throws StompException
180180
*/
181181
private function emitMessage( $idClient, $idSegment, $message, $hasError = false, $completed = false ) {
182-
$this->publishToSseTopic( [
182+
$this->publishToNodeJsClients( [
183183
'_type' => 'ai_assistant_explain_meaning',
184184
'data' => [
185185
'id_client' => $idClient,

lib/Utils/AsyncTasks/Workers/BulkSegmentStatusChangeWorker.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public function process( AbstractElement $queueElement ) {
115115
]
116116
];
117117

118-
$this->publishToSseTopic( $message );
118+
$this->publishToNodeJsClients( $message );
119119

120120
}
121121
}

lib/Utils/AsyncTasks/Workers/GetContributionWorker.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ protected function _publishPayload( array $content, ContributionRequestStruct $c
180180
]
181181
];
182182

183-
$this->publishToSseTopic( $_object );
183+
$this->publishToNodeJsClients( $_object );
184184
$this->_doLog( json_encode( $_object ) );
185185

186186
}

0 commit comments

Comments
 (0)