Convert to read from file reader with decoder
Change-Id: I58845a612a6853658596154812f954efbbb6f733
This commit is contained in:
112
dmarc.go
112
dmarc.go
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -70,96 +71,31 @@ func main() {
|
||||
Record []Record `xml:"record"`
|
||||
}
|
||||
|
||||
v := FeedbackReport{}
|
||||
|
||||
data := `
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<feedback>
|
||||
<report_metadata>
|
||||
<org_name>google.com</org_name>
|
||||
<email>noreply-dmarc-support@google.com</email>
|
||||
<extra_contact_info>https://support.google.com/a/answer/2466580</extra_contact_info>
|
||||
<report_id>11295852759969162400</report_id>
|
||||
<date_range>
|
||||
<begin>1448236800</begin>
|
||||
<end>1448323199</end>
|
||||
</date_range>
|
||||
</report_metadata>
|
||||
<policy_published>
|
||||
<domain>colbs.net</domain>
|
||||
<adkim>r</adkim>
|
||||
<aspf>r</aspf>
|
||||
<p>reject</p>
|
||||
<sp>reject</sp>
|
||||
<pct>100</pct>
|
||||
</policy_published>
|
||||
<record>
|
||||
<row>
|
||||
<source_ip>2607:f8b0:400c:c05::249</source_ip>
|
||||
<count>1</count>
|
||||
<policy_evaluated>
|
||||
<disposition>none</disposition>
|
||||
<dkim>pass</dkim>
|
||||
<spf>fail</spf>
|
||||
</policy_evaluated>
|
||||
</row>
|
||||
<identifiers>
|
||||
<header_from>colbs.net</header_from>
|
||||
</identifiers>
|
||||
<auth_results>
|
||||
<dkim>
|
||||
<domain>google.com</domain>
|
||||
<result>pass</result>
|
||||
</dkim>
|
||||
<dkim>
|
||||
<domain>colbs.net</domain>
|
||||
<result>pass</result>
|
||||
</dkim>
|
||||
<spf>
|
||||
<domain>calendar-server.bounces.google.com</domain>
|
||||
<result>pass</result>
|
||||
</spf>
|
||||
</auth_results>
|
||||
</record>
|
||||
<record>
|
||||
<row>
|
||||
<source_ip>2a00:1450:400c:c09::235</source_ip>
|
||||
<count>1</count>
|
||||
<policy_evaluated>
|
||||
<disposition>none</disposition>
|
||||
<dkim>pass</dkim>
|
||||
<spf>pass</spf>
|
||||
</policy_evaluated>
|
||||
</row>
|
||||
<identifiers>
|
||||
<header_from>colbs.net</header_from>
|
||||
</identifiers>
|
||||
<auth_results>
|
||||
<dkim>
|
||||
<domain>colbs.net</domain>
|
||||
<result>pass</result>
|
||||
</dkim>
|
||||
<spf>
|
||||
<domain>colbs.net</domain>
|
||||
<result>pass</result>
|
||||
</spf>
|
||||
</auth_results>
|
||||
</record>
|
||||
</feedback>
|
||||
`
|
||||
|
||||
err := xml.Unmarshal([]byte(data), &v)
|
||||
xmlFile, err := os.Open("/Users/gcolburn/go/src/github.com/gc1code/dmarcparser/samples/google.xml") // For read access.
|
||||
if err != nil {
|
||||
fmt.Printf("error: %v", err)
|
||||
fmt.Printf("os error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("XMLName: %#v\n", v)
|
||||
// fmt.Printf("org_name: %#q\n", v.ReportMetadata.OrgName)
|
||||
// fmt.Printf("domain: %#q\n", v.PolicyPublished.Domain)
|
||||
// fmt.Printf("Name: %q\n", v.Name)
|
||||
// fmt.Printf("Phone: %q\n", v.Phone)
|
||||
// fmt.Printf("Email: %v\n", v.Email)
|
||||
// fmt.Printf("Groups: %v\n", v.Groups)
|
||||
// fmt.Printf("Address: %v\n", v.Address)
|
||||
defer xmlFile.Close()
|
||||
|
||||
decoder := xml.NewDecoder(xmlFile)
|
||||
var inElement string
|
||||
for {
|
||||
t, _ := decoder.Token()
|
||||
if t == nil {
|
||||
break
|
||||
}
|
||||
switch se := t.(type) {
|
||||
case xml.StartElement:
|
||||
inElement = se.Name.Local
|
||||
if inElement == "feedback" {
|
||||
var f FeedbackReport
|
||||
|
||||
decoder.DecodeElement(&f, &se)
|
||||
fmt.Printf("XMLName: %#v\n", f)
|
||||
}
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user