@@ -4,28 +4,33 @@ package dump
44import (
55 "encoding/base64"
66 "fmt"
7- "os "
7+ "io "
88
99 "github.com/micromdm/nanomdm/mdm"
1010 "github.com/micromdm/nanomdm/service"
1111)
1212
13+ type DumpWriter interface {
14+ io.Writer
15+ io.StringWriter
16+ }
17+
1318// Dumper is a service middleware that dumps MDM requests and responses
1419// to a file handle.
1520type Dumper struct {
1621 next service.CheckinAndCommandService
17- file * os. File
22+ w DumpWriter
1823 cmd bool
1924 bst bool
2025 usr bool
2126 dm bool
2227}
2328
2429// New creates a new dumper service middleware.
25- func New (next service.CheckinAndCommandService , file * os. File ) * Dumper {
30+ func New (next service.CheckinAndCommandService , w DumpWriter ) * Dumper {
2631 return & Dumper {
2732 next : next ,
28- file : file ,
33+ w : w ,
2934 cmd : true ,
3035 bst : true ,
3136 usr : true ,
@@ -34,70 +39,70 @@ func New(next service.CheckinAndCommandService, file *os.File) *Dumper {
3439}
3540
3641func (svc * Dumper ) Authenticate (r * mdm.Request , m * mdm.Authenticate ) error {
37- svc .file .Write (m .Raw )
42+ svc .w .Write (m .Raw )
3843 return svc .next .Authenticate (r , m )
3944}
4045
4146func (svc * Dumper ) TokenUpdate (r * mdm.Request , m * mdm.TokenUpdate ) error {
42- svc .file .Write (m .Raw )
47+ svc .w .Write (m .Raw )
4348 return svc .next .TokenUpdate (r , m )
4449}
4550
4651func (svc * Dumper ) CheckOut (r * mdm.Request , m * mdm.CheckOut ) error {
47- svc .file .Write (m .Raw )
52+ svc .w .Write (m .Raw )
4853 return svc .next .CheckOut (r , m )
4954}
5055
5156func (svc * Dumper ) UserAuthenticate (r * mdm.Request , m * mdm.UserAuthenticate ) ([]byte , error ) {
52- svc .file .Write (m .Raw )
57+ svc .w .Write (m .Raw )
5358 respBytes , err := svc .next .UserAuthenticate (r , m )
5459 if svc .usr && respBytes != nil && len (respBytes ) > 0 {
55- svc .file .Write (respBytes )
60+ svc .w .Write (respBytes )
5661 }
5762 return respBytes , err
5863}
5964
6065func (svc * Dumper ) SetBootstrapToken (r * mdm.Request , m * mdm.SetBootstrapToken ) error {
61- svc .file .Write (m .Raw )
66+ svc .w .Write (m .Raw )
6267 return svc .next .SetBootstrapToken (r , m )
6368}
6469
6570func (svc * Dumper ) GetBootstrapToken (r * mdm.Request , m * mdm.GetBootstrapToken ) (* mdm.BootstrapToken , error ) {
66- svc .file .Write (m .Raw )
71+ svc .w .Write (m .Raw )
6772 bsToken , err := svc .next .GetBootstrapToken (r , m )
6873 if svc .bst && bsToken != nil && len (bsToken .BootstrapToken ) > 0 {
69- svc .file .Write ([]byte (fmt .Sprintf ("Bootstrap token: %s\n " , bsToken .BootstrapToken .String ())))
74+ svc .w .Write ([]byte (fmt .Sprintf ("Bootstrap token: %s\n " , bsToken .BootstrapToken .String ())))
7075 }
7176 return bsToken , err
7277}
7378
7479func (svc * Dumper ) GetToken (r * mdm.Request , m * mdm.GetToken ) (* mdm.GetTokenResponse , error ) {
75- svc .file .Write (m .Raw )
80+ svc .w .Write (m .Raw )
7681 token , err := svc .next .GetToken (r , m )
7782 if token != nil && len (token .TokenData ) > 0 {
7883 b64 := base64 .StdEncoding .EncodeToString (token .TokenData )
79- svc .file .WriteString ("GetToken TokenData: " + b64 + "\n " )
84+ svc .w .WriteString ("GetToken TokenData: " + b64 + "\n " )
8085 }
8186 return token , err
8287}
8388
8489func (svc * Dumper ) CommandAndReportResults (r * mdm.Request , results * mdm.CommandResults ) (* mdm.Command , error ) {
85- svc .file .Write (results .Raw )
90+ svc .w .Write (results .Raw )
8691 cmd , err := svc .next .CommandAndReportResults (r , results )
8792 if svc .cmd && err != nil && cmd != nil && cmd .Raw != nil {
88- svc .file .Write (cmd .Raw )
93+ svc .w .Write (cmd .Raw )
8994 }
9095 return cmd , err
9196}
9297
9398func (svc * Dumper ) DeclarativeManagement (r * mdm.Request , m * mdm.DeclarativeManagement ) ([]byte , error ) {
94- svc .file .Write (m .Raw )
99+ svc .w .Write (m .Raw )
95100 if len (m .Data ) > 0 {
96- svc .file .Write (m .Data )
101+ svc .w .Write (m .Data )
97102 }
98103 respBytes , err := svc .next .DeclarativeManagement (r , m )
99104 if svc .dm && err != nil {
100- svc .file .Write (respBytes )
105+ svc .w .Write (respBytes )
101106 }
102107 return respBytes , err
103108}
0 commit comments