diff --git a/handshakes-dl.py b/handshakes-dl.py
new file mode 100644
index 0000000..71b6e0a
--- /dev/null
+++ b/handshakes-dl.py
@@ -0,0 +1,69 @@
+import logging
+import json
+import os
+import glob
+
+import pwnagotchi
+import pwnagotchi.plugins as plugins
+
+from flask import abort
+from flask import send_from_directory
+from flask import render_template_string
+
+TEMPLATE = """
+{% extends "base.html" %}
+{% set active_page = "handshakes" %}
+
+{% block title %}
+ {{ title }}
+{% endblock %}
+
+{% block content %}
+
+ {% for handshake in handshakes %}
+ -
+ {{handshake}}
+
+ {% endfor %}
+
+{% endblock %}
+"""
+
+class HandshakesDL(plugins.Plugin):
+ __author__ = 'me@sayakb.com'
+ __version__ = '0.1.0'
+ __license__ = 'GPL3'
+ __description__ = 'Download handshake captures from web-ui.'
+
+ def __init__(self):
+ self.ready = False
+
+ def on_loaded(self):
+ logging.info("[HandshakesDL] plugin loaded")
+
+ def on_ready(self, agent):
+ self.config = agent.config()
+ self.ready = True
+
+ def on_internet_available(self, agent):
+ self.config = agent.config()
+ self.ready = True
+
+ def on_webhook(self, path, request):
+ if not self.ready:
+ return "Plugin not ready"
+
+ if path == "/" or not path:
+ handshakes = glob.glob(os.path.join(self.config['bettercap']['handshakes'], "*.pcap"))
+ handshakes = [os.path.basename(path)[:-5] for path in handshakes]
+ return render_template_string(TEMPLATE,
+ title="Handshakes | " + pwnagotchi.name(),
+ handshakes=handshakes)
+
+ else:
+ dir = self.config['bettercap']['handshakes']
+ try:
+ logging.info(f"[HandshakesDL] serving {dir}/{path}.pcap")
+ return send_from_directory(directory=dir, filename=path+'.pcap', as_attachment=True)
+ except FileNotFoundError:
+ abort(404)
diff --git a/handshakes-dl.yml b/handshakes-dl.yml
new file mode 100644
index 0000000..d21403e
--- /dev/null
+++ b/handshakes-dl.yml
@@ -0,0 +1,2 @@
+handshakes-dl:
+ enabled: false