1: <?php
2: 3: 4: 5: 6: 7:
8:
9: require_once('HTTPAuthSession.php');
10: $session = new HTTPAuthSession();
11:
12: require_once('CalDAVRequest.php');
13: $request = new CalDAVRequest();
14:
15: if ( !isset($c->enable_autodiscover) || ! $c->enable_autodiscover ) {
16: $request->DoResponse( 404 );
17: exit(0);
18: }
19:
20: $ns_outlook_req_2006 = "http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006";
21: $ns_exchange_resp_2006 = "http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006";
22: $ns_outlook_resp_2006a = "http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a";
23:
24: function errorResponse( $code, $message, $debugdata = '' ) {
25: global $request, $ns_exchange_resp_2006;
26:
27: $error_time_id = time();
28: $error_time = gmdate('h:i:s', $error_time_id);
29: $response = <<<ERROR
30: <?xml version="1.0" encoding="utf-8" ?>
31: <Autodiscover xmlns="$ns_exchange_resp_2006">
32: <Response>
33: <Error Time="$error_time" Id="$error_time_id">
34: <ErrorCode>$code</ErrorCode>
35: <Message>$message</Message>
36: <DebugData>$debugdata</DebugData>
37: </Error>
38: </Response>
39: </Autodiscover>
40: ERROR;
41:
42: $request->DoResponse( $code, $response, 'text/xml; charset="utf-8"' );
43: exit(0);
44: }
45:
46:
47: if ( !isset($request->xml_tags) )
48: errorResponse( 406, translate("Body contains no XML data!") );
49:
50: $position = 0;
51: $xmltree = BuildXMLTree( $request->xml_tags, $position);
52: if ( !is_object($xmltree) )
53: errorResponse( 406, translate("REPORT body is not valid XML data!") );
54:
55: $user_email = $xmltree->GetPath(
56: '/'.$ns_outlook_req_2006.':Autodiscover'.
57: '/'.$ns_outlook_req_2006.':Request'.
58: '/'.$ns_outlook_req_2006.':EMailAddress');
59: if ( count($user_email) < 1 ) errorResponse(500,"User not found.");
60: $user_email = $user_email[0]->GetContent();
61:
62: $principal = new Principal();
63:
64: $reply = new XMLDocument( array( $ns_outlook_resp_2006a => "" ) );
65: $response = array(
66: new XMLElement( 'User',
67: array(
68: new XMLElement( 'DisplayName', $principal->$fullname ),
69: new XMLElement('AutoDiscoverSMTPAddress',$user_email),
70: )
71: )
72: );
73:
74: $response[] = new XMLElement('Account',
75: array(
76: new XMLElement( 'AccountType', 'email' ),
77: new XMLElement('Action','settings'),
78: new XMLElement('Protocol',
79: array(
80: new XMLElement('Type', 'DAV'),
81: new XMLElement('Server', $c->domain_name ),
82: new XMLElement('LoginName', $principal->username())
83: )
84: )
85: )
86: );
87:
88: $autodiscover = new XMLElement( "Autodiscover", $responses, $reply->GetXmlNsArray(), $ns_exchange_resp_2006 );
89:
90: $request->XMLResponse( 207, $autodiscover );
91: