@@ -4,28 +4,33 @@ package dump
4
4
import (
5
5
"encoding/base64"
6
6
"fmt"
7
- "os "
7
+ "io "
8
8
9
9
"github.com/micromdm/nanomdm/mdm"
10
10
"github.com/micromdm/nanomdm/service"
11
11
)
12
12
13
+ type DumpWriter interface {
14
+ io.Writer
15
+ io.StringWriter
16
+ }
17
+
13
18
// Dumper is a service middleware that dumps MDM requests and responses
14
19
// to a file handle.
15
20
type Dumper struct {
16
21
next service.CheckinAndCommandService
17
- file * os. File
22
+ w DumpWriter
18
23
cmd bool
19
24
bst bool
20
25
usr bool
21
26
dm bool
22
27
}
23
28
24
29
// 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 {
26
31
return & Dumper {
27
32
next : next ,
28
- file : file ,
33
+ w : w ,
29
34
cmd : true ,
30
35
bst : true ,
31
36
usr : true ,
@@ -34,70 +39,70 @@ func New(next service.CheckinAndCommandService, file *os.File) *Dumper {
34
39
}
35
40
36
41
func (svc * Dumper ) Authenticate (r * mdm.Request , m * mdm.Authenticate ) error {
37
- svc .file .Write (m .Raw )
42
+ svc .w .Write (m .Raw )
38
43
return svc .next .Authenticate (r , m )
39
44
}
40
45
41
46
func (svc * Dumper ) TokenUpdate (r * mdm.Request , m * mdm.TokenUpdate ) error {
42
- svc .file .Write (m .Raw )
47
+ svc .w .Write (m .Raw )
43
48
return svc .next .TokenUpdate (r , m )
44
49
}
45
50
46
51
func (svc * Dumper ) CheckOut (r * mdm.Request , m * mdm.CheckOut ) error {
47
- svc .file .Write (m .Raw )
52
+ svc .w .Write (m .Raw )
48
53
return svc .next .CheckOut (r , m )
49
54
}
50
55
51
56
func (svc * Dumper ) UserAuthenticate (r * mdm.Request , m * mdm.UserAuthenticate ) ([]byte , error ) {
52
- svc .file .Write (m .Raw )
57
+ svc .w .Write (m .Raw )
53
58
respBytes , err := svc .next .UserAuthenticate (r , m )
54
59
if svc .usr && respBytes != nil && len (respBytes ) > 0 {
55
- svc .file .Write (respBytes )
60
+ svc .w .Write (respBytes )
56
61
}
57
62
return respBytes , err
58
63
}
59
64
60
65
func (svc * Dumper ) SetBootstrapToken (r * mdm.Request , m * mdm.SetBootstrapToken ) error {
61
- svc .file .Write (m .Raw )
66
+ svc .w .Write (m .Raw )
62
67
return svc .next .SetBootstrapToken (r , m )
63
68
}
64
69
65
70
func (svc * Dumper ) GetBootstrapToken (r * mdm.Request , m * mdm.GetBootstrapToken ) (* mdm.BootstrapToken , error ) {
66
- svc .file .Write (m .Raw )
71
+ svc .w .Write (m .Raw )
67
72
bsToken , err := svc .next .GetBootstrapToken (r , m )
68
73
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 ())))
70
75
}
71
76
return bsToken , err
72
77
}
73
78
74
79
func (svc * Dumper ) GetToken (r * mdm.Request , m * mdm.GetToken ) (* mdm.GetTokenResponse , error ) {
75
- svc .file .Write (m .Raw )
80
+ svc .w .Write (m .Raw )
76
81
token , err := svc .next .GetToken (r , m )
77
82
if token != nil && len (token .TokenData ) > 0 {
78
83
b64 := base64 .StdEncoding .EncodeToString (token .TokenData )
79
- svc .file .WriteString ("GetToken TokenData: " + b64 + "\n " )
84
+ svc .w .WriteString ("GetToken TokenData: " + b64 + "\n " )
80
85
}
81
86
return token , err
82
87
}
83
88
84
89
func (svc * Dumper ) CommandAndReportResults (r * mdm.Request , results * mdm.CommandResults ) (* mdm.Command , error ) {
85
- svc .file .Write (results .Raw )
90
+ svc .w .Write (results .Raw )
86
91
cmd , err := svc .next .CommandAndReportResults (r , results )
87
92
if svc .cmd && err != nil && cmd != nil && cmd .Raw != nil {
88
- svc .file .Write (cmd .Raw )
93
+ svc .w .Write (cmd .Raw )
89
94
}
90
95
return cmd , err
91
96
}
92
97
93
98
func (svc * Dumper ) DeclarativeManagement (r * mdm.Request , m * mdm.DeclarativeManagement ) ([]byte , error ) {
94
- svc .file .Write (m .Raw )
99
+ svc .w .Write (m .Raw )
95
100
if len (m .Data ) > 0 {
96
- svc .file .Write (m .Data )
101
+ svc .w .Write (m .Data )
97
102
}
98
103
respBytes , err := svc .next .DeclarativeManagement (r , m )
99
104
if svc .dm && err != nil {
100
- svc .file .Write (respBytes )
105
+ svc .w .Write (respBytes )
101
106
}
102
107
return respBytes , err
103
108
}
0 commit comments