Add the jobs feature and add the link when using sqlite

This commit is contained in:
TheophileDiot 2022-11-16 17:39:52 +01:00
parent 2154c7f544
commit 1252d1651e
8 changed files with 75 additions and 6 deletions

View File

@ -32,9 +32,11 @@ RUN apk add --no-cache bash && \
addgroup -g 101 nginx && \
adduser -h /var/cache/nginx -g nginx -s /bin/sh -G nginx -D -H -u 101 nginx && \
cp /usr/share/bunkerweb/helpers/bwcli /usr/bin/ && \
chown -R nginx:nginx /usr/share/bunkerweb && \
mkdir -p /data/lib && ln -s /data/lib /var/lib/bunkerweb && \
chown -R nginx:nginx /usr/share/bunkerweb /var/lib/bunkerweb && \
find /usr/share/bunkerweb -type f -exec chmod 0740 {} \; && \
find /usr/share/bunkerweb -type d -exec chmod 0750 {} \; && \
chmod 770 /var/lib/bunkerweb && \
chmod 750 /usr/share/bunkerweb/cli/main.py /usr/share/bunkerweb/helpers/*.sh /usr/bin/bwcli /usr/share/bunkerweb/autoconf/main.py /usr/share/bunkerweb/deps/python/bin/* && \
chown root:nginx /usr/bin/bwcli

View File

@ -70,6 +70,8 @@ class Database:
splitted = sqlalchemy_string.split("+")
sqlalchemy_string = f"{splitted[0]}:{':'.join(splitted[1].split(':')[1:])}"
self.database_uri = sqlalchemy_string
try:
self.__sql_engine = create_engine(
sqlalchemy_string,
@ -115,6 +117,9 @@ class Database:
bind=self.__sql_engine, autoflush=False, expire_on_commit=False
)
def get_database_uri(self) -> str:
return self.database_uri
def __del__(self) -> None:
"""Close the database"""
if self.__sql_session:
@ -1184,3 +1189,46 @@ class Database:
"""Get plugins errors."""
with self.__db_session() as session:
return session.query(Jobs).filter(Jobs.success == False).count()
def get_jobs(self) -> Dict[str, Dict[str, Any]]:
"""Get jobs."""
jobs = {}
with self.__db_session() as session:
for job in (
session.query(Jobs)
.with_entities(
Jobs.name,
Jobs.every,
Jobs.reload,
Jobs.success,
Jobs.last_run,
Jobs.cache,
)
.all()
):
jobs[job.name] = {
"every": job.every,
"reload": job.reload,
}
if job.success is not None and job.last_run is not None:
jobs[job.name].update(
{
"success": job.success,
"last_run": job.last_run,
}
)
if job.cache is not None:
job["cache"] = []
for cache in job.cache:
jobs[job.name]["cache"].append(
{
"service_id": cache.service_id,
"file_name": cache.file_name,
"data": cache.data.decode("utf-8"),
"last_update": cache.last_update,
}
)
return jobs

View File

@ -5,7 +5,7 @@
log "$1" "" "Setup and check /data folder ..."
# Create folders if missing and check permissions
rwx_folders=("cache" "cache/letsencrypt")
rwx_folders=("cache" "cache/letsencrypt" "lib")
rx_folders=("configs" "configs/http" "configs/stream" "configs/server-http" "configs/server-stream" "configs/default-server-http" "configs/default-server-stream" "configs/modsec" "configs/modsec-crs" "plugins" "www")
for folder in "${rwx_folders[@]}" ; do
if [ ! -d "/data/${folder}" ] ; then

View File

@ -41,16 +41,17 @@ RUN apk add --no-cache bash libgcc libstdc++ openssl && \
mkdir -p /var/www && \
mkdir -p /etc/bunkerweb && \
mkdir -p /data/cache && ln -s /data/cache /var/cache/bunkerweb && \
mkdir -p /data/lib && ln -s /data/lib /var/lib/bunkerweb && \
mkdir -p /data/cache/letsencrypt && ln -s /data/cache/letsencrypt /etc/letsencrypt && \
mkdir -p /data/www && ln -s /data/www /var/www/html && \
for dir in $(echo "configs plugins") ; do mkdir -p "/data/${dir}" && ln -s "/data/${dir}" "/etc/bunkerweb/${dir}" ; done && \
for dir in $(echo "configs/http configs/stream configs/server-http configs/server-stream configs/default-server-http configs/default-server-stream configs/modsec configs/modsec-crs") ; do mkdir "/data/${dir}" ; done && \
chown -R root:scheduler /data && \
chmod -R 770 /data && \
chown -R root:scheduler /usr/share/bunkerweb /var/cache/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb && \
chown -R root:scheduler /usr/share/bunkerweb /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb && \
for dir in $(echo "/usr/share/bunkerweb /etc/bunkerweb") ; do find ${dir} -type f -exec chmod 0740 {} \; ; done && \
for dir in $(echo "/usr/share/bunkerweb /etc/bunkerweb") ; do find ${dir} -type d -exec chmod 0750 {} \; ; done && \
chmod 770 /var/cache/bunkerweb /var/tmp/bunkerweb && \
chmod 770 /var/cache/bunkerweb /var/lib/bunkerweb /var/tmp/bunkerweb && \
chmod 750 /usr/share/bunkerweb/gen/*.py /usr/share/bunkerweb/scheduler/main.py /usr/share/bunkerweb/scheduler/entrypoint.sh /usr/share/bunkerweb/helpers/*.sh /usr/share/bunkerweb/deps/python/bin/* && \
mkdir /etc/nginx && \
chown -R scheduler:scheduler /etc/nginx && \

View File

@ -27,6 +27,10 @@ if ! grep -q "Docker" /usr/share/bunkerweb/INTEGRATION ; then
fi
fi
if [ -f /var/lib/bunkerweb/db.sqlite3 ] ; then
chown scheduler:scheduler /var/lib/bunkerweb/db.sqlite3
fi
# execute jobs
log "ENTRYPOINT" " " "Executing scheduler ..."
/usr/share/bunkerweb/scheduler/main.py

View File

@ -170,6 +170,8 @@ if __name__ == "__main__":
sleep(5)
env = db.get_config()
env["DATABASE_URI"] = db.get_database_uri()
# Checking if any custom config has been created by the user
custom_confs = []
root_dirs = listdir("/etc/bunkerweb/configs")

View File

@ -37,14 +37,15 @@ RUN apk add --no-cache bash file && \
mkdir -p /var/tmp/bunkerweb && \
mkdir -p /etc/bunkerweb && \
mkdir -p /data/cache && ln -s /data/cache /var/cache/bunkerweb && \
mkdir -p /data/lib && ln -s /data/lib /var/lib/bunkerweb && \
for dir in $(echo "configs plugins") ; do mkdir -p "/data/${dir}" && ln -s "/data/${dir}" "/etc/bunkerweb/${dir}" ; done && \
for dir in $(echo "configs/http configs/stream configs/server-http configs/server-stream configs/default-server-http configs/default-server-stream configs/modsec configs/modsec-crs") ; do mkdir "/data/${dir}" ; done && \
chown -R root:ui /data && \
chmod -R 770 /data && \
chown -R root:ui /usr/share/bunkerweb /var/cache/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb && \
chown -R root:ui /usr/share/bunkerweb /var/cache/bunkerweb /var/lib/bunkerweb /etc/bunkerweb /var/tmp/bunkerweb && \
for dir in $(echo "/usr/share/bunkerweb /etc/bunkerweb") ; do find ${dir} -type f -exec chmod 0740 {} \; ; done && \
for dir in $(echo "/usr/share/bunkerweb /etc/bunkerweb") ; do find ${dir} -type d -exec chmod 0750 {} \; ; done && \
chmod 770 /var/cache/bunkerweb /var/tmp/bunkerweb && \
chmod 770 /var/cache/bunkerweb /var/lib/bunkerweb /var/tmp/bunkerweb && \
chmod 750 /usr/share/bunkerweb/gen/main.py /usr/share/bunkerweb/deps/python/bin/*
# Fix CVEs

View File

@ -1368,6 +1368,17 @@ def logs_container(container_id):
return jsonify({"logs": logs, "last_update": int(time())})
@app.route("/jobs", methods=["GET"])
@login_required
def jobs():
jobs = db.get_jobs()
return render_template(
"jobs.html",
jobs=jobs,
dark_mode=app.config["DARK_MODE"],
)
@app.route("/login", methods=["GET", "POST"])
def login():
fail = False