Skip to content

Commit c64300b

Browse files
Create directadmin_api.py
1 parent 2aa7d9b commit c64300b

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

app/directadmin_api.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import requests
2+
import base64
3+
from urllib.parse import urlencode
4+
5+
class DirectAdminAPI:
6+
def __init__(self, server, username, password):
7+
self.server = server.rstrip('/')
8+
self.username = username
9+
self.password = password
10+
self.session = requests.Session()
11+
12+
def _make_request(self, cmd, method='GET', data=None):
13+
url = f"{self.server}/CMD_{cmd}"
14+
auth = base64.b64encode(f"{self.username}:{self.password}".encode()).decode()
15+
headers = {
16+
'Authorization': f'Basic {auth}',
17+
'Content-Type': 'application/x-www-form-urlencoded'
18+
}
19+
20+
if method == 'GET':
21+
response = self.session.get(url, headers=headers)
22+
else:
23+
response = self.session.post(url, headers=headers, data=urlencode(data) if data else None)
24+
25+
return response
26+
27+
def get_email_accounts(self, domain):
28+
response = self._make_request(f'API_POP?domain={domain}')
29+
if response.status_code == 200:
30+
accounts = []
31+
for line in response.text.strip().split('\n'):
32+
if '=' in line:
33+
email = line.split('=')[0]
34+
if email != self.username: # Exclude API username
35+
accounts.append(f"{email}@{domain}")
36+
return accounts
37+
return []
38+
39+
def get_forwarders(self, domain):
40+
response = self._make_request(f'API_EMAIL_FORWARDERS?domain={domain}')
41+
if response.status_code == 200:
42+
forwarders = []
43+
for line in response.text.strip().split('\n'):
44+
if '=' in line:
45+
alias, destinations = line.split('=', 1)
46+
forwarders.append({
47+
'alias': alias,
48+
'destinations': destinations.split(',')
49+
})
50+
return forwarders
51+
return []
52+
53+
def create_forwarder(self, domain, alias, destination):
54+
data = {
55+
'domain': domain,
56+
'user': alias,
57+
'email': destination,
58+
'action': 'create'
59+
}
60+
response = self._make_request('API_EMAIL_FORWARDERS', method='POST', data=data)
61+
return response.status_code == 200
62+
63+
def delete_forwarder(self, domain, alias):
64+
data = {
65+
'domain': domain,
66+
'select0': alias,
67+
'action': 'delete'
68+
}
69+
response = self._make_request('API_EMAIL_FORWARDERS', method='POST', data=data)
70+
return response.status_code == 200

0 commit comments

Comments
 (0)