added mozilla autoconfig file generation

This commit is contained in:
Paul Wilde 2021-08-10 21:14:47 +01:00
parent 7342c1ccda
commit a3bc938449
6 changed files with 101 additions and 20 deletions

View file

@ -19,9 +19,6 @@ class Loader {
break; break;
default: default:
$p = $this->get_page_name(); $p = $this->get_page_name();
if (substr($p,0,6) != "/admin") {
header('Content-Type: application/json'); // <-- header declaration
}
if(substr($p,0,1) == "/") { if(substr($p,0,1) == "/") {
Core::$CurrentPage = substr($p,1); Core::$CurrentPage = substr($p,1);
} else { } else {

View file

@ -1,5 +1,6 @@
<?php <?php
class Responder { class Responder {
private $Response;
public function show_response(){ public function show_response(){
// get the response detailed by the url requested // get the response detailed by the url requested
$response = $this->get_response(); $response = $this->get_response();
@ -13,8 +14,19 @@ class Responder {
} }
} }
private function send_response($response){ private function send_response($response){
switch ($response->content_type){
case "json":
header('Content-Type: application/json');
// Send json encoded response // Send json encoded response
echo json_encode($response, true); echo json_encode($response, true);
break;
case "xml":
header('Content-Type: application/xml');
include ($response->content);
break;
}
} }
private function get_response(){ private function get_response(){
$resp = false; $resp = false;
@ -25,8 +37,8 @@ class Responder {
case "get/all": case "get/all":
$resp = $this->all_urls(); $resp = $this->all_urls();
break; break;
case "get/select": case "mail/config-v1.1.xml":
$resp = $this->selection(); $resp = $this->moz_auto_config();
break; break;
case "none": case "none":
case "test": case "test":
@ -40,8 +52,6 @@ class Responder {
return $resp; return $resp;
} }
private function all_urls(){ private function all_urls(){
// This would be the default request from, say, an app.
$response = new Response(); $response = new Response();
// TODO:: Will work out a better message later // TODO:: Will work out a better message later
@ -49,23 +59,22 @@ class Responder {
// Cycle through each service and add to payload // Cycle through each service and add to payload
foreach (Core::$Config["Services"] as $key => $service){ foreach (Core::$Config["Services"] as $key => $service){
$response->payload[$key] = $service; $response->content[$key] = $service;
} }
return $response; return $response;
} }
private function selection(){ private function moz_auto_config(){
$response = new Response(); $response = new Response();
$response->message = "Not Implemented"; $response->content_type = "xml";
$uri = Core::full_url(); $response->content = "public/autoconfig.php";
$response->payload = parse_url($uri);
return $response; return $response;
} }
private function dummy_response(){ private function dummy_response(){
// Generate a dummy response for testing // Generate a dummy response for testing
$response = new Response(); $response = new Response();
$response->message = "OK, here's some scrumptious data! Enjoy!"; $response->message = "OK, here's some scrumptious data! Enjoy!";
$response->payload = array("data" => array("some_data" => "Ohhhhhmmmm nom nom nom nom nom nom", $response->content = array("data" => array("some_data" => "Ohhhhhmmmm nom nom nom nom nom nom",
"extra_data" => array("garnish" => "buuuuuuuuuuurp")), "extra_data" => array("garnish" => "buuuuuuuuuuurp")),
"more_data" => "yuuuuuum yum yum yum"); "more_data" => "yuuuuuum yum yum yum");
return $response; return $response;
@ -79,8 +88,9 @@ class Responder {
} }
class Response { class Response {
public $url; public $url;
public $content_type = "json";
public $message; public $message;
public $payload = array(); public $content = array();
public function __construct(){ public function __construct(){
// add requested page to response. I don't know why, but it could helpful for diagnostics at some point // add requested page to response. I don't know why, but it could helpful for diagnostics at some point
$this->url = Core::$CurrentPage; $this->url = Core::$CurrentPage;

39
src/public/autoconfig.php Normal file
View file

@ -0,0 +1,39 @@
<?php
$conf = Core::$Config["Services"];
$data = Core::get_get_data();
$email_provided = false;
if ($data["path"]) {
$query = parse_url($data["path"]);
$email = explode("=",$query["query"]);
if ($email[0] == "emailaddress") {
$email = $email[1];
$email_provided = true;
}
}
?>
<clientConfig version="1.1">
<emailProvider id="<?php echo Core::$Config["Domain"]?>">
<domain><?php echo Core::$Config["Domain"]?></domain>
<displayName><?php echo $email_provided ? $email : "%EMAILADDRESS%" ;?></displayName>
<?php if($conf["InMail"]){
$in = $conf["InMail"]; ?>
<incomingServer type="<?php echo $in["Type"];?>">
<hostname><?php echo $in["Server"];?></hostname>
<port><?php echo $in["Port"];?></port>
<socketType><?php echo $in["SocketType"];?></socketType>
<username><?php echo $email_provided ? $email : "%EMAILADDRESS%";?></username>
<authentication><?php echo $in["Authentication"];?></authentication>
</incomingServer>
<?php } ?>
<?php if($conf["InMail"]){
$out = $conf["InMail"]; ?>
<outgoingServer type="<?php echo $out["Type"];?>">
<hostname><?php echo $out["Server"];?></hostname>
<port><?php echo $out["Port"];?></port>
<socketType><?php echo $out["SocketType"];?></socketType>
<username><?php echo $email_provided ? $email : "%EMAILADDRESS%";?></username>
<authentication><?php echo $out["Authentication"];?></authentication>
</outgoingServer>
<?php } ?>
</emailProvider>
</clientConfig>

View file

@ -0,0 +1,30 @@
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<Protocol>
<Type>IMAP</Type>
<Server>server.hostname.com</Server>
<Port>993</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $matches[1]; ?></LoginName>
<SPA>off</SPA>
<SSL>on</SSL>
<AuthRequired>on</AuthRequired>
</Protocol>
<Protocol>
<Type>SMTP</Type>
<Server>server.hostname.com</Server>
<Port>587</Port>
<DomainRequired>off</DomainRequired>
<LoginName><?php echo $matches[1]; ?></LoginName>
<SPA>off</SPA>
<Encryption>TLS</Encryption>
<AuthRequired>on</AuthRequired>
<UsePOPAuth>off</UsePOPAuth>
<SMTPLast>off</SMTPLast>
</Protocol>
</Account>
</Response>
</Autodiscover>

View file

@ -1,6 +1,9 @@
; Sample config.ini file. ; Sample config.ini file.
; Copy this file to "config/config.ini" and adjust the settings to your requirements ; Copy this file to "config/config.ini" and adjust the settings to your requirements
; Set the base domain for use with this service
Domain = example.com
; Admin User configuration ; Admin User configuration
; not in use yet ; not in use yet
;[AdminUser] ;[AdminUser]

View file

@ -1,14 +1,16 @@
[InMail] [InMail]
Type = "IMAP"
Server = "imap.example.com" Server = "imap.example.com"
Protocol = "IMAP"
Port = 993 Port = 993
TLS = true SocketType = SSL
Authentication = password-cleartext
[OutMail] [OutMail]
Type = "SMTP"
Server = "smtp.example.com" Server = "smtp.example.com"
Protocol = "SMTP"
Port = 465 Port = 465
TLS = true SocketType = SSL
Authentication = password-cleartext
[CalDav] [CalDav]
Server = "https://caldav.example.com/etc/etc/" Server = "https://caldav.example.com/etc/etc/"