Merge branch '2.4' into feature/tag_filter_rework

pull/2706/head
iglocska 2017-12-05 00:07:28 +01:00
commit a1842ec98f
22 changed files with 2568 additions and 44 deletions

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 409.6 358.5" style="enable-background:new 0 0 409.6 358.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#5F6062;}
.st1{fill:#2FA1DB;}
.st2{fill:#30A1DB;}
.st3{fill:#FFFFFF;}
</style>
<rect x="132.4" y="180.8" class="st0" width="30.8" height="92.1"/>
<g>
<g>
<path class="st0" d="M171.1,257.4l16.4-19.6c10,7.6,21.4,10.8,32.2,10.8c5.5,0,7.9-1.4,7.9-3.9v-0.3c0-2.6-2.9-4.1-12.8-6
c-20.7-4.2-38.8-10.1-38.8-29.6v-0.3c0-17.5,13.7-31,39.1-31c17.8,0,30.9,4.2,41.6,12.6l-15,20.8c-8.7-6.3-19.1-9.1-27.6-9.1
c-4.6,0-6.7,1.6-6.7,3.8v0.3c0,2.5,2.5,4.1,12.2,5.9c23.5,4.3,39.3,11.2,39.3,29.7v0.3c0,19.3-15.9,31.2-40.6,31.2
C199.7,272.9,182.8,267.6,171.1,257.4"/>
<path class="st0" d="M307.4,224.2c7.9,0,13.1-3.6,13.1-10.1v-0.3c0-6.7-4.9-10.1-13-10.1h-8.4v20.5H307.4z M268.3,179.1h41.4
c24.5,0,41.2,10.9,41.2,32.7v0.3c0,22.2-17,34.1-41.8,34.1h-10v25h-30.8V179.1z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M386.5,55.1h-5.9v65.3c0,10.2-5.9,19.4-17.8,19.4H246.6v3.1c0,9,10.2,18.1,20.7,18.1h88.9l34,20l-4.9-20h1.3
c10.5,0,15.2-9.1,15.2-18.1V70.6C401.7,61.6,397,55.1,386.5,55.1"/>
<path class="st1" d="M322.2,78.8c-7.6,0-13.5-6.9-11.9-14.8c0.9-4.6,4.6-8.3,9.2-9.3c7.9-1.7,14.9,4.3,14.9,11.9
C334.3,73.4,328.9,78.8,322.2,78.8 M276.6,78.8c-7.6,0-13.6-7-11.9-14.8c1-4.6,4.7-8.3,9.3-9.3c7.9-1.6,14.8,4.3,14.8,11.9
C288.8,73.4,283.3,78.8,276.6,78.8 M231,78.8c-7.6,0-13.6-7-11.9-14.8c1-4.6,4.7-8.3,9.3-9.3c7.9-1.6,14.8,4.3,14.8,11.9
C243.2,73.4,237.8,78.8,231,78.8 M345.4,9.8h-135c-11.9,0-25.6,10.6-25.6,20.7v81.8c0,9.4,11.6,16.1,22.7,17.2l-7.2,27.4
l46.3-27.3h98.8c11.9,0,22.8-7.2,22.8-17.4V30.5C368.3,20.3,357.3,9.8,345.4,9.8"/>
</g>
</g>
<path class="st2" d="M280.1,293.5h-2.3c-1.6,0-3.2,0-4.9-0.1l0,0.1H42.7c-16,0-29.1,13.1-29.1,29.1v0c0,16,13.1,29.1,29.1,29.1
h212.4l0.1-0.1c43.7,1.3,83-21.8,107.2-58.1c15-22.5,24.3-50.1,25.2-80.2C378.8,252.2,346.2,292.6,280.1,293.5z"/>
<path class="st0" d="M42.7,287.7h1v-60.5L64.9,260h0.5l21.2-32.7v45.6h30.6v-92.1H85.1l-19.7,32.4l-19.7-32.4H13.6v125
C18.9,295.1,29.9,287.7,42.7,287.7z"/>
<g>
<g>
<path class="st3" d="M64,338.1c-1.2,0.6-4,1.3-7.5,1.3c-10.1,0-15.4-6.3-15.4-14.7c0-10,7.1-15.6,16-15.6c3.4,0,6,0.7,7.2,1.3
l-1.3,5.3c-1.3-0.6-3.2-1.1-5.6-1.1c-5.3,0-9.4,3.2-9.4,9.7c0,5.9,3.5,9.6,9.4,9.6c2,0,4.2-0.4,5.5-1L64,338.1z"/>
<path class="st3" d="M96.2,324c0,9.6-5.8,15.4-14.4,15.4c-8.7,0-13.8-6.6-13.8-14.9c0-8.8,5.6-15.4,14.3-15.4
C91.3,309.2,96.2,315.9,96.2,324z M75,324.4c0,5.7,2.7,9.8,7.1,9.8c4.5,0,7-4.3,7-10c0-5.3-2.5-9.8-7.1-9.8
C77.6,314.4,75,318.7,75,324.4z"/>
<path class="st3" d="M126.4,327.7c-0.1-3.5-0.3-7.8-0.3-12H126c-0.9,3.7-2.1,7.9-3.3,11.4l-3.6,11.4H114l-3.1-11.4
c-1-3.4-2-7.6-2.7-11.4h-0.1c-0.2,4-0.3,8.5-0.5,12.1l-0.5,11.1h-6.1l1.9-29.3h8.8l2.9,9.8c0.9,3.4,1.8,7,2.5,10.5h0.1
c0.8-3.4,1.8-7.3,2.8-10.5l3.1-9.7h8.7l1.6,29.3h-6.5L126.4,327.7z"/>
<path class="st3" d="M164.2,327.7c-0.1-3.5-0.3-7.8-0.3-12h-0.1c-0.9,3.7-2.1,7.9-3.3,11.4l-3.6,11.4h-5.2l-3.1-11.4
c-1-3.4-2-7.6-2.7-11.4H146c-0.2,4-0.3,8.5-0.5,12.1l-0.5,11.1h-6.1l1.9-29.3h8.8l2.9,9.8c0.9,3.4,1.8,7,2.5,10.5h0.1
c0.8-3.4,1.8-7.3,2.8-10.5l3.1-9.7h8.7l1.6,29.3h-6.5L164.2,327.7z"/>
<path class="st3" d="M183.9,309.6v16.9c0,5,1.9,7.6,5.3,7.6c3.5,0,5.4-2.4,5.4-7.6v-16.9h6.6v16.4c0,9-4.6,13.4-12.2,13.4
c-7.4,0-11.7-4.1-11.7-13.4v-16.4H183.9z"/>
<path class="st3" d="M208,339v-29.3h7.7l6.1,10.7c1.7,3.1,3.5,6.7,4.8,10h0.1c-0.4-3.9-0.6-7.8-0.6-12.2v-8.6h6.1V339h-7
l-6.3-11.3c-1.7-3.1-3.7-6.9-5.1-10.4l-0.1,0c0.2,3.9,0.3,8,0.3,12.8v8.8H208z"/>
<path class="st3" d="M245.7,309.6V339h-6.7v-29.3H245.7z"/>
<path class="st3" d="M258.2,315.2h-7.9v-5.6h22.5v5.6h-8V339h-6.7V315.2z"/>
<path class="st3" d="M284.2,339v-12l-9.3-17.3h7.6l3,7c0.9,2.1,1.5,3.7,2.3,5.6h0.1c0.7-1.8,1.3-3.5,2.2-5.6l3-7h7.4l-9.7,17.1
V339H284.2z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 409.6 358.5" style="enable-background:new 0 0 409.6 358.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#5F6062;}
.st1{fill:#2FA1DB;}
.st2{fill:#30A1DB;}
.st3{fill:#FFFFFF;}
</style>
<rect x="125.1" y="180.2" class="st0" width="30.8" height="92.1"/>
<g>
<g>
<path class="st0" d="M163.7,256.8l16.4-19.6c10,7.6,21.4,10.8,32.2,10.8c5.5,0,7.9-1.4,7.9-3.9v-0.3c0-2.6-2.9-4.1-12.8-6
c-20.7-4.2-38.8-10.1-38.8-29.6v-0.3c0-17.5,13.7-31,39.1-31c17.8,0,30.9,4.2,41.6,12.6l-15,20.8c-8.7-6.3-19.1-9.1-27.6-9.1
c-4.6,0-6.7,1.6-6.7,3.8v0.3c0,2.5,2.5,4.1,12.2,5.9c23.5,4.3,39.3,11.2,39.3,29.7v0.3c0,19.3-15.9,31.2-40.6,31.2
C192.3,272.3,175.4,267,163.7,256.8"/>
<path class="st0" d="M300,223.6c7.9,0,13.1-3.6,13.1-10.1v-0.3c0-6.7-4.9-10.1-13-10.1h-8.4v20.5H300z M260.9,178.5h41.4
c24.5,0,41.2,10.9,41.2,32.7v0.3c0,22.2-17,34.1-41.8,34.1h-10v25h-30.8V178.5z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M379.1,54.5h-5.9v65.3c0,10.2-5.9,19.4-17.8,19.4H239.2v3.1c0,9,10.2,18.1,20.7,18.1h88.9l34,20l-4.9-20h1.3
c10.5,0,15.2-9.1,15.2-18.1V70C394.4,61,389.6,54.5,379.1,54.5"/>
<path class="st1" d="M314.8,78.2c-6.7,0-12.2-5.5-12.2-12.2c0-6.7,5.5-12.2,12.2-12.2c6.7,0,12.2,5.5,12.2,12.2
C327,72.8,321.5,78.2,314.8,78.2 M269.2,78.2c-6.7,0-12.2-5.5-12.2-12.2c0-6.7,5.5-12.2,12.2-12.2c6.7,0,12.2,5.5,12.2,12.2
C281.4,72.8,275.9,78.2,269.2,78.2 M223.6,78.2c-6.7,0-12.2-5.5-12.2-12.2c0-6.7,5.5-12.2,12.2-12.2c6.7,0,12.2,5.5,12.2,12.2
C235.8,72.8,230.4,78.2,223.6,78.2 M338.1,9.2H203c-11.9,0-25.6,10.6-25.6,20.7v81.8c0,9.4,11.6,16.1,22.7,17.2l-7.2,27.4
l46.3-27.3h98.8c11.9,0,22.8-7.2,22.8-17.4V29.9C360.9,19.7,349.9,9.2,338.1,9.2"/>
</g>
</g>
<path class="st2" d="M272.8,292.9h-2.3c-1.6,0-3.2,0-4.9-0.1l0,0.1H35.3c-16,0-29.1,13.1-29.1,29.1v0c0,16,13.1,29.1,29.1,29.1
h212.4l0.1-0.1c43.7,1.3,83-21.8,107.2-58.1c15-22.5,24.3-50.1,25.2-80.2C371.4,251.6,338.8,292,272.8,292.9z"/>
<path class="st0" d="M35.3,287.1h1v-60.5l21.2,32.7H58l21.2-32.7v45.6h30.6v-92.1H77.7L58,212.6l-19.7-32.4H6.2v125
C11.5,294.5,22.5,287.1,35.3,287.1z"/>
<g>
<g>
<path class="st3" d="M42.8,333.1c-1,0.5-3.3,1.1-6.3,1.1c-8.5,0-12.9-5.3-12.9-12.4c0-8.4,6-13.1,13.5-13.1c2.9,0,5.1,0.6,6.1,1.1
l-1.1,4.4c-1.1-0.5-2.7-0.9-4.7-0.9c-4.4,0-7.9,2.7-7.9,8.2c0,4.9,2.9,8.1,7.9,8.1c1.7,0,3.6-0.4,4.7-0.8L42.8,333.1z"/>
<path class="st3" d="M69.1,321.2c0,8.1-4.9,13-12.1,13c-7.3,0-11.6-5.5-11.6-12.6c0-7.4,4.7-12.9,12-12.9
C64.9,308.7,69.1,314.4,69.1,321.2z M51.2,321.5c0,4.8,2.3,8.2,6,8.2c3.8,0,5.9-3.6,5.9-8.4c0-4.4-2.1-8.2-6-8.2
C53.4,313.1,51.2,316.7,51.2,321.5z"/>
<path class="st3" d="M72.7,309.4c1.8-0.3,4.5-0.5,7.4-0.5c3.7,0,6.2,0.6,8,1.9c1.5,1.2,2.3,2.9,2.3,5.2c0,3.2-2.2,5.3-4.4,6.1v0.1
c1.7,0.7,2.7,2.3,3.3,4.6c0.8,2.8,1.5,6,2,7h-5.7c-0.4-0.7-1-2.7-1.7-5.8c-0.7-3.1-1.7-3.9-4-4h-1.7v9.7h-5.5V309.4z M78.3,320
h2.2c2.8,0,4.4-1.4,4.4-3.6c0-2.3-1.5-3.4-4.1-3.4c-1.4,0-2.1,0.1-2.5,0.2V320z"/>
<path class="st3" d="M109.2,323.3h-9.1v5.9h10.2v4.6H94.5v-24.7h15.2v4.6h-9.6v5.1h9.1V323.3z"/>
<path class="st3" d="M121.6,328c1.5,0.8,3.8,1.5,6.2,1.5c2.6,0,3.9-1.1,3.9-2.7c0-1.5-1.2-2.4-4.1-3.5c-4.1-1.4-6.8-3.7-6.8-7.3
c0-4.2,3.5-7.4,9.3-7.4c2.8,0,4.8,0.6,6.3,1.2l-1.2,4.5c-1-0.5-2.7-1.2-5.2-1.2c-2.4,0-3.6,1.1-3.6,2.4c0,1.6,1.4,2.3,4.6,3.5
c4.4,1.6,6.4,3.9,6.4,7.4c0,4.1-3.2,7.7-10,7.7c-2.8,0-5.6-0.7-7-1.5L121.6,328z"/>
<path class="st3" d="M163.8,321.2c0,8.1-4.9,13-12.1,13c-7.3,0-11.6-5.5-11.6-12.6c0-7.4,4.7-12.9,12-12.9
C159.7,308.7,163.8,314.4,163.8,321.2z M146,321.5c0,4.8,2.3,8.2,6,8.2c3.8,0,5.9-3.6,5.9-8.4c0-4.4-2.1-8.2-6-8.2
C148.2,313.1,146,316.7,146,321.5z"/>
<path class="st3" d="M167.5,309.1h15.1v4.6h-9.5v5.6h8.9v4.5h-8.9v9.9h-5.6V309.1z"/>
<path class="st3" d="M191.5,313.8h-6.6v-4.7h19v4.7h-6.7v20h-5.6V313.8z"/>
<path class="st3" d="M210.9,333.8l-5.9-24.7h6l1.9,10.2c0.6,2.9,1.1,6.1,1.5,8.6h0.1c0.4-2.7,1-5.6,1.6-8.7l2.1-10.1h5.9l2,10.4
c0.6,2.9,1,5.5,1.3,8.3h0.1c0.4-2.7,0.9-5.6,1.4-8.6l2-10.1h5.7l-6.4,24.7h-6l-2.1-10.6c-0.5-2.5-0.9-4.8-1.2-7.6h-0.1
c-0.4,2.8-0.8,5.1-1.4,7.6l-2.3,10.6H210.9z"/>
<path class="st3" d="M245.1,327.4l-1.8,6.3h-5.8l7.5-24.7h7.3l7.7,24.7h-6l-1.9-6.3H245.1z M251.4,323.3l-1.5-5.2
c-0.4-1.5-0.9-3.3-1.2-4.8h-0.1c-0.4,1.5-0.7,3.3-1.1,4.8l-1.5,5.2H251.4z"/>
<path class="st3" d="M263.4,309.4c1.8-0.3,4.5-0.5,7.4-0.5c3.7,0,6.2,0.6,8,1.9c1.5,1.2,2.3,2.9,2.3,5.2c0,3.2-2.2,5.3-4.4,6.1
v0.1c1.7,0.7,2.7,2.3,3.3,4.6c0.8,2.8,1.5,6,2,7h-5.7c-0.4-0.7-1-2.7-1.7-5.8c-0.7-3.1-1.7-3.9-4-4H269v9.7h-5.5V309.4z M269,320
h2.2c2.8,0,4.4-1.4,4.4-3.6c0-2.3-1.5-3.4-4.1-3.4c-1.4,0-2.1,0.1-2.5,0.2V320z"/>
<path class="st3" d="M299.8,323.3h-9.1v5.9h10.2v4.6h-15.8v-24.7h15.2v4.6h-9.6v5.1h9.1V323.3z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 409.6 358.5" style="enable-background:new 0 0 409.6 358.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#5F6062;}
.st1{fill:#2FA1DB;}
.st2{fill:#30A1DB;}
.st3{fill:#FFFFFF;}
</style>
<rect x="132.4" y="179.2" class="st0" width="30.8" height="92.1"/>
<g>
<g>
<path class="st0" d="M171.1,255.7l16.4-19.6c10,7.6,21.4,10.8,32.2,10.8c5.5,0,7.9-1.4,7.9-3.9v-0.3c0-2.6-2.9-4.1-12.8-6
c-20.7-4.2-38.8-10.1-38.8-29.6v-0.3c0-17.5,13.7-31,39.1-31c17.8,0,30.9,4.2,41.6,12.6l-15,20.8c-8.7-6.3-19.1-9.1-27.6-9.1
c-4.6,0-6.7,1.6-6.7,3.8v0.3c0,2.5,2.5,4.1,12.2,5.9c23.5,4.3,39.3,11.2,39.3,29.7v0.3c0,19.3-15.9,31.2-40.6,31.2
C199.7,271.2,182.8,266,171.1,255.7"/>
<path class="st0" d="M307.4,222.6c7.9,0,13.1-3.6,13.1-10.1v-0.3c0-6.7-4.9-10.1-13-10.1h-8.4v20.5H307.4z M268.3,177.5h41.4
c24.5,0,41.2,10.9,41.2,32.7v0.3c0,22.2-17,34.1-41.8,34.1h-10v25h-30.8V177.5z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M386.5,53.5h-5.9v65.3c0,10.2-5.9,19.4-17.8,19.4H246.6v3.1c0,9,10.2,18.1,20.7,18.1h88.9l34,20l-4.9-20h1.3
c10.5,0,15.2-9.1,15.2-18.1V69C401.7,60,397,53.5,386.5,53.5"/>
<path class="st1" d="M322.2,77.2c-7.6,0-13.5-6.9-11.9-14.8c0.9-4.6,4.6-8.3,9.2-9.3c7.9-1.7,14.9,4.3,14.9,11.9
C334.3,71.7,328.9,77.2,322.2,77.2 M276.6,77.2c-7.6,0-13.6-7-11.9-14.8c1-4.6,4.7-8.3,9.3-9.3c7.9-1.6,14.8,4.3,14.8,11.9
C288.8,71.7,283.3,77.2,276.6,77.2 M231,77.2c-7.6,0-13.6-7-11.9-14.8c1-4.6,4.7-8.3,9.3-9.3c7.9-1.6,14.8,4.3,14.8,11.9
C243.2,71.7,237.8,77.2,231,77.2 M345.4,8.1h-135c-11.9,0-25.6,10.6-25.6,20.7v81.8c0,9.4,11.6,16.1,22.7,17.2l-7.2,27.4
l46.3-27.3h98.8c11.9,0,22.8-7.2,22.8-17.4V28.8C368.3,18.7,357.3,8.1,345.4,8.1"/>
</g>
</g>
<path class="st2" d="M280.1,291.8h-2.3c-1.6,0-3.2,0-4.9-0.1l0,0.1H42.7c-16,0-29.1,13.1-29.1,29.1v0c0,16,13.1,29.1,29.1,29.1
h212.4l0.1-0.1c43.7,1.3,83-21.8,107.2-58.1c15-22.5,24.3-50.1,25.2-80.2C378.8,250.5,346.2,291,280.1,291.8z"/>
<path class="st0" d="M42.7,286.1h1v-60.5l21.2,32.7h0.5l21.2-32.7v45.6h30.6v-92.1H85.1l-19.7,32.4l-19.7-32.4H13.6v125
C18.9,293.5,29.9,286.1,42.7,286.1z"/>
<g>
<g>
<path class="st3" d="M51.8,330.5c1.8,0.9,4.5,1.8,7.4,1.8c3,0,4.7-1.3,4.7-3.2c0-1.8-1.4-2.9-4.9-4.1c-4.9-1.7-8-4.4-8-8.7
c0-5,4.2-8.8,11.1-8.8c3.3,0,5.7,0.7,7.5,1.5l-1.5,5.4c-1.2-0.6-3.3-1.4-6.1-1.4c-2.9,0-4.3,1.3-4.3,2.8c0,1.9,1.7,2.7,5.4,4.1
c5.2,1.9,7.6,4.6,7.6,8.7c0,4.9-3.8,9.1-11.8,9.1c-3.3,0-6.7-0.9-8.3-1.8L51.8,330.5z"/>
<path class="st3" d="M81.8,313.6h-7.9V308h22.5v5.6h-8v23.7h-6.7V313.6z"/>
<path class="st3" d="M107.8,329.8l-2.1,7.5h-6.9l9-29.3h8.7l9.1,29.3h-7.1l-2.3-7.5H107.8z M115.3,324.8l-1.8-6.2
c-0.5-1.7-1-3.9-1.5-5.7h-0.1c-0.4,1.7-0.9,4-1.3,5.7l-1.7,6.2H115.3z"/>
<path class="st3" d="M130.6,337.3V308h7.7l6.1,10.7c1.7,3.1,3.5,6.7,4.8,10h0.1c-0.4-3.9-0.6-7.8-0.6-12.2V308h6.1v29.3h-7
l-6.3-11.3c-1.7-3.1-3.7-6.9-5.1-10.4l-0.1,0c0.2,3.9,0.3,8,0.3,12.8v8.8H130.6z"/>
<path class="st3" d="M161.7,308.4c2.4-0.4,5.6-0.6,9-0.6c5.6,0,9.2,1,12,3.1c3,2.3,5,5.9,5,11c0,5.6-2,9.5-4.9,11.9
c-3.1,2.6-7.8,3.8-13.5,3.8c-3.4,0-5.9-0.2-7.5-0.4V308.4z M168.3,332.3c0.6,0.1,1.5,0.1,2.3,0.1c6,0,9.9-3.3,9.9-10.3
c0-6.1-3.5-9.3-9.2-9.3c-1.5,0-2.4,0.1-3,0.3V332.3z"/>
<path class="st3" d="M199.8,329.8l-2.1,7.5h-6.9l9-29.3h8.7l9.1,29.3h-7.1l-2.3-7.5H199.8z M207.2,324.8l-1.8-6.2
c-0.5-1.7-1-3.9-1.5-5.7h-0.1c-0.4,1.7-0.9,4-1.3,5.7l-1.7,6.2H207.2z"/>
<path class="st3" d="M222.6,308.4c2.1-0.3,5.3-0.6,8.8-0.6c4.3,0,7.4,0.7,9.5,2.3c1.7,1.4,2.7,3.4,2.7,6.1c0,3.7-2.7,6.3-5.2,7.2
v0.1c2,0.8,3.2,2.8,3.9,5.5c0.9,3.3,1.8,7.1,2.4,8.3h-6.8c-0.5-0.8-1.2-3.2-2-6.8c-0.8-3.7-2-4.7-4.7-4.7h-2v11.5h-6.6V308.4z
M229.1,321h2.6c3.3,0,5.3-1.7,5.3-4.2c0-2.7-1.8-4-4.9-4.1c-1.6,0-2.5,0.1-3,0.2V321z"/>
<path class="st3" d="M249.4,308.4c2.4-0.4,5.6-0.6,9-0.6c5.6,0,9.2,1,12,3.1c3,2.3,5,5.9,5,11c0,5.6-2,9.5-4.9,11.9
c-3.1,2.6-7.8,3.8-13.5,3.8c-3.4,0-5.9-0.2-7.5-0.4V308.4z M256.1,332.3c0.6,0.1,1.5,0.1,2.3,0.1c6,0,9.9-3.3,9.9-10.3
c0-6.1-3.5-9.3-9.2-9.3c-1.5,0-2.4,0.1-3,0.3V332.3z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

2
PyMISP

@ -1 +1 @@
Subproject commit b6ba285a4354962c982d833a04121055c66d6f55
Subproject commit f4439ae970921f9b734289764a66341bc752dc86

@ -1 +1 @@
Subproject commit d8cfec3c4afd34821be7bc21b93808772409e571
Subproject commit 57b7b5baffba040feb7c723821583db4cfaa631b

@ -1 +1 @@
Subproject commit b83616d520dbfaca6f312a3ff54a53aedc8dc5d5
Subproject commit b4cae643923f3a0811ee767f7067b80f67a51b92

View File

@ -28,6 +28,7 @@ namespace = ['https://github.com/MISP/MISP', 'MISP']
# mappings
status_mapping = {'0' : 'New', '1' : 'Open', '2' : 'Closed'}
threat_level_mapping = {'1' : 'High', '2' : 'Medium', '3' : 'Low', '4' : 'Undefined'}
TLP_mapping = {'0' : 'AMBER', '1' : 'GREEN', '2' : 'GREEN', '3' : 'GREEN', '4' : 'AMBER'}
TLP_order = {'RED' : 4, 'AMBER' : 3, 'GREEN' : 2, 'WHITE' : 1}
confidence_mapping = {False : 'None', True : 'High'}
@ -89,9 +90,11 @@ def generateEventPackage(event):
def generateSTIXObjects(event):
incident = Incident(id_ = namespace[1] + ":incident-" + event["Event"]["uuid"], title=event["Event"]["info"])
setDates(incident, event["Event"]["date"], int(event["Event"]["publish_timestamp"]))
addJournalEntry(incident, "Event Threat Level: " + event["Event"]["threat_level_id"])
threat_level_name = threat_level_mapping.get(event["Event"]["threat_level_id"], None)
if threat_level_name:
addJournalEntry(incident, "Event Threat Level: " + threat_level_name)
ttps = []
eventTags = event.get("Tag", [])
eventTags = event["Event"].get("Tag", [])
external_id = ExternalID(value=event["Event"]["id"], source="MISP Event")
incident.add_external_id(external_id)
incident_status_name = status_mapping.get(event["Event"]["analysis"], None)
@ -128,7 +131,7 @@ def resolveObjects(incident, ttps, objects, eventTags, org):
indicator.description = obj["comment"]
tlpTags = eventTags
for attr in obj["Attribute"]:
tlpTags = mergeTags(tlpTags, attr["AttributeTag"])
tlpTags = mergeTags(tlpTags, attr)
setTLP(indicator, obj["distribution"], tlpTags, True)
indicator.title = obj["name"] + " (MISP Object #" + obj["id"] + ")"
indicator.description = indicator.title
@ -212,7 +215,7 @@ def handleNonIndicatorAttribute(incident, ttps, attribute, eventTags, org):
def generateTTP(incident, attribute, ttps, eventTags):
ttp = TTP(timestamp=getDateFromTimestamp(int(attribute["timestamp"])))
ttp.id_= namespace[1] + ":ttp-" + attribute["uuid"]
# setTLP(ttp, attribute["distribution"], mergeTags(eventTags, attribute["AttributeTag"]))
setTLP(ttp, attribute["distribution"], mergeTags(eventTags, attribute))
ttp.title = attribute["category"] + ": " + attribute["value"] + " (MISP Attribute #" + attribute["id"] + ")"
if attribute["type"] == "vulnerability":
vulnerability = Vulnerability()
@ -255,7 +258,7 @@ def generateIndicator(attribute, eventTags, org):
setProd(indicator, org)
if attribute["comment"] != "":
indicator.description = attribute["comment"]
# setTLP(indicator, attribute["distribution"], mergeTags(eventTags, attribute["AttributeTag"]))
setTLP(indicator, attribute["distribution"], mergeTags(eventTags, attribute))
indicator.title = attribute["category"] + ": " + attribute["value"] + " (MISP Attribute #" + attribute["id"] + ")"
indicator.description = indicator.title
confidence_description = "Derived from MISP's IDS flag. If an attribute is marked for IDS exports, the confidence will be high, otherwise none"
@ -331,12 +334,11 @@ def addJournalEntry(incident, entry_line):
except AttributeError:
incident.history = History(hi)
# merge event tags with attribute tags
def mergeTags(eventTags, attributeTags):
# merge event tags with attribute tags, when present
def mergeTags(eventTags, attr):
result = list(eventTags)
for tag in attributeTags:
if tag.get("Tag"):
result.append(tag["Tag"])
if "Tag" in attr:
result += attr["Tag"]
return result
# main

View File

@ -288,8 +288,9 @@ def addTool(object_refs, attributes, galaxy, identity):
def addVulnerability(object_refs, attributes, attribute, identity):
vuln_id = "vulnerability--{}".format(attribute.uuid)
name = attribute.value
ext_refs = [{'source_name': 'cve',
'external_id': name}]
vuln_data = mispTypesMapping['vulnerability'].copy()
vuln_data['external_id'] = name
ext_refs = [vuln_data]
labels = 'misp:to_ids=\"{}\"'.format(attribute.to_ids)
vuln_args = {'type': 'vulnerability', 'id': vuln_id, 'external_references': ext_refs, 'name': name,
'created_by_ref': identity, 'labels': labels}
@ -302,7 +303,7 @@ def addIndicatorFromObjects(object_refs, attributes, obj, identity, to_ids):
category = obj['meta-category']
killchain = [{'kill_chain_name': 'misp-category',
'phase_name': category}]
labels = 'misp:to_ids=\"{}\"'.format(to_ids)
labels = ['misp:to_ids=\"{}\"'.format(to_ids), 'from_object']
pattern = definePatternForObjects(obj.name, obj.Attribute)
timestamp = getDateFromTimestamp(int(obj.timestamp))
indicator_args = {'valid_from': timestamp, 'type': 'indicator', 'labels': labels,
@ -315,7 +316,7 @@ def addIndicatorFromObjects(object_refs, attributes, obj, identity, to_ids):
def addObservedDataFromObject(object_refs, attributes, obj, identity, to_ids):
observedData_id = 'observed-data--{}'.format(obj.uuid)
timestamp = getDateFromTimestamp(int(obj.timestamp))
labels = 'misp:to_ids=\"{}\"'.format(to_ids)
labels = ['misp:to_ids=\"{}\"'.format(to_ids), 'from_object']
observedData_args = {'id': observedData_id, 'type': 'observed-data', 'number_observed': 1, 'labels': labels,
'first_observed': timestamp, 'last_observed': timestamp, 'created_by_ref': identity,
'objects': defineObservableObjectForObjects(obj.name, obj.Attribute)}
@ -330,7 +331,7 @@ def addVulnerabilityFromObjects(object_refs, attributes, obj, identity, to_ids):
if obj_attr.type == 'vulnerability':
name = obj_attr.value
break
labels = 'misp:to_ids=\"{}\"'.format(to_ids)
labels = ['misp:to_ids=\"{}\"'.format(to_ids), 'from_object']
vuln_args = {'id': vuln_id, 'type': 'vulnerability', 'name': name, 'created_by_ref': identity,
'labels': labels}
vulnerability = Vulnerability(**vuln_args)
@ -427,8 +428,8 @@ def defineObservableObject(attr_type, attr_val):
def defineObservableObjectForObjects(obj_name, obj_attr):
if obj_name == 'email':
return defineObservableObjectEmail(obj_name, obj_attr)
elif obj_name == 'domain-ip':
return definObservableObjectDomainIp(obj_name, obj_attr)
elif obj_name == 'domain|ip':
return defineObservableObjectDomainIp(obj_name, obj_attr)
elif obj_name == 'ip|port':
return defineObservableObjectIpPort(obj_name, obj_attr)
elif obj_name == 'registry-key':
@ -437,7 +438,7 @@ def defineObservableObjectForObjects(obj_name, obj_attr):
return defineObservableObjectBasicCase(obj_name, obj_attr)
def defineObservableObjectEmail(obj_name, obj_attr):
obj = objectsMapping['email']['observable']
obj = objectsMapping['email']['observable'].copy()
email_attr = getEmailObjectInfo(obj_attr)
is_multipart = False
part_number = 1
@ -506,7 +507,7 @@ def defineObservableObjectEmail(obj_name, obj_attr):
return obj
def defineObservableObjectDomainIp(obj_name, obj_attr):
obj = mispTypesMapping['domain|ip']['observable']
obj = mispTypesMapping['domain|ip']['observable'].copy()
for attr in obj_attr:
attr_type = attr.type
if attr_type == 'domain':
@ -518,7 +519,7 @@ def defineObservableObjectDomainIp(obj_name, obj_attr):
return obj
def defineObservableObjectIpPort(obj_name, obj_attr):
obj = mispTypesMapping['ip-dst|port']['observable']
obj = mispTypesMapping['ip-dst|port']['observable'].copy()
for attr in obj_attr:
attr_type = attr.type
if attr_type == 'ip-dst':
@ -540,7 +541,7 @@ def defineObservableObjectIpPort(obj_name, obj_attr):
return obj
def defineObservableObjectRegKey(obj_name, obj_attr):
obj = objectsMapping[obj_name]['observable']
obj = objectsMapping[obj_name]['observable'].copy()
reg_attr = getRegistryKeyInfo(obj_attr)
if 'reg-key' in reg_attr:
key_type = objectTypes['reg-key']
@ -563,7 +564,7 @@ def defineObservableObjectRegKey(obj_name, obj_attr):
return obj
def defineObservableObjectBasicCase(obj_name, obj_attr):
obj = objectsMapping[obj_name]['observable']
obj = objectsMapping[obj_name]['observable'].copy()
for attr in obj_attr:
attr_type = attr.type
if 'md5' in attr_type or 'sha' in attr_type or 'hash' in attr_type or 'ssdeep' in attr_type:
@ -652,7 +653,7 @@ def definePatternForObjects(obj_name, obj_attr):
else:
attrType = objectTypes[attr_type]
pattern += objectsMapping[obj_name]['pattern'].format(emailType, attrType, attr_val)
elif obj_name == 'ip|port' or obj_name == 'domain-ip':
elif obj_name == 'ip|port' or obj_name == 'domain|ip':
for attr in obj_attr:
attr_type = attr.type
attr_val = attr.value
@ -679,8 +680,6 @@ def definePatternForObjects(obj_name, obj_attr):
if obj_name not in objectTypes[attr_type] or obj_relation not in objectTypes[attr_type][obj_name]:
continue
attrType = objectTypes[attr_type][obj_name][obj_relation]
elif attr_type in noChangesTypes:
attrType = attr_type
else:
if attr_type not in objectTypes:
continue

View File

@ -1,4 +1,5 @@
mispTypesMapping = {
'vulnerability': {'source_name': 'cve', 'external_id': ''},
'md5': {'observable': {'0': {'type': 'file', 'hashes': ''}},
'pattern': 'file:hashes.\'md5\' = \'{0}\''},
'sha1': {'observable': {'0': {'type': 'file', 'hashes': ''}},
@ -107,20 +108,22 @@ mispTypesMapping = {
'attachment': {'observable': {'0': {'type': 'artifact', 'payload_bin': ''}},
'pattern': 'artifact:payload_bin = \'{0}\''},
'mac-address': {'observable': {'0': {'type': 'mac-addr', 'value': ''}},
'pattern': 'mac-addr:value = \'{0}\''}
'pattern': 'mac-addr:value = \'{0}\''},
'mac-eui-64': {'observable': {'0': {'type': 'mac-addr', 'value': ''}},
'pattern': 'mac-addr:value = \'{0}\''}
}
objectsMapping = {'domain-ip': {'pattern': 'domain-name:{0} = \'{1}\' AND '},
objectsMapping = {'domain|ip': {'pattern': 'domain-name:{0} = \'{1}\' AND '},
'email': {'observable': {'0': {'type': 'email-message'}},
'pattern': 'email-{0}:{1} = \'{2}\' AND '},
'file': {'observable': {'0': {'type': 'file'}},
'file': {'observable': {'0': {'type': 'file', 'hashes': {}}},
'pattern': 'file:{0} = \'{1}\' AND '},
'ip|port': {'pattern': 'network-traffic:{0} = \'{1}\' AND '},
'registry-key': {'observable': {'0': {'type': 'windows-registry-key'}},
'pattern': 'windows-registry-key:{0} = \'{1}\' AND '},
'url': {'observable': {'0': {'type': 'url'}},
'pattern': 'url:{0} = \'{1}\' AND '},
'x509': {'observable': {'0': {'type': 'x509-certificate'}},
'x509': {'observable': {'0': {'type': 'x509-certificate', 'hashes': {}}},
'pattern': 'x509-certificate:{0} = \'{1}\' AND '}
}
relationshipsSpecifications = {'attack-pattern': {'vulnerability': 'targets', 'identity': 'targets',
@ -159,7 +162,7 @@ objectTypes = {'text': {'x509': {'subject': 'subject', 'issuer': 'issuer', 'pubk
'email-reply-to': 'additional_header_fields.Reply-To',
'hashes': 'hashes.\'{0}\'', 'size-in-bytes': 'size', 'filename': 'name',
'ip-dst': {'ip|port': 'dst_ref.type = \'{0}\' AND network-traffic:dst_ref.value',
'domain-ip': 'resolves_to_refs[*].value'},
'domain|ip': 'resolves_to_refs[*].value'},
'reg-datatype': 'datatype', 'reg-data': 'data', 'reg-name': 'name', 'reg-key': 'key'
}

View File

@ -17,6 +17,7 @@
import sys, json, os, time
import pymisp
from stix.core import STIXPackage
eventTypes = {"ipv4-addr": {"src": "ip-src", "dst": "ip-dst", "value": "address_value"},
"ipv6-addr": {"src": "ip-src", "dst": "ip-dst", "value": "address_value"},
@ -33,7 +34,12 @@ def loadEvent(args, pathname):
tempFile = open(filename, 'r')
if filename.endswith('.json'):
event = json.loads(tempFile.read())
return event
isJson = True
else:
event = STIXPackage.from_xml(tempFile)
event = json.loads(event.related_packages.related_package[0].to_json())
isJson = False
return event, isJson
except:
print(json.dumps({'success': 0, 'message': 'The temporary STIX export file could not be read'}))
sys.exit(1)
@ -49,10 +55,14 @@ def buildMispDict(stixEvent):
mispDict["date"] = date
timestamp = getTimestampfromDate(stixTimestamp)
mispDict["timestamp"] = timestamp
mispDict["info"] = stixEvent["stix_header"].get("title")
event = stixEvent["incidents"][0]
mispDict["info"] = event.get("title")
orgSource = event["information_source"]["identity"]["name"]
mispDict["Org"] = {}
mispDict["Org"]["name"] = orgSource
orgReporter = event["reporter"]["identity"]["name"]
mispDict["Orgc"] = {}
mispDict["Orgc"]["name"] = orgReporter
indicators = event["related_indicators"]["indicators"]
mispDict["Attribute"] = []
for indic in indicators:
@ -102,26 +112,27 @@ def buildMispDict(stixEvent):
attribute["type"] = typeVal
attribute["value"] = valueVal
attribute["category"] = indic.get("relationship")
#print(attribute)
mispDict["Attribute"].append(attribute)
return mispDict
def saveFile(args, pathname, misp):
filename = "{}/tmp/{}.in".format(pathname, args[1])
def saveFile(namefile, pathname, misp):
filepath = "{}/tmp/{}.in".format(pathname, namefile)
eventDict = misp.to_dict(with_timestamp=True)
print(eventDict)
with open(filename, 'w') as f:
with open(filepath, 'w') as f:
f.write(json.dumps(eventDict))
def main(args):
pathname = os.path.dirname(args[0])
stixEvent = loadEvent(args, pathname)
stixEvent, isJson = loadEvent(args, pathname)
stixEvent = stixEvent["package"]
if isJson:
namefile = args[1]
else:
namefile = '{}.json'.format(args[1][:-4])
mispDict = buildMispDict(stixEvent)
#print(mispDict)
misp = pymisp.MISPEvent(None, False)
misp.from_dict(**mispDict)
saveFile(args, pathname, misp)
saveFile(namefile, pathname, misp)
print(1)
if __name__ == "__main__":

@ -1 +1 @@
Subproject commit 357db7689f9bec9208d338b0f83c4f360e3f1353
Subproject commit 35f6fa75958c46a522eca3f9962e1bb7bf7b76e8