1141 lines
42 KiB
HTML
1141 lines
42 KiB
HTML
<!DOCTYPE html><html><head><meta charset="utf-8"><style>body {
|
|
width: 45em;
|
|
border: 1px solid #ddd;
|
|
outline: 1300px solid #fff;
|
|
margin: 16px auto;
|
|
}
|
|
|
|
body .markdown-body
|
|
{
|
|
padding: 30px;
|
|
}
|
|
|
|
@font-face {
|
|
font-family: fontawesome-mini;
|
|
src: url(data:font/woff;charset=utf-8;base64,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) format('woff');
|
|
}
|
|
|
|
@font-face {
|
|
font-family: octicons-anchor;
|
|
src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) format('woff');
|
|
}
|
|
|
|
.markdown-body {
|
|
font-family: sans-serif;
|
|
-ms-text-size-adjust: 100%;
|
|
-webkit-text-size-adjust: 100%;
|
|
color: #333333;
|
|
overflow: hidden;
|
|
font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
|
|
font-size: 16px;
|
|
line-height: 1.6;
|
|
word-wrap: break-word;
|
|
}
|
|
|
|
.markdown-body a {
|
|
background: transparent;
|
|
}
|
|
|
|
.markdown-body a:active,
|
|
.markdown-body a:hover {
|
|
outline: 0;
|
|
}
|
|
|
|
.markdown-body b,
|
|
.markdown-body strong {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.markdown-body mark {
|
|
background: #ff0;
|
|
color: #000;
|
|
font-style: italic;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.markdown-body sub,
|
|
.markdown-body sup {
|
|
font-size: 75%;
|
|
line-height: 0;
|
|
position: relative;
|
|
vertical-align: baseline;
|
|
}
|
|
.markdown-body sup {
|
|
top: -0.5em;
|
|
}
|
|
.markdown-body sub {
|
|
bottom: -0.25em;
|
|
}
|
|
|
|
.markdown-body h1 {
|
|
font-size: 2em;
|
|
margin: 0.67em 0;
|
|
}
|
|
|
|
.markdown-body img {
|
|
border: 0;
|
|
}
|
|
|
|
.markdown-body hr {
|
|
-moz-box-sizing: content-box;
|
|
box-sizing: content-box;
|
|
height: 0;
|
|
}
|
|
|
|
.markdown-body pre {
|
|
overflow: auto;
|
|
}
|
|
|
|
.markdown-body code,
|
|
.markdown-body kbd,
|
|
.markdown-body pre,
|
|
.markdown-body samp {
|
|
font-family: monospace, monospace;
|
|
font-size: 1em;
|
|
}
|
|
|
|
.markdown-body input {
|
|
color: inherit;
|
|
font: inherit;
|
|
margin: 0;
|
|
}
|
|
|
|
.markdown-body html input[disabled] {
|
|
cursor: default;
|
|
}
|
|
|
|
.markdown-body input {
|
|
line-height: normal;
|
|
}
|
|
|
|
.markdown-body input[type="checkbox"] {
|
|
box-sizing: border-box;
|
|
padding: 0;
|
|
}
|
|
|
|
.markdown-body table {
|
|
border-collapse: collapse;
|
|
border-spacing: 0;
|
|
}
|
|
|
|
.markdown-body td,
|
|
.markdown-body th {
|
|
padding: 0;
|
|
}
|
|
|
|
.markdown-body .codehilitetable {
|
|
border: 0;
|
|
border-spacing: 0;
|
|
}
|
|
|
|
.markdown-body .codehilitetable tr {
|
|
border: 0;
|
|
}
|
|
|
|
.markdown-body .codehilitetable pre,
|
|
.markdown-body .codehilitetable div.codehilite {
|
|
margin: 0;
|
|
}
|
|
|
|
.markdown-body .linenos,
|
|
.markdown-body .code,
|
|
.markdown-body .codehilitetable td {
|
|
border: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.markdown-body td:not(.linenos) .linenodiv {
|
|
padding: 0 !important;
|
|
}
|
|
|
|
.markdown-body .code {
|
|
width: 100%;
|
|
}
|
|
|
|
.markdown-body .linenos div pre,
|
|
.markdown-body .linenodiv pre,
|
|
.markdown-body .linenodiv {
|
|
border: 0;
|
|
-webkit-border-radius: 0;
|
|
-moz-border-radius: 0;
|
|
border-radius: 0;
|
|
-webkit-border-top-left-radius: 3px;
|
|
-webkit-border-bottom-left-radius: 3px;
|
|
-moz-border-radius-topleft: 3px;
|
|
-moz-border-radius-bottomleft: 3px;
|
|
border-top-left-radius: 3px;
|
|
border-bottom-left-radius: 3px;
|
|
}
|
|
|
|
.markdown-body .code div pre,
|
|
.markdown-body .code div {
|
|
border: 0;
|
|
-webkit-border-radius: 0;
|
|
-moz-border-radius: 0;
|
|
border-radius: 0;
|
|
-webkit-border-top-right-radius: 3px;
|
|
-webkit-border-bottom-right-radius: 3px;
|
|
-moz-border-radius-topright: 3px;
|
|
-moz-border-radius-bottomright: 3px;
|
|
border-top-right-radius: 3px;
|
|
border-bottom-right-radius: 3px;
|
|
}
|
|
|
|
.markdown-body * {
|
|
-moz-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.markdown-body input {
|
|
font: 13px Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol";
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.markdown-body a {
|
|
color: #4183c4;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.markdown-body a:hover,
|
|
.markdown-body a:focus,
|
|
.markdown-body a:active {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.markdown-body hr {
|
|
height: 0;
|
|
margin: 15px 0;
|
|
overflow: hidden;
|
|
background: transparent;
|
|
border: 0;
|
|
border-bottom: 1px solid #ddd;
|
|
}
|
|
|
|
.markdown-body hr:before,
|
|
.markdown-body hr:after {
|
|
display: table;
|
|
content: " ";
|
|
}
|
|
|
|
.markdown-body hr:after {
|
|
clear: both;
|
|
}
|
|
|
|
.markdown-body h1,
|
|
.markdown-body h2,
|
|
.markdown-body h3,
|
|
.markdown-body h4,
|
|
.markdown-body h5,
|
|
.markdown-body h6 {
|
|
margin-top: 15px;
|
|
margin-bottom: 15px;
|
|
line-height: 1.1;
|
|
}
|
|
|
|
.markdown-body h1 {
|
|
font-size: 30px;
|
|
}
|
|
|
|
.markdown-body h2 {
|
|
font-size: 21px;
|
|
}
|
|
|
|
.markdown-body h3 {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.markdown-body h4 {
|
|
font-size: 14px;
|
|
}
|
|
|
|
.markdown-body h5 {
|
|
font-size: 12px;
|
|
}
|
|
|
|
.markdown-body h6 {
|
|
font-size: 11px;
|
|
}
|
|
|
|
.markdown-body blockquote {
|
|
margin: 0;
|
|
}
|
|
|
|
.markdown-body ul,
|
|
.markdown-body ol {
|
|
padding: 0;
|
|
margin-top: 0;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.markdown-body ol ol,
|
|
.markdown-body ul ol {
|
|
list-style-type: lower-roman;
|
|
}
|
|
|
|
.markdown-body ul ul ol,
|
|
.markdown-body ul ol ol,
|
|
.markdown-body ol ul ol,
|
|
.markdown-body ol ol ol {
|
|
list-style-type: lower-alpha;
|
|
}
|
|
|
|
.markdown-body dd {
|
|
margin-left: 0;
|
|
}
|
|
|
|
.markdown-body code,
|
|
.markdown-body pre,
|
|
.markdown-body samp {
|
|
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
|
font-size: 12px;
|
|
}
|
|
|
|
.markdown-body pre {
|
|
margin-top: 0;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.markdown-body kbd {
|
|
background-color: #e7e7e7;
|
|
background-image: -moz-linear-gradient(#fefefe, #e7e7e7);
|
|
background-image: -webkit-linear-gradient(#fefefe, #e7e7e7);
|
|
background-image: linear-gradient(#fefefe, #e7e7e7);
|
|
background-repeat: repeat-x;
|
|
border-radius: 2px;
|
|
border: 1px solid #cfcfcf;
|
|
color: #000;
|
|
padding: 3px 5px;
|
|
line-height: 10px;
|
|
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
|
display: inline-block;
|
|
}
|
|
|
|
.markdown-body>*:first-child {
|
|
margin-top: 0 !important;
|
|
}
|
|
|
|
.markdown-body>*:last-child {
|
|
margin-bottom: 0 !important;
|
|
}
|
|
|
|
.markdown-body .headeranchor-link {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 0;
|
|
display: block;
|
|
padding-right: 6px;
|
|
padding-left: 30px;
|
|
margin-left: -30px;
|
|
}
|
|
|
|
.markdown-body .headeranchor-link:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.markdown-body h1,
|
|
.markdown-body h2,
|
|
.markdown-body h3,
|
|
.markdown-body h4,
|
|
.markdown-body h5,
|
|
.markdown-body h6 {
|
|
position: relative;
|
|
margin-top: 1em;
|
|
margin-bottom: 16px;
|
|
font-weight: bold;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.markdown-body h1 .headeranchor,
|
|
.markdown-body h2 .headeranchor,
|
|
.markdown-body h3 .headeranchor,
|
|
.markdown-body h4 .headeranchor,
|
|
.markdown-body h5 .headeranchor,
|
|
.markdown-body h6 .headeranchor {
|
|
display: none;
|
|
color: #000;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
.markdown-body h1:hover .headeranchor-link,
|
|
.markdown-body h2:hover .headeranchor-link,
|
|
.markdown-body h3:hover .headeranchor-link,
|
|
.markdown-body h4:hover .headeranchor-link,
|
|
.markdown-body h5:hover .headeranchor-link,
|
|
.markdown-body h6:hover .headeranchor-link {
|
|
height: 1em;
|
|
padding-left: 8px;
|
|
margin-left: -30px;
|
|
line-height: 1;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.markdown-body h1:hover .headeranchor-link .headeranchor,
|
|
.markdown-body h2:hover .headeranchor-link .headeranchor,
|
|
.markdown-body h3:hover .headeranchor-link .headeranchor,
|
|
.markdown-body h4:hover .headeranchor-link .headeranchor,
|
|
.markdown-body h5:hover .headeranchor-link .headeranchor,
|
|
.markdown-body h6:hover .headeranchor-link .headeranchor {
|
|
display: inline-block;
|
|
}
|
|
|
|
.markdown-body h1 {
|
|
padding-bottom: 0.3em;
|
|
font-size: 2.25em;
|
|
line-height: 1.2;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
|
|
.markdown-body h2 {
|
|
padding-bottom: 0.3em;
|
|
font-size: 1.75em;
|
|
line-height: 1.225;
|
|
border-bottom: 1px solid #eee;
|
|
}
|
|
|
|
.markdown-body h3 {
|
|
font-size: 1.5em;
|
|
line-height: 1.43;
|
|
}
|
|
|
|
.markdown-body h4 {
|
|
font-size: 1.25em;
|
|
}
|
|
|
|
.markdown-body h5 {
|
|
font-size: 1em;
|
|
}
|
|
|
|
.markdown-body h6 {
|
|
font-size: 1em;
|
|
color: #777;
|
|
}
|
|
|
|
.markdown-body p,
|
|
.markdown-body blockquote,
|
|
.markdown-body ul,
|
|
.markdown-body ol,
|
|
.markdown-body dl,
|
|
.markdown-body table,
|
|
.markdown-body pre,
|
|
.markdown-body .admonition {
|
|
margin-top: 0;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.markdown-body hr {
|
|
height: 4px;
|
|
padding: 0;
|
|
margin: 16px 0;
|
|
background-color: #e7e7e7;
|
|
border: 0 none;
|
|
}
|
|
|
|
.markdown-body ul,
|
|
.markdown-body ol {
|
|
padding-left: 2em;
|
|
}
|
|
|
|
.markdown-body ul ul,
|
|
.markdown-body ul ol,
|
|
.markdown-body ol ol,
|
|
.markdown-body ol ul {
|
|
margin-top: 0;
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.markdown-body li>p {
|
|
margin-top: 16px;
|
|
}
|
|
|
|
.markdown-body dl {
|
|
padding: 0;
|
|
}
|
|
|
|
.markdown-body dl dt {
|
|
padding: 0;
|
|
margin-top: 16px;
|
|
font-size: 1em;
|
|
font-style: italic;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.markdown-body dl dd {
|
|
padding: 0 16px;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.markdown-body blockquote {
|
|
padding: 0 15px;
|
|
color: #777;
|
|
border-left: 4px solid #ddd;
|
|
}
|
|
|
|
.markdown-body blockquote>:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.markdown-body blockquote>:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
.markdown-body table {
|
|
display: block;
|
|
width: 100%;
|
|
overflow: auto;
|
|
word-break: normal;
|
|
word-break: keep-all;
|
|
}
|
|
|
|
.markdown-body table th {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.markdown-body table th,
|
|
.markdown-body table td {
|
|
padding: 6px 13px;
|
|
border: 1px solid #ddd;
|
|
}
|
|
|
|
.markdown-body table tr {
|
|
background-color: #fff;
|
|
border-top: 1px solid #ccc;
|
|
}
|
|
|
|
.markdown-body table tr:nth-child(2n) {
|
|
background-color: #f8f8f8;
|
|
}
|
|
|
|
.markdown-body img {
|
|
max-width: 100%;
|
|
-moz-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.markdown-body code,
|
|
.markdown-body samp {
|
|
padding: 0;
|
|
padding-top: 0.2em;
|
|
padding-bottom: 0.2em;
|
|
margin: 0;
|
|
font-size: 85%;
|
|
background-color: rgba(0,0,0,0.04);
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.markdown-body code:before,
|
|
.markdown-body code:after {
|
|
letter-spacing: -0.2em;
|
|
content: "\00a0";
|
|
}
|
|
|
|
.markdown-body pre>code {
|
|
padding: 0;
|
|
margin: 0;
|
|
font-size: 100%;
|
|
word-break: normal;
|
|
white-space: pre;
|
|
background: transparent;
|
|
border: 0;
|
|
}
|
|
|
|
.markdown-body .codehilite {
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.markdown-body .codehilite pre,
|
|
.markdown-body pre {
|
|
padding: 16px;
|
|
overflow: auto;
|
|
font-size: 85%;
|
|
line-height: 1.45;
|
|
background-color: #f7f7f7;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.markdown-body .codehilite pre {
|
|
margin-bottom: 0;
|
|
word-break: normal;
|
|
}
|
|
|
|
.markdown-body pre {
|
|
word-wrap: normal;
|
|
}
|
|
|
|
.markdown-body pre code {
|
|
display: inline;
|
|
max-width: initial;
|
|
padding: 0;
|
|
margin: 0;
|
|
overflow: initial;
|
|
line-height: inherit;
|
|
word-wrap: normal;
|
|
background-color: transparent;
|
|
border: 0;
|
|
}
|
|
|
|
.markdown-body pre code:before,
|
|
.markdown-body pre code:after {
|
|
content: normal;
|
|
}
|
|
|
|
/* Admonition */
|
|
.markdown-body .admonition {
|
|
-webkit-border-radius: 3px;
|
|
-moz-border-radius: 3px;
|
|
position: relative;
|
|
border-radius: 3px;
|
|
border: 1px solid #e0e0e0;
|
|
border-left: 6px solid #333;
|
|
padding: 10px 10px 10px 30px;
|
|
}
|
|
|
|
.markdown-body .admonition table {
|
|
color: #333;
|
|
}
|
|
|
|
.markdown-body .admonition p {
|
|
padding: 0;
|
|
}
|
|
|
|
.markdown-body .admonition-title {
|
|
font-weight: bold;
|
|
margin: 0;
|
|
}
|
|
|
|
.markdown-body .admonition>.admonition-title {
|
|
color: #333;
|
|
}
|
|
|
|
.markdown-body .attention>.admonition-title {
|
|
color: #a6d796;
|
|
}
|
|
|
|
.markdown-body .caution>.admonition-title {
|
|
color: #d7a796;
|
|
}
|
|
|
|
.markdown-body .hint>.admonition-title {
|
|
color: #96c6d7;
|
|
}
|
|
|
|
.markdown-body .danger>.admonition-title {
|
|
color: #c25f77;
|
|
}
|
|
|
|
.markdown-body .question>.admonition-title {
|
|
color: #96a6d7;
|
|
}
|
|
|
|
.markdown-body .note>.admonition-title {
|
|
color: #d7c896;
|
|
}
|
|
|
|
.markdown-body .admonition:before,
|
|
.markdown-body .attention:before,
|
|
.markdown-body .caution:before,
|
|
.markdown-body .hint:before,
|
|
.markdown-body .danger:before,
|
|
.markdown-body .question:before,
|
|
.markdown-body .note:before {
|
|
font: normal normal 16px fontawesome-mini;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
line-height: 1.5;
|
|
color: #333;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
padding-top: 10px;
|
|
padding-left: 10px;
|
|
}
|
|
|
|
.markdown-body .admonition:before {
|
|
content: "\f056\00a0";
|
|
color: 333;
|
|
}
|
|
|
|
.markdown-body .attention:before {
|
|
content: "\f058\00a0";
|
|
color: #a6d796;
|
|
}
|
|
|
|
.markdown-body .caution:before {
|
|
content: "\f06a\00a0";
|
|
color: #d7a796;
|
|
}
|
|
|
|
.markdown-body .hint:before {
|
|
content: "\f05a\00a0";
|
|
color: #96c6d7;
|
|
}
|
|
|
|
.markdown-body .danger:before {
|
|
content: "\f057\00a0";
|
|
color: #c25f77;
|
|
}
|
|
|
|
.markdown-body .question:before {
|
|
content: "\f059\00a0";
|
|
color: #96a6d7;
|
|
}
|
|
|
|
.markdown-body .note:before {
|
|
content: "\f040\00a0";
|
|
color: #d7c896;
|
|
}
|
|
|
|
.markdown-body .admonition::after {
|
|
content: normal;
|
|
}
|
|
|
|
.markdown-body .attention {
|
|
border-left: 6px solid #a6d796;
|
|
}
|
|
|
|
.markdown-body .caution {
|
|
border-left: 6px solid #d7a796;
|
|
}
|
|
|
|
.markdown-body .hint {
|
|
border-left: 6px solid #96c6d7;
|
|
}
|
|
|
|
.markdown-body .danger {
|
|
border-left: 6px solid #c25f77;
|
|
}
|
|
|
|
.markdown-body .question {
|
|
border-left: 6px solid #96a6d7;
|
|
}
|
|
|
|
.markdown-body .note {
|
|
border-left: 6px solid #d7c896;
|
|
}
|
|
|
|
.markdown-body .admonition>*:first-child {
|
|
margin-top: 0 !important;
|
|
}
|
|
|
|
.markdown-body .admonition>*:last-child {
|
|
margin-bottom: 0 !important;
|
|
}
|
|
|
|
/* progress bar*/
|
|
.markdown-body .progress {
|
|
display: block;
|
|
width: 300px;
|
|
margin: 10px 0;
|
|
height: 24px;
|
|
-webkit-border-radius: 3px;
|
|
-moz-border-radius: 3px;
|
|
border-radius: 3px;
|
|
background-color: #ededed;
|
|
position: relative;
|
|
box-shadow: inset -1px 1px 3px rgba(0, 0, 0, .1);
|
|
}
|
|
|
|
.markdown-body .progress-label {
|
|
position: absolute;
|
|
text-align: center;
|
|
font-weight: bold;
|
|
width: 100%; margin: 0;
|
|
line-height: 24px;
|
|
color: #333;
|
|
text-shadow: 1px 1px 0 #fefefe, -1px -1px 0 #fefefe, -1px 1px 0 #fefefe, 1px -1px 0 #fefefe, 0 1px 0 #fefefe, 0 -1px 0 #fefefe, 1px 0 0 #fefefe, -1px 0 0 #fefefe, 1px 1px 2px #000;
|
|
-webkit-font-smoothing: antialiased !important;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.markdown-body .progress-bar {
|
|
height: 24px;
|
|
float: left;
|
|
-webkit-border-radius: 3px;
|
|
-moz-border-radius: 3px;
|
|
border-radius: 3px;
|
|
background-color: #96c6d7;
|
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), inset 0 -1px 0 rgba(0, 0, 0, .1);
|
|
background-size: 30px 30px;
|
|
background-image: -webkit-linear-gradient(
|
|
135deg, rgba(255, 255, 255, .4) 27%,
|
|
transparent 27%,
|
|
transparent 52%, rgba(255, 255, 255, .4) 52%,
|
|
rgba(255, 255, 255, .4) 77%,
|
|
transparent 77%, transparent
|
|
);
|
|
background-image: -moz-linear-gradient(
|
|
135deg,
|
|
rgba(255, 255, 255, .4) 27%, transparent 27%,
|
|
transparent 52%, rgba(255, 255, 255, .4) 52%,
|
|
rgba(255, 255, 255, .4) 77%, transparent 77%,
|
|
transparent
|
|
);
|
|
background-image: -ms-linear-gradient(
|
|
135deg,
|
|
rgba(255, 255, 255, .4) 27%, transparent 27%,
|
|
transparent 52%, rgba(255, 255, 255, .4) 52%,
|
|
rgba(255, 255, 255, .4) 77%, transparent 77%,
|
|
transparent
|
|
);
|
|
background-image: -o-linear-gradient(
|
|
135deg,
|
|
rgba(255, 255, 255, .4) 27%, transparent 27%,
|
|
transparent 52%, rgba(255, 255, 255, .4) 52%,
|
|
rgba(255, 255, 255, .4) 77%, transparent 77%,
|
|
transparent
|
|
);
|
|
background-image: linear-gradient(
|
|
135deg,
|
|
rgba(255, 255, 255, .4) 27%, transparent 27%,
|
|
transparent 52%, rgba(255, 255, 255, .4) 52%,
|
|
rgba(255, 255, 255, .4) 77%, transparent 77%,
|
|
transparent
|
|
);
|
|
}
|
|
|
|
.markdown-body .progress-100plus .progress-bar {
|
|
background-color: #a6d796;
|
|
}
|
|
|
|
.markdown-body .progress-80plus .progress-bar {
|
|
background-color: #c6d796;
|
|
}
|
|
|
|
.markdown-body .progress-60plus .progress-bar {
|
|
background-color: #d7c896;
|
|
}
|
|
|
|
.markdown-body .progress-40plus .progress-bar {
|
|
background-color: #d7a796;
|
|
}
|
|
|
|
.markdown-body .progress-20plus .progress-bar {
|
|
background-color: #d796a6;
|
|
}
|
|
|
|
.markdown-body .progress-0plus .progress-bar {
|
|
background-color: #c25f77;
|
|
}
|
|
|
|
.markdown-body .candystripe-animate .progress-bar{
|
|
-webkit-animation: animate-stripes 3s linear infinite;
|
|
-moz-animation: animate-stripes 3s linear infinite;
|
|
animation: animate-stripes 3s linear infinite;
|
|
}
|
|
|
|
@-webkit-keyframes animate-stripes {
|
|
0% {
|
|
background-position: 0 0;
|
|
}
|
|
|
|
100% {
|
|
background-position: 60px 0;
|
|
}
|
|
}
|
|
|
|
@-moz-keyframes animate-stripes {
|
|
0% {
|
|
background-position: 0 0;
|
|
}
|
|
|
|
100% {
|
|
background-position: 60px 0;
|
|
}
|
|
}
|
|
|
|
@keyframes animate-stripes {
|
|
0% {
|
|
background-position: 0 0;
|
|
}
|
|
|
|
100% {
|
|
background-position: 60px 0;
|
|
}
|
|
}
|
|
|
|
.markdown-body .gloss .progress-bar {
|
|
box-shadow:
|
|
inset 0 4px 12px rgba(255, 255, 255, .7),
|
|
inset 0 -12px 0 rgba(0, 0, 0, .05);
|
|
}
|
|
|
|
/* Multimarkdown Critic Blocks */
|
|
.markdown-body .critic_mark {
|
|
background: #ff0;
|
|
}
|
|
|
|
.markdown-body .critic_delete {
|
|
color: #c82829;
|
|
text-decoration: line-through;
|
|
}
|
|
|
|
.markdown-body .critic_insert {
|
|
color: #718c00 ;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.markdown-body .critic_comment {
|
|
color: #8e908c;
|
|
font-style: italic;
|
|
}
|
|
|
|
.markdown-body .headeranchor {
|
|
font: normal normal 16px octicons-anchor;
|
|
line-height: 1;
|
|
display: inline-block;
|
|
text-decoration: none;
|
|
-webkit-font-smoothing: antialiased;
|
|
-moz-osx-font-smoothing: grayscale;
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
}
|
|
|
|
.headeranchor:before {
|
|
content: '\f05c';
|
|
}
|
|
|
|
.markdown-body .task-list-item {
|
|
list-style-type: none;
|
|
}
|
|
|
|
.markdown-body .task-list-item+.task-list-item {
|
|
margin-top: 3px;
|
|
}
|
|
|
|
.markdown-body .task-list-item input {
|
|
margin: 0 4px 0.25em -20px;
|
|
vertical-align: middle;
|
|
}
|
|
|
|
/* Media */
|
|
@media only screen and (min-width: 480px) {
|
|
.markdown-body {
|
|
font-size:14px;
|
|
}
|
|
}
|
|
|
|
@media only screen and (min-width: 768px) {
|
|
.markdown-body {
|
|
font-size:16px;
|
|
}
|
|
}
|
|
|
|
@media print {
|
|
.markdown-body * {
|
|
background: transparent !important;
|
|
color: black !important;
|
|
filter:none !important;
|
|
-ms-filter: none !important;
|
|
}
|
|
|
|
.markdown-body {
|
|
font-size:12pt;
|
|
max-width:100%;
|
|
outline:none;
|
|
border: 0;
|
|
}
|
|
|
|
.markdown-body a,
|
|
.markdown-body a:visited {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.markdown-body .headeranchor-link {
|
|
display: none;
|
|
}
|
|
|
|
.markdown-body a[href]:after {
|
|
content: " (" attr(href) ")";
|
|
}
|
|
|
|
.markdown-body abbr[title]:after {
|
|
content: " (" attr(title) ")";
|
|
}
|
|
|
|
.markdown-body .ir a:after,
|
|
.markdown-body a[href^="javascript:"]:after,
|
|
.markdown-body a[href^="#"]:after {
|
|
content: "";
|
|
}
|
|
|
|
.markdown-body pre {
|
|
white-space: pre;
|
|
white-space: pre-wrap;
|
|
word-wrap: break-word;
|
|
}
|
|
|
|
.markdown-body pre,
|
|
.markdown-body blockquote {
|
|
border: 1px solid #999;
|
|
padding-right: 1em;
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.markdown-body .progress,
|
|
.markdown-body .progress-bar {
|
|
-moz-box-shadow: none;
|
|
-webkit-box-shadow: none;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.markdown-body .progress {
|
|
border: 1px solid #ddd;
|
|
}
|
|
|
|
.markdown-body .progress-bar {
|
|
height: 22px;
|
|
border-right: 1px solid #ddd;
|
|
}
|
|
|
|
.markdown-body tr,
|
|
.markdown-body img {
|
|
page-break-inside: avoid;
|
|
}
|
|
|
|
.markdown-body img {
|
|
max-width: 100% !important;
|
|
}
|
|
|
|
.markdown-body p,
|
|
.markdown-body h2,
|
|
.markdown-body h3 {
|
|
orphans: 3;
|
|
widows: 3;
|
|
}
|
|
|
|
.markdown-body h2,
|
|
.markdown-body h3 {
|
|
page-break-after: avoid;
|
|
}
|
|
}
|
|
</style><title>RELEASE_NOTES</title></head><body><article class="markdown-body"><h1 id="release-notes"><a name="user-content-release-notes" href="#release-notes" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>RELEASE NOTES</h1>
|
|
<h2 id="july-30-2016"><a name="user-content-july-30-2016" href="#july-30-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>July 30, 2016</h2>
|
|
<h3 id="finding-status"><a name="user-content-finding-status" href="#finding-status" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Finding status</h3>
|
|
<p>New feature for retests: finding status to indicate if, in context of a follow-up pentest, a finding is new, resolved, still unresolved or not retested.</p>
|
|
<p>The <code><finding></code> element now has an optional <code>@status</code> attribute. Possible values are:</p>
|
|
<ul>
|
|
<li><code>new</code></li>
|
|
<li><code>unresolved</code></li>
|
|
<li><code>resolved</code></li>
|
|
<li><code>not_retested</code></li>
|
|
</ul>
|
|
<p>The <code><generate_findings/></code> element now likewise has this optional <code>@status</code> attribute with the same possible values. You can add it to generate a finding summary table containing only the findings with a specific status.</p>
|
|
<h2 id="june-15-2016"><a name="user-content-june-15-2016" href="#june-15-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>June 15, 2016</h2>
|
|
<p>Giant update to celebrate these xml templates having been elevated to OWASP project status. Because how better to do that than through introducing a load of bugs. :) </p>
|
|
<h3 id="multilingual-workflow"><a name="user-content-multilingual-workflow" href="#multilingual-workflow" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Multilingual workflow</h3>
|
|
<p>You can now set the desired language in quickscope, using the offer_language element. This will generate the proper offer with the proper language snippets.</p>
|
|
<p>Note: language stuff is defined in two places:</p>
|
|
<ol>
|
|
<li>in source/snippets/offerte (language directories for all snippets)</li>
|
|
<li>in source/snippets/localisationstrings.xml (these are strings used in xslt; e.g. when generating an offer from quickscope)</li>
|
|
</ol>
|
|
<h3 id="offer-types"><a name="user-content-offer-types" href="#offer-types" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Offer types</h3>
|
|
<p>You can now set the desired offer type in quickscope, using the offer_type element. This will generate the proper offer with the proper snippets.</p>
|
|
<p>Note: system looks for snippets with the type suffix first, and uses the standard snippet if none is found.</p>
|
|
<h4 id="example"><a name="user-content-example" href="#example" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Example</h4>
|
|
<p>Offer type is ‘basic-scan’.</p>
|
|
<p>When generating an xml offer from quickscope, the xslt will first look for the file:</p>
|
|
<p><code>methodology_basic-scan.xml</code></p>
|
|
<p>If it cannot find this file, it will instead use</p>
|
|
<p><code>methodology.xml</code></p>
|
|
<h3 id="customizable-waivers"><a name="user-content-customizable-waivers" href="#customizable-waivers" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Customizable waivers</h3>
|
|
<p>Yes, the stories you heard are true (and we’ll get that snitch one day!) - waivers are no longer hard-coded but are now normal, customizable snippets. Well, not completely normal. It goes like this:</p>
|
|
<p>When generating waivers for client + third parties, the xslt will use the contents of the <code><standard_waiver></code> element in <code><waivers></code> in the <code>waiver.xml</code> snippet.</p>
|
|
<p>UNLESS: you have added an optional <code><alternative_waiver></code> element below <code><standard_waiver></code> (still in <code><waivers></code>) and have given it a <code>Ref</code> attribute that refers to the <code>id</code> of the client/party for which this alternative waiver needs to be used (just add an <code>id</code> if the client or party doesn’t have one yet).</p>
|
|
<p>So to summarize:</p>
|
|
<ol>
|
|
<li>xslt checks if an alternative waiver has been defined for a specific client or party in the offer,</li>
|
|
<li>if not, it uses the standard waiver</li>
|
|
</ol>
|
|
<p>Now isn’t that simple!</p>
|
|
<p>Note: to support this functionality, a bunch of waiver-only placeholders have been introduced, to wit: <code><signee_long></code>, <code><signee_short></code>, <code><signee_street></code>, <code><signee_city></code>, <code><signee_country></code>, <code><signee_waiver_rep></code>. Don’t use them anywhere else though (they will fail and anyway it wouldn’t make sense). </p>
|
|
<h2 id="may-23-2016"><a name="user-content-may-23-2016" href="#may-23-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>May 23, 2016</h2>
|
|
<h3 id="offerte-pentest-report"><a name="user-content-offerte-pentest-report" href="#offerte-pentest-report" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Offerte –> Pentest-report</h3>
|
|
<p>Last step in the document chain has been completed: you can now generate a (bare bones) Pentest report from any offerte the client has accepted, using the following command:</p>
|
|
<p><code>java -jar saxon9he.jar -s:source/offerte.xml -xsl:xslt/off2rep.xsl -o:source/report.xml</code></p>
|
|
<p>This makes the document workflow as follows:</p>
|
|
<ol>
|
|
<li>Fill in quickscope.xml</li>
|
|
<li>Create offerte.xml from quickscope.xml using qs2offerte.xsl</li>
|
|
<li>If client accepts offerte, create report.xml from offerte.xml using off2rep.xsl</li>
|
|
<li>After pentest has concluded, create invoice from offerte using either the direct route or the roundabout one (see March 24, 2016 in the release notes for more info)</li>
|
|
</ol>
|
|
<h2 id="april-25-2016"><a name="user-content-april-25-2016" href="#april-25-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>April 25, 2016</h2>
|
|
<h3 id="hidden-elements"><a name="user-content-hidden-elements" href="#hidden-elements" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Hidden elements</h3>
|
|
<p>It is now possible to hide <code>section</code>, <code>appendix</code> and <code>annex</code> elements from the generated report, offerte or generic document. To do so, add the optional attribute <code>visibility="hidden"</code> to whatever it is you want to hide in the generated PDF.</p>
|
|
<p>Links to hidden targets will give an error (in the document), as will links to non-existing targets in general.</p>
|
|
<h3 id="client-placeholder-renaming"><a name="user-content-client-placeholder-renaming" href="#client-placeholder-renaming" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Client Placeholder renaming</h3>
|
|
<p>All placeholders that used to start with <code>c_*</code> (c_short, c_poc1, etc) now start with <code>client_</code>.</p>
|
|
<h2 id="april-21-2016"><a name="user-content-april-21-2016" href="#april-21-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>April 21, 2016</h2>
|
|
<h3 id="generic-documents"><a name="user-content-generic-documents" href="#generic-documents" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Generic Documents</h3>
|
|
<p>We now have a generic document type, which can be used for (drumroll) generic documents (whitepapers, training notes, presentation notes, whatever).</p>
|
|
<p>It is a super-simple template: it contains a a sparse meta section, an optional ToC and then any number of sections and elements. All the general text elements (tables, lists, pre, code, a, etc etc) can be used. It’s so simple I’m not even going to document it. Check the example doc in <code>doc/examples</code> if you’re lost, but if you’ve ever written an offer or a pentest report using this system it should be a piece of cake. :)</p>
|
|
<p>Usage: <code>genericdocument.xml --> genericdocument.pdf (using generate_doc.xsl + fop)</code></p>
|
|
<h2 id="april-4-2016"><a name="user-content-april-4-2016" href="#april-4-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>April 4, 2016</h2>
|
|
<h3 id="associating-targets-with-parties"><a name="user-content-associating-targets-with-parties" href="#associating-targets-with-parties" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Associating targets with parties</h3>
|
|
<p>You can now associate certain targets with certain parties. The <code><client></code> and <<code>party</code>> element now have an optional <code>id</code> attribute. Each <code>target</code> element now has an optional <code>Ref</code> attribute.</p>
|
|
<p>In waivers, only the targets associated with the party/client that needs to sign the waiver will be shown.</p>
|
|
<p><code><generate_targets/></code> also has an optional <code>Ref</code> attribute for when you only want to generate a list of targets for one client/party.</p>
|
|
<p>If a target has no Ref attribute, it will appear in all the lists (both in the waivers and when using <code><generate_targets/></code>).</p>
|
|
<h2 id="march-24-2016"><a name="user-content-march-24-2016" href="#march-24-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>March 24, 2016</h2>
|
|
<h3 id="more-elaborate-invoicing"><a name="user-content-more-elaborate-invoicing" href="#more-elaborate-invoicing" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>More elaborate invoicing</h3>
|
|
<p>Instead of generating an invoice straight from the offerte, as described in the release notes of March 10, you can now also take the roundabout route and customize the invoice.</p>
|
|
<p>So instead of:</p>
|
|
<ol>
|
|
<li>offerte.xml –> invoice.pdf (using generate_inv.xsl + fop)</li>
|
|
</ol>
|
|
<p>You can do:</p>
|
|
<ol>
|
|
<li>offerte.xml –> invoice.xml (using off2inv.xsl)</li>
|
|
<li>edit invoice.xml (add some extra costs, most likely)</li>
|
|
<li>invoice.xml –> invoice.pdf (using generate_inv.xsl + fop)</li>
|
|
</ol>
|
|
<p>More often than not, the simple route will do just fine, though.</p>
|
|
<h3 id="added-client-vat-element"><a name="user-content-added-client-vat-element" href="#added-client-vat-element" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Added client VAT element</h3>
|
|
<p>When billing EU customers, you do not need to charge VAT (but you do need to have the client’s VAT number on the invoice). So the <code><client></code> element now has an optional <code><vat_no></code> child.</p>
|
|
<h2 id="march-10-2016"><a name="user-content-march-10-2016" href="#march-10-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>March 10, 2016</h2>
|
|
<h3 id="fee-denomination"><a name="user-content-fee-denomination" href="#fee-denomination" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Fee denomination</h3>
|
|
<p>The <code><fee></code> element in <code><pentestinfo></code> now has an optional <code>denomination</code> attribute, which can be set to <code>euro</code> (default) or <code>dollar</code>. Yay for globalization! No, wait.</p>
|
|
<p>Anyway, the denomination is added automatically whenever you reference the fee using the <code><p_fee/></code> placeholder.</p>
|
|
<h3 id="client-info-now-has-its-own-file"><a name="user-content-client-info-now-has-its-own-file" href="#client-info-now-has-its-own-file" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Client info now has its own file</h3>
|
|
<p>The <code><client></code> element has been extracted from the document and now exists all by itself in the file <code>client_info.xml</code>, which is located in the <code>source</code> directory. This gives us the possibility to have a ‘client library’ and to easily reuse client info - just replace the file with the proper one for the current client.</p>
|
|
<p>Note that there are some new fields in the client section, <code><invoice_rep></code> and <code><invoice_mail></code> for use in the… (see next section)</p>
|
|
<h3 id="invoices"><a name="user-content-invoices" href="#invoices" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Invoices!</h3>
|
|
<p>w00t. You can now generate a pdf invoice directly from offerte.xml. Use:</p>
|
|
<p><code>java -jar saxon9he.jar -s:/path/to/offerte/source/offerte.xml -xsl:/path/to/offerte/xslt/generate_invoice.xsl -o:/path/to/report/target/invoice.fo INVOICE_NO=[invoice number] -xi</code> </p>
|
|
<p>And then:</p>
|
|
<p><code>fop -c conf/rosfop.xconf /path/to/offerte/target/invoice.fo path/to/offerte/target/invoice.pdf</code></p>
|
|
<h2 id="march-9-2016"><a name="user-content-march-9-2016" href="#march-9-2016" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>March 9, 2016</h2>
|
|
<h3 id="an-essay-on-placeholders"><a name="user-content-an-essay-on-placeholders" href="#an-essay-on-placeholders" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>An essay on placeholders</h3>
|
|
<h4 id="universality"><a name="user-content-universality" href="#universality" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Universality</h4>
|
|
<p>Placeholders can now be used in both offertes and pentest reports. Within reason, though! Pentest reports only have access to a limited set as the other placeholders are not relevant:</p>
|
|
<ul>
|
|
<li>c_long, c_short, c_street, c_city, c_country (i.e. client data)</li>
|
|
<li>company_long, company_short (i.e. company data)</li>
|
|
<li>p_duration, p_boxtype, p_testingduration, p_reportwritingduration, p_reportdue (i.e. pentest info)</li>
|
|
<li>t_app, t_app_producer (i.e. tested app name & producer)</li>
|
|
</ul>
|
|
<p>To accommodate for especially those last two bullets, we now have room for an optional <code>pentestinfo</code> tag in the report meta section, following the <code><targets></code> element. It’s the same as the <code>pentestinfo</code> for offertes, except it doesn’t hold financial info.</p>
|
|
<h4 id="robustness"><a name="user-content-robustness" href="#robustness" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Robustness</h4>
|
|
<p>When you insert a placeholder, there is now a check to see if<br />
|
|
a. The element you’re referring to exists<br />
|
|
b. The element you’re referring to contains text</p>
|
|
<p>If either a or b are not the case, you’ll end up with a red XXXXX. Which should hopefully get your, or somebody else’s, attention during review time.</p>
|
|
<h4 id="title-case"><a name="user-content-title-case" href="#title-case" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Title Case</h4>
|
|
<p>Uppercase is now forced on titles that should be in uppercase (i.e. report and offerte title pages, plus offerte titles in general).</p>
|
|
<p>Forcing title case for pentest report titles is unfortunately not possible from a style point of view as xsl-fo can only capitalize every word, which is not really what we want. But Peter Mosmans’s validation script has your back on this.</p>
|
|
<h3 id="finally-we-have-a-div-element"><a name="user-content-finally-we-have-a-div-element" href="#finally-we-have-a-div-element" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Finally, we have a <code><div></code> element!</h3>
|
|
<h4 id="what-does-div-do"><a name="user-content-what-does-div-do" href="#what-does-div-do" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>What does <code><div></code> do?</h4>
|
|
<p>Nothing. <code><div></code> just <em>is</em>.</p>
|
|
<h4 id="sigh-ok-why-is-div"><a name="user-content-sigh-ok-why-is-div" href="#sigh-ok-why-is-div" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>Sigh. Ok, why <em>is</em> <code><div></code>?</h4>
|
|
<p>You can use <code><div></code> as a container for other block elements. This is basically only (but very) useful for snippets, as snippets need to be well-formed XML documentlets and can therefore only have one root element. If the snippet is a complete section, this is not a problem. If the snippet is a bunch of paragraphs or something, you’re out of luck. Or rather, you used to be out of luck, because there was no <code><div></code>. But now there is <code><div></code>. So your snippet can be <code><div></code> (root element), containing everything you want. Well, everything that’s allowed, anyway.</p>
|
|
<h4 id="so-whats-allowed-in-div"><a name="user-content-so-whats-allowed-in-div" href="#so-whats-allowed-in-div" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>So what’s allowed in <code><div></code>?</h4>
|
|
<p>All block elements: p, ul, ol, table, img, pre, code</p>
|
|
<h4 id="and-what-elements-can-contain-div"><a name="user-content-and-what-elements-can-contain-div" href="#and-what-elements-can-contain-div" class="headeranchor-link" aria-hidden="true"><span class="headeranchor"></span></a>And what elements can <em>contain</em> <code><div></code>?</h4>
|
|
<p>Sections, Annexes and Appendices. NOTHING ELSE. DON’T EVEN TRY.</p></article></body></html> |