merged master into live branch

This commit is contained in:
Flo 2024-12-06 01:43:09 +01:00
commit 780d4f5f5b
30 changed files with 322 additions and 247 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
cron/ cron/
var/ var/

8
.idea/.gitignore vendored
View File

@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/backend/auth/data" isTestSource="false" packagePrefix="Authentication" />
<sourceFolder url="file://$MODULE_DIR$/backend/bee/data" isTestSource="false" packagePrefix="Bee" />
<sourceFolder url="file://$MODULE_DIR$/backend/file/data" isTestSource="false" packagePrefix="File" />
<sourceFolder url="file://$MODULE_DIR$/backend/homepage/data" isTestSource="false" packagePrefix="Homepage" />
<sourceFolder url="file://$MODULE_DIR$/backend/mytube/data" isTestSource="false" packagePrefix="MyTube" />
<sourceFolder url="file://$MODULE_DIR$/backend/notification/data" isTestSource="false" packagePrefix="Notification" />
<sourceFolder url="file://$MODULE_DIR$/systems/backend/mytube/data" isTestSource="false" packagePrefix="MyTube" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/dev.iml" filepath="$PROJECT_DIR$/.idea/dev.iml" />
</modules>
</component>
</project>

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MessDetectorOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCSFixerOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PHPCodeSnifferOptionsConfiguration">
<option name="highlightLevel" value="WARNING" />
<option name="transferred" value="true" />
</component>
<component name="PhpProjectSharedConfiguration" php_language_level="8.2">
<option name="suggestChangeDefaultLanguageLevel" value="false" />
</component>
<component name="PhpStanOptionsConfiguration">
<option name="transferred" value="true" />
</component>
<component name="PsalmOptionsConfiguration">
<option name="transferred" value="true" />
</component>
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/systems/backend/mytube" vcs="Git" />
<mapping directory="$PROJECT_DIR$/systems/frontend/mytube" vcs="Git" />
</component>
</project>

27
.profile Normal file
View File

@ -0,0 +1,27 @@
# set GIT branch in bash
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
# ssh setup
SSH_ENV="$HOME/.ssh/agent-environment"
function start_agent {
echo "Initialising new SSH agent..."
/usr/bin/ssh-agent | sed 's/^echo/#echo/' >"$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" >/dev/null
/usr/bin/ssh-add;
ssh-add ~/.ssh/gitea_ssh
}
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" >/dev/null
ps -ef | grep $SSH_AGENT_PID | grep ssh-agent$ >/dev/null || {
start_agent
}
else
start_agent
fi

View File

@ -1,12 +1,16 @@
#!/bin/bash #!/bin/bash
ENVIRONMENT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )/../../ ENV_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/../" &> /dev/null && pwd )
denv() { denv() {
if [ ! -z $1 ] if [ ! -z $1 ]
then then
$ENVIRONMENT_DIR/$1 if [[ "$1" == "setup" ]]; then
echo "SETUP IS ONLY ALLOWED ONCE AFTER CLOING THE ENVIRONMENT!!!"
exit 0
fi
$ENV_DIR/$1
else else
cd $ENVIRONMENT_DIR cd $ENV_DIR
fi fi
} }

72
bin/dexec Executable file
View File

@ -0,0 +1,72 @@
#!/bin/bash
denvexec() {
if [ $# -lt 1 ]; then
echo "Verwendung: denvexec <docker command>"
return 1
fi
local DOCKER_COMMAND="$@"
local ENV_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd )
echo ""
echo "Directory: ${ENV_DIR}"
#MAC
if [[ "$OSTYPE" == "darwin"* ]]; then
docker compose -f "${ENV_DIR}/docker/docker-compose-mac.yml" $DOCKER_COMMAND
echo "done"
#LINUX
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
docker compose -f "${ENV_DIR}/docker/docker-compose.yml" $DOCKER_COMMAND
echo "done"
else
echo "Dieses Skript wird auf deinem Gerät nicht unterstützt"
exit 1
fi
}
dexec() {
if [ $# -lt 2 ]; then
echo "Verwendung: dexec <system> <docker command>"
return 1
fi
local systemPart="${1%-*}" # before "-" e.g. auth / bee / etc
local typePart="${1##*-}" # after "-" e.g. backend / frontend
local SYSTEM_DIR="$typePart/$systemPart"
shift # removes first argument
local DOCKER_COMMAND="$@"
local ENV_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/.." &> /dev/null && pwd )
echo ""
echo "Directory: ${ENV_DIR}/systems/${SYSTEM_DIR}"
local DOT_ENV_PATH="${ENV_DIR}/systems/${SYSTEM_DIR}/.env"
#SET ENV VARIABLES FROM .ENV
if [ -e "$DOT_ENV_PATH" ]; then
export $(grep -v '^#' "$DOT_ENV_PATH" | xargs)
fi
#MAC
if [[ "$OSTYPE" == "darwin"* ]]; then
docker compose -f "${ENV_DIR}/systems/${SYSTEM_DIR}/docker/docker-compose-mac.yml" $DOCKER_COMMAND
echo "done"
#LINUX
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
docker compose -f "${ENV_DIR}/systems/${SYSTEM_DIR}/docker/docker-compose.yml" $DOCKER_COMMAND
echo "done"
else
echo "Dieses Skript wird auf deinem Gerät nicht unterstützt"
exit 1
fi
#UNSET ENV VARIABLES FROM .ENV
if [ -e "$DOT_ENV_PATH" ]; then
unset $(grep -v '^#' "$DOT_ENV_PATH" | sed -E 's/(.*)=.*/\1/' | xargs)
fi
}

View File

@ -1,28 +1,33 @@
#!/bin/bash #!/bin/bash
drun() { drun() {
# Überprüfen, ob die richtige Anzahl Argumente übergeben wurden
if [ $# -lt 2 ]; then if [ $# -lt 2 ]; then
echo "Verwendung: drun <Container-Name> <Befehl>" echo "Verwendung: drun <system> <run in docker container>"
return 1 return 1
fi fi
# Container-Namen extrahieren
local CONTAINER_NAME="$1" local CONTAINER_NAME="$1"
shift # Das erste Argument entfernen shift # Das erste Argument entfernen
# Den Rest der Argumente als Befehlszeichenfolge zusammenfügen
local COMMAND="$@" local COMMAND="$@"
# Container-ID mithilfe des Container-Namens finden
local CONTAINER_ID=$(docker ps -qf "name=$CONTAINER_NAME-app") local CONTAINER_ID=$(docker ps -qf "name=$CONTAINER_NAME-app")
# Überprüfen, ob der Container gefunden wurde
if [ -z "$CONTAINER_ID" ]; then if [ -z "$CONTAINER_ID" ]; then
echo "Container '$CONTAINER_NAME' wurde nicht gefunden." echo "Container '$CONTAINER_NAME' wurde nicht gefunden."
return 1 return 1
fi fi
# Befehl im Container ausführen
docker exec -it "$CONTAINER_ID" $COMMAND docker exec -it "$CONTAINER_ID" $COMMAND
} }
_drun_completion() {
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="start stop restart status"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -F _drun_completion drun

View File

@ -1,19 +0,0 @@
#!/bin/bash
COMMAND="$@"
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
echo "Execute ${COMMAND} in denv"
#MAC
if [[ "$OSTYPE" == "darwin"* ]]; then
docker compose -f "${SCRIPT_DIR}/../../docker/docker-compose-mac.yml" $COMMAND
#LINUX
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
docker compose -f "${SCRIPT_DIR}/../../docker/docker-compose.yml" $COMMAND
else
echo "Dieses Skript wird auf deinem Gerät nicht unterstützt"
exit 1
fi

View File

@ -1,20 +1,30 @@
#!/bin/bash #!/bin/bash
EXEC_DIR=$(pwd) COMMAND="$@"
FILE_TO_EXECUTE=$1 ENV_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )/../.." &> /dev/null && pwd )
if [ ! -z $1 ] source ${ENV_DIR}/bin/dexec
then
echo "Execute " $1 " in each system" if [ $# -lt 1 ]; then
else echo "Verwendung: foreachSystem up -d"
echo "Execute foreachSystem failed, because no parameter was provided" return 1
exit
fi fi
for SYSTEM in systems/*/*/ ; do for SYSTEM in $ENV_DIR/systems/*/*/ ; do
echo "executing ${FILE_TO_EXECUTE} in ${SYSTEM}" relative_path="${SYSTEM#*/systems/}"
cd $SYSTEM relative_path="${relative_path%/}"
./bin/script/$FILE_TO_EXECUTE
cd $EXEC_DIR typePart="${relative_path%/*}" # before "/" eg. backend / frontend
systemPart="${relative_path##*/}" # after "/" eg. bee / auth / etc
SYSTEM_CODE="$systemPart-$typePart"
DENV_COMMAND="dexec"
if [[ "$COMMAND" == "init" ]]; then
$ENV_DIR/systems/$typePart/$systemPart/bin/script/init
elif [[ "$COMMAND" == "update" ]]; then
$ENV_DIR/systems/$typePart/$systemPart/bin/script/update
else
$DENV_COMMAND $SYSTEM_CODE $COMMAND
fi
done done

View File

@ -1,10 +0,0 @@
#!/bin/bash
docker stop $(docker ps -aq)
docker system prune -f
docker network create homepage
./pull
./bin/script/init

View File

@ -4,11 +4,7 @@ EXEC_DIR=$(pwd)
echo "Execute git pull in each system" echo "Execute git pull in each system"
#echo "denv"
#git pull
for SYSTEM in $EXEC_DIR/systems/*/*/ ; do for SYSTEM in $EXEC_DIR/systems/*/*/ ; do
echo $SYSTEM
cd $SYSTEM cd $SYSTEM
git pull git pull
cd $EXEC_DIR cd $EXEC_DIR

View File

@ -1,54 +0,0 @@
#!/bin/bash
echo $OSTYPE
#MAC
if [[ "$OSTYPE" == "darwin"* ]]; then
home="$HOME"
#LINUX
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
home="$HOME"
else
echo "Dieses Skript wird nicht unter macOS oder Linux unterstützt."
exit 1
fi
script_path=$(pwd)
environment=$(basename $script_path)
echo "source ~/$environment/bin/script/denv" >> ~/.profile
echo "source ~/$environment/bin/script/drun" >> ~/.profile
echo "source ~/$environment/bin/script/git" >> ~/.profile
echo Running in $script_path
echo environment = $environment
# $1 = frontend/backend
# $2 = repo name
fetch_repository() {
if [ ! -d "$1" ];
then
echo "Create $1"
mkdir -p "$1"
fi
cd $1
if [ ! -d "$2" ];
then
gh repo clone TheFlawww/$2-$1 $2
fi
cd $script_path
}
#fetch all backends
fetch_repository backend weedkeeper
#fetch all frontends
fetch_repository frontend weedkeeper
# initialize
./bin/script/init

View File

@ -1,14 +0,0 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
$SCRIPT_DIR/pull
source $SCRIPT_DIR/../source
drun weedkeeper-backend composer da
drun weedkeeper-backend composer install
drun weedkeeper-backend composer dmm
drun weedkeeper-backend composer console rbac:update
drun weedkeeper-frontend npm i
drun weedkeeper-frontend npm run build

View File

@ -1,7 +0,0 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
source $SCRIPT_DIR/denv
source $SCRIPT_DIR/drun
source $SCRIPT_DIR/git

10
build
View File

@ -1,4 +1,10 @@
#!/bin/bash #!/bin/bash
./bin/script/exec build SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
./bin/script/foreachSystem build
source $SCRIPT_DIR/bin/denv
source $SCRIPT_DIR/bin/dexec
source $SCRIPT_DIR/bin/drun
denvexec build
$SCRIPT_DIR/bin/script/foreachSystem build

2
cron/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

2
docker/.gitignore vendored
View File

@ -1 +1,3 @@
letsencrypt/* letsencrypt/*
docker-compose-mac.yml
docker-compose.yml

View File

@ -1,12 +1,12 @@
networks: networks:
weedkeeper: template:
name: weedkeeper name: template
services: services:
traefik: traefik:
image: traefik:v3.0 image: traefik:v3.0
networks: networks:
- weedkeeper - template
command: command:
- "--providers.docker=true" - "--providers.docker=true"
- "--entrypoints.web.address=:80" - "--entrypoints.web.address=:80"
@ -24,4 +24,4 @@ services:
- "./letsencrypt:/letsencrypt" - "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock" - "/var/run/docker.sock:/var/run/docker.sock"
labels: labels:
- "traefik.http.routers.traefik.rule=Host(`traefik.weedkeeper.de`)" - "traefik.http.routers.traefik.rule=Host(`traefik.template.local`)"

View File

@ -0,0 +1,27 @@
networks:
template:
name: template
services:
traefik:
image: traefik:v3.0
networks:
- template
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.le.acme.tlschallenge=true"
- "--certificatesresolvers.le.acme.email=florian_feistel@outlook.de"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- "./letsencrypt:/letsencrypt"
- "/var/run/docker.sock:/var/run/docker.sock"
labels:
- "traefik.http.routers.traefik.rule=Host(`traefik.template.local`)"

13
docker/install Executable file
View File

@ -0,0 +1,13 @@
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
sudo apt install docker-compose -y
sudo usermod -aG docker $USER

10
down
View File

@ -1,4 +1,10 @@
#!/bin/bash #!/bin/bash
./bin/script/exec down SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
./bin/script/foreachSystem down
source $SCRIPT_DIR/bin/denv
source $SCRIPT_DIR/bin/dexec
source $SCRIPT_DIR/bin/drun
$SCRIPT_DIR/bin/script/foreachSystem down
denvexec down

33
init
View File

@ -1,4 +1,33 @@
#!/bin/bash #!/bin/bash
./bin/script/exec init SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
./bin/script/foreachSystem init
source $SCRIPT_DIR/bin/denv
source $SCRIPT_DIR/bin/dexec
source $SCRIPT_DIR/bin/drun
EXIT=0
# Check docker-compose.yml file
if [ ! -f "$SCRIPT_DIR/docker/docker-compose.yml" ]
then
cp "$SCRIPT_DIR/docker/docker-compose.yml.dist" "$SCRIPT_DIR/docker/docker-compose.yml"
EXIT=1
fi
# Check docker-compose-mac.yml file
if [ ! -f "$SCRIPT_DIR/docker/docker-compose-mac.yml" ]
then
cp "$SCRIPT_DIR/docker/docker-compose-mac.yml.dist" "$SCRIPT_DIR/docker/docker-compose-mac.yml"
EXIT=1
fi
if [ $EXIT -eq 1 ]
then
echo "docker-compose files created, please change variables and call init again"
exit 1
fi
denvexec up -d
$SCRIPT_DIR/bin/script/foreachSystem init

View File

@ -1,37 +0,0 @@
import asyncio
import json
from datetime import datetime
from bleak import BleakScanner
async def handle_discovery(device, advertisement_data):
if device.address == "DB:17:6C:7D:81:F6":
keys = list(advertisement_data.manufacturer_data.keys())
humKey = keys[len(keys)-1]
battery = humKey & 0xFF
temperature = (humKey >> 8)/10.0
if humKey < 32767: #If Key is bigger than a smallint, temperature is lower than one byte (256)
temperature = temperature + 25.6
data = {}
data['temp'] = temperature
data['battery'] = battery / 256.0;
data['humid'] = advertisement_data.manufacturer_data[humKey][1]
data['timestamp'] = datetime.now().strftime("%d.%m.%Y %H:%M:%S")
jsonString = json.dumps(data)
with open("/home/flo/local-weedkeeper/systems/backend/weedkeeper/var/temperature.data", "a") as dataFile:
dataFile.write(jsonString+",\n")
#print(jsonString)
await scanner.stop()
async def scan():
global scanner
scanner = BleakScanner(handle_discovery)
await scanner.start()
await asyncio.sleep(10)
await scanner.stop()
async def main():
await scan()
asyncio.run(main())

33
setup Executable file
View File

@ -0,0 +1,33 @@
#!/bin/bash
# THIS SCRIPT NEEDS TO BE EXECUTED FIRST AFTER CLONING THE ENVIRONMENT AND SHALL NEVER BE EXECUTED AGAIN
# IT SETS UP THE ENVIRONMENT IN THE PROFILE TO ENABLE CORE COMMANDS LIKE denv drun dexec
# MAC
if [[ "$OSTYPE" == "darwin"* ]]; then
home="$HOME"
# LINUX
elif [[ "$OSTYPE" == "linux-gnu" ]]; then
home="$HOME"
else
echo "Dieses Skript wird auf deinem Gerät nicht unterstützt"
exit 1
fi
ENV_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
echo "Setup dev-env..."
echo "Adding sourcing of environment commands to .profile"
echo "" >> ~/.profile
echo "# denv commands setup" >> ~/.profile
echo "source $ENV_DIR/bin/denv" >> ~/.profile
echo "source $ENV_DIR/bin/drun" >> ~/.profile
echo "source $ENV_DIR/bin/dexec" >> ~/.profile
echo "source $ENV_DIR/bin/git" >> ~/.profile
echo "appending dev-env .profile to .profile"
echo "" >> ~/.profile
cat .profile >> ~/.profile

10
stop
View File

@ -1,4 +1,10 @@
#!/bin/bash #!/bin/bash
./bin/script/exec stop SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
./bin/script/foreachSystem stop
source $SCRIPT_DIR/bin/denv
source $SCRIPT_DIR/bin/dexec
source $SCRIPT_DIR/bin/drun
$SCRIPT_DIR/bin/script/foreachSystem stop
denvexec stop

10
up
View File

@ -1,4 +1,10 @@
#!/bin/bash #!/bin/bash
./bin/script/exec up -d SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
./bin/script/foreachSystem up
source $SCRIPT_DIR/bin/denv
source $SCRIPT_DIR/bin/dexec
source $SCRIPT_DIR/bin/drun
denvexec up -d
$SCRIPT_DIR/bin/script/foreachSystem up -d

33
update Executable file
View File

@ -0,0 +1,33 @@
#!/bin/bash
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
source $SCRIPT_DIR/bin/denv
source $SCRIPT_DIR/bin/dexec
source $SCRIPT_DIR/bin/drun
EXIT=0
# Check docker-compose.yml file
if [ ! -f "$SCRIPT_DIR/docker/docker-compose.yml" ]
then
cp "$SCRIPT_DIR/docker/docker-compose.yml.dist" "$SCRIPT_DIR/docker/docker-compose.yml"
EXIT=1
fi
# Check docker-compose-mac.yml file
if [ ! -f "$SCRIPT_DIR/docker/docker-compose-mac.yml" ]
then
cp "$SCRIPT_DIR/docker/docker-compose-mac.yml.dist" "$SCRIPT_DIR/docker/docker-compose-mac.yml"
EXIT=1
fi
if [ $EXIT -eq 1 ]
then
echo "docker-compose files created, please change variables and call update again"
exit 1
fi
denvexec up -d
$SCRIPT_DIR/bin/script/foreachSystem update