This repository has been archived on 2026-10-23. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
aktiv-web/aktiv2014/page-email-proxy.php

77 lines
2.5 KiB
PHP

<?php
/*
* Template Name: Email Proxy
*/
function return_json($result) {
die(json_encode($result));
}
$required_settings = ['EMAIL_API_USERNAME', 'EMAIL_API_PASSWORD', 'EMAIL_URL', 'MAILMAN_API_USERNAME',
'MAILMAN_API_PASSWORD', 'MAILMAN_URL'];
foreach ($required_settings as $setting) {
if( !defined($setting) ) {
return_json(array("error" => "Looks like you are missing $setting or more settings in wp-config.php"));
}
}
$nonce_action = 'inside-api';
if(!wp_verify_nonce($_GET['_wpnonce'], $nonce_action)) {
$result = array('error' => 'invalid nonce');
return_json($result);
}
/* Aliases */
$args = array(
'domain__name' => 'studentersamfundet.no',
);
if(isset($_GET['source'])) {
$args['source__iregex'] = '^'.$_GET['source'].'$';
}
if(isset($_GET['destination'])) {
$args['destination__iregex'] = '^'.$_GET['destination'].'$';
}
$ch = curl_init(EMAIL_URL."aliases/".'?'.http_build_query($args));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING ,"");
curl_setopt($ch, CURLOPT_USERPWD, EMAIL_API_USERNAME.":".EMAIL_API_PASSWORD);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8'));
$aliases = json_decode(curl_exec($ch), true);
/* Mailman */
$ch = curl_init(MAILMAN_URL."lists/".'?'.http_build_query($args));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING ,"");
curl_setopt($ch, CURLOPT_USERPWD, MAILMAN_API_USERNAME.":".MAILMAN_API_PASSWORD);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8'));
$mailman_lists = json_decode(curl_exec($ch), true);
// Note: $mailman_list is a list of objects like below
$result = $mailman_lists['lists'];
foreach ($aliases as $alias) {
if(array_key_exists($alias['source'], $result) && $result[$alias['source']]['type'] == 'aliases') {
$result[$alias['source']]['num'] += 1;
$result[$alias['source']]['destinations'][] = $alias['destination'];
} else {
// Add a new object with meta-data
$result[$alias['source']] = array(
'name' => $alias['source'],
'num' => 1,
'type' => 'aliases',
'admin_url' => 'https://lister.neuf.no/lists/?q='. $alias['source'],
'admin_type' => 'selfservice',
'destinations' => array($alias['source'])
);
}
}
sort($result);
return_json(array(
'meta' => array('num' => count($result)),
'lists' => $result
));