diff --git a/app/pom.xml b/app/pom.xml
index e7b356c..de518f1 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -36,7 +36,7 @@
com.hierynomus
sshj
- 0.39.0
+ 0.40.0
@@ -49,6 +49,45 @@
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 1.4
+
+
+ package
+
+ shade
+
+
+
+
+
+
+ *:*
+
+ module-info.class
+ JDOMAbout*class
+ META-INF/*.SF
+ META-INF/*.DSA
+ META-INF/*.RSA
+
+
+
+
+
+
+ ru.kirillius.pf.sdn.App
+
+
+
+ true
+
+ shaded
+
+
+
org.codehaus.mojo
exec-maven-plugin
@@ -69,6 +108,10 @@
+
+
+
+
diff --git a/launcher.sh b/launcher.sh
new file mode 100644
index 0000000..d374111
--- /dev/null
+++ b/launcher.sh
@@ -0,0 +1,155 @@
+#!/bin/sh
+
+# Пути по умолчанию
+DEFAULT_CFGPATH="/etc/pfsdn.json"
+DEFAULT_LIBRARY="/var/lib/pfsdn"
+DEFAULT_REPO_URL="https://repo.kirillius.ru/apps/pf/"
+
+# Функция для извлечения значений из аргументов
+get_arg_value() {
+ local arg_name="$1"
+ local default_value="$2"
+ local value="$default_value"
+
+ # Ищем аргумент в формате -arg=value или --arg=value
+ for arg in "${@:3}"; do
+ case "$arg" in
+ -$arg_name=*|--$arg_name=*)
+ value="${arg#*=}"
+ break
+ ;;
+ esac
+ done
+ echo "$value"
+}
+
+# Получаем пути из аргументов или используем значения по умолчанию
+CFGPATH=$(get_arg_value "c" "$DEFAULT_CFGPATH" "$@")
+LIBRARY=$(get_arg_value "l" "$DEFAULT_LIBRARY" "$@")
+REPO_URL=$(get_arg_value "r" "$DEFAULT_REPO_URL" "$@")
+
+# Выводим рабочие каталоги
+echo "Config path: $CFGPATH"
+echo "Library path: $LIBRARY"
+echo "Repository URL: $REPO_URL"
+
+# Проверяем наличие Java в системе и версию
+if ! command -v java >/dev/null 2>&1; then
+ echo "Java not found. Please install java, openjdk or JRE" >&2
+ exit 1
+fi
+
+# Проверяем версию Java (должна быть >= 21)
+check_java_version() {
+ local java_version
+ java_version=$(java -version 2>&1 | head -n 1 | sed 's/.*"\([0-9]*\)\.[0-9]*\.[0-9]*".*/\1/')
+
+ if [ -z "$java_version" ] || [ "$java_version" -lt 21 ]; then
+ echo "Java version 21 or higher is required. Found version: $java_version" >&2
+ return 1
+ fi
+ echo "Java version check passed: $java_version"
+ return 0
+}
+
+if ! check_java_version; then
+ exit 1
+fi
+
+# Проверяем и создаем директорию LIBRARY если не существует
+if [ ! -d "$LIBRARY" ]; then
+ echo "Library directory not found: $LIBRARY"
+ echo "Creating directory: $LIBRARY"
+ if ! mkdir -p "$LIBRARY"; then
+ echo "Failed to create library directory: $LIBRARY" >&2
+ exit 1
+ fi
+ echo "Directory created successfully"
+fi
+
+# Функция для поиска последней версии в директории
+find_local_version() {
+ find "$LIBRARY" -maxdepth 1 -name "*.pfapp" -type f | grep -E '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.pfapp' | sort -V | tail -n 1
+}
+
+# Функция для скачивания версии с веб-страницы
+download_latest_version() {
+ local repo_url="$REPO_URL"
+ echo "Searching for latest version on $repo_url..."
+
+ # Получаем HTML страницу и извлекаем ссылки на .pfapp файлы
+ local latest_file=$(curl -s "$repo_url" | grep -oE 'href="[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.pfapp"' | sed 's/href="//g' | sed 's/"//g' | sort -V | tail -n 1)
+
+ if [ -z "$latest_file" ]; then
+ echo "No .pfapp files found on the repository" >&2
+ return 1
+ fi
+
+ local download_url="${repo_url}${latest_file}"
+ local local_path="$LIBRARY/$latest_file"
+
+ echo "Downloading version: $latest_file"
+ echo "From: $download_url"
+ echo "To: $local_path"
+
+ # Скачиваем файл
+ if curl -s -o "$local_path" "$download_url"; then
+ echo "Successfully downloaded $latest_file"
+ # Возвращаем ТОЛЬКО путь к файлу, без дополнительных сообщений
+ echo "$local_path"
+ else
+ echo "Failed to download $latest_file" >&2
+ return 1
+ fi
+}
+
+# Находим последнюю версию файла
+VER_FILE=$(find_local_version)
+
+# Если не нашли файлы локально, скачиваем с веб-страницы
+if [ -z "$VER_FILE" ]; then
+ echo "No local .pfapp files found, downloading from repository..."
+ # Сохраняем вывод функции в временную переменную, чтобы показать сообщения
+ DOWNLOAD_OUTPUT=$(download_latest_version)
+ if [ $? -ne 0 ]; then
+ echo "Failed to download application file" >&2
+ exit 1
+ fi
+ # Извлекаем последнюю строку (путь к файлу) из вывода
+ VER_FILE=$(echo "$DOWNLOAD_OUTPUT" | tail -n 1)
+
+ # Выводим все сообщения кроме последней строки
+ echo "$DOWNLOAD_OUTPUT" | head -n -1
+else
+ # Выводим информацию о найденной локальной версии
+ VER=$(basename "$VER_FILE")
+ VER="${VER%.pfapp}"
+ echo "Using local version: $VER"
+fi
+
+# Извлекаем только имя файла (без пути)
+VER=$(basename "$VER_FILE")
+
+# Убираем расширение .pfapp чтобы получить чистую версию
+VER="${VER%.pfapp}"
+
+# Выводим финальную информацию о версии
+echo "Starting application version: $VER"
+
+# Функция для запуска Java
+run_java() {
+ java -jar "$LIBRARY/$VER.pfapp" -c="$CFGPATH" -l="$LIBRARY" -r="$REPO_URL"
+}
+
+# Запускаем Java с возможностью перезапуска при коде возврата 303
+while true; do
+ run_java
+ EXIT_CODE=$?
+
+ if [ $EXIT_CODE -eq 303 ]; then
+ echo "Restarting application (exit code 303)..."
+ continue
+ else
+ exit $EXIT_CODE
+ fi
+done
\ No newline at end of file
diff --git a/ovpn-connector/pom.xml b/ovpn-connector/pom.xml
index 3a04069..0b3cc11 100644
--- a/ovpn-connector/pom.xml
+++ b/ovpn-connector/pom.xml
@@ -52,11 +52,34 @@
- true
+ true
+
shaded
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ 3.1.0
+
+
+ package
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 0d4b7b0..fdbf0b9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,62 @@
UTF-8
+
+
+
+ assembly
+
+
+ project.packaging
+ pom
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ 3.1.0
+
+
+ post-build-assembly
+ verify
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -41,6 +97,8 @@
+
+
@@ -96,4 +154,5 @@
+
\ No newline at end of file
diff --git a/unix-wrapper.sh b/unix-wrapper.sh
new file mode 100644
index 0000000..d3eef3a
--- /dev/null
+++ b/unix-wrapper.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Проверяем наличие Java в системе
+if ! which java >/dev/null 2>&1; then
+ echo "Java not found. Please install java, openjdk or JRE" >&2
+ exit 1
+fi
+
+# Получаем полный путь к текущему скрипту
+SCRIPT_PATH="$0"
+
+# Запускаем Java с текущим скриптом как параметром и всеми переданными аргументами
+java -jar "$SCRIPT_PATH" $@
+
+exit
+
+