]>
Commit | Line | Data |
---|---|---|
7df5e532 IB |
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%"> | |
9c08c3bc IB |
14 | <div class="optionblock"> |
15 | <div class='options'> | |
16 | <span class='optionlabel'>Anonymize</span> | |
17 | <label><input type="radio" :value="false" v-model="anonymous" v-on:click="toggleAnonymous()"> no</label> | |
18 | <label><input type="radio" :value="true" v-model="anonymous" v-on:click="toggleAnonymous()"> yes</label> | |
19 | </div> | |
20 | <template v-if="info"> | |
7df5e532 IB |
21 | <div class='options'> |
22 | <span class='optionlabel'>Hide all-green lines:</span> | |
23 | <label><input type="radio" :value="false" v-model="filterGreen"> no</label> | |
24 | <label><input type="radio" :value="true" v-model="filterGreen"> yes</label> | |
25 | </div> | |
26 | <div class='options'> | |
27 | <span class='optionlabel'>Sort order:</span> | |
28 | <label><input type="radio" :value="false" v-model="reverse"> ascending</label> | |
29 | <label><input type="radio" :value="true" v-model="reverse"> descending</label> | |
30 | </div> | |
31 | <div class='options'> | |
32 | <span class='optionlabel'>Domain(s):</span> | |
33 | <select v-model="filterDomain"> | |
34 | <option selected="selected" :value="null">[all]</option> | |
35 | <option v-for="domain in info.domains" :value="domain">{{ domain }}</option> | |
36 | </select> | |
37 | </div> | |
38 | <div class='options'> | |
39 | <span class='optionlabel'>Organisation(s):</span> | |
40 | <select v-model="filterOrg"> | |
41 | <option selected="selected" :value="null">[all]</option> | |
42 | <option v-for="org in info.orgs" :value="org">{{ org }}</option> | |
43 | </select> | |
44 | </div> | |
45 | <div class='options'> | |
46 | <span class='optionlabel'>Time:</span> | |
47 | <select v-model="filterDate"> | |
48 | <option selected="selected" :value="null">[all]</option> | |
49 | <option v-for="date in info.dates" :value="date">{{ date }}</option> | |
50 | </select> | |
51 | </div> | |
9c08c3bc | 52 | </template> |
7df5e532 IB |
53 | </div> |
54 | ||
55 | <h1 class='main'>DMARC Reports</h1> | |
9c08c3bc IB |
56 | <p v-if="!info" class="warninginfo"> |
57 | No information could be fetched. If in non-anonymous mode you need to be logged-in | |
58 | </p> | |
7df5e532 IB |
59 | <table class='reportlist' v-if="summaries"> |
60 | <thead> | |
61 | <tr> | |
62 | <th></th> | |
63 | <th>Start Date</th> | |
64 | <th>End Date</th> | |
65 | <th>Domain</th> | |
66 | <th>Reporting Organization</th> | |
67 | <th>Report ID</th> | |
68 | <th>Messages</th> | |
69 | </tr> | |
70 | </thead> | |
71 | <tbody> | |
72 | <template v-for="summary in filtered()"> | |
73 | <tr v-on:click="toggle(summary)" class="summaryrow" | |
74 | v-bind:class="[{ selected: selectedSummary && summary.serial === selectedSummary.serial }]"> | |
75 | <td class='right'><span :class="'circle_' + getColor(summary)"></span></td> | |
76 | <td class='right'>{{ printDate(summary.mindate) }}</td> | |
77 | <td class='right'>{{ printDate(summary.maxdate) }}</td> | |
78 | <td class='center'>{{ summary.domain }}</td> | |
79 | <td class='center'>{{ summary.org }}</td> | |
80 | <td class='center'>{{ summary.reportid }}</td> | |
81 | <td class='center'>{{ summary.rcount }}</td> | |
82 | </tr> | |
83 | <tr v-if="selectedSummary && summary.serial === selectedSummary.serial"> | |
84 | <td colspan="6" class="reportcell"> | |
85 | <div class='center reportdesc'> | |
86 | <p>Policies: adkim={{ summary.policy_adkim }}, aspf={{ summary.policy_aspf }}, p={{ summary.policy_none }}, sp={{ summary.policy_sp }}, pct={{ summary.policy_pct }}</p> | |
87 | </div> | |
88 | <table v-if="summary.details" class='reportdata'> | |
89 | <thead> | |
90 | <tr> | |
91 | <th>IP Address</th> | |
92 | <th>Host Name</th> | |
93 | <th>Message Count</th> | |
94 | <th>Disposition</th> | |
95 | <th>Reason</th> | |
96 | <th>DKIM Domain</th> | |
97 | <th>Raw DKIM Result</th> | |
98 | <th>SPF Domain</th> | |
99 | <th>Raw SPF Result</th> | |
100 | </tr> | |
101 | </thead> | |
102 | <tbody> | |
103 | <tr v-for="record in summary.details.rptrecord" :class='getColor(record)'> | |
104 | <td>{{ record.ip }}</td> | |
105 | <td>{{ record.host }}</td> | |
106 | <td>{{ record.rcount }}</td> | |
107 | <td>{{ record.disposition }}</td> | |
108 | <td>{{ record.reason }}</td> | |
109 | <td>{{ record.dkimdomain }}</td> | |
110 | <td>{{ record.dkimresult }}</td> | |
111 | <td>{{ record.spfdomain }}</td> | |
112 | <td>{{ record.spfresult }}</td> | |
113 | </tr> | |
114 | </tbody> | |
115 | </table> | |
116 | </td> | |
117 | <td></td> | |
118 | </tr> | |
119 | </template> | |
120 | </tbody> | |
121 | </table> | |
122 | </div> | |
123 | ||
4c42e0be | 124 | <script src="https://assets.immae.eu/vue/2.6.11/vue.min.js" integrity="sha256-ngFW3UnAN0Tnm76mDuu7uUtYEcG3G5H1+zioJw3t+68=" crossorigin="anonymous"></script> |
7df5e532 IB |
125 | <script src="app.js"></script> |
126 | </body> | |
127 | ||
128 | </html> |