#!/usr/bin/python3 # Libre en Communs's cotisation control program # Copyright (C) 2022 Libre en Communs # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import os, requests, json, datetime, shutil, quopri, subprocess from requests.auth import HTTPBasicAuth from requests.auth import HTTPDigestAuth VERSION="0.0.1" GESTION_SECRET_FILE="/home/tresorier/.secret/gestion_api_password" GIT_SECRET_FILE="/home/tresorier/.secret/git_api_password" WORKDIR="/srv/validation_cotisation.d" MODALITY_MAIL="mail_instructions.txt" MODALITY_MAIL_HEADERS="mail_instructions_headers.txt" RECEPT_MAIL="mail_recu.txt" RECEPT_MAIL_HEADERS="mail_recu_headers.txt" RECEPT_MAIL_ATTACHMENT="mail_recu_attachment.txt" SUMMARY_MAIL="mail_recap_header.txt" SENDMAIL_LOCATION = "/usr/sbin/sendmail" # sendmail location BUF=[] # gestion_read("SELECT * FROM services_users su \ # INNER JOIN membres m ON m.id = su.id_user \ # INNER JOIN services_fees sf ON sf.id = su.id_fee \ # LEFT JOIN acc_transactions_users tu ON tu.id_service_user = su.id \ # LEFT JOIN acc_transactions_lines l ON l.id_transaction = tu.id_transaction \ # WHERE m.id = 3 AND l.id_account = 481;") def gestion_get_secret(): with open(GESTION_SECRET_FILE) as sfile: return sfile.readline().replace("\n", "") def git_get_secret(): with open(GIT_SECRET_FILE) as sfile: return sfile.readline().replace("\n", "") def get_file_content(filename): with open(filename) as sfile: return sfile.readlines() def get_file_content_all(filename): with open(filename) as sfile: return sfile.read() def set_file_content(filename, lines): with open(filename, "x") as sfile: return sfile.writelines(lines) def gestion_read(req): response = requests.post('https://gestion.a-lec.org/api/sql/', auth = HTTPBasicAuth('api666', gestion_get_secret()), data = req) return response.json() def git_mail_ticket_create(req): response = requests.post('https://git.a-lec.org/api/v4/projects/46/issues', headers={'PRIVATE-TOKEN' : git_get_secret()}, data = req) return response.json() def git_xmpp_ticket_create(req): response = requests.post('https://git.a-lec.org/api/v4/projects/44/issues', headers={'PRIVATE-TOKEN' : git_get_secret()}, data = req) return response.json() def gestion_adduser(req): response = requests.put('https://gestion.a-lec.org/api/user/import', auth = HTTPBasicAuth('api666', gestion_get_secret()), data = req) return response.content def setup_workdir(): if not os.path.isdir(WORKDIR): os.mkdir(WORKDIR) if not "impayé" in os.listdir(WORKDIR): os.mkdir(WORKDIR+"/impayé") if not "expiré" in os.listdir(WORKDIR): os.mkdir(WORKDIR+"/expiré") if not "validé" in os.listdir(WORKDIR): os.mkdir(WORKDIR+"/validé") def sendmail(headers, data): msg = bytes(headers + "\n", 'utf-8') + quopri.encodestring(bytes(data, 'utf-8')) subprocess.run([SENDMAIL_LOCATION, "-t", "-oi"], input=msg) def sendmail_with_attachment(headers, data, attachment_header, attachment): msg = bytes(headers + "\n", 'utf-8') \ + quopri.encodestring(bytes(data, 'utf-8')) \ + bytes(attachment_header + "\n", 'utf-8') + bytes(attachment, 'base64') subprocess.run([SENDMAIL_LOCATION, "-t", "-oi"], input=msg) def main(): setup_workdir() # End of work # Launch summary mail mailheaders = get_file_content_all(SUMMARY_MAIL) + "\n" mailtext = "" is_sendable = False; for line in BUF: mailtext += line + "\n" is_sendable = True; print(line) if is_sendable: sendmail(mailheaders, mailtext) ## Bootstrap if __name__ == '__main__': main()