You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.6 KiB
Python

#!/usr/bin/env python3
from configparser import ConfigParser
import socket
from re2oapi import Re2oAPIClient
from jinja2 import Environment, FileSystemLoader
import requests
import base64
import json
from subprocess import call, DEVNULL
import os
import sys
path =(os.path.dirname(os.path.abspath(__file__)))
config = ConfigParser()
config.read(path+'/config.ini')
api_hostname = config.get('Re2o', 'hostname')
api_password = config.get('Re2o', 'password')
api_username = config.get('Re2o', 'username')
if 'use_tls' in config['Re2o']:
use_tls = config.get('Re2o', 'use_tls')
else:
use_tls = False
api_client = Re2oAPIClient(api_hostname, api_username, api_password, use_tls=use_tls)
client_hostname = socket.gethostname().split('.', 1)[0]
def generate(api_client):
all_users = api_client.list("localemail/users")
# Création de l'environnement Jinja
env = Environment(loader=FileSystemLoader(path))
# On commence par les alias
template = env.get_template('templates/list_alias')
aliases_rendered = template.render(data=all_users)
fichier = open(path+'/generated/aliases','w', encoding='utf-8')
if os.path.isfile(path+'/aliases_local'): # if a local aliases file exist, add it's content at the beginning
local = open(path+'/aliases_local','r', encoding='utf-8')
for line in local.readlines():
fichier.write(line)
local.close()
fichier.write(aliases_rendered)
fichier.close()
# On enchaine avec les redirections
template = env.get_template('templates/list_virtual')
virtuals_rendered = template.render(data=all_users)
fichier = open(path+'/generated/virtual','w', encoding='utf-8')
if os.path.isfile(path+'/virtuals_local'): # if a local aliases file exist, add it's content at the beginning
local = open(path+'/virtuals_local','r', encoding='utf-8')
for line in local.readlines():
fichier.write(line)
local.close()
fichier.write(virtuals_rendered)
fichier.close()
call(["/usr/bin/newaliases"], stdout=DEVNULL) # Update the aliases config file
call(["/usr/sbin/postmap", path+"/generated/virtual"], stdout=DEVNULL) # Update the aliases config file
call(["/usr/sbin/postfix", "reload"]) # force the reloading now
for arg in sys.argv:
if arg=="--force":
generate(api_client)
for service in api_client.list("services/regen/"):
if service['hostname'] == client_hostname and \
service['service_name'] == 'mail-server' and \
service['need_regen']:
generate(api_client)
api_client.patch(service['api_url'], data={'need_regen': False})