Compare commits

..
5 Commits
Author SHA1 Message Date
tris 26c6e7771b Read users from config! 2025-10-03 17:50:09 +10:00
Tris Forster 7cca8cd232 Added missing decoders 2025-10-03 17:30:59 +10:00
tris 128f34c997 Added index command 2025-10-03 16:35:04 +10:00
Tris Forster 66eed73c0e Add missing key 2025-10-03 15:24:57 +10:00
Tris Forster 5707282513 Move all into single Dockerfile 2025-10-03 15:24:24 +10:00
5 changed files with 157 additions and 15 deletions
+41 -4
View File
@@ -1,8 +1,43 @@
FROM recoll FROM debian:trixie-slim
RUN apt-get -y install breeze-icon-theme python3-venv && apt-get clean # install important dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
antiword \
aspell \
aspell-en \
git \
libxml2 \
libimage-exiftool-perl \
net-tools \
poppler-utils \
python3 \
python3-chm \
python3-libxml2 \
python3-lxml \
python3-mutagen \
python3-pip \
unrtf \
unzip \
vim
ARG SQUIRREL_VERSION=0.4.0 # install recollcmd from recolls programmers website
COPY recoll.gpg /etc/apt/trusted.gpg.d/recoll.gpg
RUN apt-get install --reinstall -y ca-certificates
RUN apt-get update
RUN echo deb http://www.lesbonscomptes.com/recoll/debian/ buster main > \
/etc/apt/sources.list.d/recoll.list
RUN echo deb-src http://www.lesbonscomptes.com/recoll/debian/ buster main >> \
/etc/apt/sources.list.d/recoll.list
RUN apt-get install -y --no-install-recommends recollcmd python3-recoll
RUN apt-get autoremove
RUN apt-get -y install breeze-icon-theme python3-venv
# clean up
RUN apt-get clean
ARG SQUIRREL_VERSION=0.4.1
COPY dist/squirrel-${SQUIRREL_VERSION}-py3-none-any.whl squirrel-${SQUIRREL_VERSION}-py3-none-any.whl COPY dist/squirrel-${SQUIRREL_VERSION}-py3-none-any.whl squirrel-${SQUIRREL_VERSION}-py3-none-any.whl
@@ -11,8 +46,10 @@ RUN /opt/squirrel/bin/pip install squirrel-${SQUIRREL_VERSION}-py3-none-any.whl
RUN /opt/squirrel/bin/pip install gunicorn RUN /opt/squirrel/bin/pip install gunicorn
COPY squirrel-cmd /opt/squirrel/bin/squirrel COPY squirrel-cmd /opt/squirrel/bin/squirrel
ENV PATH /opt/squirrel/bin:${PATH}
ENV SQUIRREL_CONFIG /etc/squirrel/config.json ENV SQUIRREL_CONFIG /etc/squirrel/config.json
EXPOSE 8000 EXPOSE 8000
ENTRYPOINT ["/opt/squirrel/bin/squirrel"] CMD ["/opt/squirrel/bin/squirrel"]
+3 -3
View File
@@ -1,6 +1,6 @@
[project] [project]
name = "squirrel" name = "squirrel"
version = "0.4.0" version = "0.4.1"
description = "Find your nuts" description = "Find your nuts"
authors = [ authors = [
{name = "trisf"} {name = "trisf"}
@@ -13,8 +13,8 @@ dependencies = [
"dotenv (>=0.9.9,<0.10.0)" "dotenv (>=0.9.9,<0.10.0)"
] ]
#[project.scripts] [project.scripts]
#"squirrel" = "squirrel.server:daemon" "sqindex" = "squirrel.cmd:reindex"
[build-system] [build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"] requires = ["poetry-core>=2.0.0,<3.0.0"]
+95
View File
@@ -0,0 +1,95 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFbJ6UABEADLsFg8qXTrNrYUnNS5UXlAWUH7/ZHNRgr/EIkhKAbdlzVAywTM
fX6wo9crKzlqT3IcEOFe0RVJoh0FSNEQQlUhyJAFNlbcocsDYNqk7pDjxnUBUMM2
U3ikLEPzRxWDhVepAVQPeloD1i8b4MJrSHnLb49PMmXg+6MHA+dzOS59onE5QDcz
kw1RF0N0gl7693rOMP/ATefA2KPQyKCIweKB/3NbOcv4/T1XDyag0G7xYkT4stEl
TN2P8c6HSyhWDxp2slZ04kdf17TuoeOqMO9gKE+eEC17lllLuhSrbBdfYTYt05pN
Y1eRup+6oamoMc3ITD2U2GtY+65AHw5MxjGigpZ3kj5DwF/f2IgtDBSoXjm8aaRb
iYMvt3kXnb3Ai/oVvSlkIQMlDDpdAQmzB0FO0MCzzykq5mQVbl3Uw3i2q5vg1IIL
fGOB1USa0JOVRSq8C66ncijYO6Jafx3uYCGVdIypoLs332kGsyQaIatoJRbPkKT/
Wu/DGE8kHOaCo5795HbRk0O/Up5wQP3N/OXGmrQPtbafRz9bkjXOKGtq660VJ67K
ttgY9L1fD7jb+zDoUaY33K8Trfqaxm5aGkI6Pj3VvQSF2CAaJuEnh/c0r9UdGn0e
e1L0yP1kUj80Qv99QFEoH2UtBrfLsXAiRvcr/PfyGTp/+Q7wkCHsHC84TwARAQAB
tCRKZWFuLUZyYW5jb2lzIERvY2tlcyA8amZAZG9ja2VzLm9yZz6JAlcEEwEKAEEC
GwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4ACGQEWIQT44zRyVpIqiudnYFt4CM6W
04uSAQUCXAow9QUJCQKutQAKCRB4CM6W04uSASgED/sEgtnnkJiH/++6/eujnBXd
7SWhWt6zLw4RDcfaiyXoiN9NocrrQUhzeFJDXYqiS35iuMunacn9mfS/O6ck1CvC
SAR3B3ey8kTvX0B2zrEt60fFqWAHjY15N5Qz2kWUcvGcr9H/JCxfwX8XdDpR4/VY
wLuCNLc1KkPppknDCVzTiHTKEB/n/YzONF7jDNkWL4+kJPIb1mnzQSJooIkdvljM
/19X1CD9qQe2PUh560YJ//G61Iabvr00KqQUjgWXOGMpFl3ErHANplPNs/NL0cwe
OgYtwCsjHXAD1Bvrx1cToBZdgCfCQPnBMZarV2AnHQlMkoPUz1cHs17BPu8OYbou
RQmzbI7VB2TFCHz6KCKkPT4pHRgjQ29XEc6+D7lEKWFjA8YLwq8EjjaURhQwVcZb
G1K+WItHbNwnGpTQZgK3FmQb9Cf7r6fCy8i+IeGaWVXpN57rZgf2wIA8MTw5S72P
iXqWCNEmG3HHdSOes9PSYVjL1fa3dQhMsKV0+sxcU4srg563W+u9BmzDaeJAddGr
KHkLGlov1ZXftXAJxkadzIY3S1Jgtkz/RTl+nIK/Ae+AukICkehiqWlmptC1LM04
ZykBb39GKgjy52gEe6psT7FuouwA8pIWkdUYP9L8gm27NfkVOfBWiPwnDWiSRqWY
w/4QVhKsTHpJh46XG3eC5YhGBBARCgAGBQJWyeuNAAoJEDLZwqg17QZsDgwAoIWh
eWQCcMvE3pXxVhMkSsO/zMeuAJsHNBYXoJKmI0qcZcVbclWoSxADRokCPQQTAQoA
JwUCVsnpQAIbAwUJAeEzgAULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAAKCRB4CM6W
04uSAXqaD/9jpZtM4PfPQB64s1RsdYMdoVD2MlBac5D/bnwaNriNPLyq+Xl3vdKG
lI3rIYz94wk3n4qBkYsInqv/FissTyQjMcjCXE9KI6V3/VRYzgcsAxKCX6Kwwom+
ZB12xYF6aAMgSCVDbPbcuDh1tG9wbzHEDOeucjyln3ne+VedwS28sgyiV0CqwoRV
cWfBtbDdxhNlyBlYC602oaVCrnAtFzFO+A+8nz55EIql/MNx3yc5uwzJYep680NY
4Wsijj6S/PpPosNMEPWSzNrl/bLVZw//Ctc9JyLmZJCPq4Fw6uxTWGklqo7Nnqth
ioX/uKu39xwYhOLy+a38qroz1OwwhZJE9YmRykq3Bbl/n7X8y0HY/xHCuaIWs6ja
0egBBxnmjx2Z0EaExL5qLcTxDnIMtjeSlC/TCxgBxjD1iHoeuH1hp7Dj0o2/1z63
rfH5orfcWbNBKVVa4tMrChtKCwyAuyEDpNsuYmyemi1QmxELs+ne1tj4+LGhwQMA
R3JNAwbzTP/zCb/mQYiAWr27KysUx17KCJ/4Q/6mt6hswnEaqLM7pqFhx2EJzgNE
SwSkcW0LWkLEKnNQhC8Pe72F0c1GZ24bsGUUxbo+tSQyN0egBgB/ot50dQDwfnWA
8U7rBAD5SVZvJ2gOLmIQauwbUK6HFiSuArBUJ9TaZnTM1Kdnk5xeSokCQAQTAQoA
KgIbAwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgAIZAQUCWK0bFAUJBaWYzgAKCRB4
CM6W04uSAQTjEACoY5K3pT4IZ0jffdjHspoID5eAk+yJqp8bYAi6/hjT8tbzjru7
Li4N1uAncZDqRZRkPRv+eunvgvLlkz0MIhnM5f0VDdH0UGFsFLV9V+oUPbJlC/iX
N70GOPsQxGJ5EZS1UhvsGJSuYk7IhuIaS0Q66qpOPtF6E3/ax+W/mMfY1bff6Le3
/HthZMA8fGJ6I5g7RnQm1d75lcn3Ys1pH7kM6wYi1NJ4krNuHWhS0Bxu3kMMNAow
nBu0hGD70yOPchSoKyIWQo5+rfhNcO7alopaR0a44ny7YOq+BRiSoV9jgk6latrH
4y2GxLpVIMjEvsf1SpomldYwyFQ3aAUz7DL/LU542jlsozgqIttq6AS85vVEJCbZ
HqEc1wM7nYpIUkxlILM7+OM3aomMNwu7YMCxDNYj5vNmA/62mvfJa9bY4IJj491P
hkDmXCd3zk/nHXBiFv96heL1DJZu6u7e9o0Z0NZSWNSQEHb2XT2GgNsBg/Ba6MsM
bJPSPr41aHbt0t7xufB7lgQE8dzC+4udIFVVdj5Qz/S2gRbClF1O+fFlQorG037K
IICTzapE1dpQZpalovTFg99qdlJeLV1I00R6u1L8GsXk+mY11CwrX6yJs0XUoqFH
mB7ZBKuOg3MviQGAmriiMkFwF3vmn0fOF5cId0bUQdAFN560OqLAQ9s79YkBHAQS
AQgABgUCW3cNaAAKCRAjRRsQeqA5QdEsCACcK7667Wpuql1zEClsacULrktK3mUt
kQLOVZZfHx7Ph5EyUpC0jpvBtaHksKDuB/1PT7pWJ9bR8oOzqYSgbM3Nc0JA5oh+
Y66G8LHn50t+wHgQdXn/K1UTsuJTOZPfoGlhFNiMSEYpEM6H53hS0HwRBN256pzn
al9wH9ugzbISx89K+poPWNIOfP/eq/RTFnd3VAYDE/aIww6KTXFcOAhlmz+d/BZn
j/7jf3j62B+WnTEYOFwnDWL1ULsMJzLBsKfewv/MUlmHL+1rKXiB0QGMXVRkT/jt
Abr5uAsx/Y3KulmGIACZ9av5Sv6P+fAhxlvIaczGGX2aKROOw8SG5GkHiQJABBMB
CgAqAhsDBQsJCAcDBRUKCQgLBRYCAwEAAh4BAheAAhkBBQJYrVTkBQkFpdKgAAoJ
EHgIzpbTi5IB/F4P/1tFZ7yUaHTBK4e2CHGtCcLcP23iLeRej4c+WULIY2aFDrgr
Y7LXzavUwxqsIKD2UgWJN9fNQews96iu17TOZKhZpN+qajDOD4qDxBdChoAWBKzB
24C0mAaLbstRId/cgiOTwWsk4HAWKusB+bb+y6CStCO0T0MClwtwnkS/5yZFwM/A
Mf1Fe1T8ZfftQ1/PB7Y/mgqlox7AmbNbEDpKxIBYDiKoEN7PlvuezdcGIGVN+rxx
6dRp4VqPlW90zaHMvIhkxbO+nYyh/3Mw+ts1BXcDyhFQYGhybILsbfqKiEWW2KW+
k8ZE/WKoTNULrE6igoKW2bQCwShtQYmbHJ3qLfNn5bVl0OXz0Z8tsUgpa5Rzvdo2
H7SG/5NIL//1iWIai3oepoirqD8/DqS4JFpYTxcYMyQdHPMZtF26VsUCD/nQ8ind
W1UhFxZZMhTR2zPRPc7FZ9fQ/sngq36DJybukyuOJoPl44vu7v+bGbLXwbUCmzdt
F3qd1FG23i02WrBL+Jd0D5ha5qPODfewSMAI2AHUbPw+EGBwK3VQGV1d7A1S0NwL
fF9eIQjgssIPj2ykCaTj9uVK/Iw6WQJDqZDsHuwmTk3EalZmjTdqnZT+yj3onlqJ
6kM6jl1OdNhrtLigmu02TsoYskmQLrPjcZZROF4zj5j37ex0+1iDuwiVW8yIuQIN
BFbJ6UABEADFQluMnOSTv6nFMBquWihNJEZRCZCdpVfBC3dbZZJGO3JjSrlA6lKj
JyxMvTw61MovqbtbsGQhKJZhLvIcjwidkW3HkTLGcstIKYde7pyJaT6Xev6SbQRb
3eqNWiNyrTZXDZGn987WX+W4uODV2C8I1dVpO6/S0QTkDCySeJR1JSyEFZJGnwUm
wWKB2WKMCinlLmHxhxbAr6Vg0iHrH069WGMh7RfZ5TTJCdgP11sTiDo4w3CJhxHT
DIdRAPO9pbgoKgEgdz6TcqqEPoFGP+kw/IJHZGEUuDvRFkjev94/4CLATu2G5S56
KVk7YI+mBrW0XETHokmGvMQoEwR1Cq6/ZnSXJQI9mZtJjcyEfpuUS/HhpLsvMCX4
gxqZ+dmT+yVIvCioS6sOS/gp7Z6ikjzkWBdVB3ShQYhYSazBeE9kp6iLX0YRDyx0
5b3XWEEiQRhPDrx3W+fnV8vlVKPqhcFMvAHzGRHBqp67VzEMtrFq3N/mpmw90OfX
8EntyS+ZZj01IUA8yadKCYajOTRuz+TNBheLSN4keQtwHAiwiOvxVExCECwhZAXI
pSngTbgKZf0+Mc+CpmNgK065YwNOmkvnV+xFykxSKE04FyZwBEzLyjr+9LE6d4lu
s5d0PsoHVX9OxbnDR+YO2wOGBu6xYmBQbwVMi07Rf2/AeooWXhaGkQARAQABiQI8
BBgBCgAmAhsMFiEE+OM0claSKornZ2BbeAjOltOLkgEFAlwKMRAFCQkCrtAACgkQ
eAjOltOLkgGzZg//dkee8oCErvc7MxSmMlVXb+ZrGH8MqKFRbFdIWdNitlJImELZ
RVvT4NNNXRCb332IoBv51TZWjKgSFCvnOQZRw2aajYTiwy6glVx3o/FR8X7cq0eD
njC7n+ou1Rxih78cT8pL7eu2J1FslhmiFWMaKh2GVeRlCmTtrDVYUpcrgjJ1lP9+
r1WWYv9ls8C0iyvga7QpN1TR+NibalnDTlgbSYzbtzAO7LNAs3VHzuD1Ni8d+rKw
l1fr15CaqvUuIH1x3NkvLofGtC/S7xeWPZgHjv7mu1OgdfFvHKSmHJLiMHqBSr5j
NulWQ0SHUaO+/94/mla2kxcsKQIBsAPO85win3AexN9I8h0WqrlRuTLcKPyRJdjF
OR1x+Fx6ARvmf1GGHCnLkLaATK8/RjkMXy6chEIBxicibJfAMCUAcjNkDSMTR0tn
+H9kX813qWJ8r63hPHhx2+ct9MTNWXphvKd494PpAP/LK24eQzOOlKNM0wxnwKRW
XBG24tsHzrt28T1p2EeodNTkNTSwhVcUX36aaP2K1E3SxV4xsRjXqmf2mOT2lLrJ
KRb9twfA9HC941Jl+sJNTSVnPFUl0nJhuT+gjhWOQ3zCwZPRztTfbhiCb6Iv7SRx
m8uzYGDANIDYH6TJPm4aTJxJBh+QAzGPAqCHykDIt51qjIwq6F74kT/JpGk=
=ZCmr
-----END PGP PUBLIC KEY BLOCK-----
+2 -8
View File
@@ -10,6 +10,7 @@ from flask import (
) )
from werkzeug.security import check_password_hash, generate_password_hash from werkzeug.security import check_password_hash, generate_password_hash
from dataclasses import dataclass from dataclasses import dataclass
from squirrel.conf import settings
import functools import functools
bp = Blueprint("auth", __name__, url_prefix="/auth") bp = Blueprint("auth", __name__, url_prefix="/auth")
@@ -22,14 +23,7 @@ class User:
repos: list[str] | None = None repos: list[str] | None = None
users: dict[str, dict] = { users = settings["users"]
"guest": {"password": "x", "name": "Guest"},
"tris": {
"password": "scrypt:32768:8:1$4srkVJ5rxSAvZp8s$6a9b1bd9199ceb07a8e650897d6ca0c229330773a77728f83c110525c0cde5c9a019bcafbfd0274a2e532e6db03996ff34521d8f36758f4892bcc13107ac24e5",
"name": "Tris",
"repos": ["test"],
},
}
@bp.route("/login", methods=("GET", "POST")) @bp.route("/login", methods=("GET", "POST"))
+16
View File
@@ -0,0 +1,16 @@
from squirrel.repo import get_archive
import sys
archive = get_archive()
def reindex():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("repo")
options = parser.parse_args()
p = archive.reindex(options.repo)
for line in p.stderr: # type:ignore
sys.stderr.write(line.decode("utf8"))