From e14752214128e827bb98dd5894070cbce0d1a4c4 Mon Sep 17 00:00:00 2001 From: Julian Hahn Date: Wed, 25 Feb 2026 10:50:27 +0100 Subject: [PATCH] Added procedure and install script from hedgedoc --- README.md | 15 ++++++-- install.sh | 25 ++++++++++++++ lamapoll-DSGVO.sh | 79 +++++++++++++++++++++++++++++++++++++++++++ lamapolldsgvo.desktop | 8 +++++ 4 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 install.sh create mode 100644 lamapoll-DSGVO.sh create mode 100644 lamapolldsgvo.desktop diff --git a/README.md b/README.md index 9c38176..2af7523 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,13 @@ -Test -Test2 +# Lamapoll DSGVO Script + +## Testdaten: +"Vorname: Jonathan" +"Nachname: Fraine" +"Username: meinungsbilder" +"Email: markus.winkler@wikimedia.de" + +Dauer des shell scripts: ca. 1h (testen mit `time ./usr/bin/lamapoll-dsgvo.sh`) + +## Installation + +Nach Herunterladen und Entpacken des Repositories, einfach das install.sh ausführen als Root oder mit "sudo" und das sollte sich um den Rest kümmern. \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..ca76d6f --- /dev/null +++ b/install.sh @@ -0,0 +1,25 @@ +#! /bin/bash + +# fact checking +PATH="$(pwd)" +USER="$(stat -c '%U' $PATH/lamapolldsgvo.desktop)" + +# install .desktop file +install -m 644 $PATH/lamapolldsgvo.desktop -o root -g root /usr/share/applications/lamapolldsgvo.desktop + +#cp $PATH/lamapolldsgvo.desktop /usr/share/applications/lamapolldsgvo.desktop +#chown root:root /usr/share/applications/lamapolldsgvo.desktop +#chmod 644 /usr/share/applications/lamapolldsgvo.desktop + +# install actual script +install -m 775 $PATH/lamapoll-DSGVO.sh -o root -g root /usr/local/bin/lamapoll-DSGVO.sh + +#cp $PATH/lamapoll-DSGVO.sh /usr/local/bin/lamapoll-DSGVO.sh +#chown root:root /usr/local/bin/lamapoll-DSGVO.sh +#chmod 775 /usr/local/bin/lamapoll-DSGVO.sh + +# install link into start menu +sudo -u $USER "desktop-file-install --dir=/home/$USER/.local/share/applications /usr/share/applications/lamapoll-dsgvo.desktop" +sudo -u $USER "update-desktop-database -v ~/.local/share/applications" + +echo "Installation done." \ No newline at end of file diff --git a/lamapoll-DSGVO.sh b/lamapoll-DSGVO.sh new file mode 100644 index 0000000..7906b53 --- /dev/null +++ b/lamapoll-DSGVO.sh @@ -0,0 +1,79 @@ +#! /bin/bash + +file_path="/tmp/api.keys"h + +if ! test -f $file_path; then + echo "Keine API Keys gefunden. Bitte eine 'api.keys' Datei in /tmp/ ablegen" + exit 1 +fi + +echo "Im Folgenden werden die Daten abgefragt nach denen gesucht werden soll. Bitte mit ENTER bestätigen." +read -p "Vorname [wird nicht gesucht wenn leer]: " VORNAME +VORNAME=${VORNAME:-} +read -p "Nachname [wird nicht gesucht wenn leer]: " NACHNAME +NACHNAME=${NACHNAME:-} +read -p "Username [wird nicht gesucht wenn leer]: " USERNAME +USERNAME=${USERNAME:-} +read -p "Email [wird nicht gesucht wenn leer]: " EMAIL +EMAIL=${EMAIL:-} + +echo "Starte Suche, kann eine Weile dauern" + +old_IFS="$IFS" +IFS=$'\n' +for line in $(cat "$file_path"); do + ## WMDE-Survey Respondents ("Adressbuch") + rm -f /tmp/survey-$line-adress.json + echo "[]" > /tmp/survey-$line-adress.json + for POLL in $(curl -s -X GET -H "Authorization: Bearer 643M34DK" https://app.lamapoll.de/api/v2/polls?limit=1000 | jq -r '.[] | .id'); do + curl -s -X GET -H "Authorization: Bearer 643M34DK" https://app.lamapoll.de/api/v2/polls/${POLL}/respondents -s | jq -r '.' > /tmp/survey-$line-adress-$POLL.json + jq '. += (inputs)' /tmp/survey-$line-adress.json /tmp/survey-$line-adress-$POLL.json > temp.json && mv temp.json /tmp/survey-$line-adress.json && rm /tmp/survey-$line-adress-$POLL.json ; done + + # filter surveys for values and extract id, pollId, name, email + rm -f /tmp/results-survey-$line-adress.json + echo "[]" > /tmp/results-survey-$line-adress.json + vars=("VORNAME" "NACHNAME" "USERNAME" "EMAIL") + for var_name in "${vars[@]}"; do + value="${!var_name}" + if [[ -n "$value" ]]; then + echo "$var_name = $value" + cat /tmp/survey-$line-adress.json | jq --arg TEST "$value" '.[] | select((.name | test($TEST; "i")) or (.email | test($TEST; "i"))) | {pollId, id, name, email}' > /tmp/survey-$line-adress-$var_name.json + jq '. += [(inputs)]' /tmp/results-survey-$line-adress.json /tmp/survey-$line-adress-$var_name.json > temp.json && mv temp.json /tmp/results-survey-$line-adress.json && rm /tmp/survey-$line-adress-$var_name.json + fi + done + # filter double finds + jq 'sort_by(.pollId, .id) | unique_by(.pollId, .id)' /tmp/results-survey-$line-adress.json > /tmp/tmp.json && mv /tmp/tmp.json /tmp/results-survey-$line-adress.json + + ## WMDE-Survey Results ("Freitextsuche") + rm -f /tmp/survey-$line-freetext.json + echo "[]" > /tmp/survey-$line-freetext.json + for POLL in $(curl -s -X GET -H "Authorization: Bearer 643M34DK" https://app.lamapoll.de/api/v2/polls?limit=1000 | jq -r '.[] | .id'); do + curl -s -X GET -H "Authorization: Bearer 643M34DK" https://app.lamapoll.de/api/v2/polls/${POLL}/results -s | jq --arg POLL "${POLL}" -r '. | .pollId = $POLL' > /tmp/survey-$line-freetext-$POLL.json + jq '. += [(inputs)]' /tmp/survey-$line-freetext.json /tmp/survey-$line-freetext-$POLL.json > temp.json && mv temp.json /tmp/survey-$line-freetext.json && rm /tmp/survey-$line-freetext-$POLL.json ; done + + cat /tmp/survey-$line-freetext.json | tr -cd '\11\12\40-\176' > /tmp/survey-$line-freetext-removed.json + rm /tmp/survey-$line-freetext.json + mv /tmp/survey-$line-freetext-removed.json /tmp/survey-$line-freetext.json + + rm -f /tmp/results-survey-$line-freetext.json + echo "[]" > /tmp/results-survey-$line-freetext.json + vars=("VORNAME" "NACHNAME" "USERNAME" "EMAIL") + for var_name in "${vars[@]}"; do + value="${!var_name}" + if [[ -n "$value" ]]; then + cat /tmp/survey-$line-freetext.json | jq --arg TEST "$value" '.[] | {name: .name, pollId: .pollId, results: .results[] | select(.groups[].labels[] | test($TEST; "i")) | {question: .question, questionId: .questionId, labels: [.groups[].labels[] | select(test($TEST; "i"))]}}' > /tmp/survey-$line-freetext-$var_name.json + jq '. += [(inputs)]' /tmp/results-survey-$line-freetext.json /tmp/survey-$line-freetext-$var_name.json > temp.json && mv temp.json /tmp/results-survey-$line-freetext.json && rm /tmp/survey-$line-freetext-$var_name.json + fi + done +done +IFS="$old_IFS" + +echo "Suche beendet. Ergebnisse sind:" + +old_IFS="$IFS" +IFS=$'\n' +for line in $(cat "$file_path"); do + cat /tmp/results-survey-$line-adress.json + cat /tmp/results-survey-$line-freetext.json +done +IFS="$old_IFS" \ No newline at end of file diff --git a/lamapolldsgvo.desktop b/lamapolldsgvo.desktop new file mode 100644 index 0000000..f6ad4f5 --- /dev/null +++ b/lamapolldsgvo.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=LamapollDSGVO +Comment=Filter all Survey answers for occurences of the searched answers +Exec=gnome-terminal -- "bash /usr/local/bin/lamapoll-DSGVO.sh" +Icon=utilities-terminal +Terminal=true +Type=Application +Categories=Utility; \ No newline at end of file