Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8912ec98 authored by Felix Ableitner's avatar Felix Ableitner
Browse files

Fix username taken check, return json

parent b6cee7fe
Loading
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ from requests.auth import HTTPBasicAuth
import os
import logging
import sys
import json

ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
@@ -42,7 +43,8 @@ class MyHandler(BaseHTTPRequestHandler):
        target_username = target_email.split('@')[0]
        with open('forbidden_usernames') as f:
            if target_username in f.read().splitlines():
                self.respond(403, 'this username is not allowed')
                data = json.dumps({'success': False, 'message': 'username_forbidden'})
                self.respond(403, data)
                return
        # create account via postfixadmin ssh
        with paramiko.SSHClient() as ssh:
@@ -50,8 +52,9 @@ class MyHandler(BaseHTTPRequestHandler):
            ssh.connect(hostname='postfixadmin', username='pfexec', password=os.environ['POSTFIXADMIN_SSH_PASSWORD'])

            stdin, stdout, stderr = ssh.exec_command(f'/postfixadmin/scripts/postfixadmin-cli mailbox view "{target_email}"')
            if b"error: the email is not valid!" in stderr.read().lower():
                self.respond(403, 'this username is already used')
            if b"error: the email is not valid!" not in stderr.read().lower():
                data = json.dumps({'success': True, 'message': 'username_taken'})
                self.respond(403, data)
                return

            ssh.exec_command(f'/postfixadmin/scripts/postfixadmin-cli mailbox add "{target_email}" ' +
@@ -75,9 +78,10 @@ class MyHandler(BaseHTTPRequestHandler):
        print(f'status code: {r.status_code}')
        # TODO: check status code

        self.respond(200, "account created")
        self.respond(200, json.dumps({'success', True}))

    def respond(self, status: int, message: str):
        print(f'sending response status {status}, message {message}')
        self.send_response(status)
        self.end_headers()
        self.wfile.write(message.encode())