From 114d8c461b39abdab8f7b5e7e5bc939b120c1332 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 24 May 2025 22:41:32 +0000 Subject: [PATCH] Added filebrowser --- add_smb_user.sh | 9 +++++ create_user_share.sh | 68 +++++++++++++++++++++++++++++++++ filebrowser/addusers.txt | 0 filebrowser/docker-compose.yaml | 17 +++++++++ filebrowser/filebrowser.db | 0 filebrowser/settings.json | 8 ++++ filebrowser/start.sh | 18 +++++++++ 7 files changed, 120 insertions(+) create mode 100755 create_user_share.sh create mode 100755 filebrowser/addusers.txt create mode 100644 filebrowser/docker-compose.yaml create mode 100644 filebrowser/filebrowser.db create mode 100644 filebrowser/settings.json create mode 100755 filebrowser/start.sh diff --git a/add_smb_user.sh b/add_smb_user.sh index 3aa91a6..1a2c059 100755 --- a/add_smb_user.sh +++ b/add_smb_user.sh @@ -38,3 +38,12 @@ if [[ $? -eq 0 ]]; then else echo "Failed to add Samba user." fi + + +log_file="filebrowser/addusers.txt" + +if [ -f "$log_file" ]; then + echo "$USERNAME:$PASSWORD" >> "$log_file" +fi + +docker restart filebrowser diff --git a/create_user_share.sh b/create_user_share.sh new file mode 100755 index 0000000..5bba48d --- /dev/null +++ b/create_user_share.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +# Usage check +if [ "$#" -ne 2 ]; then + echo "Usage: $0 " + exit 1 +fi + +FOLDER_PATH="/data/$2/$1" +USERNAME="$2" +SMBCONF="/etc/samba/smb.conf" +SHARE_CONFIG_DIR="/etc/samba/shares.d" + +# 1. Check if user exists +if ! id "$USERNAME" &>/dev/null; then + echo "Error: User '$USERNAME' does not exist." + exit 2 +fi + +# 2. Create folder if it doesn't exist, set ownership and permissions +if [ ! -d "$FOLDER_PATH" ]; then + echo "Creating directory: $FOLDER_PATH" + mkdir -p "$FOLDER_PATH" + chown "$USERNAME":"$USERNAME" "$FOLDER_PATH" + chmod 770 "$FOLDER_PATH" +else + echo "Directory already exists: $FOLDER_PATH" +fi + +# 3. Determine share name from folder name +SHARE_NAME=$(basename "$FOLDER_PATH") + +# 4. Ensure shares.d directory exists +if [ ! -d "$SHARE_CONFIG_DIR" ]; then + mkdir -p "$SHARE_CONFIG_DIR" +fi + +# 5. Create Samba share config file +SHARE_CONFIG_FILE="$SHARE_CONFIG_DIR/$SHARE_NAME.conf" +if [ -f "$SHARE_CONFIG_FILE" ]; then + echo "Warning: Share config already exists: $SHARE_CONFIG_FILE" +else + cat < "$SHARE_CONFIG_FILE" +[$SHARE_NAME] + path = $FOLDER_PATH + valid users = $USERNAME + read only = no + browseable = yes + guest ok = no + create mask = 0660 + directory mask = 0770 +EOF + echo "Created Samba share config: $SHARE_CONFIG_FILE" +fi + +# 6. Append include directive to main smb.conf if not already present +INCLUDE_LINE="include = $SHARE_CONFIG_FILE" +if ! grep -Fxq "$INCLUDE_LINE" "$SMBCONF"; then + echo "Appending include directive to $SMBCONF" + echo "\n# Include share definition for $SHARE_NAME" >> "$SMBCONF" + echo "$INCLUDE_LINE" >> "$SMBCONF" +else + echo "Include directive already present in $SMBCONF" +fi + +# 7. Restart Samba service to apply changes +echo "Restarting Samba service..." +systemctl restart smbd && echo "Samba restarted successfully." || echo "Failed to restart Samba. Check logs." diff --git a/filebrowser/addusers.txt b/filebrowser/addusers.txt new file mode 100755 index 0000000..e69de29 diff --git a/filebrowser/docker-compose.yaml b/filebrowser/docker-compose.yaml new file mode 100644 index 0000000..35e34ed --- /dev/null +++ b/filebrowser/docker-compose.yaml @@ -0,0 +1,17 @@ +version: '3' +services: + filebrowser: + image: filebrowser/filebrowser:latest + container_name: filebrowser + entrypoint: ./start.sh + volumes: + - /data:/srv #Change to match your directory + - /selfhosting/apps/smb_utilities/filebrowser/filebrowser.db:/database/filebrowser.db #Change to match your directory + - /selfhosting/apps/smb_utilities/filebrowser/settings.json:/config/settings.json #Change to match your directory + - /selfhosting/apps/smb_utilities/filebrowser/start.sh:/start.sh + - /selfhosting/apps/smb_utilities/filebrowser/addusers.txt:/addusers.txt + environment: + - PUID=$(id -u) + - PGID=$(id -g) + ports: + - 8095:80 #Change the port if needed diff --git a/filebrowser/filebrowser.db b/filebrowser/filebrowser.db new file mode 100644 index 0000000..e69de29 diff --git a/filebrowser/settings.json b/filebrowser/settings.json new file mode 100644 index 0000000..cf7fb4e --- /dev/null +++ b/filebrowser/settings.json @@ -0,0 +1,8 @@ +{ + "port": 80, + "baseURL": "", + "address": "", + "log": "stdout", + "database": "/database/filebrowser.db", + "root": "/srv" +} diff --git a/filebrowser/start.sh b/filebrowser/start.sh new file mode 100755 index 0000000..7eab81d --- /dev/null +++ b/filebrowser/start.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +./filebrowser config init +echo "Adding users" +./filebrowser users add admin admin +./filebrowser users update admin --perm.admin +./addusers.sh +echo -n > addusers.sh + +input_file="addusers.txt" +while IFS=: read -r username password +do + ./filebrowser users add $username $password + ./filebrowser users update $username --scope /$username +done < "$input_file" +echo -n > $input_file + +./filebrowser