mirror of
https://github.com/jayofelony/pwnagotchi.git
synced 2025-07-01 18:37:27 -04:00
Version 2.1.1
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
This commit is contained in:
39
.idea/inspectionProfiles/Project_Default.xml
generated
39
.idea/inspectionProfiles/Project_Default.xml
generated
@ -4,23 +4,34 @@
|
|||||||
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
<option name="ignoredPackages">
|
<option name="ignoredPackages">
|
||||||
<value>
|
<value>
|
||||||
<list size="8">
|
<list size="24">
|
||||||
<item index="0" class="java.lang.String" itemvalue="spidev" />
|
<item index="0" class="java.lang.String" itemvalue="tweepy" />
|
||||||
<item index="1" class="java.lang.String" itemvalue="tensorflow" />
|
<item index="1" class="java.lang.String" itemvalue="PyYAML" />
|
||||||
<item index="2" class="java.lang.String" itemvalue="inky" />
|
<item index="2" class="java.lang.String" itemvalue="python-dateutil" />
|
||||||
<item index="3" class="java.lang.String" itemvalue="dbus-python" />
|
<item index="3" class="java.lang.String" itemvalue="file-read-backwards" />
|
||||||
<item index="4" class="java.lang.String" itemvalue="pycryptodome" />
|
<item index="4" class="java.lang.String" itemvalue="requests" />
|
||||||
<item index="5" class="java.lang.String" itemvalue="numpy" />
|
<item index="5" class="java.lang.String" itemvalue="gast" />
|
||||||
<item index="6" class="java.lang.String" itemvalue="RPi.GPIO" />
|
<item index="6" class="java.lang.String" itemvalue="torchvision" />
|
||||||
<item index="7" class="java.lang.String" itemvalue="markupsafe" />
|
<item index="7" class="java.lang.String" itemvalue="shimmy" />
|
||||||
|
<item index="8" class="java.lang.String" itemvalue="flask-cors" />
|
||||||
|
<item index="9" class="java.lang.String" itemvalue="scapy" />
|
||||||
|
<item index="10" class="java.lang.String" itemvalue="RPi.GPIO" />
|
||||||
|
<item index="11" class="java.lang.String" itemvalue="websockets" />
|
||||||
|
<item index="12" class="java.lang.String" itemvalue="inky" />
|
||||||
|
<item index="13" class="java.lang.String" itemvalue="smbus2" />
|
||||||
|
<item index="14" class="java.lang.String" itemvalue="stable-baselines3" />
|
||||||
|
<item index="15" class="java.lang.String" itemvalue="torch" />
|
||||||
|
<item index="16" class="java.lang.String" itemvalue="toml" />
|
||||||
|
<item index="17" class="java.lang.String" itemvalue="spidev" />
|
||||||
|
<item index="18" class="java.lang.String" itemvalue="flask-wtf" />
|
||||||
|
<item index="19" class="java.lang.String" itemvalue="gym" />
|
||||||
|
<item index="20" class="java.lang.String" itemvalue="dbus-python" />
|
||||||
|
<item index="21" class="java.lang.String" itemvalue="pycryptodome" />
|
||||||
|
<item index="22" class="java.lang.String" itemvalue="flask" />
|
||||||
|
<item index="23" class="java.lang.String" itemvalue="Pillow" />
|
||||||
</list>
|
</list>
|
||||||
</value>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
</inspection_tool>
|
</inspection_tool>
|
||||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
|
||||||
<option name="processCode" value="true" />
|
|
||||||
<option name="processLiterals" value="true" />
|
|
||||||
<option name="processComments" value="true" />
|
|
||||||
</inspection_tool>
|
|
||||||
</profile>
|
</profile>
|
||||||
</component>
|
</component>
|
6
Makefile
6
Makefile
@ -38,10 +38,10 @@ $(PWN_RELEASE).img: | $(PACKER)
|
|||||||
|
|
||||||
# If the packer or ansible files are updated, rebuild the image.
|
# If the packer or ansible files are updated, rebuild the image.
|
||||||
$(PWN_RELEASE).img: $(SDIST) builder/pwnagotchi.json builder/pwnagotchi.yml $(shell find builder/data -type f)
|
$(PWN_RELEASE).img: $(SDIST) builder/pwnagotchi.json builder/pwnagotchi.yml $(shell find builder/data -type f)
|
||||||
# $(PACKER) plugins install github.com/mkaczanowski/builder-arm
|
$(PACKER) plugins install github.com/solo-io/arm-image
|
||||||
cd builder/packer-builder-arm/ && sudo $(UNSHARE) $(PACKER) build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" ../pwnagotchi.json
|
cd builder && sudo $(UNSHARE) $(PACKER) build -var "pwn_hostname=$(PWN_HOSTNAME)" -var "pwn_version=$(PWN_VERSION)" pwnagotchi.json
|
||||||
sudo chown -R $$USER:$$USER ../builder/output-pwnagotchi
|
sudo chown -R $$USER:$$USER ../builder/output-pwnagotchi
|
||||||
mv ../builder/output-pwnagotchi/image $@
|
mv builder/output-pwnagotchi/image $@
|
||||||
|
|
||||||
# If any of these files are updated, rebuild the checksums.
|
# If any of these files are updated, rebuild the checksums.
|
||||||
$(PWN_RELEASE).sha256: $(PWN_RELEASE).img
|
$(PWN_RELEASE).sha256: $(PWN_RELEASE).img
|
||||||
|
@ -2,108 +2,90 @@
|
|||||||
"builders": [
|
"builders": [
|
||||||
{
|
{
|
||||||
"name": "pwnagotchi",
|
"name": "pwnagotchi",
|
||||||
"type": "arm",
|
"type": "arm-image",
|
||||||
"file_urls": "https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-05-03/2023-05-03-raspios-bullseye-arm64-lite.img.xz",
|
"iso_urls": "https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-05-03/2023-05-03-raspios-bullseye-arm64-lite.img.xz",
|
||||||
"file_checksum_url": "https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-05-03/2023-05-03-raspios-bullseye-arm64-lite.img.xz.sha256",
|
"iso_checksum": "file:https://downloads.raspberrypi.org/raspios_lite_arm64/images/raspios_lite_arm64-2023-05-03/2023-05-03-raspios-bullseye-arm64-lite.img.xz.sha256",
|
||||||
"file_checksum_type": "sha256",
|
"target_image_size": 9368709120,
|
||||||
"file_target_extension": "xz",
|
"qemu_binary": "qemu-aarch64-static"
|
||||||
"file_unarchive_cmd": ["xz", "--decompress", "$ARCHIVE_PATH"],
|
|
||||||
"image_path": "pwnagotchi.img.tar.gz",
|
|
||||||
"image_size": "10G",
|
|
||||||
"image_type": "dos",
|
|
||||||
"qemu_binary_destination_path": "/usr/bin/qemu-aarch64-static",
|
|
||||||
"qemu_binary_source_path": "/usr/bin/qemu-aarch64-static",
|
|
||||||
"image_build_method": "resize",
|
|
||||||
"image_partitions": [
|
|
||||||
{
|
|
||||||
"name": "boot",
|
|
||||||
"type": "c",
|
|
||||||
"start_sector": "2048",
|
|
||||||
"filesystem": "fat",
|
|
||||||
"size": "256M",
|
|
||||||
"mountpoint": "/boot/firmware"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "root",
|
|
||||||
"type": "83",
|
|
||||||
"start_sector": "526336",
|
|
||||||
"filesystem": "ext4",
|
|
||||||
"size": "0",
|
|
||||||
"mountpoint": "/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"image_chroot_env": ["PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"]
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"provisioners": [
|
"provisioners": [
|
||||||
|
{
|
||||||
|
"type": "shell",
|
||||||
|
"inline": [
|
||||||
|
"uname -a",
|
||||||
|
"dpkg-architecture",
|
||||||
|
"mkdir -p /usr/local/src/pwnagotchi"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/pwnlib",
|
"source": "../builder/data/usr/bin/pwnlib",
|
||||||
"destination": "/usr/bin/pwnlib"
|
"destination": "/usr/bin/pwnlib"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/bettercap-launcher",
|
"source": "../builder/data/usr/bin/bettercap-launcher",
|
||||||
"destination": "/usr/bin/bettercap-launcher"
|
"destination": "/usr/bin/bettercap-launcher"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/pwnagotchi-launcher",
|
"source": "../builder/data/usr/bin/pwnagotchi-launcher",
|
||||||
"destination": "/usr/bin/pwnagotchi-launcher"
|
"destination": "/usr/bin/pwnagotchi-launcher"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/monstop",
|
"source": "../builder/data/usr/bin/monstop",
|
||||||
"destination": "/usr/bin/monstop"
|
"destination": "/usr/bin/monstop"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/monstart",
|
"source": "../builder/data/usr/bin/monstart",
|
||||||
"destination": "/usr/bin/monstart"
|
"destination": "/usr/bin/monstart"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/hdmion",
|
"source": "../builder/data/usr/bin/hdmion",
|
||||||
"destination": "/usr/bin/hdmion"
|
"destination": "/usr/bin/hdmion"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/usr/bin/hdmioff",
|
"source": "../builder/data/usr/bin/hdmioff",
|
||||||
"destination": "/usr/bin/hdmioff"
|
"destination": "/usr/bin/hdmioff"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/network/interfaces.d/lo-cfg",
|
"source": "../builder/data/etc/network/interfaces.d/lo-cfg",
|
||||||
"destination": "/etc/network/interfaces.d/lo-cfg"
|
"destination": "/etc/network/interfaces.d/lo-cfg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/network/interfaces.d/wlan0-cfg",
|
"source": "../builder/data/etc/network/interfaces.d/wlan0-cfg",
|
||||||
"destination": "/etc/network/interfaces.d/wlan0-cfg"
|
"destination": "/etc/network/interfaces.d/wlan0-cfg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/network/interfaces.d/usb0-cfg",
|
"source": "../builder/data/etc/network/interfaces.d/usb0-cfg",
|
||||||
"destination": "/etc/network/interfaces.d/usb0-cfg"
|
"destination": "/etc/network/interfaces.d/usb0-cfg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/network/interfaces.d/eth0-cfg",
|
"source": "../builder/data/etc/network/interfaces.d/eth0-cfg",
|
||||||
"destination": "/etc/network/interfaces.d/eth0-cfg"
|
"destination": "/etc/network/interfaces.d/eth0-cfg"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/systemd/system/pwngrid-peer.service",
|
"source": "../builder/data/etc/systemd/system/pwngrid-peer.service",
|
||||||
"destination": "/etc/systemd/system/pwngrid-peer.service"
|
"destination": "/etc/systemd/system/pwngrid-peer.service"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/systemd/system/pwnagotchi.service",
|
"source": "../builder/data/etc/systemd/system/pwnagotchi.service",
|
||||||
"destination": "/etc/systemd/system/pwnagotchi.service"
|
"destination": "/etc/systemd/system/pwnagotchi.service"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "../../builder/data/etc/systemd/system/bettercap.service",
|
"source": "../builder/data/etc/systemd/system/bettercap.service",
|
||||||
"destination": "/etc/systemd/system/bettercap.service"
|
"destination": "/etc/systemd/system/bettercap.service"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -122,7 +104,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "ansible-local",
|
"type": "ansible-local",
|
||||||
"playbook_file": "../../builder/pwnagotchi.yml",
|
"playbook_file": "../builder/pwnagotchi.yml",
|
||||||
"extra_arguments": [
|
"extra_arguments": [
|
||||||
"--extra-vars \"ansible_python_interpreter=/usr/bin/python3\""
|
"--extra-vars \"ansible_python_interpreter=/usr/bin/python3\""
|
||||||
],
|
],
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
- libpcap0.8-dev
|
- libpcap0.8-dev
|
||||||
remove:
|
remove:
|
||||||
- raspberrypi-net-mods
|
- raspberrypi-net-mods
|
||||||
|
- dhcpcd5
|
||||||
- triggerhappy
|
- triggerhappy
|
||||||
- wpa_supplicant
|
- wpa_supplicant
|
||||||
- nfs-common
|
- nfs-common
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
import os
|
import os
|
||||||
import glob
|
import glob
|
||||||
import _thread
|
|
||||||
import threading
|
import threading
|
||||||
import importlib, importlib.util
|
import importlib, importlib.util
|
||||||
import logging
|
import logging
|
||||||
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
|
|
||||||
default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default")
|
default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default")
|
||||||
loaded = {}
|
loaded = {}
|
||||||
database = {}
|
database = {}
|
||||||
locks = {}
|
locks = {}
|
||||||
|
|
||||||
|
THREAD_POOL_SIZE = 10
|
||||||
|
executor = ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE)
|
||||||
|
|
||||||
|
|
||||||
class Plugin:
|
class Plugin:
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -46,13 +48,13 @@ def toggle_plugin(name, enable=True):
|
|||||||
if name not in pwnagotchi.config['main']['plugins']:
|
if name not in pwnagotchi.config['main']['plugins']:
|
||||||
pwnagotchi.config['main']['plugins'][name] = dict()
|
pwnagotchi.config['main']['plugins'][name] = dict()
|
||||||
pwnagotchi.config['main']['plugins'][name]['enabled'] = enable
|
pwnagotchi.config['main']['plugins'][name]['enabled'] = enable
|
||||||
|
save_config(pwnagotchi.config, '/etc/pwnagotchi/config.toml')
|
||||||
|
|
||||||
if not enable and name in loaded:
|
if not enable and name in loaded:
|
||||||
if getattr(loaded[name], 'on_unload', None):
|
if getattr(loaded[name], 'on_unload', None):
|
||||||
loaded[name].on_unload(view.ROOT)
|
loaded[name].on_unload(view.ROOT)
|
||||||
del loaded[name]
|
del loaded[name]
|
||||||
if pwnagotchi.config:
|
|
||||||
save_config(pwnagotchi.config, '/etc/pwnagotchi/config.toml')
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
if enable and name in database and name not in loaded:
|
if enable and name in database and name not in loaded:
|
||||||
@ -64,8 +66,6 @@ def toggle_plugin(name, enable=True):
|
|||||||
one(name, 'config_changed', pwnagotchi.config)
|
one(name, 'config_changed', pwnagotchi.config)
|
||||||
one(name, 'ui_setup', view.ROOT)
|
one(name, 'ui_setup', view.ROOT)
|
||||||
one(name, 'ready', view.ROOT._agent)
|
one(name, 'ready', view.ROOT._agent)
|
||||||
if pwnagotchi.config:
|
|
||||||
save_config(pwnagotchi.config, '/etc/pwnagotchi/config.toml')
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
@ -97,7 +97,7 @@ def one(plugin_name, event_name, *args, **kwargs):
|
|||||||
try:
|
try:
|
||||||
lock_name = "%s::%s" % (plugin_name, cb_name)
|
lock_name = "%s::%s" % (plugin_name, cb_name)
|
||||||
locked_cb_args = (lock_name, callback, *args, *kwargs)
|
locked_cb_args = (lock_name, callback, *args, *kwargs)
|
||||||
_thread.start_new_thread(locked_cb, locked_cb_args)
|
executor.submit(locked_cb, *locked_cb_args)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error("error while running %s.%s : %s" % (plugin_name, cb_name, e))
|
logging.error("error while running %s.%s : %s" % (plugin_name, cb_name, e))
|
||||||
logging.error(e, exc_info=True)
|
logging.error(e, exc_info=True)
|
||||||
|
Reference in New Issue
Block a user