diff options
Diffstat (limited to 'gnu/services/web.scm')
| -rw-r--r-- | gnu/services/web.scm | 110 |
1 files changed, 109 insertions, 1 deletions
diff --git a/gnu/services/web.scm b/gnu/services/web.scm index 4434fecf02c..f0c7e90cbfb 100644 --- a/gnu/services/web.scm +++ b/gnu/services/web.scm | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> | 9 | ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr> |
| 10 | ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> | 10 | ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com> |
| 11 | ;;; Copyright © 2019, 2020 Florian Pelz <pelzflorian@pelzflorian.de> | 11 | ;;; Copyright © 2019, 2020 Florian Pelz <pelzflorian@pelzflorian.de> |
| 12 | ;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net> | 12 | ;;; Copyright © 2020, 2022 Ricardo Wurmus <rekado@elephly.net> |
| 13 | ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> | 13 | ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> |
| 14 | ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net> | 14 | ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net> |
| 15 | ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com> | 15 | ;;; Copyright © 2020 Oleg Pykhalov <go.wigust@gmail.com> |
| @@ -205,6 +205,21 @@ | |||
| 205 | 205 | ||
| 206 | tailon-service-type | 206 | tailon-service-type |
| 207 | 207 | ||
| 208 | anonip-configuration | ||
| 209 | anonip-configuration? | ||
| 210 | anonip-configuration-anonip | ||
| 211 | anonip-configuration-input | ||
| 212 | anonip-configuration-output | ||
| 213 | anonip-configuration-skip-private? | ||
| 214 | anonip-configuration-column | ||
| 215 | anonip-configuration-replacement | ||
| 216 | anonip-configuration-ipv4mask | ||
| 217 | anonip-configuration-ipv6mask | ||
| 218 | anonip-configuration-increment | ||
| 219 | anonip-configuration-delimiter | ||
| 220 | anonip-configuration-regex | ||
| 221 | anonip-service-type | ||
| 222 | |||
| 208 | varnish-configuration | 223 | varnish-configuration |
| 209 | varnish-configuration? | 224 | varnish-configuration? |
| 210 | varnish-configuration-package | 225 | varnish-configuration-package |
| @@ -1355,6 +1370,99 @@ files.") | |||
| 1355 | files)))))))) | 1370 | files)))))))) |
| 1356 | (default-value (tailon-configuration)))) | 1371 | (default-value (tailon-configuration)))) |
| 1357 | 1372 | ||
| 1373 | |||
| 1374 | |||
| 1375 | ;;; | ||
| 1376 | ;;; Log anonymization | ||
| 1377 | ;;; | ||
| 1378 | |||
| 1379 | (define-record-type* <anonip-configuration> | ||
| 1380 | anonip-configuration make-anonip-configuration | ||
| 1381 | anonip-configuration? | ||
| 1382 | (anonip anonip-configuration-anonip ;file-like | ||
| 1383 | (default anonip)) | ||
| 1384 | (input anonip-configuration-input) ;string | ||
| 1385 | (output anonip-configuration-output) ;string | ||
| 1386 | (skip-private? anonip-configuration-skip-private? ;boolean | ||
| 1387 | (default #f)) | ||
| 1388 | (column anonip-configuration-column ;number | ||
| 1389 | (default #f)) | ||
| 1390 | (replacement anonip-configuration-replacement ;string | ||
| 1391 | (default #f)) | ||
| 1392 | (ipv4mask anonip-configuration-ipv4mask ;number | ||
| 1393 | (default #f)) | ||
| 1394 | (ipv6mask anonip-configuration-ipv6mask ;number | ||
| 1395 | (default #f)) | ||
| 1396 | (increment anonip-configuration-increment ;number | ||
| 1397 | (default #f)) | ||
| 1398 | (delimiter anonip-configuration-delimiter ;string | ||
| 1399 | (default #f)) | ||
| 1400 | (regex anonip-configuration-regex ;string | ||
| 1401 | (default #f))) | ||
| 1402 | |||
| 1403 | (define (anonip-activation config) | ||
| 1404 | (with-imported-modules '((guix build utils)) | ||
| 1405 | #~(begin | ||
| 1406 | (use-modules (guix build utils)) | ||
| 1407 | (for-each | ||
| 1408 | (lambda (directory) | ||
| 1409 | (mkdir-p directory) | ||
| 1410 | (chmod directory #o755)) | ||
| 1411 | (list (dirname #$(anonip-configuration-input config)) | ||
| 1412 | (dirname #$(anonip-configuration-output config))))))) | ||
| 1413 | |||
| 1414 | (define (anonip-shepherd-service config) | ||
| 1415 | (let ((input (anonip-configuration-input config)) | ||
| 1416 | (output (anonip-configuration-output config)) | ||
| 1417 | (optional | ||
| 1418 | (lambda (accessor option) | ||
| 1419 | (or (and=> (accessor config) | ||
| 1420 | (lambda (value) | ||
| 1421 | (list | ||
| 1422 | (format #false "~a=~a" | ||
| 1423 | option value)))) | ||
| 1424 | (list))))) | ||
| 1425 | (list (shepherd-service | ||
| 1426 | (provision (list (symbol-append 'anonip- (string->symbol output)))) | ||
| 1427 | (requirement '(user-processes)) | ||
| 1428 | (documentation "Anonimyze the given log file location with anonip.") | ||
| 1429 | (start #~(lambda _ | ||
| 1430 | (unless (file-exists? #$input) | ||
| 1431 | (mknod #$input 'fifo #o600 0)) | ||
| 1432 | (let ((pid (fork+exec-command | ||
| 1433 | (append | ||
| 1434 | (list #$(file-append (anonip-configuration-anonip config) | ||
| 1435 | "/bin/anonip") | ||
| 1436 | (string-append "--input=" #$input) | ||
| 1437 | (string-append "--output=" #$output)) | ||
| 1438 | (if #$(anonip-configuration-skip-private? config) | ||
| 1439 | '("--skip-private") (list)) | ||
| 1440 | '#$(optional anonip-configuration-column "--column") | ||
| 1441 | '#$(optional anonip-configuration-ipv4mask "--ipv4mask") | ||
| 1442 | '#$(optional anonip-configuration-ipv6mask "--ipv6mask") | ||
| 1443 | '#$(optional anonip-configuration-increment "--increment") | ||
| 1444 | '#$(optional anonip-configuration-replacement "--replacement") | ||
| 1445 | '#$(optional anonip-configuration-delimiter "--delimiter") | ||
| 1446 | '#$(optional anonip-configuration-regex "--regex")) | ||
| 1447 | ;; Run in a UTF-8 locale | ||
| 1448 | #:environment-variables | ||
| 1449 | (list (string-append "GUIX_LOCPATH=" #$glibc-utf8-locales | ||
| 1450 | "/lib/locale") | ||
| 1451 | "LC_ALL=en_US.utf8")))) | ||
| 1452 | pid))) | ||
| 1453 | (stop #~(make-kill-destructor)))))) | ||
| 1454 | |||
| 1455 | (define anonip-service-type | ||
| 1456 | (service-type | ||
| 1457 | (name 'anonip) | ||
| 1458 | (extensions | ||
| 1459 | (list (service-extension shepherd-root-service-type | ||
| 1460 | anonip-shepherd-service) | ||
| 1461 | (service-extension activation-service-type | ||
| 1462 | anonip-activation))) | ||
| 1463 | (description | ||
| 1464 | "Provide web server log anonymization with @command{anonip}."))) | ||
| 1465 | |||
| 1358 | 1466 | ||
| 1359 | ;;; | 1467 | ;;; |
| 1360 | ;;; Varnish | 1468 | ;;; Varnish |
