Merge pull request #357 from TheophileDiot/1.5
Update database + Add the jobs feature and add the link when using sqlite
This commit is contained in:
commit
f1d7add739
|
@ -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
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"settings": {
|
||||
"DATABASE_URI": {
|
||||
"context": "global",
|
||||
"default": "sqlite:////data/db.sqlite3",
|
||||
"default": "sqlite:////var/lib/bunkerweb/db.sqlite3",
|
||||
"help": "The database URI, following the sqlalchemy format.",
|
||||
"id": "database-uri",
|
||||
"label": "The database URI",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 && \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue