mirror of
https://github.com/euzu/tuliprox.git
synced 2026-10-26 08:42:16 +01:00
react frontend deleted
This commit is contained in:
+1
-1
@@ -11,4 +11,4 @@ docker/
|
||||
frontend/node_modules/
|
||||
frontend/build/
|
||||
|
||||
webui/dist
|
||||
frontend/dist
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
[workspace]
|
||||
members = ["backend", "webui", "shared"]
|
||||
members = ["backend", "frontend", "shared"]
|
||||
resolver = "2"
|
||||
|
||||
[profile.release]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
echo "building binary for aarch64"
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" cross build -p tuliprox --release --target aarch64-unknown-linux-musl
|
||||
cd ./webui || exit 1
|
||||
cd ./frontend || exit 1
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
echo "building binary for armv7"
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" cross build -p tuliprox --release --target armv7-unknown-linux-musleabihf
|
||||
cd ./webui || exit 1
|
||||
cd ./frontend || exit 1
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" cross build -p tuliprox --release --target x86_64-apple-darwin
|
||||
cd ./webui || exit 1
|
||||
cd ./frontend || exit 1
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
cd ./webui && rm -rf dist && env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
cd ./frontend && rm -rf dist && env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
|
||||
@@ -7,7 +7,7 @@ BIN_DIR="${WORKING_DIR}/bin"
|
||||
RESOURCES_DIR="${WORKING_DIR}/resources"
|
||||
DOCKER_DIR="${WORKING_DIR}/docker"
|
||||
BACKEND_DIR="${WORKING_DIR}/backend"
|
||||
FRONTEND_DIR="${WORKING_DIR}/webui"
|
||||
FRONTEND_DIR="${WORKING_DIR}/frontend"
|
||||
FRONTEND_BUILD_DIR="${FRONTEND_DIR}/dist"
|
||||
declare -A ARCHITECTURES=(
|
||||
[LINUX]=x86_64-unknown-linux-musl
|
||||
|
||||
@@ -28,7 +28,7 @@ BIN_DIR="${WORKING_DIR}/bin"
|
||||
RESOURCES_DIR="${WORKING_DIR}/resources"
|
||||
DOCKER_DIR="${WORKING_DIR}/docker"
|
||||
BACKEND_DIR="${WORKING_DIR}/backend"
|
||||
FRONTEND_DIR="${WORKING_DIR}/webui"
|
||||
FRONTEND_DIR="${WORKING_DIR}/frontend"
|
||||
FRONTEND_BUILD_DIR="${FRONTEND_DIR}/dist"
|
||||
TARGET=aarch64-unknown-linux-musl
|
||||
VERSION=$(grep -Po '^version\s*=\s*"\K[0-9\.]+' "${BACKEND_DIR}/Cargo.toml" || true)
|
||||
|
||||
@@ -7,7 +7,7 @@ BIN_DIR="${WORKING_DIR}/bin"
|
||||
RESOURCES_DIR="${WORKING_DIR}/resources"
|
||||
DOCKER_DIR="${WORKING_DIR}/docker"
|
||||
BACKEND_DIR="${WORKING_DIR}/backend"
|
||||
FRONTEND_DIR="${WORKING_DIR}/webui"
|
||||
FRONTEND_DIR="${WORKING_DIR}/frontend"
|
||||
FRONTEND_BUILD_DIR="${FRONTEND_DIR}/dist"
|
||||
TARGET=x86_64-unknown-linux-musl
|
||||
VERSION=$(grep -Po '^version\s*=\s*"\K[0-9\.]+' "${BACKEND_DIR}/Cargo.toml" || true)
|
||||
|
||||
+1
-1
@@ -5,4 +5,4 @@ if [ "$(uname)" != "Linux" ]; then
|
||||
else
|
||||
cargo build -p tuliprox --release
|
||||
fi
|
||||
cd "./webui" && trunk build --release
|
||||
cd "./frontend" && trunk build --release
|
||||
@@ -2,4 +2,4 @@
|
||||
DEFAULT_TARGET="x86_64-unknown-linux-musl"
|
||||
TARGET="${1:-$DEFAULT_TARGET}"
|
||||
env RUSTFLAGS="--remap-path-prefix $HOME=~" cross build -p tuliprox --release --target "$TARGET"
|
||||
cd "./webui" && env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
cd "./frontend" && env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
+1
-1
@@ -3,4 +3,4 @@ env RUSTFLAGS="--remap-path-prefix $HOME=~" cargo build -p tuliprox --release --
|
||||
# cross build, is only working with cargo clean
|
||||
# env RUSTFLAGS="--remap-path-prefix $HOME=~" cross build -p tuliprox --release --target x86_64-pc-windows-gnu
|
||||
|
||||
cd "./webui" && env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
cd "./frontend" && env RUSTFLAGS="--remap-path-prefix $HOME=~" trunk build --release
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ set -o pipefail
|
||||
WORKING_DIR=$(pwd)
|
||||
RESOURCES_DIR="$WORKING_DIR/resources"
|
||||
RELEASE_DIR="$WORKING_DIR/release"
|
||||
FRONTEND_DIR="${WORKING_DIR}/webui"
|
||||
FRONTEND_DIR="${WORKING_DIR}/frontend"
|
||||
FRONTEND_BUILD_DIR="${FRONTEND_DIR}/dist"
|
||||
|
||||
if ! command -v cargo-set-version &> /dev/null
|
||||
|
||||
+4
-4
@@ -58,7 +58,7 @@ RUN cargo install --locked trunk wasm-bindgen-cli
|
||||
# Now copy the actual source code and build the project
|
||||
COPY . .
|
||||
|
||||
WORKDIR /src/webui
|
||||
WORKDIR /src/frontend
|
||||
|
||||
# Run Trunk build
|
||||
RUN trunk build --release
|
||||
@@ -135,7 +135,7 @@ RUN rustup update && rustup target add $RUST_TARGET
|
||||
|
||||
# Create the final application layout to mimic production
|
||||
WORKDIR /app
|
||||
COPY --from=trunk-build /src/webui/dist ./web
|
||||
COPY --from=trunk-build /src/frontend/dist ./web
|
||||
COPY --from=resource-build /src/resources ./resources
|
||||
|
||||
# Create a separate directory for the source code
|
||||
@@ -170,7 +170,7 @@ COPY --from=rust-build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
|
||||
# App
|
||||
WORKDIR /app
|
||||
COPY --from=rust-build /src/target/${RUST_TARGET}/release/tuliprox ./tuliprox
|
||||
COPY --from=trunk-build /src/webui/dist ./web
|
||||
COPY --from=trunk-build /src/frontend/dist ./web
|
||||
COPY --from=resource-build /src/resources ./resources
|
||||
|
||||
ENTRYPOINT ["/app/tuliprox"]
|
||||
@@ -195,7 +195,7 @@ RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=rust-build /src/target/${RUST_TARGET}/release/tuliprox ./tuliprox
|
||||
COPY --from=trunk-build /src/webui/dist ./web
|
||||
COPY --from=trunk-build /src/frontend/dist ./web
|
||||
COPY --from=resource-build /src/resources ./resources
|
||||
|
||||
ENTRYPOINT ["/sbin/tini", "--", "/app/tuliprox"]
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"env": {
|
||||
"jest/globals": true
|
||||
},
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest",
|
||||
"eslint-config-prettier",
|
||||
"plugin:react/recommended"
|
||||
],
|
||||
"settings": {
|
||||
"react": {
|
||||
"createClass": "createReactClass",
|
||||
"pragma": "React",
|
||||
"fragment": "Fragment",
|
||||
"version": "detect",
|
||||
"flowVersion": "detect"
|
||||
}
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018,
|
||||
"sourceType": "module",
|
||||
"ecmaFeatures": {
|
||||
"jsx": true
|
||||
}
|
||||
},
|
||||
"plugins": [
|
||||
"import",
|
||||
"node",
|
||||
"react"
|
||||
],
|
||||
"rules": {
|
||||
"consistent-this": [
|
||||
"error",
|
||||
"self"
|
||||
],
|
||||
"@typescript-eslint/no-this-alias": [
|
||||
"error",
|
||||
{
|
||||
"allowDestructuring": false,
|
||||
"allowedNames": [
|
||||
"self"
|
||||
]
|
||||
}
|
||||
],
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/ban-ts-ignore": "off",
|
||||
"react/display-name": "off",
|
||||
"react/prop-types": "off"
|
||||
},
|
||||
"ignorePatterns": [ "*.test.tsc", "*.scss", "*.css" ]
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
{
|
||||
"name": "tuliprox",
|
||||
"description": "tuliprox",
|
||||
"author": "euzu",
|
||||
"version": "3.1.4",
|
||||
"private": true,
|
||||
"homepage": "",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"react-start": "react-scripts start",
|
||||
"react-build": "react-scripts build",
|
||||
"react-test": "react-scripts test --env=jsdom",
|
||||
"react-eject": "react-scripts eject",
|
||||
"build": "cross-env GENERATE_SOURCEMAP=false REACT_APP_STAGE=production PUBLIC_URL= yarn react-build",
|
||||
"start": "yarn react-start",
|
||||
"lint": "eslint --config eslintrc.json src/** --no-error-on-unmatched-pattern --quiet",
|
||||
"upgr": "yarn upgrade-interactive --latest",
|
||||
"analyze": "source-map-explorer 'build/static/js/*.js'"
|
||||
},
|
||||
"dependencies": {
|
||||
"file-saver": "2.0.5",
|
||||
"i18next": "25.0.1",
|
||||
"jwt-decode": "4.0.0",
|
||||
"mpegts.js": "1.8.0",
|
||||
"notistack": "3.0.2",
|
||||
"react": "19.1.0",
|
||||
"react-datepicker": "8.3.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-i18next": "15.4.1",
|
||||
"react-tag-input-component": "2.0.2",
|
||||
"rxjs": "7.8.2",
|
||||
"video.js": "8.22.0",
|
||||
"videojs-mpegtsjs": "1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/plugin-proposal-private-property-in-object": "7.21.11",
|
||||
"@babel/runtime": "7.27.0",
|
||||
"@types/file-saver": "2.0.7",
|
||||
"@types/react": "19.1.2",
|
||||
"@types/react-dom": "19.1.2",
|
||||
"@types/video.js": "7.3.58",
|
||||
"@typescript-eslint/eslint-plugin": "8.30.1",
|
||||
"@typescript-eslint/parser": "8.30.1",
|
||||
"babel-eslint": "10.1.0",
|
||||
"concurrently": "9.1.2",
|
||||
"cross-env": "7.0.3",
|
||||
"eslint": "9.25.0",
|
||||
"eslint-config-prettier": "10.0.1",
|
||||
"eslint-config-react-app": "7.0.1",
|
||||
"eslint-plugin-flowtype": "8.0.3",
|
||||
"eslint-plugin-import": "2.31.0",
|
||||
"eslint-plugin-jest": "28.11.0",
|
||||
"eslint-plugin-jsx-a11y": "6.10.2",
|
||||
"eslint-plugin-node": "11.1.0",
|
||||
"eslint-plugin-react": "7.37.4",
|
||||
"eslint-plugin-react-hooks": "5.2.0",
|
||||
"prettier": "3.5.3",
|
||||
"react-scripts": "5.0.1",
|
||||
"sass": "1.86.3",
|
||||
"source-map-explorer": "2.5.3",
|
||||
"typescript": "5.8.3",
|
||||
"wait-on": "8.0.3"
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"proxy": "http://localhost:8901"
|
||||
}
|
||||
@@ -56,4 +56,4 @@
|
||||
font-weight: 400;
|
||||
src: url('fonts/rubik-latin-400-normal.woff2') format('woff2'), url('fonts/rubik-latin-400-normal.woff') format('woff');
|
||||
unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "Live",
|
||||
"VOD": "VOD",
|
||||
"SERIES": "Serien",
|
||||
"SAVE": "Speichern",
|
||||
"SUBMIT": "Übernehmen",
|
||||
"OK": "Ok",
|
||||
"CANCEL": "Abbrechen",
|
||||
"SHOW_SELECTED": "Ausgewählte anzeigen",
|
||||
"SELECT_ALL": "Alle auswählen",
|
||||
"DESELECT_ALL": "Alle abwählen",
|
||||
"SEARCH": "Suche",
|
||||
"CLEAR": "Löschen",
|
||||
"REGEXP": "RegExp",
|
||||
"LOGOUT": "Abmelden",
|
||||
"CONFIGURATION": "Konfiguration",
|
||||
"HOST": "Host",
|
||||
"PORT": "Port",
|
||||
"WEB_ROOT": "Web-Root",
|
||||
"THREADS": "Threads",
|
||||
"WORKING_DIR": "Arbeitsverzeichnis",
|
||||
"BACKUP_DIR": "Backup-Verzeichnis",
|
||||
"UPDATE_ON_BOOT": "Update beim Start",
|
||||
"WEB_UI": "Web-UI",
|
||||
"SCHEDULES": "Zeitpläne",
|
||||
"SANITIZE_SENSITIVE_INFO": "Sensiblen Inhalt bereinigen",
|
||||
"ACTIVE_CLIENTS": "Aktive Clients",
|
||||
"RESOURCE_REWRITE_DISABLE": "Ressourcenumschreibung deaktivieren",
|
||||
"RECONNECT": "Erneut verbinden",
|
||||
"BUFFER_ENABLED": "Puffer aktiviert",
|
||||
"BUFFER_SIZE": "Puffergröße",
|
||||
"ENABLED": "Aktiviert",
|
||||
"SIZE": "Größe",
|
||||
"CACHE_DIR": "Cache-Verzeichnis",
|
||||
"NOTIFY_ON": "Benachrichtigen bei",
|
||||
"BOT_TOKEN": "Bot-Token",
|
||||
"CHAT_IDS": "Chat-IDs",
|
||||
"URL": "URL",
|
||||
"USER": "Benutzer",
|
||||
"USERS": "Benutzer",
|
||||
"TOKEN": "Token",
|
||||
"WEB_SEARCH_URL": "Web-Such-URL",
|
||||
"EXTENSIONS": "Erweiterungen",
|
||||
"HEADERS": "Header",
|
||||
"DIRECTORY": "Verzeichnis",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "In Verzeichnisse organisieren",
|
||||
"EPISODE_PATTERN": "Episoden-Muster",
|
||||
"API": "API",
|
||||
"MAIN": "Haupt",
|
||||
"REVERSE_PROXY": "ReverseProxy",
|
||||
"MESSAGING": "Nachrichten",
|
||||
"VIDEO": "Video",
|
||||
"EXAMPLES": "Beispiele",
|
||||
"UPDATE": "Aktualisieren",
|
||||
"START": "Starten",
|
||||
"CACHE": "Cache",
|
||||
"STREAM": "Stream",
|
||||
"LOG": "Protokoll",
|
||||
"CONFIG": "Konfiguration",
|
||||
"TELEGRAM": "Telegram",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Proxy",
|
||||
"REFRESH": "Aktualisieren",
|
||||
"STATUS": "Status",
|
||||
"MAX_CON": "MaxCon",
|
||||
"EXP_DATE": "Ablaufdatum",
|
||||
"USERNAME": "Benutzername",
|
||||
"PASSWORD": "Passwort",
|
||||
"SERVER": "Server",
|
||||
"TIMEZONE": "Zeitzone",
|
||||
"PATH": "Pfad",
|
||||
"MESSAGE": "Nachricht",
|
||||
"PROTOCOL": "Protokoll",
|
||||
"NAME": "Name"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "Benutzer-Gruppen-Editor"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"INVALID_REGEXP": "Ungültiger regulärer Ausdruck",
|
||||
"INVALID_FILETYPE": "Ungültiger Dateityp",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Erfolgreich heruntergeladen",
|
||||
"FAIL": "Fehler beim Herunterladen!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Playlist erfolgreich heruntergeladen",
|
||||
"FAIL": "Fehler beim Herunterladen der Playlist!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "Fehler beim Herunterladen der Serverkonfiguration!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "Hauptkonfiguration gespeichert!",
|
||||
"FAIL": "Fehler beim Speichern der Hauptkonfiguration!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Bouquet erfolgreich gespeichert",
|
||||
"FAIL": "Fehler beim Speichern des Bouquets!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Benutzer erfolgreich gespeichert",
|
||||
"FAIL": "Fehler beim Speichern des Benutzers!"
|
||||
},
|
||||
"PLAYLIST_UPDATE": {
|
||||
"SUCCESS": "Playlist Aktualisierung erfolgreich gestartet!",
|
||||
"FAIL": "Playlist Aktualisierung fehlgeschlagen!"
|
||||
},
|
||||
"SOURCE_SELECTOR": {
|
||||
"MISSING_SELECTION": "Kein Eintrag ausgewählt"
|
||||
}
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "Sie müssen neu starten, um Änderungen anzuwenden.",
|
||||
"SCHEDULE_EXAMPLE": "Beispiel für Zeitplan",
|
||||
"THREADS": "Threads: Lassen Sie es auf 0, wenn keine Probleme bestehen. Erhöhen Sie es, wenn Sie mehrere Anbieter haben. Der parallele Zugriff auf Ihren Anbieter kann zu einer Sperrung führen.",
|
||||
"WEB_ROOT": "Web-Root: Enthält die Web-UI-Dateien. Normalerweise befinden sie sich im gleichen Verzeichnis unter ./web"
|
||||
}
|
||||
}
|
||||
@@ -1,206 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "Live",
|
||||
"VOD": "VOD",
|
||||
"SERIES": "Series",
|
||||
"SAVE": "Save",
|
||||
"SUBMIT": "Submit",
|
||||
"OK": "Ok",
|
||||
"CANCEL": "Cancel",
|
||||
"CLOSE": "Close",
|
||||
"SHOW_SELECTED": "Show selected",
|
||||
"SELECT_ALL": "Select All",
|
||||
"DESELECT_ALL": "Deselect all",
|
||||
"SEARCH": "Search",
|
||||
"CLEAR": "Clear",
|
||||
"REGEXP": "Regexp",
|
||||
"LOGOUT": "Logout",
|
||||
"CONFIGURATION": "Configuration",
|
||||
"HOST": "Host",
|
||||
"PORT": "Port",
|
||||
"WEB_ROOT": "Web-Root",
|
||||
"THREADS": "Threads",
|
||||
"WORKING_DIR": "Working dir",
|
||||
"BACKUP_DIR": "Backup dir",
|
||||
"UPDATE_ON_BOOT": "Update on boot",
|
||||
"WEB_UI": "Web UI",
|
||||
"USER_UI": "User UI",
|
||||
"WEB_UI_PATH": "Path prefix",
|
||||
"SCHEDULES": "Schedules",
|
||||
"SANITIZE_SENSITIVE_INFO": "Sanitize sensitive info",
|
||||
"ACTIVE_USER": "Active User",
|
||||
"RESOURCE_REWRITE_DISABLE": "Resource Rewrite disable",
|
||||
"DISABLE_REFERER_HEADER": "Referer header disable",
|
||||
"RECONNECT": "Reconnect",
|
||||
"THROTTLE": "Throttle",
|
||||
"GRACE_PERIOD": "Grace period ms",
|
||||
"GRACE_PERIOD_TIMEOUT": "Grace period timeout sec",
|
||||
"BUFFER_ENABLED": "Buffer Enabled",
|
||||
"BUFFER_SIZE": "Buffer Size",
|
||||
"ENABLED": "Enabled",
|
||||
"SIZE": "Size",
|
||||
"CACHE_DIR": "Cache dir",
|
||||
"NOTIFY_ON": "Notify on",
|
||||
"BOT_TOKEN": "Bot Token",
|
||||
"CHAT_IDS": "Chat Ids",
|
||||
"URL": "Url",
|
||||
"USER": "User",
|
||||
"USERS": "Users",
|
||||
"TOKEN": "Token",
|
||||
"WEB_SEARCH_URL": "Web Search Url",
|
||||
"EXTENSIONS": "Extensions",
|
||||
"HEADERS": "Headers",
|
||||
"DIRECTORY": "Directory",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "Organize Into Directorie",
|
||||
"EPISODE_PATTERN": "Episode Pattern",
|
||||
"API": "Api",
|
||||
"MAIN": "Main",
|
||||
"REVERSE_PROXY": "ReverseProxy",
|
||||
"MESSAGING": "Messaging",
|
||||
"VIDEO": "Video",
|
||||
"EXAMPLES": "Examples",
|
||||
"UPDATE": "Update",
|
||||
"START": "Start",
|
||||
"CACHE": "Cache",
|
||||
"STREAM": "Stream",
|
||||
"LOG": "Log",
|
||||
"LOG_LEVEL": "Log level",
|
||||
"CONFIG": "Config",
|
||||
"TELEGRAM": "Telegram",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Proxy",
|
||||
"REFRESH": "Refresh",
|
||||
"STATUS": "Status",
|
||||
"MAX_CON": "MaxCon",
|
||||
"EXP_DATE": "ExpDate",
|
||||
"USERNAME": "Username",
|
||||
"PASSWORD": "Password",
|
||||
"SERVER": "Server",
|
||||
"TIMEZONE": "Timezone",
|
||||
"PATH": "Path",
|
||||
"MESSAGE": "Message",
|
||||
"PROTOCOL": "Protocol",
|
||||
"NAME": "Name",
|
||||
"API_PROXY": "Api-Proxy",
|
||||
"INFINITE": "Infinite",
|
||||
"ONE_YEAR": "One year",
|
||||
"SELF_HOSTED": "Self Hosted",
|
||||
"PROVIDER": "Provider",
|
||||
"CUSTOM": "Custom",
|
||||
"XTREAM_CODES": "xtream codes",
|
||||
"XC": "xc",
|
||||
"M3U": "m3u",
|
||||
"PLAYLIST_BROWSER": "Playlist Browser",
|
||||
"RATE_LIMIT": "Rate Limit",
|
||||
"PERIOD_MILLIS": "Period Millis",
|
||||
"BURST_SIZE": "Burst Size",
|
||||
"WEB_AUTH": "Auth",
|
||||
"ISSUER": "Issuer",
|
||||
"SECRET": "Secret",
|
||||
"USERFILE": "Userfile",
|
||||
"UI_ENABLED": "UI",
|
||||
"PLAYER_SERVER": "Player Server",
|
||||
"VERSION": "Version",
|
||||
"SERVER_TIME": "Server time",
|
||||
"BUILD_TIME": "Build time",
|
||||
"MEMORY": "Memory",
|
||||
"ACTIVE_USERS": "Active users",
|
||||
"ACTIVE_USER_CONNECTIONS": "Active user conn...",
|
||||
"ACTIVE_PROVIDER_CONNECTIONS": "Active provider conn...",
|
||||
"IP_CHECK": "IP Check",
|
||||
"URL_IPV4": "Url IPv4",
|
||||
"URL_IPV6": "Url IPv6",
|
||||
"PATTERN_IPV4": "Pattern IPv4",
|
||||
"PATTERN_IPV6": "Pattern IPv6",
|
||||
"IPv4": "IPv4",
|
||||
"IPv6": "IPv6",
|
||||
"IP": "IP",
|
||||
"TARGET": "Target",
|
||||
"TARGETS": "Targets",
|
||||
"NOTES": "Notes"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "User group editor"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"NO_CONTENT": "No content",
|
||||
"INVALID_REGEXP": "Invalid regexp",
|
||||
"INVALID_FILETYPE": "Invalid filetype",
|
||||
"TARGET_NOT_EXISTS": "Target does not exist",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Successfully downloaded",
|
||||
"FAIL": "Failed to download!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Successfully downloaded playlist",
|
||||
"FAIL": "Failed to download playlist!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "Failed to download server config!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "Main config saved!",
|
||||
"FAIL": "Failed to save main config!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Successfully saved bouquet",
|
||||
"FAIL": "Failed to save bouquet!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Successfully saved user",
|
||||
"FAIL": "Failed to save user!",
|
||||
"USERNAME_REQUIRED": "Username required",
|
||||
"DUPLICATE_USERNAME": "Duplicate username!",
|
||||
"DUPLICATE_TOKEN": "Duplicate token!",
|
||||
"TARGET_NOT_FOUND": "Target not found!",
|
||||
"MAX_CONNECTIONS_INVALID": "MaxConnections invalid"
|
||||
}
|
||||
},
|
||||
"PLAYLIST_UPDATE": {
|
||||
"SUCCESS": "Successfully started playlist update!",
|
||||
"FAIL": "Playlist update failed!"
|
||||
},
|
||||
"SOURCE_SELECTOR": {
|
||||
"MISSING_SELECTION": "No entry selected"
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "You need to restart to apply changes.",
|
||||
"SCHEDULE_EXAMPLE": "Schedule example",
|
||||
"THREADS": "Threads: keep it 0 if you have no problems. Increase it if you have multiple providers. Accessing you provider parallel can cause a ban.",
|
||||
"WEB_ROOT": "Web-Root: Contains the web-ui files. They are normally placed in the same directory under ./web"
|
||||
},
|
||||
"HINT": {
|
||||
"CONFIG": {
|
||||
"API_PROXY": {
|
||||
"PATH": "URL path prefix"
|
||||
},
|
||||
"USER": {
|
||||
"TARGET_FORCE_REDIRECT": "Force Redirect is set for target"
|
||||
},
|
||||
"LOG": {
|
||||
"ACTIVE_USER": "Activates active user info log"
|
||||
},
|
||||
"PROXY": {
|
||||
"RESOURCE_REWRITE_DISABLE": "If activated, the URL rewrite of resources in reverse proxy mode is disabled",
|
||||
"DISABLE_REFERER_HEADER": "If activated, the referer header is not sent to the provider",
|
||||
"THROTTLE": "Supported units are KB/s,MB/s,KiB/s,MiB/s,kbps,mbps,Mibps"
|
||||
},
|
||||
"WEB_UI": {
|
||||
"PATH": "Configuration of a path prefix, allowing it to be accessed behind a reverse proxy under a custom subpath. like https://yourdomain.com/tuliprox"
|
||||
}
|
||||
}
|
||||
},
|
||||
"SETUP":{
|
||||
"LABEL": {
|
||||
"NEXT": "Next",
|
||||
"BACK": "Back",
|
||||
"FINISH_SETUP": "Finish Setup"
|
||||
},
|
||||
"MSG": {
|
||||
"WELCOME": "Welcome to tuliprox setup. This wizard will guide you through the initial setup process."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,112 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "En vivo",
|
||||
"VOD": "VOD",
|
||||
"SERIES": "Series",
|
||||
"SAVE": "Guardar",
|
||||
"SHOW_SELECTED": "Mostrar seleccionados",
|
||||
"SELECT_ALL": "Seleccionar todo",
|
||||
"DESELECT_ALL": "Deseleccionar todo",
|
||||
"SEARCH": "Buscar",
|
||||
"CLEAR": "Borrar",
|
||||
"REGEXP": "Expresión regular",
|
||||
"LOGOUT": "Cerrar sesión",
|
||||
"CONFIGURATION": "Configuración",
|
||||
"HOST": "Host",
|
||||
"PORT": "Puerto",
|
||||
"WEB_ROOT": "Raíz web",
|
||||
"THREADS": "Hilos",
|
||||
"WORKING_DIR": "Directorio de trabajo",
|
||||
"BACKUP_DIR": "Directorio de respaldo",
|
||||
"UPDATE_ON_BOOT": "Actualizar al arrancar",
|
||||
"WEB_UI": "Interfaz web",
|
||||
"SCHEDULES": "Horarios",
|
||||
"SANITIZE_SENSITIVE_INFO": "Sanitizar información sensible",
|
||||
"ACTIVE_CLIENTS": "Clientes activos",
|
||||
"RESOURCE_REWRITE_DISABLE": "Desactivar reescritura de recursos",
|
||||
"RECONNECT": "Reconectar",
|
||||
"BUFFER_ENABLED": "Búfer activado",
|
||||
"BUFFER_SIZE": "Tamaño del búfer",
|
||||
"ENABLED": "Habilitado",
|
||||
"SIZE": "Tamaño",
|
||||
"CACHE_DIR": "Directorio de caché",
|
||||
"NOTIFY_ON": "Notificar en",
|
||||
"BOT_TOKEN": "Token del bot",
|
||||
"CHAT_IDS": "IDs de chat",
|
||||
"URL": "URL",
|
||||
"USER": "Usuario",
|
||||
"TOKEN": "Token",
|
||||
"WEB_SEARCH_URL": "URL de búsqueda web",
|
||||
"EXTENSIONS": "Extensiones",
|
||||
"HEADERS": "Encabezados",
|
||||
"DIRECTORY": "Directorio",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "Organizar en directorios",
|
||||
"EPISODE_PATTERN": "Patrón de episodio",
|
||||
"API": "API",
|
||||
"MAIN": "Principal",
|
||||
"REVERSE_PROXY": "Proxy inverso",
|
||||
"MESSAGING": "Mensajería",
|
||||
"VIDEO": "Video",
|
||||
"EXAMPLES": "Ejemplos",
|
||||
"UPDATE": "Actualizar",
|
||||
"START": "Iniciar",
|
||||
"CACHE": "Caché",
|
||||
"STREAM": "Flujo",
|
||||
"LOG": "Registro",
|
||||
"CONFIG": "Configuración",
|
||||
"TELEGRAM": "Telegram",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Proxy",
|
||||
"REFRESH": "Actualizar",
|
||||
"STATUS": "Estado",
|
||||
"MAX_CON": "MaxCon",
|
||||
"EXP_DATE": "Fecha de expiración",
|
||||
"USERNAME": "Nombre de usuario",
|
||||
"PASSWORD": "Contraseña",
|
||||
"SERVER": "Servidor",
|
||||
"TIMEZONE": "Zona horaria",
|
||||
"PATH": "Ruta",
|
||||
"MESSAGE": "Mensaje",
|
||||
"PROTOCOL": "Protocolo",
|
||||
"NAME": "Nombre"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "Editor de bouquet de usuario"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"INVALID_REGEXP": "Expresión regular no válida",
|
||||
"INVALID_FILETYPE": "Tipo de archivo no válido",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Descargado con éxito",
|
||||
"FAIL": "¡Error al descargar!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Lista de reproducción descargada con éxito",
|
||||
"FAIL": "¡Error al descargar la lista de reproducción!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "¡Error al descargar la configuración del servidor!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "¡Configuración principal guardada!",
|
||||
"FAIL": "¡Error al guardar la configuración principal!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Bouquet guardado con éxito",
|
||||
"FAIL": "¡Error al guardar el bouquet!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Usuario guardado con éxito",
|
||||
"FAIL": "¡Error al guardar el usuario!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "Necesitas reiniciar para aplicar los cambios.",
|
||||
"SCHEDULE_EXAMPLE": "Ejemplo de horario",
|
||||
"THREADS": "Hilos: mantén en 0 si no tienes problemas. Aumenta si tienes varios proveedores. Acceder a tu proveedor en paralelo puede causar un baneo.",
|
||||
"WEB_ROOT": "Raíz web: contiene los archivos de la interfaz web. Normalmente se colocan en el mismo directorio bajo ./web"
|
||||
}
|
||||
}
|
||||
@@ -1,112 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "En direct",
|
||||
"VOD": "VOD",
|
||||
"SERIES": "Séries",
|
||||
"SAVE": "Enregistrer",
|
||||
"SHOW_SELECTED": "Afficher la sélection",
|
||||
"SELECT_ALL": "Tout sélectionner",
|
||||
"DESELECT_ALL": "Tout désélectionner",
|
||||
"SEARCH": "Rechercher",
|
||||
"CLEAR": "Effacer",
|
||||
"REGEXP": "Expression régulière",
|
||||
"LOGOUT": "Se déconnecter",
|
||||
"CONFIGURATION": "Configuration",
|
||||
"HOST": "Hôte",
|
||||
"PORT": "Port",
|
||||
"WEB_ROOT": "Racine Web",
|
||||
"THREADS": "Threads",
|
||||
"WORKING_DIR": "Répertoire de travail",
|
||||
"BACKUP_DIR": "Répertoire de sauvegarde",
|
||||
"UPDATE_ON_BOOT": "Mettre à jour au démarrage",
|
||||
"WEB_UI": "Interface Web",
|
||||
"SCHEDULES": "Programmes",
|
||||
"SANITIZE_SENSITIVE_INFO": "Assainir les informations sensibles",
|
||||
"ACTIVE_CLIENTS": "Clients actifs",
|
||||
"RESOURCE_REWRITE_DISABLE": "Désactiver la réécriture des ressources",
|
||||
"RECONNECT": "Se reconnecter",
|
||||
"BUFFER_ENABLED": "Mise en mémoire tampon activée",
|
||||
"BUFFER_SIZE": "Taille du tampon",
|
||||
"ENABLED": "Activé",
|
||||
"SIZE": "Taille",
|
||||
"CACHE_DIR": "Répertoire du cache",
|
||||
"NOTIFY_ON": "Notifier lorsqu'il y a",
|
||||
"BOT_TOKEN": "Jeton du bot",
|
||||
"CHAT_IDS": "Identifiants de chat",
|
||||
"URL": "URL",
|
||||
"USER": "Utilisateur",
|
||||
"TOKEN": "Jeton",
|
||||
"WEB_SEARCH_URL": "URL de recherche Web",
|
||||
"EXTENSIONS": "Extensions",
|
||||
"HEADERS": "En-têtes",
|
||||
"DIRECTORY": "Répertoire",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "Organiser dans des répertoires",
|
||||
"EPISODE_PATTERN": "Modèle d'épisode",
|
||||
"API": "API",
|
||||
"MAIN": "Principal",
|
||||
"REVERSE_PROXY": "Proxy inverse",
|
||||
"MESSAGING": "Messagerie",
|
||||
"VIDEO": "Vidéo",
|
||||
"EXAMPLES": "Exemples",
|
||||
"UPDATE": "Mettre à jour",
|
||||
"START": "Démarrer",
|
||||
"CACHE": "Cache",
|
||||
"STREAM": "Diffusion",
|
||||
"LOG": "Journal",
|
||||
"CONFIG": "Configuration",
|
||||
"TELEGRAM": "Telegram",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Proxy",
|
||||
"REFRESH": "Rafraîchir",
|
||||
"STATUS": "Statut",
|
||||
"MAX_CON": "MaxCon",
|
||||
"EXP_DATE": "Date d'expiration",
|
||||
"USERNAME": "Nom d'utilisateur",
|
||||
"PASSWORD": "Mot de passe",
|
||||
"SERVER": "Serveur",
|
||||
"TIMEZONE": "Fuseau horaire",
|
||||
"PATH": "Chemin",
|
||||
"MESSAGE": "Message",
|
||||
"PROTOCOL": "Protocole",
|
||||
"NAME": "Nom"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "Éditeur de bouquet utilisateur"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"INVALID_REGEXP": "Expression régulière invalide",
|
||||
"INVALID_FILETYPE": "Type de fichier invalide",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Téléchargement réussi",
|
||||
"FAIL": "Échec du téléchargement!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Liste de lecture téléchargée avec succès",
|
||||
"FAIL": "Échec du téléchargement de la liste de lecture!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "Échec du téléchargement de la configuration du serveur!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "Configuration principale enregistrée!",
|
||||
"FAIL": "Échec de l'enregistrement de la configuration principale!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Bouquet enregistré avec succès",
|
||||
"FAIL": "Échec de l'enregistrement du bouquet!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Utilisateur enregistré avec succès",
|
||||
"FAIL": "Échec de l'enregistrement de l'utilisateur!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "Vous devez redémarrer pour appliquer les modifications.",
|
||||
"SCHEDULE_EXAMPLE": "Exemple de programme",
|
||||
"THREADS": "Threads: laissez-le à 0 si vous n'avez aucun problème. Augmentez-le si vous avez plusieurs fournisseurs. L'accès parallèle à votre fournisseur peut entraîner un ban.",
|
||||
"WEB_ROOT": "Racine Web: Contient les fichiers de l'interface web. Ils sont normalement placés dans le même répertoire sous ./web"
|
||||
}
|
||||
}
|
||||
@@ -1,112 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "In diretta",
|
||||
"VOD": "VOD",
|
||||
"SERIES": "Serie",
|
||||
"SAVE": "Salva",
|
||||
"SHOW_SELECTED": "Mostra selezionati",
|
||||
"SELECT_ALL": "Seleziona tutto",
|
||||
"DESELECT_ALL": "Deseleziona tutto",
|
||||
"SEARCH": "Cerca",
|
||||
"CLEAR": "Cancella",
|
||||
"REGEXP": "Espressione regolare",
|
||||
"LOGOUT": "Esci",
|
||||
"CONFIGURATION": "Configurazione",
|
||||
"HOST": "Host",
|
||||
"PORT": "Porta",
|
||||
"WEB_ROOT": "Root web",
|
||||
"THREADS": "Thread",
|
||||
"WORKING_DIR": "Cartella di lavoro",
|
||||
"BACKUP_DIR": "Cartella di backup",
|
||||
"UPDATE_ON_BOOT": "Aggiorna all'avvio",
|
||||
"WEB_UI": "Interfaccia web",
|
||||
"SCHEDULES": "Orari",
|
||||
"SANITIZE_SENSITIVE_INFO": "Sanitizza informazioni sensibili",
|
||||
"ACTIVE_CLIENTS": "Client attivi",
|
||||
"RESOURCE_REWRITE_DISABLE": "Disabilita riscrittura risorse",
|
||||
"RECONNECT": "Riconnetti",
|
||||
"BUFFER_ENABLED": "Buffer attivato",
|
||||
"BUFFER_SIZE": "Dimensione buffer",
|
||||
"ENABLED": "Abilitato",
|
||||
"SIZE": "Dimensione",
|
||||
"CACHE_DIR": "Cartella cache",
|
||||
"NOTIFY_ON": "Notifica su",
|
||||
"BOT_TOKEN": "Token bot",
|
||||
"CHAT_IDS": "ID chat",
|
||||
"URL": "URL",
|
||||
"USER": "Utente",
|
||||
"TOKEN": "Token",
|
||||
"WEB_SEARCH_URL": "URL ricerca web",
|
||||
"EXTENSIONS": "Estensioni",
|
||||
"HEADERS": "Intestazioni",
|
||||
"DIRECTORY": "Cartella",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "Organizza in cartelle",
|
||||
"EPISODE_PATTERN": "Pattern episodio",
|
||||
"API": "API",
|
||||
"MAIN": "Principale",
|
||||
"REVERSE_PROXY": "Proxy inverso",
|
||||
"MESSAGING": "Messaggistica",
|
||||
"VIDEO": "Video",
|
||||
"EXAMPLES": "Esempi",
|
||||
"UPDATE": "Aggiorna",
|
||||
"START": "Avvia",
|
||||
"CACHE": "Cache",
|
||||
"STREAM": "Flusso",
|
||||
"LOG": "Registro",
|
||||
"CONFIG": "Configurazione",
|
||||
"TELEGRAM": "Telegram",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Proxy",
|
||||
"REFRESH": "Ricarica",
|
||||
"STATUS": "Stato",
|
||||
"MAX_CON": "MaxCon",
|
||||
"EXP_DATE": "Data di scadenza",
|
||||
"USERNAME": "Nome utente",
|
||||
"PASSWORD": "Password",
|
||||
"SERVER": "Server",
|
||||
"TIMEZONE": "Fuso orario",
|
||||
"PATH": "Percorso",
|
||||
"MESSAGE": "Messaggio",
|
||||
"PROTOCOL": "Protocollo",
|
||||
"NAME": "Nome"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "Editor bouquet utente"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"INVALID_REGEXP": "Espressione regolare non valida",
|
||||
"INVALID_FILETYPE": "Tipo di file non valido",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Scaricato con successo",
|
||||
"FAIL": "Download fallito!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Playlist scaricata con successo",
|
||||
"FAIL": "Download playlist fallito!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "Download configurazione server fallito!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "Configurazione principale salvata!",
|
||||
"FAIL": "Salvataggio configurazione principale fallito!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Bouquet salvato con successo",
|
||||
"FAIL": "Salvataggio bouquet fallito!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Utente salvato con successo",
|
||||
"FAIL": "Salvataggio utente fallito!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "È necessario riavviare per applicare le modifiche.",
|
||||
"SCHEDULE_EXAMPLE": "Esempio di programma",
|
||||
"THREADS": "Thread: lascia 0 se non hai problemi. Aumenta se hai più provider. L'accesso parallelo ai tuoi provider potrebbe causare un ban.",
|
||||
"WEB_ROOT": "Root Web: Contiene i file dell'interfaccia web. Di solito vengono posizionati nella stessa cartella sotto ./web"
|
||||
}
|
||||
}
|
||||
@@ -1,112 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "Прямой эфир",
|
||||
"VOD": "VOD",
|
||||
"SERIES": "Сериалы",
|
||||
"SAVE": "Сохранить",
|
||||
"SHOW_SELECTED": "Показать выбранное",
|
||||
"SELECT_ALL": "Выбрать все",
|
||||
"DESELECT_ALL": "Отменить выбор всех",
|
||||
"SEARCH": "Поиск",
|
||||
"CLEAR": "Очистить",
|
||||
"REGEXP": "Регулярное выражение",
|
||||
"LOGOUT": "Выйти",
|
||||
"CONFIGURATION": "Конфигурация",
|
||||
"HOST": "Хост",
|
||||
"PORT": "Порт",
|
||||
"WEB_ROOT": "Корень веба",
|
||||
"THREADS": "Потоки",
|
||||
"WORKING_DIR": "Рабочий каталог",
|
||||
"BACKUP_DIR": "Каталог резервных копий",
|
||||
"UPDATE_ON_BOOT": "Обновить при загрузке",
|
||||
"WEB_UI": "Веб-интерфейс",
|
||||
"SCHEDULES": "Расписания",
|
||||
"SANITIZE_SENSITIVE_INFO": "Очистить чувствительную информацию",
|
||||
"ACTIVE_CLIENTS": "Активные клиенты",
|
||||
"RESOURCE_REWRITE_DISABLE": "Отключить переписывание ресурсов",
|
||||
"RECONNECT": "Переподключить",
|
||||
"BUFFER_ENABLED": "Буфер включен",
|
||||
"BUFFER_SIZE": "Размер буфера",
|
||||
"ENABLED": "Включено",
|
||||
"SIZE": "Размер",
|
||||
"CACHE_DIR": "Каталог кэша",
|
||||
"NOTIFY_ON": "Уведомить о",
|
||||
"BOT_TOKEN": "Токен бота",
|
||||
"CHAT_IDS": "ID чатов",
|
||||
"URL": "URL",
|
||||
"USER": "Пользователь",
|
||||
"TOKEN": "Токен",
|
||||
"WEB_SEARCH_URL": "URL веб-поиска",
|
||||
"EXTENSIONS": "Расширения",
|
||||
"HEADERS": "Заголовки",
|
||||
"DIRECTORY": "Каталог",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "Организовать в каталоги",
|
||||
"EPISODE_PATTERN": "Шаблон эпизодов",
|
||||
"API": "API",
|
||||
"MAIN": "Основное",
|
||||
"REVERSE_PROXY": "Обратный прокси",
|
||||
"MESSAGING": "Сообщения",
|
||||
"VIDEO": "Видео",
|
||||
"EXAMPLES": "Примеры",
|
||||
"UPDATE": "Обновить",
|
||||
"START": "Старт",
|
||||
"CACHE": "Кэш",
|
||||
"STREAM": "Поток",
|
||||
"LOG": "Лог",
|
||||
"CONFIG": "Конфигурация",
|
||||
"TELEGRAM": "Телеграм",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Прокси",
|
||||
"REFRESH": "Обновить",
|
||||
"STATUS": "Статус",
|
||||
"MAX_CON": "Макс. соединений",
|
||||
"EXP_DATE": "Дата истечения",
|
||||
"USERNAME": "Имя пользователя",
|
||||
"PASSWORD": "Пароль",
|
||||
"SERVER": "Сервер",
|
||||
"TIMEZONE": "Часовой пояс",
|
||||
"PATH": "Путь",
|
||||
"MESSAGE": "Сообщение",
|
||||
"PROTOCOL": "Протокол",
|
||||
"NAME": "Имя"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "Редактор букета пользователя"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"INVALID_REGEXP": "Неверное регулярное выражение",
|
||||
"INVALID_FILETYPE": "Неверный тип файла",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Загрузка успешна",
|
||||
"FAIL": "Ошибка загрузки!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Плейлист успешно загружен",
|
||||
"FAIL": "Ошибка загрузки плейлиста!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "Не удалось загрузить конфигурацию сервера!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "Основная конфигурация сохранена!",
|
||||
"FAIL": "Не удалось сохранить основную конфигурацию!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Букет успешно сохранен",
|
||||
"FAIL": "Не удалось сохранить букет!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Пользователь успешно сохранен",
|
||||
"FAIL": "Не удалось сохранить пользователя!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "Необходимо перезагрузить систему, чтобы применить изменения.",
|
||||
"SCHEDULE_EXAMPLE": "Пример расписания",
|
||||
"THREADS": "Потоки: оставьте 0, если нет проблем. Увеличьте, если у вас несколько провайдеров. Одновременный доступ к нескольким провайдерам может привести к блокировке.",
|
||||
"WEB_ROOT": "Корень веба: содержит файлы веб-интерфейса. Обычно они размещаются в той же директории ./web"
|
||||
}
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
{
|
||||
"LABEL": {
|
||||
"LIVE": "Canlı",
|
||||
"VOD": "Video",
|
||||
"SERIES": "Diziler",
|
||||
"SAVE": "Kaydet",
|
||||
"SUBMIT": "Onayla",
|
||||
"OK": "Tamam",
|
||||
"CANCEL": "İptal",
|
||||
"SHOW_SELECTED": "Seçilenleri Göster",
|
||||
"SELECT_ALL": "Tümünü Seç",
|
||||
"DESELECT_ALL": "Tümünü Seçimden Çıkar",
|
||||
"SEARCH": "Ara",
|
||||
"CLEAR": "Sil",
|
||||
"REGEXP": "RegExp",
|
||||
"LOGOUT": "Çıkış Yap",
|
||||
"CONFIGURATION": "Yapılandırma",
|
||||
"HOST": "Sunucu",
|
||||
"PORT": "Port",
|
||||
"WEB_ROOT": "Web Klasörü",
|
||||
"THREADS": "İşlemciler",
|
||||
"WORKING_DIR": "Çalışma Klasörü",
|
||||
"BACKUP_DIR": "Yedekleme Klasörü",
|
||||
"UPDATE_ON_BOOT": "Başlangıçta Güncelle",
|
||||
"WEB_UI": "Web UI",
|
||||
"SCHEDULES": "Programlar",
|
||||
"SANITIZE_SENSITIVE_INFO": "Hassas Bilgileri Temizle",
|
||||
"ACTIVE_CLIENTS": "Aktif Kullanıcılar",
|
||||
"RESOURCE_REWRITE_DISABLE": "Url Yönlendirme Devre Dışı",
|
||||
"RECONNECT": "Yeniden Bağlan",
|
||||
"BUFFER_ENABLED": "Arabellek Aktif",
|
||||
"BUFFER_SIZE": "Arabellek Boyutu",
|
||||
"ENABLED": "Aktif",
|
||||
"SIZE": "Boyut",
|
||||
"CACHE_DIR": "Önbellek Dizin",
|
||||
"NOTIFY_ON": "Bildirimler",
|
||||
"BOT_TOKEN": "Bot Token'i",
|
||||
"CHAT_IDS": "Chat ID'leri",
|
||||
"URL": "URL",
|
||||
"USER": "Kullanıcı",
|
||||
"TOKEN": "Token",
|
||||
"WEB_SEARCH_URL": "Web Arama URL'si",
|
||||
"EXTENSIONS": "Eklentiler",
|
||||
"HEADERS": "Başlıklar",
|
||||
"DIRECTORY": "Klasör",
|
||||
"ORGANIZE_INTO_DIRECTORIES": "Klasörlere ayır",
|
||||
"EPISODE_PATTERN": "Bölüm Pattern'i",
|
||||
"API": "API",
|
||||
"MAIN": "Ana",
|
||||
"REVERSE_PROXY": "Ters Proxy",
|
||||
"MESSAGING": "Mesajlaşma",
|
||||
"VIDEO": "Video",
|
||||
"EXAMPLES": "Örnekler",
|
||||
"UPDATE": "Güncelle",
|
||||
"START": "Başlat",
|
||||
"CACHE": "Önbellek",
|
||||
"STREAM": "Yayın",
|
||||
"LOG": "Kayıt",
|
||||
"CONFIG": "Yapılandırma",
|
||||
"TELEGRAM": "Telegram",
|
||||
"REST": "Rest",
|
||||
"PUSHOVER": "Pushover",
|
||||
"PROXY": "Proxy",
|
||||
"REFRESH": "Yenile",
|
||||
"STATUS": "Durum",
|
||||
"MAX_CON": "Max. Bağlantı",
|
||||
"EXP_DATE": "Son Kullanma Tarihi",
|
||||
"USERNAME": "Kullanıcı Adı",
|
||||
"PASSWORD": "Şifre",
|
||||
"SERVER": "Sunucu",
|
||||
"TIMEZONE": "Zaman Dilimi",
|
||||
"PATH": "Yol",
|
||||
"MESSAGE": "Mesaj",
|
||||
"PROTOCOL": "Protokol",
|
||||
"NAME": "Ad"
|
||||
},
|
||||
"TITLE": {
|
||||
"USER_BOUQUET_EDITOR": "Kullanıcı Buket Editörü"
|
||||
},
|
||||
"MESSAGES": {
|
||||
"INVALID_REGEXP": "Geçersiz regexp",
|
||||
"INVALID_FILETYPE": "Geçersiz dosya türü",
|
||||
"DOWNLOAD": {
|
||||
"SUCCESS": "Başarıyla indirildi",
|
||||
"FAIL": "İndirme başarısız!",
|
||||
"PLAYLIST": {
|
||||
"SUCCESS": "Liste başarıyla indirildi",
|
||||
"FAIL": "Liste indirilemedi!"
|
||||
},
|
||||
"SERVER_CONFIG": {
|
||||
"FAIL": "Sunucu yapılandırması indirilemedi!"
|
||||
}
|
||||
},
|
||||
"SAVE": {
|
||||
"MAIN_CONFIG": {
|
||||
"SUCCESS": "Ana yapılandırma kaydedildi!",
|
||||
"FAIL": "Ana yapılandırma kaydedilemedi!"
|
||||
},
|
||||
"BOUQUET": {
|
||||
"SUCCESS": "Buket başarıyla kaydedildi",
|
||||
"FAIL": "Buket kaydedilemedi!"
|
||||
},
|
||||
"USER": {
|
||||
"SUCCESS": "Kullanıcı başarıyla kaydedildi",
|
||||
"FAIL": "Kullanıcı kaydedilemedi!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"INFO": {
|
||||
"RESTART_TO_APPLY_CHANGES": "Değişiklikleri uygulamak için yeniden başlatmanız gerekmektedir.",
|
||||
"SCHEDULE_EXAMPLE": "Program örneği",
|
||||
"THREADS": "İşlemciler: Eğer bir sorununuz yoksa 0 olarak bırakın. Birden fazla sağlayıcı kullanıyorsanız artırabilirsiniz. Sağlayıcınıza paralel erişim, yasaklanmanıza neden olabilir.",
|
||||
"WEB_ROOT": "Web klassörü: Web-UI dosyalarını içerir. Genellikle ./web altında aynı dizine yerleştirilir."
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,12 @@
|
||||
{
|
||||
"tab_title": "tuliprox",
|
||||
"app_title": "tuliprox",
|
||||
"app_logo": "assets/tuliprox-logo.svg",
|
||||
"tabTitle": "tuliprox",
|
||||
"appLogo": "/assets/tuliprox-logo.svg",
|
||||
"api": {
|
||||
"apiUrl": "/api/v1/",
|
||||
"authUrl": "/auth/"
|
||||
}
|
||||
},
|
||||
"discord": "https://discord.gg/gkzCmWw9Tf",
|
||||
"documentation": "https://github.com/euzu/tuliprox/blob/master/README.md",
|
||||
"wsUrl" : "/ws",
|
||||
"protocolVersion": 1
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<base href="/">
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/assets/favicon.ico" />
|
||||
<link rel="css" href="%PUBLIC_URL%/assets/fonts.css" />
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<!-- link rel="manifest" href="%PUBLIC_URL%/assets/manifest.json" / -->
|
||||
<title>tuliprox</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"short_name": "tuliprox",
|
||||
"name": "tuliprox",
|
||||
"icons": [
|
||||
{
|
||||
"src": "assets/favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
+1
@@ -73,6 +73,7 @@
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
border-top: 1px solid var(--border-color);
|
||||
padding-top: var(--padding-small);
|
||||
gap: var(--gap-default);
|
||||
|
||||
&-left {
|
||||
+4
@@ -47,6 +47,10 @@
|
||||
|
||||
}
|
||||
|
||||
.reserved {
|
||||
color: #da2ee0;
|
||||
}
|
||||
|
||||
//.binary_op-wrapper{
|
||||
// white-space: pre;
|
||||
//}
|
||||
@@ -0,0 +1,59 @@
|
||||
@use '../../../../scss/size';
|
||||
|
||||
.tp__playlist-mappings {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
|
||||
&__mapping {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
gap: var(--gap-default);
|
||||
justify-content: center;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
|
||||
&-section {
|
||||
display: flex;
|
||||
flex-flow: row ;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
gap: var(--gap-small);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&-mapper {
|
||||
display: flex;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
|
||||
@media (max-width: size.$dashboard-mobile-breakpoint) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
gap: var(--gap-default);
|
||||
box-sizing: border-box;
|
||||
overflow: auto;
|
||||
|
||||
&-content {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
gap: var(--gap-default);
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
label {
|
||||
font-weight: bold;
|
||||
color: var(--modest-text-color);
|
||||
|
||||
&:after {
|
||||
content: ':'
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -1,7 +1,7 @@
|
||||
.tp__playlist-update-view {
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
width: 100%;
|
||||
width: 80vw;
|
||||
gap: var(--gap-default);
|
||||
padding: var(--padding-default) 0;
|
||||
box-sizing: border-box;
|
||||
@@ -17,6 +17,7 @@
|
||||
&__body {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
|
||||
gap: var(--gap-default);
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
@@ -1,153 +0,0 @@
|
||||
import {Observable} from "rxjs";
|
||||
import axios from "axios";
|
||||
import ServiceContext from "../service/service-context";
|
||||
|
||||
const HEADER_CONTENT_TYPE = 'Content-Type';
|
||||
const HEADER_LANGUAGE = 'X-Language';
|
||||
const HEADER_ACCEPT = 'Accept';
|
||||
const HEADER_AUTHORIZATION = 'Authorization';
|
||||
|
||||
export default interface ApiService {
|
||||
get<T>(query: string, url?: string): Observable<T>;
|
||||
|
||||
post<T>(query: string, payload: any, url?: string): Observable<T>;
|
||||
|
||||
put<T>(query: string, payload: any, url?: string): Observable<T>;
|
||||
|
||||
delete<T>(query: string, url?: string): Observable<T>;
|
||||
|
||||
postFile<T>(query: string, fileName: string, file: any, url?: string): Observable<T>;
|
||||
downloadFile<T>(query: string, payload: any, url?: string): Observable<T>;
|
||||
}
|
||||
|
||||
export class DefaultApiService implements ApiService {
|
||||
|
||||
private readonly DEFAULT_ERROR = {'origin': 'server', 'message': 'Server error'};
|
||||
|
||||
private static getLanguage(): string {
|
||||
return "en";
|
||||
}
|
||||
|
||||
private prepareError(err: any): any {
|
||||
return err || this.DEFAULT_ERROR;
|
||||
}
|
||||
|
||||
private static getOption(options: any, key: any, defaultValue: any): string {
|
||||
if (options) {
|
||||
if (Object.prototype.hasOwnProperty.call(options, key)) {
|
||||
return options[key];
|
||||
}
|
||||
}
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
protected getHeaders(options?: unknown): any {
|
||||
const headers: any = {};
|
||||
const language = DefaultApiService.getLanguage();
|
||||
if (language) {
|
||||
headers[HEADER_LANGUAGE] = language;
|
||||
}
|
||||
const value = DefaultApiService.getOption(options, HEADER_CONTENT_TYPE, 'application/json; charset=utf-8');
|
||||
if (value) {
|
||||
headers[HEADER_CONTENT_TYPE] = value;
|
||||
}
|
||||
headers[HEADER_ACCEPT] = 'application/json';
|
||||
const token = ServiceContext.auth().getToken();
|
||||
if (token) {
|
||||
headers[HEADER_AUTHORIZATION] = 'Bearer ' + token;
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
protected getUrl(query: string, url?: string) {
|
||||
const apiBaseUrl = ServiceContext.config().getUiConfig().api.apiUrl;
|
||||
return (url ? url : apiBaseUrl) + query;
|
||||
}
|
||||
|
||||
get<T>(query: string, url?: string): Observable<T> {
|
||||
return new Observable((observer) => {
|
||||
axios.get(this.getUrl(query, url), {headers: this.getHeaders()})
|
||||
.then((response) => {
|
||||
observer.next(response.data);
|
||||
observer.complete();
|
||||
})
|
||||
.catch((error) => observer.error(this.prepareError(error)));
|
||||
});
|
||||
}
|
||||
|
||||
post<T>(query: string, payload: any, url?: string): Observable<T> {
|
||||
return new Observable((observer) => {
|
||||
axios.post<T>(this.getUrl(query, url), payload, {headers: this.getHeaders()})
|
||||
.then((response) => {
|
||||
observer.next(response.data);
|
||||
observer.complete();
|
||||
})
|
||||
.catch((error) => observer.error(this.prepareError(error)));
|
||||
});
|
||||
}
|
||||
|
||||
put<T>(query: string, payload: any, url?: string): Observable<T> {
|
||||
return new Observable((observer) => {
|
||||
axios.put<T>(this.getUrl(query, url), payload, {headers: this.getHeaders()})
|
||||
.then((response) => {
|
||||
observer.next(response.data);
|
||||
observer.complete();
|
||||
})
|
||||
.catch((error) => observer.error(this.prepareError(error)));
|
||||
});
|
||||
}
|
||||
|
||||
delete<T>(query: string, url?: string): Observable<T> {
|
||||
return new Observable((observer) => {
|
||||
axios.delete(this.getUrl(query, url), {headers: this.getHeaders()})
|
||||
.then((response) => {
|
||||
observer.next(response.data);
|
||||
observer.complete();
|
||||
})
|
||||
.catch((error) => observer.error(this.prepareError(error)));
|
||||
});
|
||||
}
|
||||
|
||||
postFile<T>(query: string, fileName: string, file: any, url?: string): Observable<T> {
|
||||
const fd = new FormData();
|
||||
fd.append("fileName", fileName);
|
||||
fd.append("file", file, fileName);
|
||||
|
||||
return new Observable((observer) => {
|
||||
axios.post<T>(this.getUrl(query, url), fd, {headers: this.getHeaders({[HEADER_CONTENT_TYPE]: undefined})})
|
||||
.then((response) => {
|
||||
observer.next(response.data);
|
||||
observer.complete();
|
||||
})
|
||||
.catch((error) => observer.error(this.prepareError(error)));
|
||||
});
|
||||
}
|
||||
|
||||
downloadFile<T>(query: string, payload: any, url?: string): Observable<T> {
|
||||
return this.post(query, payload, url);
|
||||
// return new Observable((observer) => {
|
||||
//
|
||||
// axios.post<T>(this.getUrl(query, url), payload, {responseType: 'blob', headers: this.getHeaders()})
|
||||
// .then((response) => {
|
||||
// const disposition = response.headers['content-disposition'];
|
||||
// let filename = disposition.split(/;(.+)/)[1].split(/=(.+)/)[1];
|
||||
// if (filename.toLowerCase().startsWith("utf-8''"))
|
||||
// filename = decodeURIComponent(filename.replace("utf-8''", ''));
|
||||
// else
|
||||
// filename = filename.replace(/['"]/g, '');
|
||||
// return {filename, data: response.data};
|
||||
// }).then((params: { filename: string, data: any }) => {
|
||||
// const url = window.URL.createObjectURL(params.data);
|
||||
// const a = document.createElement('a');
|
||||
// a.href = url;
|
||||
// a.download = params.filename;
|
||||
// document.body.appendChild(a); // append the element to the dom
|
||||
// a.click();
|
||||
// a.remove(); // afterwards, remove the element
|
||||
// observer.next(true as any);
|
||||
// observer.complete();
|
||||
// }).catch((error) => observer.error(this.prepareError(error)));
|
||||
// });
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
import ApiService, {DefaultApiService} from "./api-service";
|
||||
import {Observable} from "rxjs";
|
||||
import ServiceContext from "../service/service-context";
|
||||
|
||||
type TokenResponse = { token: string };
|
||||
|
||||
export default interface AuthApiService extends ApiService {
|
||||
authenticate(username: string, password: string): Observable<TokenResponse>;
|
||||
|
||||
refresh(): Observable<TokenResponse>
|
||||
}
|
||||
|
||||
export class DefaultAuthApiService extends DefaultApiService implements AuthApiService {
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
private getAuthUrl() : string {
|
||||
let authUrl = ServiceContext.config().getUiConfig().api.authUrl;
|
||||
if (authUrl.endsWith("/")) {
|
||||
authUrl = authUrl.slice(0, -1);
|
||||
}
|
||||
return authUrl;
|
||||
}
|
||||
|
||||
authenticate(username: string, password: string): Observable<{ token: string }> {
|
||||
const authBaseUrl = this.getAuthUrl();
|
||||
return this.post<TokenResponse>('/token', {username, password}, authBaseUrl);
|
||||
}
|
||||
|
||||
refresh(): Observable<TokenResponse> {
|
||||
const authBaseUrl = this.getAuthUrl();
|
||||
return this.post<TokenResponse>('/refresh', {}, authBaseUrl);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user