Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions lib/cuckoo/core/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,19 +265,22 @@ def drop(self):

def create_guac_session(self, token, task_id, vm_label, guest_ip):
"""Create a new guac session for a task."""
session = self.session()
try:
with self.session.begin():
guac = GuacSession(token=str(token), task_id=task_id, vm_label=vm_label, guest_ip=guest_ip)
self.session.add(guac)
guac = GuacSession(token=str(token), task_id=task_id, vm_label=vm_label, guest_ip=guest_ip)
session.add(guac)
session.commit()
return guac
except Exception:
session.rollback()
raise

def get_guac_session(self, token):
"""Look up a guac session by token. Returns dict or None."""
from lib.cuckoo.core.data.guac_session import GuacSession
session = self.session()
try:
row = self.session.query(GuacSession).filter_by(token=str(token)).first()
row = session.query(GuacSession).filter_by(token=str(token)).first()
if row:
return {"task_id": row.task_id, "vm_label": row.vm_label, "guest_ip": getattr(row, "guest_ip", None)}
return None
Expand All @@ -287,19 +290,23 @@ def get_guac_session(self, token):
def delete_guac_session(self, token):
"""Delete a guac session token."""
from lib.cuckoo.core.data.guac_session import GuacSession
session = self.session()
try:
with self.session.begin():
self.session.query(GuacSession).filter_by(token=str(token)).delete()
session.query(GuacSession).filter_by(token=str(token)).delete()
session.commit()
except Exception:
session.rollback()
raise

def delete_guac_sessions_for_task(self, task_id):
"""Delete all guac sessions for a task."""
from lib.cuckoo.core.data.guac_session import GuacSession
session = self.session()
try:
with self.session.begin():
self.session.query(GuacSession).filter_by(task_id=task_id).delete()
session.query(GuacSession).filter_by(task_id=task_id).delete()
session.commit()
except Exception:
session.rollback()
raise

_DATABASE: Optional[_Database] = None
Expand Down
4 changes: 2 additions & 2 deletions web/submission/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -917,7 +917,7 @@ def status(request, task_id):
if w_label:
vm_label, guest_ip = w_label, (w_ip or "")
if vm_label:
session_id = uuid3(NAMESPACE_DNS, task_id).hex[:16]
session_id = uuid3(NAMESPACE_DNS, str(task_id)).hex[:16]
session_data = urlsafe_b64encode(f"{session_id}|{vm_label}|{guest_ip or ''}".encode("utf8")).decode("utf8")
response["session_data"] = session_data

Expand Down Expand Up @@ -954,7 +954,7 @@ def remote_session(request, task_id):
if not vm_label:
return render(request, "error.html", {"error": "Machine is not set for this task."})
machine_status = True
session_id = uuid3(NAMESPACE_DNS, task_id).hex[:16]
session_id = uuid3(NAMESPACE_DNS, str(task_id)).hex[:16]
session_data = urlsafe_b64encode(f"{session_id}|{vm_label}|{guest_ip or ''}".encode("utf8")).decode("utf8")

return render(
Expand Down
Loading