Fully tested

This commit is contained in:
nemunaire 2023-04-13 06:56:07 +02:00
parent 3b905bd28e
commit e9ecfccdb3
5 changed files with 44 additions and 28 deletions

View File

@ -65,7 +65,7 @@ class Admin:
return ret return ret
def authuser_udpate(self, Id, au): def authuser_update(self, Id, au):
r = self.session.put( r = self.session.put(
"http+unix://" + self.socket_path + "/api/auth/" + quote_plus(Id), "http+unix://" + self.socket_path + "/api/auth/" + quote_plus(Id),
data=json.dumps({ data=json.dumps({

View File

@ -1,3 +1,6 @@
import json
from urllib.parse import quote
class AuthUser: class AuthUser:
def __init__(self, _session, Id, Email, EmailVerification, Password, CreatedAt, LastLoggedIn, AllowCommercials): def __init__(self, _session, Id, Email, EmailVerification, Password, CreatedAt, LastLoggedIn, AllowCommercials):
@ -14,9 +17,9 @@ class AuthUser:
def Delete(self): def Delete(self):
self._session.authuser_delete(self.Id) self._session.authuser_delete(self.Id)
def ResetPassword(self, Id, NewPassword): def ResetPassword(self, NewPassword):
r = self.session.post( r = self._session.session.post(
"http+unix://" + self.socket_path + "/api/auth/" + quote_plus(Id) + "/reset_password", "http+unix://" + self._session.socket_path + "/api/auth/" + quote(self.Id) + "/reset_password",
data=json.dumps({ data=json.dumps({
"password": NewPassword, "password": NewPassword,
}) })

View File

@ -1,4 +1,5 @@
import json import json
from urllib.parse import quote
from .error import HappyError from .error import HappyError
from .domain import Domain from .domain import Domain
@ -15,14 +16,13 @@ class Provider:
self.args = kwargs self.args = kwargs
def _dumps(self): def _dumps(self):
d = { return json.dumps({
"_srctype": self._srctype, "_srctype": self._srctype,
"_id": self._id, "_id": self._id,
"_ownerid": self._ownerid, "_ownerid": self._ownerid,
"_comment": self._comment, "_comment": self._comment,
} "Provider": self.args,
d.update(self.kwargs) })
return json.dumps(d)
def domain_add(self, dn): def domain_add(self, dn):
r = self._session.session.post( r = self._session.session.post(
@ -36,11 +36,11 @@ class Provider:
if r.status_code != 200: if r.status_code != 200:
raise HappyError(r.status_code, **r.json()) raise HappyError(r.status_code, **r.json())
return Domain(self, **r.json()) return Domain(self._session, **r.json())
def delete(self): def delete(self):
r = self._session.session.delete( r = self._session.session.delete(
self.baseurl + "/api/providers/" + quote(self._id), self._session.baseurl + "/api/providers/" + quote(self._id),
) )
if r.status_code > 300: if r.status_code > 300:
@ -50,8 +50,8 @@ class Provider:
def update(self): def update(self):
r = self._session.session.put( r = self._session.session.put(
self.baseurl + "/api/providers/" + quote(self._id), self._session.baseurl + "/api/providers/" + quote(self._id),
date=self._dumps(), data=self._dumps(),
) )
if r.status_code > 300: if r.status_code > 300:

View File

@ -6,6 +6,8 @@ from .error import HappyError
class ServiceMeta: class ServiceMeta:
def __init__(self, _session, _svctype, _domain, _ttl, _id=None, _ownerid=None, _comment="", _mycomment="", _aliases=[], _tmp_hint_nb=0): def __init__(self, _session, _svctype, _domain, _ttl, _id=None, _ownerid=None, _comment="", _mycomment="", _aliases=[], _tmp_hint_nb=0):
self._session = _session
self._svctype = _svctype self._svctype = _svctype
self._domain = _domain self._domain = _domain
self._ttl = _ttl self._ttl = _ttl
@ -42,22 +44,25 @@ class HService(ServiceMeta):
return json.dumps(self._flat()) return json.dumps(self._flat())
def _flat(self): def _flat(self):
return { d = {
"_svctype": self._svctype, "_svctype": self._svctype,
"_domain": self._domain, "_domain": self._domain,
"_ttl": self._ttl, "_ttl": self._ttl,
"_id": self._id,
"_ownerid": self._ownerid,
"_comment": self._comment, "_comment": self._comment,
"_mycomment": self._mycomment, "_mycomment": self._mycomment,
"_aliases": self._aliases, "_aliases": self._aliases,
"_tmp_hint_nb": self._tmp_hint_nb, "_tmp_hint_nb": self._tmp_hint_nb,
"Service": self.service, "Service": self.service,
} }
if self._id is not None:
d["_id"] = self._id
if self._ownerid is not None:
d["_ownerid"] = self._ownerid
return d
def delete(self): def delete(self):
r = self._session.session.delete( r = self._session.session.delete(
self.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self._zoneid) + "/" + quote(self._domain) + "/services/" + quote(self._id), self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self._zoneid) + "/" + quote(self._domain) + "/services/" + quote(self._id),
) )
if r.status_code > 300: if r.status_code > 300:

View File

@ -33,23 +33,20 @@ class ZoneMeta:
class Zone(ZoneMeta): class Zone(ZoneMeta):
def __init__(self, _session, _domainid, services, **kwargs): def __init__(self, _session, _domainid, **kwargs):
self._domainid = _domainid
super(Zone, self).__init__(_session, **kwargs) super(Zone, self).__init__(_session, **kwargs)
self._domainid = _domainid
self._load(services)
def _load(self, services, **kwargs): def _load(self, services, **kwargs):
if "id" in kwargs: super(Zone, self)._load(**kwargs)
super(Zone, self).__init__(**kwargs)
self.services = {} self.services = {}
if services is not None: if services is not None:
for k in services: for k in services:
self.services[k] = [] self.services[k] = []
for s in services[k]: for s in services[k]:
self.services[k].append(HService(_session, self._domainid, self.id, **s)) self.services[k].append(HService(self._session, self._domainid, self.id, **s))
def _svc_dumps(self): def _svc_dumps(self):
services = {} services = {}
@ -62,9 +59,7 @@ class Zone(ZoneMeta):
return services return services
def _dumps(self): def _dumps(self):
return json.dumps({ d = json.dumps({
"id": self.id,
"id_author": self.id_author,
"default_ttl": self.default_ttl, "default_ttl": self.default_ttl,
"last_modified": self.last_modified, "last_modified": self.last_modified,
"commit_message": self.commit_message, "commit_message": self.commit_message,
@ -72,6 +67,11 @@ class Zone(ZoneMeta):
"published": self.published, "published": self.published,
"services": self._svc_dumps(), "services": self._svc_dumps(),
}) })
if self.id is not None:
d["id"] = self.id
if self.id_author is not None:
d["id_author"] = self.id_author
return d
def add_zone_service(self, subdomain, svctype, svc): def add_zone_service(self, subdomain, svctype, svc):
r = self._session.session.post( r = self._session.session.post(
@ -97,11 +97,19 @@ class Zone(ZoneMeta):
return r.json() return r.json()
def apply_changes(self): def apply_changes(self):
rdiff = self._session.session.post(
self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/diff_zones/%40/" + quote(self.id),
)
if rdiff.status_code > 300:
raise HappyError(rdiff.status_code, **rdiff.json())
r = self._session.session.post( r = self._session.session.post(
self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self.id) + "/apply_changes", self._session.baseurl + "/api/domains/" + quote(self._domainid) + "/zone/" + quote(self.id) + "/apply_changes",
data=rdiff.text
) )
if r.status_code > 300: if r.status_code > 300:
raise HappyError(r.status_code, **r.json()) raise HappyError(r.status_code, **r.json())
return r.json() return ZoneMeta(self._session, **r.json())