foreman_openscap 7.1.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_openscap/locale/cs_CZ/foreman_openscap.js +517 -421
  3. data/app/assets/javascripts/foreman_openscap/locale/de/foreman_openscap.js +909 -813
  4. data/app/assets/javascripts/foreman_openscap/locale/en/foreman_openscap.js +517 -421
  5. data/app/assets/javascripts/foreman_openscap/locale/en_GB/foreman_openscap.js +549 -453
  6. data/app/assets/javascripts/foreman_openscap/locale/es/foreman_openscap.js +917 -821
  7. data/app/assets/javascripts/foreman_openscap/locale/fr/foreman_openscap.js +917 -821
  8. data/app/assets/javascripts/foreman_openscap/locale/gl/foreman_openscap.js +557 -461
  9. data/app/assets/javascripts/foreman_openscap/locale/it/foreman_openscap.js +603 -507
  10. data/app/assets/javascripts/foreman_openscap/locale/ja/foreman_openscap.js +908 -812
  11. data/app/assets/javascripts/foreman_openscap/locale/ka/foreman_openscap.js +1398 -0
  12. data/app/assets/javascripts/foreman_openscap/locale/ko/foreman_openscap.js +705 -609
  13. data/app/assets/javascripts/foreman_openscap/locale/pt_BR/foreman_openscap.js +917 -821
  14. data/app/assets/javascripts/foreman_openscap/locale/ru/foreman_openscap.js +707 -611
  15. data/app/assets/javascripts/foreman_openscap/locale/sv_SE/foreman_openscap.js +557 -461
  16. data/app/assets/javascripts/foreman_openscap/locale/zh_CN/foreman_openscap.js +908 -812
  17. data/app/assets/javascripts/foreman_openscap/locale/zh_TW/foreman_openscap.js +705 -609
  18. data/app/assets/javascripts/foreman_openscap/reports.js +5 -0
  19. data/app/controllers/arf_reports_controller.rb +23 -2
  20. data/app/helpers/arf_reports_helper.rb +17 -4
  21. data/app/models/concerns/foreman_openscap/host_extensions.rb +2 -0
  22. data/app/models/foreman_openscap/arf_report.rb +11 -2
  23. data/app/views/arf_reports/_output.html.erb +5 -1
  24. data/app/views/job_templates/run_openscap_remediation_-_ansible_default.erb +27 -0
  25. data/app/views/job_templates/run_openscap_remediation_-_script_default.erb +24 -0
  26. data/config/routes.rb +1 -0
  27. data/db/migrate/20230912122310_add_fixes_to_message.rb +5 -0
  28. data/lib/foreman_openscap/engine.rb +18 -2
  29. data/lib/foreman_openscap/version.rb +1 -1
  30. data/lib/tasks/foreman_openscap_tasks.rake +5 -16
  31. data/locale/Makefile +3 -3
  32. data/locale/cs_CZ/foreman_openscap.edit.po +144 -16
  33. data/locale/cs_CZ/foreman_openscap.po +97 -1
  34. data/locale/de/LC_MESSAGES/foreman_openscap.mo +0 -0
  35. data/locale/de/foreman_openscap.edit.po +145 -17
  36. data/locale/de/foreman_openscap.po +98 -2
  37. data/locale/en/foreman_openscap.edit.po +144 -16
  38. data/locale/en/foreman_openscap.po +97 -1
  39. data/locale/en_GB/foreman_openscap.edit.po +144 -16
  40. data/locale/en_GB/foreman_openscap.po +97 -1
  41. data/locale/es/LC_MESSAGES/foreman_openscap.mo +0 -0
  42. data/locale/es/foreman_openscap.edit.po +145 -17
  43. data/locale/es/foreman_openscap.po +98 -2
  44. data/locale/foreman_openscap.pot +168 -16
  45. data/locale/fr/LC_MESSAGES/foreman_openscap.mo +0 -0
  46. data/locale/fr/foreman_openscap.edit.po +145 -17
  47. data/locale/fr/foreman_openscap.po +98 -2
  48. data/locale/gl/foreman_openscap.edit.po +144 -16
  49. data/locale/gl/foreman_openscap.po +97 -1
  50. data/locale/it/foreman_openscap.edit.po +144 -16
  51. data/locale/it/foreman_openscap.po +97 -1
  52. data/locale/ja/LC_MESSAGES/foreman_openscap.mo +0 -0
  53. data/locale/ja/foreman_openscap.edit.po +145 -17
  54. data/locale/ja/foreman_openscap.po +98 -2
  55. data/locale/ka/LC_MESSAGES/foreman_openscap.mo +0 -0
  56. data/locale/ka/foreman_openscap.edit.po +1863 -0
  57. data/locale/ka/foreman_openscap.po +1405 -0
  58. data/locale/ka/foreman_openscap.po.time_stamp +0 -0
  59. data/locale/ko/LC_MESSAGES/foreman_openscap.mo +0 -0
  60. data/locale/ko/foreman_openscap.edit.po +145 -17
  61. data/locale/ko/foreman_openscap.po +98 -2
  62. data/locale/pt_BR/LC_MESSAGES/foreman_openscap.mo +0 -0
  63. data/locale/pt_BR/foreman_openscap.edit.po +145 -17
  64. data/locale/pt_BR/foreman_openscap.po +98 -2
  65. data/locale/ru/LC_MESSAGES/foreman_openscap.mo +0 -0
  66. data/locale/ru/foreman_openscap.edit.po +145 -17
  67. data/locale/ru/foreman_openscap.po +98 -2
  68. data/locale/sv_SE/foreman_openscap.edit.po +144 -16
  69. data/locale/sv_SE/foreman_openscap.po +97 -1
  70. data/locale/zh_CN/LC_MESSAGES/foreman_openscap.mo +0 -0
  71. data/locale/zh_CN/foreman_openscap.edit.po +145 -17
  72. data/locale/zh_CN/foreman_openscap.po +98 -2
  73. data/locale/zh_TW/LC_MESSAGES/foreman_openscap.mo +0 -0
  74. data/locale/zh_TW/foreman_openscap.edit.po +145 -17
  75. data/locale/zh_TW/foreman_openscap.po +98 -2
  76. data/webpack/components/EmptyState.js +6 -2
  77. data/webpack/components/OpenscapRemediationWizard/OpenscapRemediationSelectors.js +16 -0
  78. data/webpack/components/OpenscapRemediationWizard/OpenscapRemediationWizardContext.js +4 -0
  79. data/webpack/components/OpenscapRemediationWizard/ViewSelectedHostsLink.js +38 -0
  80. data/webpack/components/OpenscapRemediationWizard/WizardHeader.js +43 -0
  81. data/webpack/components/OpenscapRemediationWizard/constants.js +14 -0
  82. data/webpack/components/OpenscapRemediationWizard/helpers.js +33 -0
  83. data/webpack/components/OpenscapRemediationWizard/index.js +160 -0
  84. data/webpack/components/OpenscapRemediationWizard/steps/Finish.js +131 -0
  85. data/webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js +217 -0
  86. data/webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js +176 -0
  87. data/webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.scss +4 -0
  88. data/webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js +160 -0
  89. data/webpack/components/OpenscapRemediationWizard/steps/index.js +4 -0
  90. data/webpack/index.js +8 -3
  91. data/webpack/testHelper.js +6 -5
  92. metadata +24 -3
@@ -382,15 +382,15 @@ msgstr "刪除 %s 合規報告失敗"
382
382
  msgid "Successfully deleted %s compliance reports"
383
383
  msgstr "刪除 %s 合規報告成功"
384
384
 
385
- #: ../app/controllers/arf_reports_controller.rb:85
385
+ #: ../app/controllers/arf_reports_controller.rb:106
386
386
  msgid "No compliance reports were found."
387
387
  msgstr ""
388
388
 
389
- #: ../app/controllers/arf_reports_controller.rb:89
389
+ #: ../app/controllers/arf_reports_controller.rb:110
390
390
  msgid "No compliance reports selected"
391
391
  msgstr ""
392
392
 
393
- #: ../app/controllers/arf_reports_controller.rb:94
393
+ #: ../app/controllers/arf_reports_controller.rb:115
394
394
  msgid "Something went wrong while selecting compliance reports - %s"
395
395
  msgstr "選擇合規報告時發生了錯誤 - %s"
396
396
 
@@ -430,15 +430,15 @@ msgstr "已更新主機:未從合規政策指定 '%s'"
430
430
  msgid "No valid policy ID provided"
431
431
  msgstr ""
432
432
 
433
- #: ../app/controllers/policies_controller.rb:125
434
- msgid "No hosts were found."
435
- msgstr "找不到主機。"
436
-
437
433
  #: ../app/controllers/policies_controller.rb:129
434
+ msgid "No hosts were found with that id, name or query filter"
435
+ msgstr ""
436
+
437
+ #: ../app/controllers/policies_controller.rb:134
438
438
  msgid "No hosts selected"
439
439
  msgstr "未選擇主機"
440
440
 
441
- #: ../app/controllers/policies_controller.rb:134
441
+ #: ../app/controllers/policies_controller.rb:139
442
442
  msgid "Something went wrong while selecting hosts - %s"
443
443
  msgstr "選擇主機時發生了錯誤 - %s"
444
444
 
@@ -510,18 +510,22 @@ msgstr ""
510
510
  msgid " through %s"
511
511
  msgstr ""
512
512
 
513
- #: ../app/helpers/arf_reports_helper.rb:66
513
+ #: ../app/helpers/arf_reports_helper.rb:67
514
514
  msgid "Hosts failing this rule"
515
515
  msgstr ""
516
516
 
517
- #: ../app/helpers/arf_reports_helper.rb:67
517
+ #: ../app/helpers/arf_reports_helper.rb:68
518
518
  msgid "Hosts passing this rule"
519
519
  msgstr ""
520
520
 
521
- #: ../app/helpers/arf_reports_helper.rb:68
521
+ #: ../app/helpers/arf_reports_helper.rb:69
522
522
  msgid "Hosts othering this rule"
523
523
  msgstr ""
524
524
 
525
+ #: ../app/helpers/arf_reports_helper.rb:72
526
+ msgid "Remediation"
527
+ msgstr ""
528
+
525
529
  #: ../app/helpers/compliance_dashboard_helper.rb:3 ../app/views/arf_reports/_list.html.erb:6 ../app/views/arf_reports/delete_multiple.html.erb:7 ../app/views/policy_dashboard/_policy_reports.html.erb:6
526
530
  msgid "Host"
527
531
  msgstr "主機"
@@ -1161,7 +1165,7 @@ msgstr "月份中的日子,請注意並不是所有月份都有同樣的天數
1161
1165
  msgid "You can specify custom cron line, e.g. \"0 3 * * *\", separate each of 5 values by space"
1162
1166
  msgstr "您可指定自訂的 cron 行,例如\"0 3 * * *\",五個數值均由空格隔開"
1163
1167
 
1164
- #: ../app/views/policies/_list.html.erb:3 ../app/views/tailoring_files/_list.html.erb:3 ../webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js:19 ../webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js:57 ../webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js:48 ../webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js:19 ../webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js:56 ../webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js:31 ../webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js:9
1168
+ #: ../app/views/policies/_list.html.erb:3 ../app/views/tailoring_files/_list.html.erb:3 ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:162 ../webpack/routes/OvalContents/OvalContentsIndex/OvalContentsTable.js:19 ../webpack/routes/OvalContents/OvalContentsNew/OvalContentsNew.js:57 ../webpack/routes/OvalContents/OvalContentsShow/OvalContentsShow.js:48 ../webpack/routes/OvalPolicies/OvalPoliciesIndex/OvalPoliciesTable.js:19 ../webpack/routes/OvalPolicies/OvalPoliciesNew/NewOvalPolicyForm.js:56 ../webpack/routes/OvalPolicies/OvalPoliciesShow/DetailsTab.js:31 ../webpack/routes/OvalPolicies/OvalPoliciesShow/HostgroupsTable.js:9
1165
1169
  msgid "Name"
1166
1170
  msgstr "名稱"
1167
1171
 
@@ -1487,14 +1491,22 @@ msgstr ""
1487
1491
  msgid "ID of OpenSCAP Proxy"
1488
1492
  msgstr ""
1489
1493
 
1490
- #: ../lib/foreman_openscap/engine.rb:270 ../lib/foreman_openscap/engine.rb:283
1494
+ #: ../lib/foreman_openscap/engine.rb:270 ../lib/foreman_openscap/engine.rb:293
1491
1495
  msgid "Run OpenSCAP scan"
1492
1496
  msgstr ""
1493
1497
 
1494
- #: ../lib/foreman_openscap/engine.rb:275 ../lib/foreman_openscap/engine.rb:284
1498
+ #: ../lib/foreman_openscap/engine.rb:275 ../lib/foreman_openscap/engine.rb:294
1495
1499
  msgid "Run OVAL scan"
1496
1500
  msgstr ""
1497
1501
 
1502
+ #: ../lib/foreman_openscap/engine.rb:279 ../lib/foreman_openscap/engine.rb:295
1503
+ msgid "Run OpenSCAP remediation with Ansible"
1504
+ msgstr ""
1505
+
1506
+ #: ../lib/foreman_openscap/engine.rb:284 ../lib/foreman_openscap/engine.rb:296
1507
+ msgid "Run OpenSCAP remediation with Shell"
1508
+ msgstr ""
1509
+
1498
1510
  #: ../webpack/components/ConfirmModal.js:19
1499
1511
  msgid "Confirm"
1500
1512
  msgstr ""
@@ -1507,14 +1519,130 @@ msgstr ""
1507
1519
  msgid "There's no available report for this host"
1508
1520
  msgstr ""
1509
1521
 
1510
- #: ../webpack/components/withDeleteModal.js:27
1511
- msgid "Are you sure you want to delete %s?"
1522
+ #: ../webpack/components/OpenscapRemediationWizard/ViewSelectedHostsLink.js:27
1523
+ msgid "View selected hosts"
1512
1524
  msgstr ""
1513
1525
 
1514
- #: ../webpack/components/withLoading.js:12
1526
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:69 ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:174
1527
+ msgid "Review hosts"
1528
+ msgstr ""
1529
+
1530
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:77 ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:123
1531
+ msgid "Select snippet"
1532
+ msgstr ""
1533
+
1534
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:85 ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:94
1535
+ msgid "Review remediation"
1536
+ msgstr ""
1537
+
1538
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:89
1539
+ msgid "Run"
1540
+ msgstr ""
1541
+
1542
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:93
1543
+ msgid "Done"
1544
+ msgstr ""
1545
+
1546
+ #: ../webpack/components/OpenscapRemediationWizard/index.js:127
1547
+ msgid "Remediate %s rule"
1548
+ msgstr ""
1549
+
1550
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:84
1551
+ msgid "Job details"
1552
+ msgstr ""
1553
+
1554
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:87
1555
+ msgid "Close"
1556
+ msgstr ""
1557
+
1558
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:97 ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:144 ../webpack/components/withLoading.js:12
1515
1559
  msgid "Error!"
1516
1560
  msgstr ""
1517
1561
 
1562
+ #: ../webpack/components/OpenscapRemediationWizard/steps/Finish.js:105
1563
+ msgid "The job has started on selected host(s), you can check the status on the job details page."
1564
+ msgstr ""
1565
+
1566
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:167
1567
+ msgid "OS"
1568
+ msgstr ""
1569
+
1570
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewHosts.js:175
1571
+ msgid "By default, remediation is applied to the current host. Optionally, remediate any additional hosts that fail the rule."
1572
+ msgstr ""
1573
+
1574
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:61
1575
+ msgid "Review the remediation snippet and apply it to the host manually."
1576
+ msgstr ""
1577
+
1578
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:62
1579
+ msgid "Review the remediation snippet that will be applied to selected host(s)."
1580
+ msgstr ""
1581
+
1582
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:67
1583
+ msgid "A reboot is required after applying remediation."
1584
+ msgstr ""
1585
+
1586
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:68
1587
+ msgid "A reboot might be required after applying remediation."
1588
+ msgstr ""
1589
+
1590
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:84
1591
+ msgid "Successfully copied to clipboard!"
1592
+ msgstr ""
1593
+
1594
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:85
1595
+ msgid "Copy to clipboard"
1596
+ msgstr ""
1597
+
1598
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:103
1599
+ msgid "Do not implement any of the recommended remedial actions or scripts without first testing them in a non-production environment."
1600
+ msgstr ""
1601
+
1602
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:106
1603
+ msgid "Remediation might render the system non-functional."
1604
+ msgstr ""
1605
+
1606
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:139
1607
+ msgid "Other hosts failing this rule"
1608
+ msgstr ""
1609
+
1610
+ #: ../webpack/components/OpenscapRemediationWizard/steps/ReviewRemediation.js:155
1611
+ msgid "Reboot the system(s)"
1612
+ msgstr ""
1613
+
1614
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:71
1615
+ msgid "Method"
1616
+ msgstr ""
1617
+
1618
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:77
1619
+ msgid "Remote job"
1620
+ msgstr ""
1621
+
1622
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:86
1623
+ msgid "Manual"
1624
+ msgstr ""
1625
+
1626
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:101
1627
+ msgid "There is no job to remediate with. Please remediate manually."
1628
+ msgstr ""
1629
+
1630
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:107
1631
+ msgid "Snippet"
1632
+ msgstr ""
1633
+
1634
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:150
1635
+ msgid "Select remediation method"
1636
+ msgstr ""
1637
+
1638
+ #: ../webpack/components/OpenscapRemediationWizard/steps/SnippetSelect.js:151
1639
+ msgid "You can remediate by running a remote job or you can display a snippet for manual remediation."
1640
+ msgstr ""
1641
+
1642
+ #: ../webpack/components/withDeleteModal.js:27
1643
+ msgid "Are you sure you want to delete %s?"
1644
+ msgstr ""
1645
+
1518
1646
  #: ../webpack/components/withLoading.js:64
1519
1647
  msgid "Permission denied"
1520
1648
  msgstr ""
@@ -62,6 +62,12 @@ msgstr ""
62
62
  msgid "<b>Foreman</b> OpenSCAP summary"
63
63
  msgstr ""
64
64
 
65
+ msgid "A reboot is required after applying remediation."
66
+ msgstr ""
67
+
68
+ msgid "A reboot might be required after applying remediation."
69
+ msgstr ""
70
+
65
71
  msgid "A summary of reports for OpenSCAP policies"
66
72
  msgstr ""
67
73
 
@@ -113,6 +119,9 @@ msgstr ""
113
119
  msgid "Back"
114
120
  msgstr "上一頁"
115
121
 
122
+ msgid "By default, remediation is applied to the current host. Optionally, remediate any additional hosts that fail the rule."
123
+ msgstr ""
124
+
116
125
  msgid "CVEs"
117
126
  msgstr ""
118
127
 
@@ -158,6 +167,9 @@ msgstr "選擇期間"
158
167
  msgid "Choose weekday"
159
168
  msgstr "選擇星期幾"
160
169
 
170
+ msgid "Close"
171
+ msgstr ""
172
+
161
173
  msgid "Compliance"
162
174
  msgstr "合規"
163
175
 
@@ -191,6 +203,9 @@ msgstr ""
191
203
  msgid "Content"
192
204
  msgstr ""
193
205
 
206
+ msgid "Copy to clipboard"
207
+ msgstr ""
208
+
194
209
  msgid "Could not find host identified by: %s"
195
210
  msgstr ""
196
211
 
@@ -302,9 +317,15 @@ msgstr ""
302
317
  msgid "Directory to upload when using \"directory\" upload type"
303
318
  msgstr ""
304
319
 
320
+ msgid "Do not implement any of the recommended remedial actions or scripts without first testing them in a non-production environment."
321
+ msgstr ""
322
+
305
323
  msgid "Documentation"
306
324
  msgstr "文件"
307
325
 
326
+ msgid "Done"
327
+ msgstr ""
328
+
308
329
  msgid "Download"
309
330
  msgstr "下載"
310
331
 
@@ -505,6 +526,9 @@ msgstr ""
505
526
  msgid "It may sometimes be required to adjust the security policy to your specific needs. "
506
527
  msgstr ""
507
528
 
529
+ msgid "Job details"
530
+ msgstr ""
531
+
508
532
  msgid "Latest Compliance Reports"
509
533
  msgstr ""
510
534
 
@@ -538,9 +562,15 @@ msgstr "載入中…"
538
562
  msgid "Locations"
539
563
  msgstr "位置"
540
564
 
565
+ msgid "Manual"
566
+ msgstr ""
567
+
541
568
  msgid "Message"
542
569
  msgstr "訊息"
543
570
 
571
+ msgid "Method"
572
+ msgstr ""
573
+
544
574
  msgid "Monthly, day of month: %s"
545
575
  msgstr ""
546
576
 
@@ -622,8 +652,8 @@ msgstr ""
622
652
  msgid "No hosts selected"
623
653
  msgstr "未選擇主機"
624
654
 
625
- msgid "No hosts were found."
626
- msgstr "找不到主機。"
655
+ msgid "No hosts were found with that id, name or query filter"
656
+ msgstr ""
627
657
 
628
658
  msgid "No proxy found for %{name} or %{url}"
629
659
  msgstr ""
@@ -676,6 +706,9 @@ msgstr "事件數量"
676
706
  msgid "Number of a day in month, note that not all months have same count of days"
677
707
  msgstr "月份中的日子,請注意並不是所有月份都有同樣的天數"
678
708
 
709
+ msgid "OS"
710
+ msgstr ""
711
+
679
712
  msgid "OVAL Content"
680
713
  msgstr ""
681
714
 
@@ -775,6 +808,9 @@ msgstr ""
775
808
  msgid "Other"
776
809
  msgstr "其他"
777
810
 
811
+ msgid "Other hosts failing this rule"
812
+ msgstr ""
813
+
778
814
  msgid "Othered"
779
815
  msgstr "其它"
780
816
 
@@ -867,6 +903,9 @@ msgstr "Puppet 類別"
867
903
  msgid "Rationale"
868
904
  msgstr "理由"
869
905
 
906
+ msgid "Reboot the system(s)"
907
+ msgstr ""
908
+
870
909
  msgid "Red Hat %s default content"
871
910
  msgstr ""
872
911
 
@@ -876,9 +915,21 @@ msgstr ""
876
915
  msgid "References"
877
916
  msgstr "參照"
878
917
 
918
+ msgid "Remediate %s rule"
919
+ msgstr ""
920
+
921
+ msgid "Remediation"
922
+ msgstr ""
923
+
924
+ msgid "Remediation might render the system non-functional."
925
+ msgstr ""
926
+
879
927
  msgid "Remote action:"
880
928
  msgstr "遠端動作:"
881
929
 
930
+ msgid "Remote job"
931
+ msgstr ""
932
+
882
933
  msgid "Report Metrics"
883
934
  msgstr "報告計量"
884
935
 
@@ -915,12 +966,33 @@ msgstr "資源"
915
966
  msgid "Result"
916
967
  msgstr "結果"
917
968
 
969
+ msgid "Review hosts"
970
+ msgstr ""
971
+
972
+ msgid "Review remediation"
973
+ msgstr ""
974
+
975
+ msgid "Review the remediation snippet and apply it to the host manually."
976
+ msgstr ""
977
+
978
+ msgid "Review the remediation snippet that will be applied to selected host(s)."
979
+ msgstr ""
980
+
918
981
  msgid "Rule Results"
919
982
  msgstr ""
920
983
 
984
+ msgid "Run"
985
+ msgstr ""
986
+
921
987
  msgid "Run OVAL scan"
922
988
  msgstr ""
923
989
 
990
+ msgid "Run OpenSCAP remediation with Ansible"
991
+ msgstr ""
992
+
993
+ msgid "Run OpenSCAP remediation with Shell"
994
+ msgstr ""
995
+
924
996
  msgid "Run OpenSCAP scan"
925
997
  msgstr ""
926
998
 
@@ -963,6 +1035,12 @@ msgstr ""
963
1035
  msgid "Select all items in this page"
964
1036
  msgstr "選擇這頁中的所有項目"
965
1037
 
1038
+ msgid "Select remediation method"
1039
+ msgstr ""
1040
+
1041
+ msgid "Select snippet"
1042
+ msgstr ""
1043
+
966
1044
  msgid "Severity"
967
1045
  msgstr "嚴重性"
968
1046
 
@@ -1005,6 +1083,9 @@ msgstr "顯示日誌訊息:"
1005
1083
  msgid "Smart Class Parameters"
1006
1084
  msgstr ""
1007
1085
 
1086
+ msgid "Snippet"
1087
+ msgstr ""
1088
+
1008
1089
  msgid "Something went wrong while selecting compliance reports - %s"
1009
1090
  msgstr "選擇合規報告時發生了錯誤 - %s"
1010
1091
 
@@ -1023,6 +1104,9 @@ msgstr "狀態表"
1023
1104
  msgid "Submit"
1024
1105
  msgstr "提交"
1025
1106
 
1107
+ msgid "Successfully copied to clipboard!"
1108
+ msgstr ""
1109
+
1026
1110
  msgid "Successfully deleted %s compliance reports"
1027
1111
  msgstr "刪除 %s 合規報告成功"
1028
1112
 
@@ -1085,9 +1169,15 @@ msgstr ""
1085
1169
  msgid "The identifier of the host"
1086
1170
  msgstr ""
1087
1171
 
1172
+ msgid "The job has started on selected host(s), you can check the status on the job details page."
1173
+ msgstr ""
1174
+
1088
1175
  msgid "There are significant differences in deployment options."
1089
1176
  msgstr ""
1090
1177
 
1178
+ msgid "There is no job to remediate with. Please remediate manually."
1179
+ msgstr ""
1180
+
1091
1181
  msgid "There was a following error when deleting %(name)s: %(error)s"
1092
1182
  msgstr ""
1093
1183
 
@@ -1210,6 +1300,9 @@ msgstr "檢視報告"
1210
1300
  msgid "View full report"
1211
1301
  msgstr "檢視完整報告"
1212
1302
 
1303
+ msgid "View selected hosts"
1304
+ msgstr ""
1305
+
1213
1306
  msgid "Was %s configured successfully?"
1214
1307
  msgstr ""
1215
1308
 
@@ -1240,6 +1333,9 @@ msgstr "是"
1240
1333
  msgid "You are not authorized to view the page. "
1241
1334
  msgstr ""
1242
1335
 
1336
+ msgid "You can remediate by running a remote job or you can display a snippet for manual remediation."
1337
+ msgstr ""
1338
+
1243
1339
  msgid "You can specify custom cron line, e.g. \"0 3 * * *\", separate each of 5 values by space"
1244
1340
  msgstr "您可指定自訂的 cron 行,例如\"0 3 * * *\",五個數值均由空格隔開"
1245
1341
 
@@ -56,8 +56,12 @@ EmptyStateIcon.defaultProps = {
56
56
 
57
57
  EmptyState.propTypes = {
58
58
  title: PropTypes.string,
59
- body: PropTypes.string,
60
- error: PropTypes.oneOfType([PropTypes.shape({}), PropTypes.string]),
59
+ body: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
60
+ error: PropTypes.oneOfType([
61
+ PropTypes.shape({}),
62
+ PropTypes.string,
63
+ PropTypes.bool,
64
+ ]),
61
65
  search: PropTypes.bool,
62
66
  lock: PropTypes.bool,
63
67
  primaryButton: PropTypes.node,
@@ -0,0 +1,16 @@
1
+ import {
2
+ selectAPIError,
3
+ selectAPIResponse,
4
+ selectAPIStatus,
5
+ } from 'foremanReact/redux/API/APISelectors';
6
+ import { STATUS } from 'foremanReact/constants';
7
+ import { REPORT_LOG_REQUEST_KEY } from './constants';
8
+
9
+ export const selectLogResponse = state =>
10
+ selectAPIResponse(state, REPORT_LOG_REQUEST_KEY);
11
+
12
+ export const selectLogStatus = state =>
13
+ selectAPIStatus(state, REPORT_LOG_REQUEST_KEY) || STATUS.PENDING;
14
+
15
+ export const selectLogError = state =>
16
+ selectAPIError(state, REPORT_LOG_REQUEST_KEY);
@@ -0,0 +1,4 @@
1
+ import { createContext } from 'react';
2
+
3
+ const OpenscapRemediationWizardContext = createContext({});
4
+ export default OpenscapRemediationWizardContext;
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import { ExternalLinkSquareAltIcon } from '@patternfly/react-icons';
5
+ import { Button } from '@patternfly/react-core';
6
+
7
+ import { translate as __ } from 'foremanReact/common/I18n';
8
+ import { foremanUrl } from 'foremanReact/common/helpers';
9
+ import { getHostsPageUrl } from 'foremanReact/Root/Context/ForemanContext';
10
+
11
+ const ViewSelectedHostsLink = ({
12
+ hostIdsParam,
13
+ isAllHostsSelected,
14
+ defaultFailedHostsSearch,
15
+ }) => {
16
+ const search = isAllHostsSelected ? defaultFailedHostsSearch : hostIdsParam;
17
+ const url = foremanUrl(`${getHostsPageUrl(false)}?search=${search}`);
18
+ return (
19
+ <Button
20
+ component="a"
21
+ variant="link"
22
+ icon={<ExternalLinkSquareAltIcon />}
23
+ iconPosition="right"
24
+ target="_blank"
25
+ href={url}
26
+ >
27
+ {__('View selected hosts')}
28
+ </Button>
29
+ );
30
+ };
31
+
32
+ ViewSelectedHostsLink.propTypes = {
33
+ isAllHostsSelected: PropTypes.bool.isRequired,
34
+ defaultFailedHostsSearch: PropTypes.string.isRequired,
35
+ hostIdsParam: PropTypes.string.isRequired,
36
+ };
37
+
38
+ export default ViewSelectedHostsLink;
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ Grid,
5
+ TextContent,
6
+ Text,
7
+ TextVariants,
8
+ Flex,
9
+ FlexItem,
10
+ } from '@patternfly/react-core';
11
+
12
+ const WizardHeader = ({ title, description }) => (
13
+ <Grid style={{ gridGap: '24px' }}>
14
+ {title && (
15
+ <TextContent>
16
+ <Text ouiaId="wizard-header-text" component={TextVariants.h2}>
17
+ {title}
18
+ </Text>
19
+ </TextContent>
20
+ )}
21
+ {description && (
22
+ <TextContent>
23
+ <Flex flex={{ default: 'inlineFlex' }}>
24
+ <FlexItem>
25
+ <TextContent>{description}</TextContent>
26
+ </FlexItem>
27
+ </Flex>
28
+ </TextContent>
29
+ )}
30
+ </Grid>
31
+ );
32
+
33
+ WizardHeader.propTypes = {
34
+ title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
35
+ description: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),
36
+ };
37
+
38
+ WizardHeader.defaultProps = {
39
+ title: undefined,
40
+ description: undefined,
41
+ };
42
+
43
+ export default WizardHeader;
@@ -0,0 +1,14 @@
1
+ export const OPENSCAP_REMEDIATION_MODAL_ID = 'openscapRemediationModal';
2
+ export const HOSTS_PATH = '/hosts';
3
+ export const FAIL_RULE_SEARCH = 'fails_xccdf_rule';
4
+
5
+ export const HOSTS_API_PATH = '/api/hosts';
6
+ export const HOSTS_API_REQUEST_KEY = 'HOSTS';
7
+ export const REPORT_LOG_REQUEST_KEY = 'ARF_REPORT_LOG';
8
+
9
+ export const JOB_INVOCATION_PATH = '/job_invocations';
10
+ export const JOB_INVOCATION_API_PATH = '/api/job_invocations';
11
+ export const JOB_INVOCATION_API_REQUEST_KEY = 'OPENSCAP_REX_JOB_INVOCATIONS';
12
+
13
+ export const SNIPPET_SH = 'urn:xccdf:fix:script:sh';
14
+ export const SNIPPET_ANSIBLE = 'urn:xccdf:fix:script:ansible';
@@ -0,0 +1,33 @@
1
+ import { join, find, map, compact, includes, filter, isString } from 'lodash';
2
+
3
+ const getResponseErrorMsgs = ({ data } = {}) => {
4
+ if (data) {
5
+ const messages =
6
+ data.displayMessage || data.message || data.errors || data.error?.message;
7
+ return Array.isArray(messages) ? messages : [messages];
8
+ }
9
+ return [];
10
+ };
11
+
12
+ export const errorMsg = data => {
13
+ if (isString(data)) return data;
14
+
15
+ return join(getResponseErrorMsgs({ data }), '\n');
16
+ };
17
+
18
+ export const findFixBySnippet = (fixes, snippet) =>
19
+ find(fixes, fix => fix.system === snippet);
20
+
21
+ export const supportedRemediationSnippets = (
22
+ fixes,
23
+ meth,
24
+ supportedJobSnippets
25
+ ) => {
26
+ if (meth === 'manual') return map(fixes, f => f.system);
27
+ return compact(
28
+ map(
29
+ filter(fixes, fix => includes(supportedJobSnippets, fix.system)),
30
+ f => f.system
31
+ )
32
+ );
33
+ };