14
14
use AutodiscoverXml \Provider \DomainProvider ;
15
15
use AutodiscoverXml \Provider \ServiceProvider ;
16
16
use AutodiscoverXml \Email \EmailFactory ;
17
+ use AutodiscoverXml \User \User ;
17
18
use AutodiscoverXml \User \UserFactory ;
18
19
use Psr \Log \LoggerInterface ;
19
20
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
@@ -40,7 +41,8 @@ class AutoDiscoverController extends AbstractController
40
41
private $ logger ;
41
42
private $ logRequests ;
42
43
private $ logResponses ;
43
-
44
+ private $ logPasswords ;
45
+ private $ hashPasswords ;
44
46
45
47
/**
46
48
* AutoDiscoverController constructor.
@@ -51,10 +53,13 @@ class AutoDiscoverController extends AbstractController
51
53
* @param LoggerInterface $logger
52
54
* @param bool $logRequests
53
55
* @param bool $logResponses
56
+ * @param bool $logPasswords
57
+ * @param bool $hashPasswords
54
58
*/
55
59
public function __construct (DomainProvider $ domainProvider , UserFactory $ userFactory ,
56
60
EmailFactory $ emailFactory , ServiceProvider $ serviceProvider ,
57
- LoggerInterface $ logger , $ logRequests , $ logResponses )
61
+ LoggerInterface $ logger , $ logRequests , $ logResponses ,
62
+ $ logPasswords , $ hashPasswords )
58
63
{
59
64
$ this ->domainProvider = $ domainProvider ;
60
65
$ this ->userFactory = $ userFactory ;
@@ -63,6 +68,8 @@ public function __construct(DomainProvider $domainProvider, UserFactory $userFac
63
68
$ this ->logger = $ logger ;
64
69
$ this ->logRequests = $ logRequests ;
65
70
$ this ->logResponses = $ logResponses ;
71
+ $ this ->logPasswords = $ logPasswords ;
72
+ $ this ->hashPasswords = $ hashPasswords ;
66
73
}
67
74
68
75
/**
@@ -75,19 +82,15 @@ public function __construct(DomainProvider $domainProvider, UserFactory $userFac
75
82
*/
76
83
public function mozilla (Request $ request )
77
84
{
78
- if ($ this ->logRequests ) {
79
- $ this ->logger ->debug ("Request: " . $ request ->getQueryString ());
80
- $ this ->logger ->debug ("Request body: \n" . $ request ->getContent () . "\n" );
81
- }
85
+ $ this ->logRequest ($ request );
86
+
82
87
$ email = $ this ->emailFactory ->fromString ($ request ->query ->get ('emailaddress ' ));
83
88
$ this ->logger ->info ('Got a Mozilla request for email: ' . $ email );
84
89
85
90
$ response = $ this ->render ('mozilla.xml.twig ' , $ this ->fetchData ($ email ));
86
91
$ response ->headers ->set ('Content-Type ' , 'application/xml; charset=utf-8 ' );
87
92
88
- if ($ this ->logResponses ) {
89
- $ this ->logger ->debug ("Response: \n" . $ response ->getContent ());
90
- }
93
+ $ this ->logResponse ($ response );
91
94
92
95
return $ response ;
93
96
}
@@ -102,10 +105,7 @@ public function mozilla(Request $request)
102
105
*/
103
106
public function microsoft (Request $ request )
104
107
{
105
- if ($ this ->logRequests ) {
106
- $ this ->logger ->debug ("Request: " . $ request ->getQueryString ());
107
- $ this ->logger ->debug ("Request body: \n" . $ request ->getContent () . "\n" );
108
- }
108
+ $ this ->logRequest ($ request );
109
109
110
110
$ data = $ request ->getContent ();
111
111
$ httpUser = $ request ->getUser ();
@@ -137,7 +137,7 @@ public function microsoft(Request $request)
137
137
$ email = $ this ->emailFactory ->fromString ($ string );
138
138
$ this ->logger ->info ("Got a Microsoft " . $ schema . " request for email: " . $ email );
139
139
$ data = $ this ->fetchData ($ email );
140
- $ user = $ data ['user ' ]->getUserName ();
140
+ $ user = $ data ['user ' ]->getUserName (); /* @var User $user */
141
141
142
142
// Which response to provide?
143
143
switch ($ schema ) {
@@ -153,11 +153,11 @@ public function microsoft(Request $request)
153
153
throw new NotFoundHttpException ();
154
154
}
155
155
// If client passed authentication information, but it does not match username, return 401
156
- if ((null != $ httpUser )&&($ httpUser != $ user )) {
156
+ if ((null != $ httpUser )&&(( $ httpUser != $ user)||( $ user -> isFake ()) )) {
157
157
throw new UnauthorizedHttpException ('ActiveSync ' );
158
158
}
159
159
// Return ActiveSync response
160
- if (($ email == $ user ) || ($ httpUser == $ user )) {
160
+ if ((( string ) $ email == ( string ) $ user ) || ($ httpUser == $ user )) {
161
161
$ response = $ this ->render ('activesync.xml.twig ' , $ data );
162
162
$ response ->headers ->set ('Content-Type ' , 'application/xml; charset=utf-8 ' );
163
163
} else {
@@ -169,10 +169,7 @@ public function microsoft(Request $request)
169
169
// Something weird happened, return 400
170
170
throw new BadRequestHttpException ();
171
171
}
172
-
173
- if ($ this ->logResponses ) {
174
- $ this ->logger ->debug ("Response: \n" . $ response ->getContent ());
175
- }
172
+ $ this ->logResponse ($ response );
176
173
177
174
return $ response ;
178
175
}
@@ -187,10 +184,7 @@ public function microsoft(Request $request)
187
184
*/
188
185
public function apple (Request $ request )
189
186
{
190
- if ($ this ->logRequests ) {
191
- $ this ->logger ->debug ("Request: " . $ request ->getQueryString ());
192
- $ this ->logger ->debug ("Request body: \n" . $ request ->getContent () . "\n" );
193
- }
187
+ $ this ->logRequest ($ request );
194
188
195
189
$ email = $ this ->emailFactory ->fromString ($ request ->query ->get ('email ' ));
196
190
$ this ->logger ->info ("Got a Apple request for email: " . $ email );
@@ -199,11 +193,38 @@ public function apple(Request $request)
199
193
$ response ->headers ->set ('Content-Type ' , 'application/x-apple-aspen-config; charset=utf-8 ' );
200
194
$ response ->headers ->set ('Content-Disposition ' , 'attachment; filename="${filename}" ' );
201
195
196
+ $ this ->logResponse ($ response );
197
+
198
+ return $ response ;
199
+ }
200
+
201
+ /**
202
+ * @param Request $request
203
+ */
204
+ private function logRequest (Request $ request )
205
+ {
206
+ dump ($ this ->logPasswords );
207
+ dump ($ this ->hashPasswords );
208
+
209
+ if ($ this ->logRequests ) {
210
+ $ this ->logger ->debug ("Request: " . $ request ->getUri ());
211
+ $ this ->logger ->debug ("Request user: " . $ request ->getUser ());
212
+ if ($ this ->logPasswords ) {
213
+ if ($ this ->hashPasswords ) {
214
+ $ this ->logger ->debug ("Request hashed password: " . sha1 ($ request ->getPassword ()));
215
+ } else {
216
+ $ this ->logger ->debug ("Request password: " . $ request ->getPassword ());
217
+ }
218
+ }
219
+ $ this ->logger ->debug ("Request body: \n" . $ request ->getContent () . "\n" );
220
+ }
221
+ }
222
+
223
+ private function logResponse (Response $ response )
224
+ {
202
225
if ($ this ->logResponses ) {
203
226
$ this ->logger ->debug ("Response: \n" . $ response ->getContent ());
204
227
}
205
-
206
- return $ response ;
207
228
}
208
229
209
230
/**
0 commit comments