diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0045f104873f22d2b18fe199b527acb08a2d19b7..bdc262dfb463fc1517a7fa797a0058459f594b03 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,4 +8,4 @@ build-buster: - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.debian-buster-mkdocs --destination $CI_REGISTRY_IMAGE/buster-mkdocs:$CI_COMMIT_TAG - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.debian-buster-hugo --destination $CI_REGISTRY_IMAGE/buster-hugo:$CI_COMMIT_TAG - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.debian-bullseye-hugo --destination $CI_REGISTRY_IMAGE/bullseye-hugo:$CI_COMMIT_TAG - + - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile.debian-bullseye-directory-listening --destination $CI_REGISTRY_IMAGE/bullseye-directory-listening:$CI_COMMIT_TAG diff --git a/Dockerfile.debian-bullseye-directory-listening b/Dockerfile.debian-bullseye-directory-listening new file mode 100644 index 0000000000000000000000000000000000000000..1d4f31d398daff65705aced540133c208d188282 --- /dev/null +++ b/Dockerfile.debian-bullseye-directory-listening @@ -0,0 +1,8 @@ +FROM debian:bullseye + +RUN apt-get -qq update && \ + apt-get -qq dist-upgrade && \ + apt-get -qq install python3 python3-jinja2 && \ + apt-get -qq clean + +COPY directory-listening/create-index.py /usr/local/bin/create-index diff --git a/directory-listening/create-index.py b/directory-listening/create-index.py new file mode 100755 index 0000000000000000000000000000000000000000..07be7ef6665ea79c91d0edd21afd75681b1b001c --- /dev/null +++ b/directory-listening/create-index.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +import jinja2 +import os +import sys +from datetime import datetime + +def timestamp_to_datetime(timestamp): + return datetime.fromtimestamp(timestamp) + +def main(inputfolder, outputfolder, ignore_files): + jinjaenv = jinja2.Environment(autoescape=jinja2.select_autoescape()) + jinjaenv.filters["timestamp_to_datetime"] = timestamp_to_datetime + template = jinjaenv.from_string("""<!DOCTYPE html> + <html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <meta name="viewport" content="width=device-width"> + <style type="text/css"> + body,html { + background: #fff; + font-family: "Bitstream Vera Sans","Lucida Grande","Lucida Sans Unicode",Lucidux,Verdana,Lucida,sans-serif; + } + tr:nth-child(even) { + background:#f4f4f4; + } + th,td { + padding:0.1em 0.5em; + } + th { + text-align:left; + font-weight:bold; + background:#eee; + border-bottom:1px solid #aaa; + } + #list { + border:1px solid #aaa; + width:100%; + } + a { + color:#a33; + } + a:hover { + color:#e33; + } + </style> + </head> + <body> + <h1>Index of /{{ path }}</h1> + <table id="list"> + <thead> + <tr> + <th style="width:55%"> + File Name + </th> + <th style="width:20%"> + File Size</th> + <th style="width:25%"> + Date + </th> + </tr> + </thead> + <tbody> + <tr> + <td class="link"> + <a href="../">Parent directory/</a> + </td> + <td class="size">-</td> + <td class="date">-</td> + </tr> + {% for entry, stat, is_dir in entries %} + <tr> + <td class="link"> + <a href="{{ entry + ('/' if is_dir else '') }}" title="{{ entry }}">{{ entry + ('/' if is_dir else '') }}</a> + </td> + <td class="size">{{ '-' if is_dir else stat.st_size|filesizeformat }}</td> + <td class="date">{{ (stat.st_mtime|timestamp_to_datetime).isoformat(timespec='seconds') }}</td> + </tr> + {% endfor %} + </tbody> + </table> + <p><a href="https://legal.cccv.de">Impressum - Datenschutzerklärung</a></p> + </body> + </html> + """) + for path, dirs, files in os.walk(inputfolder): + relativ_path_to_input = os.path.relpath(path, inputfolder) + entries = [(i, os.stat(os.path.join(path, i)), i in dirs) for i in dirs+files if not i in ignore_files] + html_index = template.render(path=relativ_path_to_input, entries=entries) + html_index_folder = os.path.join(outputfolder, relativ_path_to_input) + html_index_path = os.path.join(html_index_folder, 'index.html') + os.makedirs(html_index_folder, exist_ok=True) + outputfile = open(html_index_path, "w") + outputfile.write(html_index) + outputfile.close() + +if __name__ == '__main__': + if len(sys.argv) != 3: + print(f'Usage: {sys.argv[0]} <directory tree to create index from> <output path for index tree>') + sys.exit(1) + main(inputfolder=sys.argv[1], outputfolder=sys.argv[2], ignore_files=['index.html'])