github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/RELEASE.txt (about) 1 2021/02/17 Maen v3.0.16 2 * Bug 117024 - Fixing simplepush regression. r=Raffi 3 4 2021/01/15 Maen v3.0.15 5 * Bug 115073 - enhancing the management of old devices. r=Raffi 6 7 2020/12/30 Maen v3.0.14 8 * Bug 113921 - fixing simplepush protocol. r=Raffi 9 10 2020/12/22 18:17 Maen v3.0.13 11 * Bug 113368 - correcting vapid check. r=Raffi 12 13 2020/11/24 Maen v3.0.12 14 * Bug 110424 - correcting api version check. r=Raffi 15 16 2020/11/18 Maen v3.0.11 17 * Bug 108379 - return 202 for offline messages. r=Raffi 18 19 2020/07/20 sedwards v3.0.10 20 * Bug 96123 - When setting max_msg=value remove all space and quotes to ensure REP sees the value as an integer. r=Raffi 21 22 2020/06/08 bqiu v3.0.9 23 * Bug 96123 - max_msg=0 does not disable max msg check in REP. r=Raffi 24 25 2020/06/01 sedwards v3.0.8 26 * Bug 95685: Support passing max_msg in as a variable in the docker-compose file on container startup. r=Bin 27 28 2020/05/29 bqiu v3.0.7 29 Fixes : 30 Bug 85112: Cassandra Driver Changes for Multi DC setup. 31 32 2020/05/28 sedwards v3.0.6 33 * Bug 92148 - Correct copy and paste error in automated container build. r=Raffi 34 35 2020/05/28 sedwards v3.0.5 36 * Bug 92148 - Carry over CI/CD Pipeline from old gorep repo and use empowerthings runner for automated builds. r=Raffi 37 38 2020/05/11 Maen v3.0.4 39 Fixes : 40 * Bug 90233 - fixed fetching TTL value from headers on multicast API. 41 42 2020/05/05 bqiu v3.0.3 43 Fixes : 44 * Bug 92015 - fmt.Fprintf should ONLY OCCUR after a rw.w.WriteHeader in REP. -r=raffi 45 46 2020/05/01 bqiu v3.0.2 47 Fixes : 48 * Bug 91938 - Add http respond code for all return cases in REP. 49 50 2019/03/20 Maen v0.14.12-p4-USA 51 52 This GoREP version is specific to US market, and have included solving two issues related to multicast API. Those two multicast API issues need to be fixed the same way in JIO version as well. This version will be dockerized (run using docker technology). The ONLY difference between this version and v0.14.12-p4 is the two fixes of multicast API bug, which were repoted in those two bugs: 53 54 57970: REP multicast API makes multiple http responses 55 57971: REP multicast API checks for end-to-end encryption requirements 56 57 58 2019/02/05 Afsal v0.14.12-P4 (back porting v0.14.12-P2 changes) 59 Fixes : 60 52495 : Optimized LUA script to avoid unnecessary read calls to redis slave nodes. 61 62 2019/01/17 Maen v0.14.12-P3 63 Fixes : 64 Bug: 55132 65 * Upgraded redis-go driver to v6.15.1 66 https://github.com/go-redis/redis/tree/v6.15.1 67 68 2018/12/05 Afsal v0.14.12-P1 69 Fixes : 70 52512 : Code modified to redirect all write commands to master nodes only if driver retry the command due to network error like EOF. 71 72 2018/11/14 Afsal v0.14.12 73 Fixes : 74 * Bug 49842 - Optimised code to reduce uasage of LUA script on redis. 75 * Bug 51767 - Scaling has been done to utilise Redis Slave nodes for Read operations. 76 77 2018/11/05 Afsal v0.14.11 78 Fixes : 79 * Bug 49842,49841 - Count limit validation is done by LUA script. So the operation is atomic now. It will solve issues like 80 "Message Count Limit breached in Redis" and "Message count for a UAID in Cassandra DB and Redis found to be out of sync" 81 82 83 2018/11/02 Afsal v0.14.10 84 Feature: 85 * Bug 50746 - Maximum number of socket connections for a node of a redis cluster is now configurable with Connection_Pool_Size parameter. Its default value is 10. 86 87 2018/10/29 Afsal v0.14.9 88 Fixes: 89 * Bug 50745 - Fixed a bug. Now code returns 500 response code for any cassandra transaction errors instead of 410. 90 91 2018/10/22 Afsal v0.14.8 92 Fixes: 93 * Bug 49898 - Added error codes along with error response code to App Server 94 95 2018/10/18 Afsal v0.14.7 96 Fixes: 97 * Bug 48995 - Added payload size validation and it is controlled by "max_msg_length" configuration parameter 98 * Bug 49898 - Added error description along with error response code to App Server 99 100 2018/10/15 Afsal v0.14.6 101 Fixes: 102 * Modified code to remove expiry added for redis records 103 * Bug 49804 - Handled redis transaction errors. 104 105 2018/10/11 Maen v0.14.5 106 107 Feature: Added Redis password authentication in GoREP."REDIS_PASSWORD" environment variable should be set with an encrypted value. It should 108 be encrypted with the same fernet crypto-key used for encrypting Cassandra password. If max_msg conf parameter is set to zero, it means that we don't want to activate message limitation feature, i.e. we don't want to connect to Redis DB, thus, GoREP will NOT try to connect to Redis, and concequently, it won't complain about not finding REDIS_PASSWORD environment variable. 109 110 2018/10/05 Afsal v0.14.4 111 Fixes: 112 * GIT merge conflict which affected message limitation functionality resolved 113 114 2018/10/03 Afsal v0.14.3 115 Fixes: 116 * Bug 49435 Removed Unwanted prints from logs 117 * BUg 48142 Removed "not found" string from REP 118 119 2018/09/27 Maen v0.14.2 120 Fixes: 121 * Bug 48973 Prevent storing message of TTL= 0 seconds in Cassandra DB. 122 123 2018/09/26 Afsal + Maen v0.14.1 124 Fixes: 125 * Bug ID: 48783 Print CEP hostname only for online notifications 126 * Bug ID: 47862 Print App Server IP for all error messages 127 * Changed source code to fich the value of table_prefix configuration parameter and use it for Redis records prefix. 128 129 2018/09/24 Maen v0.14.0 130 Fixes: 131 * Added message limitation per UAID feature using Redis DB.max_msg parameter added to configure the limitation. Value of zero means that there will be no limitation applied per UAID. 132 133 * Re-organized source code libraries (removed cumulis library and moved all of its content to be inside autoendpoint library). 134 135 2018/09/14 Maen v0.13.5 136 Fixes: 137 *Added a new module (executable) to remove provided list of subscriptions from Cassandra DB. 138 139 * Modify Makefile to generate executables in bin folder for all modules by default. 140 * Example of valid request: 141 ./bin/sub_remover -endpoint ./endpoints.txt -crypto_key <CRYPTO_KEY> -cass_user <USERNAME> -cass_pass <PASSWORD> -cass_addr kaios3-cass002 142 143 2018/09/13 Afsal v0.13.4 144 Fixes: 145 *Bug Id : 48569 146 - Solved issue with reading public key (p256ecdsa) from cryptokey header 147 148 2018/09/07 Maen v0.13.3 149 Fixes: 150 * Modified router_worker module to response 400 bad request to application server. Before it only printed 151 the error and returned. 152 * Bug Id : 48320 153 - Removed some debug logs from fernet.go file . 154 * Modified some notes (comments) in the source code to reflex on the latest modifications. 155 156 2018/09/07 Raffi v0.13.2 157 Fixes: 158 * Isolated the definition of sanitize_header into utils package and made 159 the function public so that it can be called from any place. 160 * Modified router_worker.go file in order to call this public function. 161 * Added test tool with test cases to validate the Sanitize_Header function 162 * Modified the Makefile to compile the test tool with 'make test' 163 164 2018/09/06 Raffi v0.13.1 165 166 Fixes: 167 * Loosen the too restrictive Standard Base64 format to support URL Safe Base 64 format as well. 168 * Make sure the output (i.e. cleaned header) is a URL Safe Base 64 format. 169 170 2018/09/06 Raffi v0.13.0 171 172 Fixes: 173 * Rewrite verify_and_clean_headers and renamed it sanitize_header 174 * Corrected a small issue in Makefile when doing a clean 175 176 2018/09/02 Maen v0.12.0 177 178 Fixes: 179 180 *Removed a dublicate calling of verify_and_clean_headers method in router_worker.go file.. 181 *Added a replacement of "," by ";" for received Crypto-Key and Encryption headers to avoid falilure of header splitting in verify_and_clean_headers method. 182 183 184 2018/08/31 Maen + Raffi - v0.11.9 185 186 Fixes: 187 * Cleaning the Crypto-Key and Encryption headers by removing the eventually 188 trailing '=' signs at the end of the value. 189 * Enforcing the presence of 'salt' label in Encryption header 190 * Enforcing the presense of 'dh' label in Crypto-Key header 191 * Fixed a typo from Varify_AppServer_ID to Verify_AppServer_ID 192 193 2018/08/29 Maen + Afsal - v0.11.8 194 Changes: 195 Bug Id: 47782 196 - Modified behavior to save the message if CEP node is down, and to return 201 instead of 500. 197 - Modified start_rep.sh script. Was stopping suddenly without any error. 198 199 2018/08/25 Maen - v0.11.7 200 Changes: 201 - Remove headers incase of empty payload messages. 202 203 2018/08/13 Afsal - v0.11.6 204 Changes: 205 Bug Id :46559 206 - Added StartREP and StopREP script in GoREP build 207 Bug Id :46479 208 - Moved irrelevant prints to debug in log 209 210 211 2018/08/10 Maen - v0.11.5 212 Changes: 213 - Added graceful shudown mechanism incase of Ctrl+C or Kill <PID> 214 - Added two optional command line argument flags for CPU and Memory profiling. 215 216 2018/08/06 Afsal - v0.11.4 217 218 Changes: 219 Bug Id : 46109 220 - GoREP Support DECIMAL for message tables of May,June, July and August Month Tables 221 Bug Id : 46138 222 - Issue with App server IP printing in the log has been solved 223 224 2018/07/27 Maen- v0.11.3 225 Changes: 226 Modified worker code to pass headers to CEP incase of a webpush notification wih empty payload. The reason of this change is that CEP does not deliver any header-less offline notifications. Whatsapp notifications are empty (no payload) and they need to be saved and delivered incase a device is offline. 227 228 2018/07/19 Afsal - v0.11.2 229 230 Changes: 231 Bug Id : 44613 232 1. Modified log printing for uaid and chid not found cases. 233 2. Optimized code to print application server IP. 234 235 236 2018/07/17 Afsal - v0.11.1 237 238 * Added hostname to statsd gauges. 239 240 241 242 2018/07/11 Maen - v0.11.0 243 244 New Features: 245 246 * Added an extra checking to varify that the application (Channel ID) is registered for push service. Checking will be done by quering Cassandra DB's message table of that UAID and varifying if that UAID has the CHID as one of its set entries of "chids" column. 247 248 * If current_month entry for a UAID is not set in router table (null). 249 GoREP will drop the user subscription. Please refer to /data/autopush/autopush/web/webpush.py 250 251 * GoREP now will check the expiration of JWT as the first varification step. 252 253 254 2018/07/02 Afsal - v0.10.3.8 255 256 Bug Id: 44066 257 Changes : 258 - Resolved a bug to print response code 404 in case of error 259 260 2018/06/26 Afsal - v0.10.3.7: 261 Changes: 262 263 1. Client IP (Application server) is added in the log for notification request. It will work only if X-Forwarded-For header is set 264 2. Log folder is created 265 3. Log configuration modified so that log files will be generated in log folder only 266 267 268 2018/06/14 Afsal - v0.10.3.6: 269 Changes: 270 271 Log level changed from DEBUG to INFO 272 273 274 2018/06/13 Afsal - v0.10.3.5: 275 Changes: 276 277 For offline case the log format changed to "Message saved successfully uaid:<uaid>" irrespective of the debug flag 278 279 280 281 2018/06/13 Maen - v0.10.3.4: 282 Changes: 283 284 * Logs has changed to print response code to application server instead from CEP. 285 when debug flag is deactivated. 286 * Changed "Response code to application server to" in logs to "responseCode". 287 * No subscription found for ID was changed to "No subscription found for uaid". 288 289 2018/06/12 Afsal - v0.10.3.3: 290 291 Changes: 292 293 * Logging changed to key:value format : 294 responseCode:<response code> uaid:<uaid> cepHostname:<cep node ip address> 295 296 297 2018/06/08 Maen - v0.10.3.2: 298 299 Changes: 300 301 * When debug flag is not activated, GoREP will only print: 302 reponse code + uaid + cep node ip address 303 On each message delivery to CEP node. 304 305 if the printed response code is 200, it means successful delivery for that UAID. 306 if the printed response code is 404, it means router miss for that UAID. 307 308 309 2018/05/31 Maen - v0.10.3.1: 310 311 Feature for the patch: 312 * Clean logs. 313 * Printing UAID for successful message saves, and for router misses. 314 * GoREP will now consider the message passed in the broadcast body in "msg" key. Before it made the assumption that message will always be empty (which is the use case for multicast), but it was better to read and send the content of the message for potential future usages. 315 316 317 2018/05/30 Maen - v0.10.3: 318 Bug fix: 319 320 *Offline multicast was not sending the request headers to CEP, which caused an isse on messages delivery when device is back and online again. The reason is that CEP will save the record to Database without headers and that will lead CEP to send an empty noitification ({}) to client instead of sending a full, proper-formated notification JSON message. 321 322 323 2018/05/18 Maen - v0.10.2: 324 New Features: 325 326 * Enhanced broadcast API in two modifications: 327 328 [1] Added the ability to braodcast to a v1 only, v2 only and mix of v1 and v2 endpoints, however each single broadcast request need to have a valid public key of app server in headers and also a valid VAPID JWT even if all the endpoints in the list are v1 endpoints, still, app server need to provide the key and the token. 329 330 [2] Before, if there is an n number of VAPID endpoints in the request, the API was making an n number of JWT checkings. Now, it is optimized to make the checking only one time, and to iterate over the endpoints. After that one time checking, the for loop will start to create workers for each endpoint. During the iteration, if the endpoint is: 331 332 - V1 endpoint: Then GoREP will proceed to notify the corresponding UAID as normal v1 message delivery. 333 334 - V2 endpoint: Then GoREP will check if the public key extracted from the result of decrypting that V2 endpoint matches with the one included in the header of the POST request on /bwpush/ API or not. 335 336 As a result, if in the multicast request, there is an n number of v1 endpoints and m number of v2 endpoints, then: 337 338 Number of workers created = n + m ( a worker per endpoint) 339 340 Number of JWT checkings = 1 checkig only before entering the for loop. 341 342 Number of public key comparisons = m 343 344 * Tried to reduce (optimize) the number of variables created in the worker module. 345 346 * Added a checking before storing message into databas. If the year is 2018 and "current_month" table entry for a particualr UAID is May and beyond (June, July, ...) or if the year is greater than 2018, then GoREP will save into INT ttl and timestamp DB columns else, GoREP will save into DECIMAL ttl and timestamp DB colums. 347 348 349 2018/05/14 Maen - v0.10.1: 350 New Features: 351 352 * Changed log file name format to be a timestamp instead of serial 353 serial numbering from 0 to 999. 354 355 356 2018/04/30 Maen - v0.10.0: 357 358 New Features: 359 360 * Cassandra's hosts can all be added now in configuration file 361 and separated by a "," 362 363 * Enhanced logs. Incase of deactivated debug flag, router miss or successfull delivery only will be printed. 364 365 * Modified database query to fetch "current_month" column to be used to store offline messages. 366 367 368 2018/04/19 Maen - v0.9.4: 369 370 Bug fix: 371 *Better managed different cases of different response codes from CEP. 372 373 374 2018/04/19 Maen - v0.9.3: 375 376 Bug fix: 377 *Removed creating a go routen on each multicast endpoint. 378 379 380 2018/04/19 Maen - v0.9.2: 381 382 Bug fix: 383 * Enhanced some logs. 384 385 2018/04/19 Maen - v0.9.1: 386 387 Bug fix: 388 * Fixed Multicast API message payload size limitation issue.Before it was not set properly. 389 390 2018/04/16 Maen - v0.9.0: 391 392 New Features: 393 * Added Statsd support. Including configuring Statsd Host + port number in 394 configuration file. 395 * Addressed different kind of responses to application server to memic the 396 behaviour of Python REP. 397 * Corrected the spellings of few logs. 398 399 400 2018/03/26 Maen - v0.8.1: 401 Bug fix: 402 * Corrected the format of received message to a base64 raw URL encoding. 403 2018/03/23 Maen - v0.8.0: 404 405 New features: 406 407 * Added SimplePush API. 408 * Added SimplePush GoFlip2 API /update/ 409 * Added VAPID feature in Go REP (v2 API). 410 * CLean logs. 411 412 2018/01/29 Maen - v0.7.0: 413 414 New features: 415 416 *Added the multicast API /bwpush/ 417 *Added payload size limits. Limits of Payload size of the multicast API 418 can be set unsing "Max_Payload" configuration variable in autopush_endpoint.conf file. 419 420 421 2017/12/20 Maen - v0.6.0: 422 423 New feature: 424 425 *Added 'keyspace' configuration parameter in autopush_endpoint.conf file. 426 427 428 2017/12/20 Maen - v0.5.0: 429 430 New feature: 431 432 *Added Cassandra password decryption. 433 434 435 2017/12/18 Maen - v0.4.0: 436 437 New feature: 438 439 *Added /health_status API to return 200 OK. That will be used for Haproxy server. 440 441 442 2017/12/18 Maen - v0.3.0: 443 444 New feature: 445 446 *The implementation of offline messages handling. 447 448 449 2017/12/06 Maen - v0.2.2: 450 Bug fix: 451 452 *Worked with Raffi on fixing global variable issue. 453 The issue is in router_worker.go file. 454 A global variable was used to save notification details (headers, channel ID, crypto key, etc..). 455 That has created a synchronization issue in the sense that if workers A, B, and C are created, 456 worker B can change a global variable information before worker A can fetch it, 457 which will result in fetching (and sending) the wrong crypto key by worker A. 458 And the more worker objects are created, the more liklely for this scenario to occure. 459 Fix was done by getting rid of global variable and creating variables that are "sepecific to" that worker or object. 460 461 462 2017/11/29 Maen - v0.2.1: 463 Bug fix: 464 465 * Libraries had incomplete source files.Corrected. 466 467 2017/11/28 Maen - v0.2.0 468 469 New feature: 470 471 * New logs to report the response from CEP. 472 473 2017/11/28 Maen - v0.1.1 474 475 Bug fix: 476 * Array out of index when sending a notification with empty data. Solution was to check if the data is NOT empty first, and befor manipulating the array. 477 478 479 2017/11/23 Maen - v0.1.0 480 Kaios push Alpha version: 481 482 * The first working version. This version does the basic routing of push message. 483 484 * This version does NOT support offline messages, as it is still being worked on. 485 486 * This version will read CassandraDB user name and password as an environment variables, however it does NOT yet support cassandraDB password decryption. To be added.