aboutsummaryrefslogtreecommitdiff
path: root/session.py
diff options
context:
space:
mode:
Diffstat (limited to 'session.py')
-rw-r--r--session.py73
1 files changed, 44 insertions, 29 deletions
diff --git a/session.py b/session.py
index fe67fda..f977669 100644
--- a/session.py
+++ b/session.py
@@ -29,7 +29,7 @@ import secrets
import signal
import string
import subprocess
-from typing import Dict, Union
+from typing import Dict, Union, Any
import port_for
import psutil
@@ -137,10 +137,8 @@ class Session:
REGISTER_URL,
json={
"port": self.ws_port,
- "password": self.password,
"pid": self.vnc_pid,
"trigger_port": self.trigger_port,
- "trigger_token": self.trigger_token,
},
)
except requests.exceptions.ConnectionError:
@@ -157,29 +155,40 @@ class Session:
self.session_id = self.meta["session_id"]
self.web_url = self.meta["url"]
self.api_token = self.meta["token"]
- self.pin = self.meta["pin"]
else:
logging.info(f"The session has pretended that he had created a session.")
self.meta = {}
self.session_id = int(random_digits(10))
- self.web_url = "testhostname:" + random_digits(5) + "/RWA.Support/test/"
+ self.web_url = "http://example.com:" + random_digits(5) + "/app/rwasupport/test/"
self.api_token = secrets.token_urlsafe(10)
- self.pin = int(random_digits(5))
+ self.pin = int(random_digits(4))
- def trigger(self):
+ def trigger(self, data: dict, method: str = "trigger") -> Union[dict, bool]:
"""Event triggered by Django."""
- self.pull()
+ if method == "trigger" and data.get("token", "") == self.trigger_token:
+ self.pull()
+ return True
+ elif method == "authenticate" and data.get("pin", "") == self.pin:
+ return {
+ "password": self.password,
+ "trigger_token": self.trigger_token,
+ }
+
+ return False
def pull(self):
"""Update status: Get status from Django."""
if not self.mockup_session:
- r = requests.get(
- STATUS_URL, params={"id": self.session_id}, headers=self._api_headers
- )
+ try:
+ r = requests.get(
+ STATUS_URL, params={"id": self.session_id}, headers=self._api_headers
+ )
- logging.info(
- f"The session has received its status from RWA.Support.WebApp with status code {r.status_code} and response {r.content.decode()}."
- )
+ logging.info(
+ f"The session has received its status from RWA.Support.WebApp with status code {r.status_code} and response {r.content.decode()}."
+ )
+ except requests.ConnectionError:
+ pass
if r.status_code in (401, 402, 403, 404, 405):
# Session doesn't exist anymore, so stop it local
@@ -208,14 +217,17 @@ class Session:
def _mark_job_as_done(self, job):
"""Mark a job as done (in this service and on the server)."""
self.done_jobs.append(job["job_id"])
- r = requests.post(
- MARK_JOB_AS_DONE_URL,
- params={"id": job["job_id"]},
- headers=self._api_headers,
- )
- logging.info(
- f"The session has marked the job {job} as done in RWA.Support.WebApp with status code {r.status_code} and response {r.content.decode()}."
- )
+ try:
+ r = requests.post(
+ MARK_JOB_AS_DONE_URL,
+ params={"id": job["job_id"]},
+ headers=self._api_headers,
+ )
+ logging.info(
+ f"The session has marked the job {job} as done in RWA.Support.WebApp with status code {r.status_code} and response {r.content.decode()}."
+ )
+ except requests.ConnectionError:
+ pass
def push(self):
"""Update status: Push status to Django."""
@@ -251,12 +263,15 @@ class Session:
self.push()
if not triggered:
- r = requests.post(
- STOP_URL, params={"id": self.session_id}, headers=self._api_headers
- )
- logging.info(
- f"The stop action has been registered in RWA.Support.WebApp with status code {r.status_code} and response {r.content.decode()}."
- )
+ try:
+ r = requests.post(
+ STOP_URL, params={"id": self.session_id}, headers=self._api_headers
+ )
+ logging.info(
+ f"The stop action has been registered in RWA.Support.WebApp with status code {r.status_code} and response {r.content.decode()}."
+ )
+ except requests.ConnectionError:
+ pass
self.status_text = "stopped"
@@ -279,7 +294,7 @@ class Session:
@property
def client_meta(self) -> Dict[str, Union[str, int]]:
- return {"id": self.pid, "url": self.web_url, "pin": self.pin}
+ return {"id": self.pid, "session_id": self.session_id, "url": self.web_url, "pin": self.pin}
@property
def status(self) -> Dict[str, Union[str, int]]: