diff options
Diffstat (limited to 'modules/private/websites/tools/tools/dmarc_reports/index.html')
-rw-r--r-- | modules/private/websites/tools/tools/dmarc_reports/index.html | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/modules/private/websites/tools/tools/dmarc_reports/index.html b/modules/private/websites/tools/tools/dmarc_reports/index.html new file mode 100644 index 0000000..ded05e1 --- /dev/null +++ b/modules/private/websites/tools/tools/dmarc_reports/index.html | |||
@@ -0,0 +1,118 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <html> | ||
3 | |||
4 | <head> | ||
5 | <meta charset="utf-8"> | ||
6 | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
7 | <meta name="robots" content="noindex"> | ||
8 | <title>Dmarc reports</title> | ||
9 | <link rel="stylesheet" href="default.css"> | ||
10 | </head> | ||
11 | |||
12 | <body> | ||
13 | <div id="app" style="width: 100%"> | ||
14 | <div class="optionblock" v-if="info"> | ||
15 | <div class='options'> | ||
16 | <span class='optionlabel'>Hide all-green lines:</span> | ||
17 | <label><input type="radio" :value="false" v-model="filterGreen"> no</label> | ||
18 | <label><input type="radio" :value="true" v-model="filterGreen"> yes</label> | ||
19 | </div> | ||
20 | <div class='options'> | ||
21 | <span class='optionlabel'>Sort order:</span> | ||
22 | <label><input type="radio" :value="false" v-model="reverse"> ascending</label> | ||
23 | <label><input type="radio" :value="true" v-model="reverse"> descending</label> | ||
24 | </div> | ||
25 | <div class='options'> | ||
26 | <span class='optionlabel'>Domain(s):</span> | ||
27 | <select v-model="filterDomain"> | ||
28 | <option selected="selected" :value="null">[all]</option> | ||
29 | <option v-for="domain in info.domains" :value="domain">{{ domain }}</option> | ||
30 | </select> | ||
31 | </div> | ||
32 | <div class='options'> | ||
33 | <span class='optionlabel'>Organisation(s):</span> | ||
34 | <select v-model="filterOrg"> | ||
35 | <option selected="selected" :value="null">[all]</option> | ||
36 | <option v-for="org in info.orgs" :value="org">{{ org }}</option> | ||
37 | </select> | ||
38 | </div> | ||
39 | <div class='options'> | ||
40 | <span class='optionlabel'>Time:</span> | ||
41 | <select v-model="filterDate"> | ||
42 | <option selected="selected" :value="null">[all]</option> | ||
43 | <option v-for="date in info.dates" :value="date">{{ date }}</option> | ||
44 | </select> | ||
45 | </div> | ||
46 | </div> | ||
47 | |||
48 | <h1 class='main'>DMARC Reports</h1> | ||
49 | <table class='reportlist' v-if="summaries"> | ||
50 | <thead> | ||
51 | <tr> | ||
52 | <th></th> | ||
53 | <th>Start Date</th> | ||
54 | <th>End Date</th> | ||
55 | <th>Domain</th> | ||
56 | <th>Reporting Organization</th> | ||
57 | <th>Report ID</th> | ||
58 | <th>Messages</th> | ||
59 | </tr> | ||
60 | </thead> | ||
61 | <tbody> | ||
62 | <template v-for="summary in filtered()"> | ||
63 | <tr v-on:click="toggle(summary)" class="summaryrow" | ||
64 | v-bind:class="[{ selected: selectedSummary && summary.serial === selectedSummary.serial }]"> | ||
65 | <td class='right'><span :class="'circle_' + getColor(summary)"></span></td> | ||
66 | <td class='right'>{{ printDate(summary.mindate) }}</td> | ||
67 | <td class='right'>{{ printDate(summary.maxdate) }}</td> | ||
68 | <td class='center'>{{ summary.domain }}</td> | ||
69 | <td class='center'>{{ summary.org }}</td> | ||
70 | <td class='center'>{{ summary.reportid }}</td> | ||
71 | <td class='center'>{{ summary.rcount }}</td> | ||
72 | </tr> | ||
73 | <tr v-if="selectedSummary && summary.serial === selectedSummary.serial"> | ||
74 | <td colspan="6" class="reportcell"> | ||
75 | <div class='center reportdesc'> | ||
76 | <p>Policies: adkim={{ summary.policy_adkim }}, aspf={{ summary.policy_aspf }}, p={{ summary.policy_none }}, sp={{ summary.policy_sp }}, pct={{ summary.policy_pct }}</p> | ||
77 | </div> | ||
78 | <table v-if="summary.details" class='reportdata'> | ||
79 | <thead> | ||
80 | <tr> | ||
81 | <th>IP Address</th> | ||
82 | <th>Host Name</th> | ||
83 | <th>Message Count</th> | ||
84 | <th>Disposition</th> | ||
85 | <th>Reason</th> | ||
86 | <th>DKIM Domain</th> | ||
87 | <th>Raw DKIM Result</th> | ||
88 | <th>SPF Domain</th> | ||
89 | <th>Raw SPF Result</th> | ||
90 | </tr> | ||
91 | </thead> | ||
92 | <tbody> | ||
93 | <tr v-for="record in summary.details.rptrecord" :class='getColor(record)'> | ||
94 | <td>{{ record.ip }}</td> | ||
95 | <td>{{ record.host }}</td> | ||
96 | <td>{{ record.rcount }}</td> | ||
97 | <td>{{ record.disposition }}</td> | ||
98 | <td>{{ record.reason }}</td> | ||
99 | <td>{{ record.dkimdomain }}</td> | ||
100 | <td>{{ record.dkimresult }}</td> | ||
101 | <td>{{ record.spfdomain }}</td> | ||
102 | <td>{{ record.spfresult }}</td> | ||
103 | </tr> | ||
104 | </tbody> | ||
105 | </table> | ||
106 | </td> | ||
107 | <td></td> | ||
108 | </tr> | ||
109 | </template> | ||
110 | </tbody> | ||
111 | </table> | ||
112 | </div> | ||
113 | |||
114 | <script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script> | ||
115 | <script src="app.js"></script> | ||
116 | </body> | ||
117 | |||
118 | </html> | ||