first commit
This commit is contained in:
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
source TalkLib.sh
|
||||||
|
|
||||||
|
# --- KONFIGURATION ---
|
||||||
|
# Pfad zum lokalen Verzeichnis (Wichtig: Schrägstrich am Ende!)
|
||||||
|
SOURCE_DIR="/mnt/data/"
|
||||||
|
|
||||||
|
# Remote-Zugangsdaten
|
||||||
|
REMOTE_USER="backupuser"
|
||||||
|
REMOTE_HOST="alsdorf.spznord.de"
|
||||||
|
REMOTE_DIR="/mnt/disk0/NextcloudBackup/data/"
|
||||||
|
|
||||||
|
# --- LOGIK ---
|
||||||
|
echo "Starte Synchronisation von $SOURCE_DIR nach $REMOTE_HOST..."
|
||||||
|
|
||||||
|
# rsync Optionen:
|
||||||
|
# -a: Archiv-Modus (behält Rechte, Zeitstempel, etc.)
|
||||||
|
# -v: Verbose (zeigt an, was passiert)
|
||||||
|
# -z: Komprimierung während der Übertragung
|
||||||
|
# -h: Human-readable (bessere Dateigrößenanzeige)
|
||||||
|
# (Hinweis: KEIN --delete sorgt dafür, dass entfernte lokale Dateien remote bleiben)
|
||||||
|
|
||||||
|
rsync -avzh "$SOURCE_DIR" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
|
||||||
|
|
||||||
|
# Status prüfen
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Backup erfolgreich abgeschlossen."
|
||||||
|
else
|
||||||
|
echo "Fehler bei der Synchronisation!"
|
||||||
|
fi
|
||||||
Executable
+271
@@ -0,0 +1,271 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#******************************************
|
||||||
|
# TalkLib.sh - A library for interacting with Nextcloud Spreed app
|
||||||
|
#
|
||||||
|
# This script provides functions interact with Nextcloud Spreed/Talk app.
|
||||||
|
# It uses the Nextcloud OCS API to retrieve data from server in JSON format.
|
||||||
|
# by Oliver Zienert - Date: 2025-06-17
|
||||||
|
#******************************************
|
||||||
|
|
||||||
|
#this constants is used to control the debug output
|
||||||
|
#Set libDebug to true to enable debug output, false to disable
|
||||||
|
libDebug=true
|
||||||
|
|
||||||
|
# logging functions
|
||||||
|
# These functions are used to log messages to the console
|
||||||
|
# Usage: info "sender" "Your message here"
|
||||||
|
function info()
|
||||||
|
{
|
||||||
|
echo -e "[\033[1;34mINFO::$1\033[0m] - $2" >&2
|
||||||
|
}
|
||||||
|
# Usage: error "sender" "Your message here"
|
||||||
|
function error()
|
||||||
|
{
|
||||||
|
echo -e "[\033[1;31mERROR::$1\033[0m] - $2" >&2
|
||||||
|
}
|
||||||
|
# Usage: debug "sender" "Your message here" (if libDebug is true)
|
||||||
|
function debug()
|
||||||
|
{
|
||||||
|
if [ "$libDebug" == true ]; then
|
||||||
|
echo -e "[\033[1;33mDEBUG::$1\033[0m] - $2" >&2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#******************************************
|
||||||
|
# Server functions for Nextcloud Spreed app
|
||||||
|
# These functions are used to interact with the Nextcloud Spreed app
|
||||||
|
# They make HTTPS (http is not working) requests to the Nextcloud server and return JSON responses.
|
||||||
|
# !! These functions do not validate parameters, so ensure that the parameters are correct before calling them.
|
||||||
|
#******************************************
|
||||||
|
|
||||||
|
# Function to get all rooms of a user from Nextcloud Spreed app
|
||||||
|
# Usage: getAllRoomsOfUser <NC_URL> <NC_USER> <NC_APP_PASSWORD>
|
||||||
|
# Returns: JSON response containing rooms details or an empty string on failure
|
||||||
|
#+
|
||||||
|
function getAllRoomsOfUser()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
|
||||||
|
debug "getAllRoomsOfUser" "Getting all rooms for user: $NC_USER"
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir "https" -s -u "$NC_USER:$NC_APP_PASSWORD" "$NC_URL/ocs/v2.php/apps/spreed/api/v4/room?format=json" \
|
||||||
|
-H "OCS-APIRequest: true")
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get details of a specific room from Nextcloud Spreed app
|
||||||
|
# Usage: getRoomDetails <NC_URL> <NC_USER> <NC_APP_PASSWORD> <ROOM_ID>
|
||||||
|
# Returns: JSON response containing room details or an empty string on failure
|
||||||
|
#- funktioniert noch nicht
|
||||||
|
function getRoomDetails()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
|
||||||
|
debug "getRoomDetails" "Getting details for Room: $ROOM_ID"
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir "https" -s -u "$NC_USER:$NC_APP_PASSWORD" \
|
||||||
|
"$NC_URL/ocs/v2.php/apps/spreed/api/v4/room/$ROOM_ID?format=json" \
|
||||||
|
-H "OCS-APIRequest: true")
|
||||||
|
|
||||||
|
debug "getRoomDetails" "Response: $response"
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Function to send a message to a specific room in Nextcloud Spreed app
|
||||||
|
# Usage: sendMessage2Room <NC_URL> <NC_USER> <NC_APP_PASSWORD> <ROOM_ID> <MESSAGE>
|
||||||
|
#+
|
||||||
|
function sendMessage2Room()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
MESSAGE=$5
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir 'https' -s -u "$NC_USER:$NC_APP_PASSWORD" -X POST \
|
||||||
|
-d "message=$MESSAGE" \
|
||||||
|
"$NC_URL/ocs/v2.php/apps/spreed/api/v1/chat/$ROOM_ID?format=json" \
|
||||||
|
-H "OCS-APIRequest: true" )
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get the context of a specific message in a room in Nextcloud Spreed app
|
||||||
|
# Usage: getMessage <NC_URL> <NC_USER> <NC_APP_PASSWORD> <ROOM_ID> <MESSAGE_ID>
|
||||||
|
# Returns: JSON response containing message context or an empty string on failure
|
||||||
|
#funkioniert noch nicht
|
||||||
|
function getMessage()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
MESSAGE_ID=$5
|
||||||
|
|
||||||
|
debug "getMessage" "Getting message context for Room: $ROOM_ID, Message ID: $MESSAGE_ID"
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir 'https' -s -u "$NC_USER:$NC_APP_PASSWORD" \
|
||||||
|
"$NC_URL/chat/$ROOM_ID/$MESSAGE_ID/context/?format=json" \
|
||||||
|
-H "OCS-APIRequest: true")
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
function getUsersInRoom()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
|
||||||
|
debug "getUsersInRoom" "Getting users in room: $ROOM_ID"
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir 'https' -s -u "$NC_USER:$NC_APP_PASSWORD" \
|
||||||
|
"$NC_URL//ocs/v2.php/apps/spreed/api/v4/room/$ROOM_ID/participants?format=json" \
|
||||||
|
-H "OCS-APIRequest: true")
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
# Function to send a file to a specific room in Nextcloud Spreed app
|
||||||
|
# Usage: sendFile2Room <NC_URL> <NC_USER> <NC_APP_PASSWORD> <ROOM_ID> <LOCAL_FILENAME> <NC_FILENAME> <MESSAGE_ID>
|
||||||
|
#+
|
||||||
|
function sendFile2Room()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
LOCAL_FILENAME=$5
|
||||||
|
NC_FILENAME=$6
|
||||||
|
MESSAGE_ID=$7
|
||||||
|
|
||||||
|
debug "sendFile2Room" "Uploading file to Nextcloud: $LOCAL_FILENAME as $NC_FILENAME in room $ROOM_ID with message ID $MESSAGE_ID"
|
||||||
|
|
||||||
|
#upload the file to Nextcloud
|
||||||
|
curl -u $NC_USER:$NC_APP_PASSWORD -T $LOCAL_FILENAME "$NC_URL/remote.php/dav/files/$NC_USER/$NC_FILENAME" \
|
||||||
|
-H "OCS-APIRequest: true" \
|
||||||
|
-H "Content-Type: application/octet-stream" \
|
||||||
|
-H "X-Requested-With: XMLHttpRequest"
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
error "Failed to upload file $LOCAL_FILENAME to Nextcloud"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
debug "sendFile2Room" "File $LOCAL_FILENAME uploaded successfully to Nextcloud as $NC_FILENAME"
|
||||||
|
|
||||||
|
#publish the file to the room
|
||||||
|
response=$(curl -s -u "$NC_USER:$NC_APP_PASSWORD" \
|
||||||
|
"$NC_URL/ocs/v2.php/apps/files_sharing/api/v1/shares?format=json" \
|
||||||
|
-X POST \
|
||||||
|
-H "OCS-APIRequest: true" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{ \"shareType\": 10, \"shareWith\": \"$ROOM_ID\", \"path\": \"$NC_FILENAME\" }")
|
||||||
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
error "Failed to share file $NC_FILENAME with room $ROOM_ID"
|
||||||
|
fi
|
||||||
|
debug "sendFile2Room" "$response"
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to send a message with a file attachment to a specific room in Nextcloud Spreed app
|
||||||
|
# Usage: sendMessageWithFile <NC_URL> <NC_USER> <NC_APP_PASSWORD> <ROOM_ID> <LOCAL_FILENAME> <NC_FILENAME> <MESSAGE>
|
||||||
|
# Returns: JSON response containing the message ID or an error message on failure
|
||||||
|
# This function first sends a message to the room, then uploads the file and attaches it to the message.
|
||||||
|
# It returns the response from the file upload, which includes the message ID.
|
||||||
|
# Note: The file must be accessible on the local filesystem where this script is run.
|
||||||
|
# The file will be uploaded to Nextcloud and attached to the message.
|
||||||
|
function sendMessageWithFile()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
LOCAL_FILENAME=$5
|
||||||
|
NC_FILENAME=$6
|
||||||
|
MESSAGE=$7
|
||||||
|
|
||||||
|
debug "sendMessageWithFile" "Sending message with file to room: $ROOM_ID"
|
||||||
|
debug "sendMessageWithFile" "Local filename: $LOCAL_FILENAME"
|
||||||
|
debug "sendMessageWithFile" "Serverfilename: $NC_FILENAME"
|
||||||
|
debug "sendMessageWithFile" "Message: $MESSAGE"
|
||||||
|
|
||||||
|
#erzeuge Message an den die Datei angehängt werden soll und speichere die ID der Nachricht in mesgId
|
||||||
|
mesgId=$(sendMessage2Room "$NC_URL" "$NC_USER" "$NC_APP_PASSWORD" "$ROOM_TOKEN" "$MESSAGE" | jq -r '.ocs.data.id' )
|
||||||
|
debug "sendMessageWithFile" "Message sent with ID: $mesgId"
|
||||||
|
#sende die Datei an die Nachricht
|
||||||
|
#[todo check mesgId]
|
||||||
|
debug "sendMessageWithFile" "uploading file $LOCAL_FILENAME to $NC_FILENAME"
|
||||||
|
response=$(sendFile2Room "$NC_URL" "$NC_USER" "$NC_APP_PASSWORD" "$ROOM_TOKEN" "$LOCAL_FILENAME" "$NC_FILENAME" "$mesgId")
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Function to mark a message as read in a specific room in Nextcloud Spreed app
|
||||||
|
# Usage: markMessageAsRead <NC_URL> <NC_USER> <NC_APP_PASSWORD> <ROOM_ID> <MESSAGE_ID>
|
||||||
|
#+
|
||||||
|
function markMessageAsRead()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
ROOM_ID=$4
|
||||||
|
MESSAGE_ID=$5
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir 'https' -s -u "$NC_USER:$NC_APP_PASSWORD" -X POST \
|
||||||
|
"$NC_URL/ocs/v2.php/apps/spreed/api/v1/chat/$ROOM_ID/read?format=json" \
|
||||||
|
-H "OCS-APIRequest: true" \
|
||||||
|
-d "lastReadMessage=$MESSAGE_ID")
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
#erstellt einen neuen Raum mit dem angegebenen Benutzer
|
||||||
|
function createOne2OneRoom()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
TARGET_USER=$4
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir 'https' -s -u "$NC_USER:$NC_APP_PASSWORD" -X POST \
|
||||||
|
"$NC_URL/ocs/v2.php/apps/spreed/api/v4/room?format=json" \
|
||||||
|
-H "OCS-APIRequest: true" \
|
||||||
|
-d "invite=$TARGET_USER" \
|
||||||
|
-d "type=1" )
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
# Function to get details of a specific User from Nextcloud
|
||||||
|
# Usage: getDetailsOfUser <NC_URL> <NC_USER> <NC_APP_PASSWORD> <NC_USER2Check>
|
||||||
|
# Returns: JSON response containing Useraccount details or an empty string on failure
|
||||||
|
function getDetailsOfUser()
|
||||||
|
{
|
||||||
|
NC_URL=$1
|
||||||
|
NC_USER=$2
|
||||||
|
NC_APP_PASSWORD=$3
|
||||||
|
NC_USER2Check=$4
|
||||||
|
|
||||||
|
debug "getDetailsOfUser" "Getting Account Details for user: $NC_USER2Check"
|
||||||
|
|
||||||
|
response=$(curl --proto 'https' --proto-redir "https" -s -u "$NC_USER:$NC_APP_PASSWORD" \
|
||||||
|
"$NC_URL/ocs/v1.php/cloud/users/{$NC_USER2Check}?format=json" \
|
||||||
|
-H "OCS-APIRequest: true")
|
||||||
|
|
||||||
|
echo $response
|
||||||
|
}
|
||||||
|
|
||||||
|
#abhängigkeits-Check
|
||||||
|
for cmd in curl jq; do
|
||||||
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
||||||
|
error "TalkLib" "Benötigtes Programm '$cmd' ist nicht installiert. Bitte installieren und erneut versuchen."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user