pax_global_header 0000666 0000000 0000000 00000000064 14762405272 0014523 g ustar 00root root 0000000 0000000 52 comment=5a56977230c3483559c397ad1be3174111642e2b
py-synologydsm-api-2.7.1/ 0000775 0000000 0000000 00000000000 14762405272 0015316 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/.darglint 0000664 0000000 0000000 00000000036 14762405272 0017122 0 ustar 00root root 0000000 0000000 [darglint]
strictness = short
py-synologydsm-api-2.7.1/.devcontainer/ 0000775 0000000 0000000 00000000000 14762405272 0020055 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/.devcontainer/Dockerfile 0000664 0000000 0000000 00000000502 14762405272 0022044 0 ustar 00root root 0000000 0000000 FROM mcr.microsoft.com/vscode/devcontainers/python:3.9-bookworm
# install test requirements
COPY requirements*.txt /tmp/pip-tmp/
RUN pip3 --disable-pip-version-check --no-cache-dir install -r /tmp/pip-tmp/requirements_dev.txt \
&& rm -rf /tmp/pip-tmp
# Set the default shell to bash instead of sh
ENV SHELL /bin/bash
py-synologydsm-api-2.7.1/.devcontainer/devcontainer.json 0000664 0000000 0000000 00000002333 14762405272 0023432 0 ustar 00root root 0000000 0000000 {
"name": "Python Synology DSM API",
"context": "..",
"dockerFile": "Dockerfile",
"postCreateCommand": "scripts/setup",
"containerEnv": { "DEVCONTAINER": "1" },
"runArgs": ["-e", "GIT_EDITOR=code --wait"],
"customizations": {
"vscode": {
"extensions": [
"ms-python.vscode-pylance",
"ms-python.black-formatter",
"ms-python.pylint",
"ms-python.mypy-type-checker",
"visualstudioexptteam.vscodeintellicode",
"esbenp.prettier-vscode"
],
// Please keep this file in sync with settings in .vscode/settings.default.json
"settings": {
"python.pythonPath": "/usr/local/bin/python",
"python.testing.pytestArgs": ["tests"],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"mypy-type-checker.args": ["--config-file=pyproject.toml"],
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.formatOnType": true,
"files.trimTrailingWhitespace": true,
"terminal.integrated.profiles.linux": {
"zsh": {
"path": "/usr/bin/zsh"
}
},
"terminal.integrated.defaultProfile.linux": "zsh"
}
}
}
}
py-synologydsm-api-2.7.1/.flake8 0000664 0000000 0000000 00000001034 14762405272 0016467 0 ustar 00root root 0000000 0000000 [flake8]
select = B,B9,C,D,DAR,E,F,N,RST,S,W
# Some rules are ignore on top of the standard ones.
# C901 (complexity) will be processed in a dedicated PR
# DARxxx (documentation in docstrings) will be processed in a dedicated PR
# Final target is:
# ignore = E203,E501,RST201,RST203,RST301,W503
ignore = E203,E501,RST201,RST203,RST301,W503,C901,DAR101,DAR201,N818
max-line-length = 80
max-complexity = 10
docstring-convention = google
per-file-ignores =
tests/*:S101,S105
tests/**/const_*.py:B950
src/synology_dsm/const.py:B950
py-synologydsm-api-2.7.1/.gitattributes 0000664 0000000 0000000 00000000023 14762405272 0020204 0 ustar 00root root 0000000 0000000 * text=auto eol=lf
py-synologydsm-api-2.7.1/.github/ 0000775 0000000 0000000 00000000000 14762405272 0016656 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/.github/CODEOWNERS 0000664 0000000 0000000 00000000641 14762405272 0020252 0 ustar 00root root 0000000 0000000 * @mib1185
.github/* @oncleben31
.darglint @oncleben31
.flake8 @oncleben31
*/surveillance_station/* @shenxn
src/synology_dsm/api/core/share.py @Gestas
src/synology_dsm/api/core/system.py @mib1185
src/synology_dsm/api/core/upgrade.py @mib1185
tests/api_data/dsm_6/core/const_6_core_share.py @Gestas
tests/api_data/dsm_6/core/const_6_core_system.py @mib1185
tests/api_data/dsm_6/core/const_6_core_upgrade.py @mib1185
py-synologydsm-api-2.7.1/.github/dependabot.yml 0000664 0000000 0000000 00000000471 14762405272 0021510 0 ustar 00root root 0000000 0000000 version: 2
updates:
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: monthly
groups:
gh-actions:
patterns: ["*"]
- package-ecosystem: pip
directory: "/"
schedule:
interval: monthly
groups:
pip-dependencies:
patterns: ["*"]
py-synologydsm-api-2.7.1/.github/release-drafter.yml 0000664 0000000 0000000 00000001761 14762405272 0022453 0 ustar 00root root 0000000 0000000 categories:
- title: ":boom: Breaking Changes"
label: "breaking"
- title: ":rocket: Features"
label: "enhancement"
- title: ":fire: Removals and Deprecations"
label: "removal"
- title: ":beetle: Fixes"
labels:
- "bug"
- "bugfix"
- title: ":racehorse: Performance"
label: "performance"
- title: ":rotating_light: Testing"
label: "testing"
- title: ":construction_worker: Continuous Integration"
label: "ci"
- title: ":books: Documentation"
label: "documentation"
- title: ":hammer: Refactoring"
label: "refactoring"
- title: ":lipstick: Style"
label: "style"
- title: ":package: Dependencies"
collapse-after: 1
labels:
- "dependencies"
- "build"
template: |
## Changes
$CHANGES
---
You like my work, want to support me?
py-synologydsm-api-2.7.1/.github/workflows/ 0000775 0000000 0000000 00000000000 14762405272 0020713 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/.github/workflows/release.yml 0000664 0000000 0000000 00000005361 14762405272 0023063 0 ustar 00root root 0000000 0000000 name: Release
on:
push:
branches:
- main
- master
jobs:
release:
name: Release
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
pull-requests: read
steps:
- name: Check out the repository
uses: actions/checkout@v4.2.2
with:
fetch-depth: 2
- name: Set up Python
uses: actions/setup-python@v5.4.0
with:
python-version: "3.12"
- name: Install build dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel build
- name: Check if there is a parent commit
id: check-parent-commit
run: |
echo "::set-output name=sha::$(git rev-parse --verify --quiet HEAD^)"
- name: Detect and tag new version
id: check-version
if: steps.check-parent-commit.outputs.sha
uses: salsify/action-detect-and-tag-new-version@v2.0.3
with:
version-command: |
sed -n 's/version = \"\(.*\)\"/\1/p' pyproject.toml
- name: Bump version for developmental release
if: "! steps.check-version.outputs.tag"
run: |
sed "s/version = \"\(.*\)\"/version = \"\1\.dev\.`date +%Y%m%d%H%M%S`\"/" -i pyproject.toml
- name: Build package
run: |
python -m build . --wheel
- name: Publish package on PyPI
if: steps.check-version.outputs.tag
uses: pypa/gh-action-pypi-publish@v1.12.4
with:
user: __token__
password: ${{ secrets.PYPI_TOKEN }}
- name: Publish package on TestPyPI
if: "! steps.check-version.outputs.tag"
uses: pypa/gh-action-pypi-publish@v1.12.4
with:
user: __token__
password: ${{ secrets.TEST_PYPI_TOKEN }}
repository-url: https://test.pypi.org/legacy/
- name: Publish release notes
uses: release-drafter/release-drafter@v6.1.0
with:
publish: ${{ steps.check-version.outputs.tag != '' }}
tag: ${{ steps.check-version.outputs.tag }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
analyze:
name: Analyze
if: ${{ !contains(github.ref, 'dependabot') }}
runs-on: ubuntu-latest
needs: release
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
steps:
- name: Checkout repository
uses: actions/checkout@v4.2.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: python
setup-python-dependencies: true
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
py-synologydsm-api-2.7.1/.github/workflows/tests.yml 0000664 0000000 0000000 00000007104 14762405272 0022602 0 ustar 00root root 0000000 0000000 name: Tests
on:
push:
branches:
- master
pull_request: ~
jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v4.2.2
- name: Set up Python 3.13
uses: actions/setup-python@v5.4.0
with:
python-version: "3.13"
- name: Install dependencies
run: |
pip install -r requirements_dev.txt -e .
- name: Compute pre-commit cache key
id: pre-commit-cache
shell: python
run: |
import hashlib
import sys
python = "py{}.{}".format(*sys.version_info[:2])
payload = sys.version.encode() + sys.executable.encode()
digest = hashlib.sha256(payload).hexdigest()
result = "${{ runner.os }}-{}-{}-pre-commit".format(python, digest[:8])
print("::set-output name=result::{}".format(result))
- name: Restore pre-commit cache
uses: actions/cache@v4.2.2
with:
path: ~/.cache/pre-commit
key: ${{ steps.pre-commit-cache.outputs.result }}-${{ hashFiles('.pre-commit-config.yaml') }}
restore-keys: |
${{ steps.pre-commit-cache.outputs.result }}-
- name: Run pre-commit
run: |
pre-commit run --all-files --show-diff-on-failure
tests:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- python-version: "3.9"
- python-version: "3.10"
- python-version: "3.11"
- python-version: "3.12"
- python-version: "3.13"
steps:
- name: Check out the repository
uses: actions/checkout@v4.2.2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5.4.0
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
pip install -r requirements_dev.txt -e .
- name: Run pytest
run: |
coverage run --parallel -m pytest
- name: Upload coverage data
if: matrix.python-version == '3.10'
uses: "actions/upload-artifact@v4.6.1"
with:
include-hidden-files: true
name: coverage-data
path: ".coverage.*"
coverage:
runs-on: ubuntu-latest
needs: tests
steps:
- name: Check out the repository
uses: actions/checkout@v4.2.2
- name: Set up Python 3.13
uses: actions/setup-python@v5.4.0
with:
python-version: "3.13"
- name: Install dependencies
run: |
pip install coverage[toml]
- name: Download coverage data
uses: actions/download-artifact@v4.1.9
with:
name: coverage-data
- name: Combine coverage data and display human readable report
run: |
coverage combine
coverage report
- name: Create coverage report
run: |
coverage xml
- name: Upload coverage report
uses: codecov/codecov-action@v5.4.0
build:
runs-on: ubuntu-latest
needs: tests
steps:
- name: Check out the repository
uses: actions/checkout@v4.2.2
with:
fetch-depth: 2
- name: Set up Python
uses: actions/setup-python@v5.4.0
with:
python-version: "3.13"
- name: Install build dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel build
- name: Build package
run: |
python -m build . --wheel
py-synologydsm-api-2.7.1/.gitignore 0000664 0000000 0000000 00000001756 14762405272 0017317 0 ustar 00root root 0000000 0000000 # From cookiecutter-hypermodern-python
.mypy_cache/
/.coverage
/.nox/
/.python-version
/.pytype/
/dist/
/docs/_build/
/src/*.egg-info/
__pycache__/
# Following are kept for not anoying current developers. Could be remove in
# a future package release.
# Python
*.py[cod]
# C extensions
*.so
# Packages
*.egg
*.egg-info
dist
build
eggs
.eggs
parts
bin
var
sdist
develop-eggs
.installed.cfg
lib
lib64
pip-wheel-metadata
# Logs
*.log
pip-log.txt
# Unit test / coverage reports
.coverage
.tox
coverage.xml
nosetests.xml
htmlcov/
test-reports/
test-results.xml
test-output.xml
# Translations
*.mo
# Mac OS X
.DS_Store
.AppleDouble
.LSOverride
Icon
# Windows Explorer
desktop.ini
# Visual Studio Code
.vscode/*
!.vscode/cSpell.json
!.vscode/extensions.json
!.vscode/settings.default.json
!.vscode/tasks.json
# IntelliJ IDEA
.idea
*.iml
# Sublime text
*.sublime-project
*.sublime-workspace
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# Virtual env
.venv
node_modules
package-lock.json
py-synologydsm-api-2.7.1/.pre-commit-config.yaml 0000664 0000000 0000000 00000003026 14762405272 0021600 0 ustar 00root root 0000000 0000000 repos:
- repo: local
hooks:
- id: black
name: black
entry: black
language: system
types: [python]
require_serial: true
- id: check-added-large-files
name: Check for added large files
entry: check-added-large-files
language: system
- id: check-toml
name: Check Toml
entry: check-toml
language: system
types: [toml]
- id: check-yaml
name: Check Yaml
entry: check-yaml
language: system
types: [yaml]
- id: end-of-file-fixer
name: Fix End of Files
entry: end-of-file-fixer
language: system
types: [text]
stages: [commit, push, manual]
- id: flake8
name: flake8
entry: flake8
language: system
types: [python]
require_serial: true
- id: trailing-whitespace
name: Trim Trailing Whitespace
entry: trailing-whitespace-fixer
language: system
types: [text]
stages: [commit, push, manual]
- id: pylint
name: pylint
entry: pylint
language: system
types: [python]
files: ^src/.+\.py$
args: ["-sn"]
- id: mypy
name: mypy
entry: mypy
language: system
types: [python]
files: ^src/.+\.py$
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v2.2.1
hooks:
- id: prettier
- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
py-synologydsm-api-2.7.1/.vscode/ 0000775 0000000 0000000 00000000000 14762405272 0016657 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/.vscode/settings.default.json 0000664 0000000 0000000 00000000276 14762405272 0023042 0 ustar 00root root 0000000 0000000 {
"python.testing.pytestArgs": ["tests"],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"mypy-type-checker.args": ["--config-file=pyproject.toml"]
}
py-synologydsm-api-2.7.1/.vscode/tasks.json 0000664 0000000 0000000 00000001453 14762405272 0020702 0 ustar 00root root 0000000 0000000 {
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "pytest",
"type": "shell",
"command": "pytest tests/",
"group": {
"kind": "test",
"isDefault": true
}
},
{
"label": "coverage",
"type": "shell",
"command": "coverage run --parallel -m pytest ; coverage combine ; coverage report",
"group": {
"kind": "test",
"isDefault": false
}
},
{
"label": "reinstall dependencies",
"type": "shell",
"command": "pip3 --disable-pip-version-check --no-cache-dir install -r requirements_dev.txt -e .",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
py-synologydsm-api-2.7.1/CONTRIBUTING.md 0000664 0000000 0000000 00000005012 14762405272 0017545 0 ustar 00root root 0000000 0000000 # Contributor Guide
Thank you for your interest in improving this project.
This project is open-source under the [MIT license](https://opensource.org/licenses/MIT) and
welcomes contributions in the form of bug reports, feature requests, and pull requests.
Here is a list of important resources for contributors:
- [Source Code](https://github.com/mib1185/py-synologydsm-api)
- [Documentation](https://github.com/mib1185/py-synologydsm-api#readme)
- [Issue Tracker](https://github.com/mib1185/py-synologydsm-api/issues)
## How to report a bug
Report bugs on the [Issue Tracker](https://github.com/mib1185/py-synologydsm-api/issues).
When filing an issue, make sure to answer these questions:
- Which operating system and Python version are you using?
- Which version of this project are you using?
- What did you do?
- What did you expect to see?
- What did you see instead?
The best way to get your bug fixed is to provide a test case,
and/or steps to reproduce the issue.
## How to request a feature
Request features on the [Issue Tracker](https://github.com/mib1185/py-synologydsm-api/issues).
## How to set up your development environment
This project use a [Visual Studio Code Dev Container](https://code.visualstudio.com/docs/devcontainers/containers).
This approach will create a preconfigured development environment with all the tools you need.
## How to test the project
Unit tests are located in the `tests` directory, and are written using the [pytest](https://pytest.readthedocs.io/) testing framework.
Run the full test suite:
```bash
$ pytest tests
```
There is also a Visual Studio Code task available to run the full test suite or you can use the testing feature from Visual Studio Code.
## How to submit changes
Open a [pull request](https://github.com/mib1185/py-synologydsm-api/pulls) to submit changes to this project.
Your pull request needs to meet the following guidelines for acceptance:
- The test suite must pass without errors and warnings.
- Include unit tests. This project maintains 100% code coverage.
- If your changes add functionality, update the documentation accordingly.
Feel free to submit early, though—we can always iterate on this.
To run linting and code formatting checks before commiting your change, pre-commit as a Git hook is installed within the [Visual Studio Code Dev Container](https://code.visualstudio.com/docs/devcontainers/containers).
It is recommended to open an issue before starting work on anything.
This will allow a chance to talk it over with the owners and validate your approach.
py-synologydsm-api-2.7.1/LICENSE.txt 0000664 0000000 0000000 00000002071 14762405272 0017141 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2020 mib1185
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
py-synologydsm-api-2.7.1/README.md 0000664 0000000 0000000 00000047222 14762405272 0016604 0 ustar 00root root 0000000 0000000 # Asynchronous Python API for Synology DSM
[](https://github.com/mib1185/py-synologydsm-api/actions?query=workflow%3ATests+branch%3Amaster)
[](https://pypi.org/project/py-synologydsm-api)
[](https://pypi.org/project/py-synologydsm-api)
[](https://pypi.org/project/py-synologydsm-api)
[](https://github.com/psf/black)
# Installation
```bash
[sudo] pip install py-synologydsm-api
```
# Usage
You can import the module as `synology_dsm`.
## Constructor
```python
SynologyDSM(
session,
dsm_ip,
dsm_port,
username,
password,
use_https=False,
timeout=10,
device_token=None,
debugmode=False,
)
```
For `session` a valid `aiohttp.ClientSession` needs to be provided. If ssl verification should be truned off, configure the session accordingly (eq. `aiohttp.ClientSession(connector=aiohttp.TCPConnector(verify_ssl=False)`)
`device_token` should be added when using a two-step authentication account, otherwise DSM will ask to login with a One Time Password (OTP) and requests will fail (see the login section for more details).
Default `timeout` is 10 seconds. `SynologyDSM` also takes a `aiohttp.ClientTimeout` as `timeout`.
## Login
Use the `login()` function to authenticate first, otherwise a `SynologyDSMNotLoggedInException` is raised.
It will return a boolean if it successed or faild to authenticate to DSM.
If your account need a two-step authentication (2SA), `login()` will raise `SynologyDSMLogin2SARequiredException`.
Call the function again with a One Time Password (OTP) as parameter, like `login("123456")` (better to be a string to handle first zero).
Store the `device_token` property so that you do not need to reconnect with password the next time you open a new `SynologyDSM` session.
## Code example
Every API has an `update()` function that is needed to get the first data, then the data is cached and updated at the next `update()` call.
The `SynologyDSM` class can also `update()` all APIs at once.
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
print("=== Information ===")
await api.information.update()
print("Model: " + str(api.information.model))
print("RAM: " + str(api.information.ram) + " MB")
print("Serial number: " + str(api.information.serial))
print("Temperature: " + str(api.information.temperature) + " °C")
print("Temp. warning: " + str(api.information.temperature_warn))
print("Uptime: " + str(api.information.uptime))
print("Full DSM version:" + str(api.information.version_string))
print("Major DSM version:" + str(api.information.awesome_version.major))
print("Minor DSM version:" + str(api.information.awesome_version.minor))
print("Micro DSM version:" + str(api.information.awesome_version.micro))
print("Patch DSM version:" + str(api.information.awesome_version.patch))
print("--")
print("=== Utilisation ===")
await api.utilisation.update()
print("CPU Load: " + str(api.utilisation.cpu_total_load) + " %")
print("Memory Use: " + str(api.utilisation.memory_real_usage) + " %")
print("Net Up: " + str(api.utilisation.network_up()))
print("Net Down: " + str(api.utilisation.network_down()))
print("--")
print("=== Storage ===")
await api.storage.update()
for volume_id in api.storage.volumes_ids:
print("ID: " + str(volume_id))
print("Status: " + str(api.storage.volume_status(volume_id)))
print("% Used: " + str(api.storage.volume_percentage_used(volume_id)) + " %")
print("--")
for disk_id in api.storage.disks_ids:
print("ID: " + str(disk_id))
print("Name: " + str(api.storage.disk_name(disk_id)))
print("S-Status: " + str(api.storage.disk_smart_status(disk_id)))
print("Status: " + str(api.storage.disk_status(disk_id)))
print("Temp: " + str(api.storage.disk_temp(disk_id)))
print("--")
print("=== Shared Folders ===")
await api.share.update()
for share_uuid in api.share.shares_uuids:
print("Share name: " + str(api.share.share_name(share_uuid)))
print("Share path: " + str(api.share.share_path(share_uuid)))
print("Space used: " + str(api.share.share_size(share_uuid, human_readable=True)))
print("Recycle Bin Enabled: " + str(api.share.share_recycle_bin(share_uuid)))
print("--")
if __name__ == "__main__":
asyncio.run(main())
```
## Download Station usage
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
if "SYNO.DownloadStation.Info" in api.apis:
await api.download_station.get_info()
await api.download_station.get_config()
# The download list will be updated after each of the following functions:
# You should have the right on the (default) directory that the download will be saved, or you will get a 403 or 406 error
await api.download_station.create("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
await api.download_station.pause("dbid_1")
# Like the other function, you can eather pass a str or a list
await api.download_station.resume(["dbid_1", "dbid_2"])
await api.download_station.delete("dbid_3")
# Manual update
await api.download_station.update()
if __name__ == "__main__":
asyncio.run(main())
```
## File Station usage
### List folders and files in specific folder
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
shared_folders = await api.file.get_shared_folders()
for folder in shared_folders:
print(f"############### {folder.name} ###############")
print(f"path: {folder.path}")
print(f"freespace: {folder.additional.volume_status.freespace}")
print(f"totalspace: {folder.additional.volume_status.totalspace}")
print(f"readonly: {folder.additional.volume_status.readonly}")
files = await api.file.get_files(path="/home")
for file in files:
print(f"path: {file.path}")
print(f"size: {file.additional.size}")
print(f"is dir: {file.is_dir}")
print(f"owner user: {file.additional.owner.user}")
if __name__ == "__main__":
asyncio.run(main())
```
### Upload, Download and Delete files
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
# upload file direct from local
await api.file.upload_file(path="/home", filename="myfile.name", source="/workspace/myfile.name")
# upload file direct from local, create parent folder(s) if none exist.
await api.file.upload_file(path="/home/new_folder", filename="myfile.name", source="/workspace/myfile.name", create_parents=True)
# upload file from a stream reader
await api.file.upload_file(path="/home", filename="myfile.name", source=open("/workspace/myfile.name", "rb"))
# upload file from an AsyncIterator[bytes]
loop = asyncio.get_running_loop()
async def send_backup() -> AsyncIterator[bytes]:
f = await loop.run_in_executor(None, open, "/workspace/myfile.name", "rb")
try:
while chunk := await loop.run_in_executor(None, f.read, 2**20):
yield chunk
finally:
await loop.run_in_executor(None, f.close)
async def open_backup() -> AsyncIterator[bytes]:
return send_backup()
await api.file.upload_file(path="/home", filename="myfile.name", source=await open_backup())
# download file direct to local
await api.file.download_file(path="/home", filename="myfile.name", target_file="/tmp/download.file")
# download file via stream reader
stream_reader = await api.file.download_file(path="/home", filename="myfile.name")
with open("/tmp/download.file", "wb") as fh:
async for data in stream_reader.iter_chunked(8192):
fh.write(data)
await api.file.delete_file(path="/home", filename="myfile.name")
if __name__ == "__main__":
asyncio.run(main())
```
## External USB storage usage
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
await api.external_usb.update()
for device in api.external_usb.get_devices.values():
print("Name: " + str(device.device_name))
print("Size: " + str(device.device_size_total(human_readable=True))
print("Size in mb: " + str(device.device_size_total())
print("Partitions size total: " + str(device.partitions_all_size_total(human_readable=True)))
print("Partitions size used: " + str(device.partitions_all_size_used(human_readable=True)))
print("Partitions % Used: " + str(device.partitions_all_percentage_used ) + " %")
print(" === Partitions ===")
for part in device.device_partitions.values():
print(" Share name: " + str(part.share_name))
print(" Filesystem: " + str(part.filesystem))
print(" Size: " + str(part.partition_size_total(human_readable=True)))
print(" Used: " + str(part.partition_size_used(human_readable=True)))
print(" % Used: " + str(part.partition_percentage_used) + " %")
if __name__ == "__main__":
asyncio.run(main())
```
## Photos usage
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
albums = await api.photos.get_albums()
# download each item of each album
for album in albums:
print(f"'{album.name}' has {album.item_count} items")
items = await api.photos.get_items_from_album(album)
for item in items:
print(f"{item.file_name}")
with open(item.file_name, "wb") as fh:
fh.write(await api.photos.download_item(item))
# search for items and download them
items = await api.photos.get_items_from_search("pinky and the brain")
for item in items:
with open(item.file_name, "wb") as fh:
fh.write(await api.photos.download_item(item))
if __name__ == "__main__":
asyncio.run(main())
```
## Surveillance Station usage
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
surveillance = api.surveillance_station
await surveillance.update() # First update is required
# Returns a list of cached cameras available
cameras = surveillance.get_all_cameras()
# Assuming there's at least one camera, get the first camera_id
camera_id = cameras[0].camera_id
# Returns cached camera object by camera_id
camera = surveillance.get_camera(camera_id)
# Returns cached motion detection enabled
motion_setting = camera.is_motion_detection_enabled
# Return bytes of camera image
await surveillance.get_camera_image(camera_id)
# Updates all cameras/motion settings and cahce them
await surveillance.update()
# Gets Home Mode status
home_mode_status = await surveillance.get_home_mode_status()
# Sets home mode - true is on, false is off
await surveillance.set_home_mode(True)
if __name__ == "__main__":
asyncio.run(main())
```
## System usage
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
system = api.system
# Reboot NAS
await system.reboot()
# Shutdown NAS
await system.shutdown()
# Manual update system information
await system.update()
# Get CPU information
system.cpu_clock_speed
system.cpu_cores
system.cpu_family
system.cpu_series
# Get NTP settings
system.enabled_ntp
system.ntp_server
# Get system information
system.firmware_ver
system.model
system.ram_size
system.serial
system.sys_temp
system.time
system.time_zone
system.time_zone_desc
system.up_time
# Get list of all connected USB devices
system.usb_dev
if __name__ == "__main__":
asyncio.run(main())
```
## Upgrade usage
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
upgrade = api.upgrade
# Manual update upgrade information
await upgrade.update()
# check if DSM update is available
if upgrade.update_available:
do something ...
# get available version string (return None if no update available)
upgrade.available_version
# get need of reboot (return None if no update available)
upgrade.reboot_needed
# get need of service restarts (return None if no update available)
upgrade.service_restarts
if __name__ == "__main__":
asyncio.run(main())
```
## Virtual Machine Manager usage
### Show information about all existing guests
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
await api.virtual_machine_manager.update()
guests = api.virtual_machine_manager.get_all_guests()
for guest in guests:
print(f"############### {guest.name} ###############")
print(f"autorun: {guest.autorun}")
print(f"description: {guest.description}")
print(f"guest_id: {guest.guest_id}")
print(f"status: {guest.status}")
print(f"vcpu_num: {guest.vcpu_num}")
print(f"vram_size: {guest.vram_size / 1024} MiBytes")
print(f"host_cpu_usage: {guest.host_cpu_usage / 10} %")
print(f"host_ram_usage: {round(guest.host_ram_usage / 1024,1)} MiBytes")
if __name__ == "__main__":
asyncio.run(main())
```
### Perform power actions on guests
```python
import asyncio
import aiohttp
from synology_dsm import SynologyDSM
async def main():
print("Creating Valid API")
async with aiohttp.ClientSession(
connector=aiohttp.TCPConnector(verify_ssl=False)
) as session:
await do(session)
async def do(session: aiohttp.ClientSession):
api = SynologyDSM(session, "", "", "", "")
await api.login()
await api.virtual_machine_manager.update()
# start a guest
await api.virtual_machine_manager.guest_poweron("{guest.guest_id}")
# power off a guest
await api.virtual_machine_manager.guest_poweroff("{guest.guest_id}")
# graceful shutdown a guest (needs working guest-agent, else it is not graceful)
await api.virtual_machine_manager.guest_shutdown("{guest.guest_id}")
# graceful restart a guest (needs working guest-agent, else it is not graceful)
await api.virtual_machine_manager.guest_restart("{guest.guest_id}")
if __name__ == "__main__":
asyncio.run(main())
```
# Credits / Special Thanks
- [@florianeinfalt](https://github.com/florianeinfalt)
- [@tchellomello](https://github.com/tchellomello)
- [@Quentame](https://github.com/Quentame) (Multiple API addition & tests)
- [@aaska](https://github.com/aaska) (DSM 5 tests)
- [@chemelli74](https://github.com/chemelli74) (2SA tests)
- [@snjoetw](https://github.com/snjoetw) (Surveillance Station library)
- [@shenxn](https://github.com/shenxn) (Surveillance Station tests)
- [@Gestas](https://github.com/Gestas) (Shared Folders)
- [@lodesmets](https://github.com/lodesmets) (Synology Photos)
Found Synology API "documentation" on this repo : https://github.com/kwent/syno/tree/master/definitions
# Official references
- [Calendar API documentation (2015-2019)](https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/Calendar/2.4/enu/Synology_Calendar_API_Guide_enu.pdf)
- [Download Station API documentation (2012-2014)](https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/DownloadStation/All/enu/Synology_Download_Station_Web_API.pdf)
- [File Station API documentation (2013-2019)](https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/FileStation/All/enu/Synology_File_Station_API_Guide.pdf)
- [Surveillance Station API documentation (2012-2020)](https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/SurveillanceStation/All/enu/Surveillance_Station_Web_API.pdf)
- [Virtual Machine Manager API documentation (2015-2019)](https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/Virtualization/All/enu/Synology_Virtual_Machine_Manager_API_Guide.pdf)
py-synologydsm-api-2.7.1/codecov.yml 0000664 0000000 0000000 00000000204 14762405272 0017457 0 ustar 00root root 0000000 0000000 comment: false
coverage:
status:
project:
default:
target: "75"
patch:
default:
target: "100"
py-synologydsm-api-2.7.1/mypy.ini 0000664 0000000 0000000 00000001112 14762405272 0017010 0 ustar 00root root 0000000 0000000 [mypy]
show_error_codes = true
follow_imports = silent
ignore_missing_imports = true
strict_equality = true
no_implicit_optional = true
warn_incomplete_stub = true
warn_redundant_casts = true
warn_unused_configs = true
warn_unused_ignores = true
enable_error_code = ignore-without-code
disable_error_code = annotation-unchecked
strict_concatenate = false
check_untyped_defs = true
disallow_incomplete_defs = true
disallow_subclassing_any = true
disallow_untyped_calls = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
warn_return_any = true
warn_unreachable = true
py-synologydsm-api-2.7.1/pyproject.toml 0000664 0000000 0000000 00000004010 14762405272 0020225 0 ustar 00root root 0000000 0000000 [build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "py-synologydsm-api"
version = "2.7.1"
description = "Python API for communication with Synology DSM"
authors = [
{name="Michael Brussk (mib1185)"},
{name="Quentin POLLET (Quentame)"},
{name="FG van Zeelst (ProtoThis)"}
]
license = {text = "MIT"}
readme = "README.md"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development :: Libraries",
]
keywords=["synology-dsm", "synology"]
requires-python = ">=3.9"
dependencies = ["aiohttp", "aiofiles", "awesomeversion"]
[project.urls]
Changelog = "https://github.com/mib1185/py-synologydsm-api/releases"
Repository = "https://github.com/mib1185/py-synologydsm-api"
Documentation = "https://github.com/mib1185/py-synologydsm-api#readme"
[project.scripts]
synologydsm-api = "synology_dsm.__main__:main"
[tool.setuptools.package-data]
synology_dsm = ["py.typed", "*.py", "**/*.py"]
[tool.coverage.paths]
source = ["src", "*/site-packages"]
[tool.coverage.run]
branch = true
source = ["synology_dsm"]
[tool.coverage.report]
show_missing = true
fail_under = 75
[tool.isort]
profile = "black"
src_paths = ["src", "tests"]
[tool.mypy]
exclude = ["tests/"]
[tool.pylint.MAIN]
ignore = ["tests"]
[tool.pylint.BASIC]
class-const-naming-style = "any"
good-names = [
"id",
]
[tool.pylint."MESSAGES CONTROL"]
disable = [
"too-few-public-methods",
"too-many-arguments",
"too-many-branches",
"too-many-instance-attributes",
"too-many-locals",
"too-many-public-methods",
"too-many-positional-arguments",
"too-many-statements",
"too-many-return-statements",
]
py-synologydsm-api-2.7.1/requirements_dev.txt 0000664 0000000 0000000 00000000554 14762405272 0021444 0 ustar 00root root 0000000 0000000 aiohttp
aiofiles
types-aiofiles
awesomeversion
black==25.1.0
coverage[toml]
flake8-bandit==4.1.1
flake8-bugbear==24.12.12
flake8-docstrings==1.7.0
flake8-rst-docstrings==0.3.0
flake8==7.1.2
mypy==1.15.0
pep8-naming==0.14.1
pre-commit-hooks==5.0.0
pre-commit==4.1.0
Pygments==2.19.1
pylint==3.3.4
pytest-asyncio==0.25.3
pytest==8.3.4
reorder-python-imports==3.14.0
py-synologydsm-api-2.7.1/scripts/ 0000775 0000000 0000000 00000000000 14762405272 0017005 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/scripts/clean.sh 0000775 0000000 0000000 00000000201 14762405272 0020417 0 ustar 00root root 0000000 0000000 ./scripts/common.sh
# Clean
rm -r .tox
rm -r build
rm -r dist
rm -r python_synology.egg-info
rm -r src/python_synology.egg-info
py-synologydsm-api-2.7.1/scripts/common.sh 0000775 0000000 0000000 00000000074 14762405272 0020635 0 ustar 00root root 0000000 0000000 # Be in right place
if [ ! -f setup.py ]; then
cd ..
fi
py-synologydsm-api-2.7.1/scripts/publish.sh 0000775 0000000 0000000 00000000773 14762405272 0021021 0 ustar 00root root 0000000 0000000 # Publish the library
# https://pypi.org/project/synologydsm-api
# Publish documentation here: https://packaging.python.org/tutorials/packaging-projects/
./scripts/common.sh
./scripts/clean.sh
# Install/update dependencies
python3 -m pip install --user --upgrade setuptools wheel
python3 -m pip install --user --upgrade twine
# Build
python3 setup.py sdist bdist_wheel
# Push to PyPi
python3 -m twine upload dist/*
# python3 -m twine upload --repository testpypi dist/*
# Enter credentials manually :P
py-synologydsm-api-2.7.1/scripts/setup 0000775 0000000 0000000 00000000730 14762405272 0020073 0 ustar 00root root 0000000 0000000 #!/usr/bin/env bash
# Setups the repository.
# Stop on errors
set -e
cd "$(dirname "$0")/.."
# Add default vscode settings if not existing
SETTINGS_FILE=./.vscode/settings.json
SETTINGS_TEMPLATE_FILE=./.vscode/settings.default.json
if [ ! -f "$SETTINGS_FILE" ]; then
echo "Copy $SETTINGS_TEMPLATE_FILE to $SETTINGS_FILE."
cp "$SETTINGS_TEMPLATE_FILE" "$SETTINGS_FILE"
fi
# install git pre-commit hook
pre-commit install
# install from source
pip install -e .
py-synologydsm-api-2.7.1/setup.cfg 0000664 0000000 0000000 00000000106 14762405272 0017134 0 ustar 00root root 0000000 0000000 [metadata]
url = https://github.com/mib1185/py-synologydsm-api#readme
py-synologydsm-api-2.7.1/src/ 0000775 0000000 0000000 00000000000 14762405272 0016105 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/ 0000775 0000000 0000000 00000000000 14762405272 0020633 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/__init__.py 0000664 0000000 0000000 00000000152 14762405272 0022742 0 ustar 00root root 0000000 0000000 """The synologydsm-api library."""
from .synology_dsm import SynologyDSM
__all__ = ["SynologyDSM"]
py-synologydsm-api-2.7.1/src/synology_dsm/api/ 0000775 0000000 0000000 00000000000 14762405272 0021404 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/__init__.py 0000664 0000000 0000000 00000000667 14762405272 0023526 0 ustar 00root root 0000000 0000000 """Synology API models."""
from __future__ import annotations
from typing import TYPE_CHECKING, Generic, TypeVar
if TYPE_CHECKING:
from synology_dsm import SynologyDSM
_DataT = TypeVar("_DataT")
class SynoBaseApi(Generic[_DataT]):
"""Base api class."""
def __init__(self, dsm: "SynologyDSM") -> None:
"""Constructor method."""
self._dsm = dsm
self._data: _DataT = {} # type: ignore[assignment]
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/ 0000775 0000000 0000000 00000000000 14762405272 0022334 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/core/__init__.py 0000664 0000000 0000000 00000000040 14762405272 0024437 0 ustar 00root root 0000000 0000000 """Synology Core API models."""
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/external_usb.py 0000664 0000000 0000000 00000021731 14762405272 0025405 0 ustar 00root root 0000000 0000000 """DSM external USB device data."""
from __future__ import annotations
from typing import TypedDict, cast
from synology_dsm.api import SynoBaseApi
from synology_dsm.helpers import SynoFormatHelper
ExternalUsbDevicePartitionDataType = TypedDict(
"ExternalUsbDevicePartitionDataType",
{
"dev_fstype": str,
"filesystem": str,
"name_id": str,
"partition_title": str,
"share_name": str,
"status": str,
"total_size_mb": "int | str",
"used_size_mb": "int | None",
},
total=False,
)
ExternalUsbDeviceDataType = TypedDict(
"ExternalUsbDeviceDataType",
{
"dev_id": str,
"dev_title": str,
"dev_type": str,
"formatable": bool,
"partitions": "dict[str, SynoUSBStoragePartition]",
"producer": str,
"product": str,
"progress": str,
"status": str,
"total_size_mb": int,
},
total=False,
)
class SynoCoreExternalUSB(SynoBaseApi["dict[str, SynoCoreExternalUSBDevice]"]):
"""Class for external USB storage devices."""
API_KEY = "SYNO.Core.ExternalDevice.Storage.USB"
REQUEST_DATA = {"additional": '["all"]'}
async def update(self) -> None:
"""Updates external USB storage device data."""
raw_data = await self._dsm.post(self.API_KEY, "list", data=self.REQUEST_DATA)
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
for device in data["devices"]:
self._data[device["dev_id"]] = SynoCoreExternalUSBDevice(device)
# Root
@property
def get_devices(self) -> dict[str, SynoCoreExternalUSBDevice]:
"""Gets all external USB storage devices."""
return self._data
def get_device(self, device_id: str) -> SynoCoreExternalUSBDevice | None:
"""Returns a specific external USB storage device."""
return self._data.get(device_id)
class SynoCoreExternalUSBDevice:
"""A representation of an external USB device."""
def __init__(self, data: dict):
"""Initialize a external USB device."""
partitions: dict[str, SynoUSBStoragePartition] = {}
for partition in data["partitions"]:
partitions[partition["name_id"]] = SynoUSBStoragePartition(partition)
self._data = cast(ExternalUsbDeviceDataType, {**data, "partitions": partitions})
@property
def device_id(self) -> str:
"""Return id of the device."""
return self._data["dev_id"]
@property
def device_name(self) -> str:
"""The title of the external USB storage device."""
return self._data["dev_title"]
@property
def device_type(self) -> str:
"""The type of the external USB storage device."""
return self._data["dev_type"]
def device_size_total(self, human_readable: bool = False) -> str | int:
"""Total size of the external USB storage device."""
return_data = SynoFormatHelper.megabytes_to_bytes(
int(self._data["total_size_mb"])
)
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
@property
def device_status(self) -> str:
"""The status of the external USB storage device."""
return self._data["status"]
@property
def device_formatable(self) -> bool:
"""Whether the external USB storage device can be formatted."""
return self._data["formatable"]
@property
def device_progress(self) -> str:
"""The progress the external USB storage device."""
return self._data["progress"]
@property
def device_product_name(self) -> str:
"""The product name of the external USB storage device."""
return self._data["product"]
@property
def device_manufacturer(self) -> str:
"""The producer name of the external USB storage device."""
return self._data["producer"]
# Partition
@property
def device_partitions(self) -> dict[str, SynoUSBStoragePartition]:
"""Returns all partitions of the external USB storage device."""
return self._data["partitions"]
def get_device_partition(self, partition_id: str) -> SynoUSBStoragePartition | None:
"""Returns a partition of the external USB storage device."""
return self._data["partitions"].get(partition_id)
def partitions_all_size_total(
self, human_readable: bool = False
) -> str | int | None:
"""Total size of all parititions of the external USB storage device."""
partitions = self._data["partitions"]
if not partitions:
return None
size_total = 0
for partition in partitions.values():
partition_size = partition.partition_size_total()
# Partitions may be reported without a size
if isinstance(partition_size, int):
size_total += partition_size
if human_readable:
return SynoFormatHelper.bytes_to_readable(size_total)
return size_total
def partitions_all_size_used(
self, human_readable: bool = False
) -> str | int | None:
"""Total size used of all partitions of the external USB storage device."""
partitions = self._data["partitions"]
if not partitions:
return None
size_used = 0
for partition in partitions.values():
partition_used = partition.partition_size_used()
# Partitions may be reported without a size
if isinstance(partition_used, int):
size_used += partition_used
if human_readable:
return SynoFormatHelper.bytes_to_readable(size_used)
return size_used
@property
def partitions_all_percentage_used(self) -> float | None:
"""Used size in percentage for all partitions of the USB storage device."""
size_total = self.partitions_all_size_total()
size_used = self.partitions_all_size_used()
if (
isinstance(size_used, int)
and size_used >= 0
and isinstance(size_total, int)
and size_total > 0
):
return round((float(size_used) / float(size_total)) * 100.0, 1)
return None
class SynoUSBStoragePartition:
"""A representation of a parition of an external USB storage device."""
def __init__(self, data: ExternalUsbDevicePartitionDataType):
"""Initialize a partition object of an external USB storage device."""
self._data = data
@property
def fstype(self) -> str:
"""Return the dev_fstype for the partition."""
return self._data["dev_fstype"]
@property
def filesystem(self) -> str:
"""Return the filesystem for the partition."""
return self._data["filesystem"]
@property
def name_id(self) -> str:
"""Return the name_id for the partition."""
return self._data["name_id"]
@property
def partition_title(self) -> str:
"""Return the title for the partition."""
return self._data["partition_title"]
@property
def share_name(self) -> str:
"""Return the share name for the partition."""
return self._data["share_name"]
@property
def status(self) -> str:
"""Return the status for the partition."""
return self._data["status"]
def partition_size_total(self, human_readable: bool = False) -> int | str | None:
"""Total size of the partition."""
# API returns property as empty string if a partition has no size
size_total = self._data["total_size_mb"]
if not isinstance(size_total, int):
return None
size_total = SynoFormatHelper.megabytes_to_bytes(size_total)
if human_readable:
return SynoFormatHelper.bytes_to_readable(size_total)
return size_total
def partition_size_used(self, human_readable: bool = False) -> int | str | None:
"""Used size of the partition."""
# API does not return property if a partition has no size
size_used = self._data.get("used_size_mb")
if not isinstance(size_used, int):
return None
size_used = SynoFormatHelper.megabytes_to_bytes(size_used)
if human_readable:
return SynoFormatHelper.bytes_to_readable(size_used)
return size_used
@property
def partition_percentage_used(self) -> float | None:
"""Used size in percentage of the partition."""
size_total = self.partition_size_total()
size_used = self.partition_size_used()
if (
isinstance(size_used, int)
and size_used >= 0
and isinstance(size_total, int)
and size_total > 0
):
return round((float(size_used) / float(size_total)) * 100.0, 1)
return None
@property
def is_mounted(self) -> bool:
"""Is the partition formatted."""
return self._data["share_name"] != ""
@property
def is_supported(self) -> bool:
"""Is the partition formatted."""
return self._data["filesystem"] != ""
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/security.py 0000664 0000000 0000000 00000004421 14762405272 0024556 0 ustar 00root root 0000000 0000000 """DSM Security data."""
from __future__ import annotations
from typing import TypedDict
from synology_dsm.api import SynoBaseApi
SecurityCategory = TypedDict(
"SecurityCategory",
{
"category": str,
"fail": "dict[str, int]",
"failSeverity": str,
"progress": int,
"runningItem": str,
"total": int,
"waitNum": int,
},
)
class SecurityDataType(TypedDict):
"""Data type."""
items: dict[str, SecurityCategory]
lastScanTime: str # noqa: N815
startTime: str # noqa: N815
success: bool
sysProgress: int # noqa: N815
sysStatus: str # noqa: N815
class SynoCoreSecurity(SynoBaseApi[SecurityDataType]):
"""Class containing Security data."""
API_KEY = "SYNO.Core.SecurityScan.Status"
async def update(self) -> None:
"""Updates security data."""
raw_data = await self._dsm.get(self.API_KEY, "system_get")
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data
@property
def checks(self) -> dict[str, SecurityCategory]:
"""Gets the checklist by check category."""
return self._data["items"]
@property
def last_scan_time(self) -> str:
"""Gets the last scan time."""
return self._data["lastScanTime"]
@property
def start_time(self) -> str:
"""Gets the start time (if in progress)."""
return self._data["startTime"]
@property
def success(self) -> bool:
"""Gets the last scan success."""
return self._data["success"]
@property
def progress(self) -> int:
"""Gets the scan progress.
Returns: 100 if finished
"""
return self._data["sysProgress"]
@property
def status(self) -> str:
"""Gets the last scan status.
Possible values: safe, danger, info, outOfDate, risk, warning.
"""
return self._data["sysStatus"]
@property
def status_by_check(self) -> dict[str, str]:
"""Gets the last scan status per check."""
status = {}
for category in self.checks:
status[category] = self.checks[category]["failSeverity"]
return status
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/share.py 0000664 0000000 0000000 00000006100 14762405272 0024005 0 ustar 00root root 0000000 0000000 """Shared Folders data."""
from __future__ import annotations
from typing import TypedDict
from synology_dsm.api import SynoBaseApi
from synology_dsm.helpers import SynoFormatHelper
Share = TypedDict(
"Share",
{
"uuid": str,
"name": str,
"vol_path": str,
"enable_recycle_bin": bool,
"share_quota_used": float,
},
total=False,
)
class ShareDataType(TypedDict):
"""Data type."""
shares: list[Share]
class SynoCoreShare(SynoBaseApi[ShareDataType]):
"""Class containing Share data."""
API_KEY = "SYNO.Core.Share"
# Syno supports two methods to retrieve resource details, GET and POST.
# GET returns a limited set of keys. With POST the same keys as GET
# are returned plus any keys listed in the "additional" parameter.
# NOTE: The value of the additional key must be a string.
REQUEST_DATA = {
"additional": '["hidden","encryption","is_aclmode","unite_permission",'
'"is_support_acl","is_sync_share","is_force_readonly","force_readonly_reason",'
'"recyclebin","is_share_moving","is_cluster_share","is_exfat_share",'
'"is_cold_storage_share","support_snapshot","share_quota",'
'"enable_share_compress","enable_share_cow","include_cold_storage_share",'
'"is_cold_storage_share"]',
"shareType": "all",
}
async def update(self) -> None:
"""Updates share data."""
raw_data = await self._dsm.post(self.API_KEY, "list", data=self.REQUEST_DATA)
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data
@property
def shares(self) -> list[Share]:
"""Gets all shares."""
return self._data["shares"]
@property
def shares_uuids(self) -> list[str]:
"""Return (internal) share ids."""
shares = []
for share in self.shares:
shares.append(share["uuid"])
return shares
def get_share(self, share_uuid: str) -> Share:
"""Returns a specific share by uuid.."""
for share in self.shares:
if share["uuid"] == share_uuid:
return share
return {}
def share_name(self, share_uuid: str) -> str:
"""Return the name of this share."""
return self.get_share(share_uuid)["name"]
def share_path(self, share_uuid: str) -> str:
"""Return the volume path of this share."""
return self.get_share(share_uuid)["vol_path"]
def share_recycle_bin(self, share_uuid: str) -> bool:
"""Is the recycle bin enabled for this share?"""
return self.get_share(share_uuid)["enable_recycle_bin"]
def share_size(self, share_uuid: str, human_readable: bool = False) -> int | str:
"""Total size of share."""
share_size_mb = self.get_share(share_uuid)["share_quota_used"]
# Share size is returned in MB so we convert it.
share_size_bytes = SynoFormatHelper.megabytes_to_bytes(share_size_mb)
if human_readable:
return SynoFormatHelper.bytes_to_readable(share_size_bytes)
return share_size_bytes
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/system.py 0000664 0000000 0000000 00000007057 14762405272 0024243 0 ustar 00root root 0000000 0000000 """DSM System data and actions."""
from __future__ import annotations
from typing import Any, TypedDict
from synology_dsm.api import SynoBaseApi
class SystemDataType(TypedDict):
"""Data type."""
cpu_clock_speed: int
cpu_cores: str
cpu_family: str
cpu_series: str
enabled_ntp: bool
ntp_server: str
firmware_ver: str
model: str
ram_size: int
serial: str
sys_temp: int
time: str
time_zone: str
time_zone_desc: str
up_time: str
usb_dev: list[dict[str, Any]]
class SynoCoreSystem(SynoBaseApi[SystemDataType]):
"""Class containing System data and actions."""
API_KEY = "SYNO.Core.System"
async def update(self) -> None:
"""Updates System data."""
raw_data = await self._dsm.get(self.API_KEY, "info")
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data
#
# get information
#
@property
def cpu_clock_speed(self) -> int:
"""Gets System CPU clock speed."""
return self._data["cpu_clock_speed"]
@property
def cpu_cores(self) -> str:
"""Gets System CPU cores."""
return self._data["cpu_cores"]
@property
def cpu_family(self) -> str:
"""Gets System CPU family."""
return self._data["cpu_family"]
@property
def cpu_series(self) -> str:
"""Gets System CPU series."""
return self._data["cpu_series"]
@property
def enabled_ntp(self) -> bool:
"""Gets System NTP state."""
return self._data["enabled_ntp"]
@property
def ntp_server(self) -> str:
"""Gets System NTP server."""
return self._data["ntp_server"]
@property
def firmware_ver(self) -> str:
"""Gets System firmware version."""
return self._data["firmware_ver"]
@property
def model(self) -> str:
"""Gets System model."""
return self._data["model"]
@property
def ram_size(self) -> int:
"""Gets System ram size."""
return self._data["ram_size"]
@property
def serial(self) -> str:
"""Gets System serial number."""
return self._data["serial"]
@property
def sys_temp(self) -> int:
"""Gets System temperature."""
return self._data["sys_temp"]
@property
def time(self) -> str:
"""Gets System time."""
return self._data["time"]
@property
def time_zone(self) -> str:
"""Gets System time zone."""
return self._data["time_zone"]
@property
def time_zone_desc(self) -> str:
"""Gets System time zone description."""
return self._data["time_zone_desc"]
@property
def up_time(self) -> str:
"""Gets System uptime."""
return self._data["up_time"]
@property
def usb_dev(self) -> list:
"""Gets System connected usb devices."""
return self._data["usb_dev"]
#
# do system actions
#
async def shutdown(self) -> None:
"""Shutdown NAS."""
await self._dsm.get(
self.API_KEY,
"shutdown",
{"local": "true"},
max_version=1, # shutdown method is only available on api version 1
)
async def reboot(self) -> None:
"""Reboot NAS."""
await self._dsm.get(
self.API_KEY,
"reboot",
max_version=1, # reboot method is only available on api version 1
)
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/upgrade.py 0000664 0000000 0000000 00000003050 14762405272 0024333 0 ustar 00root root 0000000 0000000 """DSM Upgrade data and actions."""
from __future__ import annotations
from typing import TypedDict
from synology_dsm.api import SynoBaseApi
class UpgradeDataType(TypedDict, total=False):
"""Data type."""
available: bool
version: str
version_details: dict
reboot: str
restart: str
class SynoCoreUpgrade(SynoBaseApi[UpgradeDataType]):
"""Class containing upgrade data and actions."""
API_KEY = "SYNO.Core.Upgrade"
API_SERVER_KEY = API_KEY + ".Server"
async def update(self) -> None:
"""Updates Upgrade data."""
raw_data = await self._dsm.get(self.API_SERVER_KEY, "check")
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data.get("update", data)
@property
def update_available(self) -> bool:
"""Gets available update info."""
return self._data["available"]
@property
def available_version(self) -> str | None:
"""Gets available verion info."""
return self._data.get("version")
@property
def available_version_details(self) -> dict | None:
"""Gets details about available verion."""
return self._data.get("version_details")
@property
def reboot_needed(self) -> str | None:
"""Gets info if reboot is needed."""
return self._data.get("reboot")
@property
def service_restarts(self) -> str | None:
"""Gets info if services are restarted."""
return self._data.get("restart")
py-synologydsm-api-2.7.1/src/synology_dsm/api/core/utilization.py 0000664 0000000 0000000 00000014627 14762405272 0025273 0 ustar 00root root 0000000 0000000 """DSM Utilization data."""
from __future__ import annotations
from typing import TypedDict
from synology_dsm.api import SynoBaseApi
from synology_dsm.helpers import SynoFormatHelper
CpuUtilization = TypedDict(
"CpuUtilization",
{
"15min_load": int,
"1min_load": int,
"5min_load": int,
"device": str,
"other_load": int,
"system_load": int,
"user_load": int,
},
)
MemoryUtilization = TypedDict(
"MemoryUtilization",
{
"avail_real": int,
"avail_swap": int,
"buffer": int,
"cached": int,
"device": str,
"memory_size": int,
"real_usage": int,
"si_disk": int,
"so_disk": int,
"swap_usage": int,
"total_real": int,
"total_swap": int,
},
)
NetworkUtilization = TypedDict(
"NetworkUtilization",
{
"device": str,
"rx": int,
"tx": int,
},
)
class UtilizationDataType(TypedDict, total=False):
"""Data type."""
cpu: CpuUtilization
memory: MemoryUtilization
network: list[NetworkUtilization]
class SynoCoreUtilization(SynoBaseApi[UtilizationDataType]):
"""Class containing Utilization data."""
API_KEY = "SYNO.Core.System.Utilization"
async def update(self) -> None:
"""Updates utilization data."""
raw_data = await self._dsm.get(self.API_KEY, "get")
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data
@property
def cpu(self) -> CpuUtilization:
"""Gets CPU utilization."""
return self._data["cpu"]
@property
def cpu_other_load(self) -> int:
"""Other percentage of the total CPU load."""
return self.cpu["other_load"]
@property
def cpu_user_load(self) -> int:
"""User percentage of the total CPU load."""
return self.cpu["user_load"]
@property
def cpu_system_load(self) -> int:
"""System percentage of the total CPU load."""
return self.cpu["system_load"]
@property
def cpu_total_load(self) -> int:
"""Total CPU load for Synology DSM."""
system_load = self.cpu_system_load
user_load = self.cpu_user_load
other_load = self.cpu_other_load
return system_load + user_load + other_load
@property
def cpu_1min_load(self) -> int:
"""Average CPU load past minute."""
return self.cpu["1min_load"]
@property
def cpu_5min_load(self) -> int:
"""Average CPU load past 5 minutes."""
return self.cpu["5min_load"]
@property
def cpu_15min_load(self) -> int:
"""Average CPU load past 15 minutes."""
return self.cpu["15min_load"]
@property
def memory(self) -> MemoryUtilization:
"""Gets memory utilization."""
return self._data["memory"]
@property
def memory_real_usage(self) -> int:
"""Real Memory usage from Synology DSM."""
return self.memory["real_usage"]
def memory_size(self, human_readable: bool = False) -> int | str:
"""Total memory size of Synology DSM."""
return_data = self.memory["memory_size"] * 1024
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def memory_available_swap(self, human_readable: bool = False) -> int | str:
"""Total available memory swap."""
# Memory is actually returned in KB's so multiply before converting
return_data = self.memory["avail_swap"] * 1024
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def memory_cached(self, human_readable: bool = False) -> int | str:
"""Total cached memory."""
# Memory is actually returned in KB's so multiply before converting
return_data = self.memory["cached"] * 1024
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def memory_available_real(self, human_readable: bool = False) -> int | str:
"""Real available memory."""
# Memory is actually returned in KB's so multiply before converting
return_data = self.memory["avail_real"] * 1024
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def memory_total_real(self, human_readable: bool = False) -> int | str:
"""Total available real memory."""
# Memory is actually returned in KB's so multiply before converting
return_data = self.memory["total_real"] * 1024
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def memory_total_swap(self, human_readable: bool = False) -> int | str:
"""Total swap memory."""
# Memory is actually returned in KB's so multiply before converting
return_data = self.memory["total_swap"] * 1024
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
@property
def network(self) -> list[NetworkUtilization]:
"""Gets network utilization."""
return self._data["network"]
def _get_network(self, network_id: str) -> NetworkUtilization | None:
"""Function to get specific network (eth0, total, etc)."""
for network in self.network:
if network["device"] == network_id:
return network
return None
def network_up(self, human_readable: bool = False) -> int | str | None:
"""Total upload speed being used."""
if (network := self._get_network("total")) is not None:
return_data = network["tx"]
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
return None
def network_down(self, human_readable: bool = False) -> int | str | None:
"""Total download speed being used."""
if (network := self._get_network("total")) is not None:
return_data = network["rx"]
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
return None
py-synologydsm-api-2.7.1/src/synology_dsm/api/download_station/ 0000775 0000000 0000000 00000000000 14762405272 0024754 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/download_station/__init__.py 0000664 0000000 0000000 00000010165 14762405272 0027070 0 ustar 00root root 0000000 0000000 """Synology DownloadStation API wrapper."""
from __future__ import annotations
from synology_dsm.api import SynoBaseApi
from .task import SynoDownloadTask
class SynoDownloadStation(SynoBaseApi["dict[str, SynoDownloadTask]"]):
"""An implementation of a Synology DownloadStation."""
API_KEY = "SYNO.DownloadStation.*"
INFO_API_KEY = "SYNO.DownloadStation.Info"
STAT_API_KEY = "SYNO.DownloadStation.Statistic"
TASK_API_KEY = "SYNO.DownloadStation.Task"
REQUEST_DATA = {
"additional": "detail,file"
} # Can contain: detail, transfer, file, tracker, peer
async def update(self) -> None:
"""Update tasks from API."""
self._data = {}
raw_data = await self._dsm.get(self.TASK_API_KEY, "List", self.REQUEST_DATA)
if not isinstance(raw_data, dict) or (data := raw_data.get("data")) is None:
return
for task_data in data["tasks"]:
if task_data["id"] in self._data:
self._data[task_data["id"]].update(task_data)
else:
self._data[task_data["id"]] = SynoDownloadTask(task_data)
# Global
async def get_info(self) -> dict | None:
"""Return general informations about the Download Station instance."""
raw_data = await self._dsm.get(self.INFO_API_KEY, "GetInfo")
if isinstance(raw_data, dict):
return raw_data
return None
async def get_config(self) -> dict | None:
"""Return configuration about the Download Station instance."""
raw_data = await self._dsm.get(self.INFO_API_KEY, "GetConfig")
if isinstance(raw_data, dict):
return raw_data
return None
async def get_stat(self) -> dict | None:
"""Return statistic about the Download Station instance."""
raw_data = await self._dsm.get(self.STAT_API_KEY, "GetInfo")
if isinstance(raw_data, dict):
return raw_data
return None
# Downloads
def get_all_tasks(self) -> list[SynoDownloadTask]:
"""Return a list of tasks."""
return list(self._data.values())
def get_task(self, task_id: str) -> SynoDownloadTask | None:
"""Return task matching task_id."""
return self._data.get(task_id)
async def create(
self,
uri: str | list[str],
unzip_password: str | None = None,
destination: str | None = None,
) -> dict | None:
"""Create a new task (uri accepts HTTP/FTP/magnet/ED2K links)."""
res = await self._dsm.post(
self.TASK_API_KEY,
"Create",
{
"uri": ",".join(uri) if isinstance(uri, list) else uri,
"unzip_password": unzip_password,
"destination": destination,
},
)
await self.update()
if isinstance(res, dict):
return res
return None
async def pause(self, task_id: str | list[str]) -> dict | None:
"""Pause a download task."""
res = await self._dsm.get(
self.TASK_API_KEY,
"Pause",
{"id": ",".join(task_id) if isinstance(task_id, list) else task_id},
)
await self.update()
if isinstance(res, dict):
return res
return None
async def resume(self, task_id: str | list[str]) -> dict | None:
"""Resume a paused download task."""
res = await self._dsm.get(
self.TASK_API_KEY,
"Resume",
{"id": ",".join(task_id) if isinstance(task_id, list) else task_id},
)
await self.update()
if isinstance(res, dict):
return res
return None
async def delete(
self, task_id: str | list[str], force_complete: bool = False
) -> dict | None:
"""Delete a download task."""
res = await self._dsm.get(
self.TASK_API_KEY,
"Delete",
{
"id": ",".join(task_id) if isinstance(task_id, list) else task_id,
"force_complete": force_complete,
},
)
await self.update()
if isinstance(res, dict):
return res
return None
py-synologydsm-api-2.7.1/src/synology_dsm/api/download_station/task.py 0000664 0000000 0000000 00000003602 14762405272 0026271 0 ustar 00root root 0000000 0000000 """DownloadStation task."""
from __future__ import annotations
from typing import TypedDict
SynoDownloadTaskType = TypedDict(
"SynoDownloadTaskType",
{
"additional": dict,
"id": str,
"size": int,
"status": str,
"title": str,
"type": str,
"username": str,
"status_extra": dict,
},
total=False,
)
class SynoDownloadTask:
"""An representation of a Synology DownloadStation task."""
def __init__(self, data: SynoDownloadTaskType):
"""Initialize a Download Station task."""
self._data: SynoDownloadTaskType = data
def update(self, data: SynoDownloadTaskType) -> None:
"""Update the task."""
self._data = data
@property
def id(self) -> str:
"""Return id of the task."""
return self._data["id"]
@property
def title(self) -> str:
"""Return title of the task."""
return self._data["title"]
@property
def type(self) -> str:
"""Return type of the task (bt, nzb, http(s), ftp, emule)."""
return self._data["type"]
@property
def username(self) -> str:
"""Return username of the task."""
return self._data["username"]
@property
def size(self) -> int:
"""Return size of the task."""
return self._data["size"]
@property
def status(self) -> str:
"""Return status of the task.
Possible values: waiting, downloading, paused, finishing, finished,
hash_checking, seeding, filehosting_waiting, extracting, error
"""
return self._data["status"]
@property
def status_extra(self) -> dict | None:
"""Return status_extra of the task."""
return self._data.get("status_extra")
@property
def additional(self) -> dict:
"""Return additional data of the task."""
return self._data["additional"]
py-synologydsm-api-2.7.1/src/synology_dsm/api/dsm/ 0000775 0000000 0000000 00000000000 14762405272 0022167 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/dsm/__init__.py 0000664 0000000 0000000 00000000037 14762405272 0024300 0 ustar 00root root 0000000 0000000 """Synology DSM API models."""
py-synologydsm-api-2.7.1/src/synology_dsm/api/dsm/information.py 0000664 0000000 0000000 00000005467 14762405272 0025102 0 ustar 00root root 0000000 0000000 """DSM Information data."""
from __future__ import annotations
import re
from typing import TypedDict
from awesomeversion import AwesomeVersion
from synology_dsm.api import SynoBaseApi
from synology_dsm.exceptions import SynologyDSMException
class DsmInformationDataType(TypedDict, total=False):
"""Data type."""
model: str
ram: int
serial: str
temperature: int
temperature_warn: bool
uptime: int
version: str
version_string: str
class SynoDSMInformation(SynoBaseApi[DsmInformationDataType]):
"""Class containing Information data."""
API_KEY = "SYNO.DSM.Info"
async def update(self) -> None:
"""Updates information data."""
raw_data = await self._dsm.get(self.API_KEY, "getinfo")
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data
@property
def model(self) -> str:
"""Model of the NAS."""
return self._data["model"]
@property
def ram(self) -> int:
"""RAM of the NAS (in MB)."""
return self._data["ram"]
@property
def serial(self) -> str:
"""Serial of the NAS."""
return self._data["serial"]
@property
def temperature(self) -> int | None:
"""Temperature of the NAS."""
return self._data.get("temperature")
@property
def temperature_warn(self) -> bool:
"""Temperature warning of the NAS."""
# some very old nas may not provide this attribute
return self._data.get("temperature_warn", False)
@property
def uptime(self) -> int:
"""Uptime of the NAS."""
return self._data["uptime"]
@property
def version(self) -> str:
"""Version of the NAS (build version)."""
return self._data["version"]
@property
def version_string(self) -> str:
"""Version of the NAS."""
return self._data["version_string"]
@property
def awesome_version(self) -> AwesomeVersion:
"""Awesome version representation."""
pattern = (
r"DSM (?P\d+)\.(?P\d+)"
r"(\.(?P\d+))?-(?P\d+)"
r"( Update (?P\d+))?"
)
match = re.match(pattern, self.version_string)
if not match:
raise SynologyDSMException(
api=self.API_KEY,
code=0,
details=f"Could not parse version string {self.version_string}",
)
parts = match.groupdict()
version = f"{parts['major']}.{parts['minor']}.{parts['micro'] or '0'}"
if (smallfixnumber := parts.get("smallfixnumber")) is not None:
version += f".{smallfixnumber}"
return AwesomeVersion(version)
py-synologydsm-api-2.7.1/src/synology_dsm/api/dsm/network.py 0000664 0000000 0000000 00000004401 14762405272 0024231 0 ustar 00root root 0000000 0000000 """DSM Network data."""
from __future__ import annotations
from typing import TypedDict
from synology_dsm.api import SynoBaseApi
InterfaceIp = TypedDict("InterfaceIp", {"address": str, "netmask": str})
InterfaceIpv6 = TypedDict(
"InterfaceIpv6", {"address": str, "prefix_length": int, "scope": str}
)
NetworkInterface = TypedDict(
"NetworkInterface",
{
"id": str,
"ip": "list[InterfaceIp]",
"ipv6": "list[InterfaceIpv6]",
"mac": str,
"type": str,
},
total=False,
)
class DsmNetworkDataType(TypedDict, total=False):
"""Data type."""
dns: list[str]
gateway: str
hostname: str
interfaces: list[NetworkInterface]
workgroup: str
class SynoDSMNetwork(SynoBaseApi[DsmNetworkDataType]):
"""Class containing Network data."""
API_KEY = "SYNO.DSM.Network"
async def update(self) -> None:
"""Updates network data."""
raw_data = await self._dsm.get(self.API_KEY, "list")
if isinstance(raw_data, dict) and (data := raw_data.get("data")) is not None:
self._data = data
@property
def dns(self) -> list[str]:
"""DNS of the NAS."""
return self._data["dns"]
@property
def gateway(self) -> str:
"""Gateway of the NAS."""
return self._data["gateway"]
@property
def hostname(self) -> str:
"""Host name of the NAS."""
return self._data["hostname"]
@property
def interfaces(self) -> list[NetworkInterface]:
"""Interfaces of the NAS."""
return self._data["interfaces"]
def interface(self, eth_id: str) -> NetworkInterface | None:
"""Interface of the NAS."""
for interface in self.interfaces:
if interface["id"] == eth_id:
return interface
return None
@property
def macs(self) -> list[str]:
"""List of MACs of the NAS."""
macs: list[str] = []
for interface in self.interfaces:
if (mac := interface.get("mac")) is not None:
macs.append(mac)
return macs
@property
def workgroup(self) -> str:
"""Workgroup of the NAS."""
return self._data["workgroup"]
py-synologydsm-api-2.7.1/src/synology_dsm/api/file_station/ 0000775 0000000 0000000 00000000000 14762405272 0024064 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/file_station/__init__.py 0000664 0000000 0000000 00000014426 14762405272 0026204 0 ustar 00root root 0000000 0000000 """Synology FileStation API wrapper."""
from __future__ import annotations
from collections.abc import AsyncIterator
from io import BufferedReader
import aiofiles
from aiohttp import StreamReader
from synology_dsm.api import SynoBaseApi
from .models import (
SynoFileAdditionalOwner,
SynoFileFile,
SynoFileFileAdditional,
SynoFileFileAdditionalPermission,
SynoFileFileAdditionalTime,
SynoFileSharedFolder,
SynoFileSharedFolderAdditional,
SynoFileSharedFolderAdditionalPermission,
SynoFileSharedFolderAdditionalVolumeStatus,
)
class SynoFileStation(SynoBaseApi):
"""An implementation of a Synology FileStation."""
API_KEY = "SYNO.FileStation.*"
LIST_API_KEY = "SYNO.FileStation.List"
DOWNLOAD_API_KEY = "SYNO.FileStation.Download"
UPLOAD_API_KEY = "SYNO.FileStation.Upload"
DELETE_API_KEY = "SYNO.FileStation.Delete"
async def get_shared_folders(
self, offset: int = 0, limit: int = 100, only_writable: bool = False
) -> list[SynoFileSharedFolder] | None:
"""Get a list of all shared folders."""
raw_data = await self._dsm.get(
self.LIST_API_KEY,
"list_share",
{
"offset": offset,
"limit": limit,
"onlywritable": only_writable,
"additional": (
'["real_path","owner","time","perm",'
'"mount_point_type","sync_share","volume_status"]'
),
},
)
if not isinstance(raw_data, dict) or (data := raw_data.get("data")) is None:
return None
shared_folders: list[SynoFileSharedFolder] = []
for folder in data["shares"]:
if (additional := folder.get("additional")) is not None:
shared_folders.append(
SynoFileSharedFolder(
SynoFileSharedFolderAdditional(
additional["mount_point_type"],
SynoFileAdditionalOwner(**additional["owner"]),
SynoFileSharedFolderAdditionalPermission(
**additional["perm"]
),
SynoFileSharedFolderAdditionalVolumeStatus(
**additional["volume_status"],
),
),
folder["isdir"],
folder["name"],
folder["path"],
)
)
else:
shared_folders.append(
SynoFileSharedFolder(
None, folder["isdir"], folder["name"], folder["path"]
)
)
return shared_folders
async def get_files(
self, path: str, offset: int = 0, limit: int = 100
) -> list[SynoFileFile] | None:
"""Get a list of all files in a folder."""
raw_data = await self._dsm.get(
self.LIST_API_KEY,
"list",
{
"offset": offset,
"limit": limit,
"folder_path": path,
"additional": (
'["real_path","owner","time","perm",'
'"mount_point_type","type","size"]'
),
},
)
if not isinstance(raw_data, dict) or (data := raw_data.get("data")) is None:
return None
files: list[SynoFileFile] = []
for file in data["files"]:
if (additional := file.get("additional")) is not None:
files.append(
SynoFileFile(
SynoFileFileAdditional(
additional["mount_point_type"],
SynoFileAdditionalOwner(**additional["owner"]),
SynoFileFileAdditionalPermission(**additional["perm"]),
additional["real_path"],
additional["size"],
SynoFileFileAdditionalTime(**additional["time"]),
additional["type"],
),
file["isdir"],
file["name"],
file["path"],
)
)
else:
files.append(
SynoFileFile(None, file["isdir"], file["name"], file["path"])
)
return files
async def upload_file(
self,
path: str,
filename: str,
source: bytes | BufferedReader | AsyncIterator[bytes] | str,
create_parents: bool = False,
) -> bool | None:
"""Upload a file to a folder from eather a local source_file or content."""
if isinstance(source, str):
source = open(source, "rb")
raw_data = await self._dsm.post(
self.UPLOAD_API_KEY,
"upload",
path=path,
filename=filename,
content=source,
create_parents=create_parents,
)
if not isinstance(raw_data, dict):
return None
return raw_data.get("success")
async def download_file(
self, path: str, filename: str, target_file: str | None = None
) -> StreamReader | bool | None:
"""Download a file to local target_file or returns an async StreamReader."""
response_content = await self._dsm.get(
self.DOWNLOAD_API_KEY,
"download",
{"path": f"{path}/{filename}", "mode": "download"},
raw_response_content=True,
)
if not isinstance(response_content, StreamReader):
return None
if target_file:
async with aiofiles.open(target_file, "wb") as fh:
async for data, _ in response_content.iter_chunks():
await fh.write(data)
return True
return response_content
async def delete_file(self, path: str, filename: str) -> bool | None:
"""Delete a file."""
raw_data = await self._dsm.get(
self.DELETE_API_KEY,
"delete",
{"path": f"{path}/{filename}", "recursive": False},
)
if not isinstance(raw_data, dict):
return None
return raw_data.get("success")
py-synologydsm-api-2.7.1/src/synology_dsm/api/file_station/models.py 0000664 0000000 0000000 00000004621 14762405272 0025724 0 ustar 00root root 0000000 0000000 """Data models for Synology FileStation Module."""
from __future__ import annotations
from dataclasses import dataclass
# -------------------------------------
# generic additional data
# -------------------------------------
@dataclass
class SynoFileAdditionalOwner:
"""Representation of an Synology FileStation additionl owner data."""
gid: int
group: str
uid: int
user: str
# -------------------------------------
# shared folder
# -------------------------------------
@dataclass
class SynoFileSharedFolderAdditionalPermission:
"""Representation of an Synology FileStation additionl permission data."""
acl: dict
acl_enable: bool
adv_right: dict
is_acl_mode: bool
is_share_readonly: bool
posix: int
share_right: str
@dataclass
class SynoFileSharedFolderAdditionalVolumeStatus:
"""Representation of an Synology FileStation additionl permission data."""
freespace: int
totalspace: int
readonly: bool
@dataclass
class SynoFileSharedFolderAdditional:
"""Representation of an Synology FileStation Shared Folder additionl data."""
mount_point_type: str
owner: SynoFileAdditionalOwner
perm: SynoFileSharedFolderAdditionalPermission
volume_status: SynoFileSharedFolderAdditionalVolumeStatus
@dataclass
class SynoFileSharedFolder:
"""Representation of an Synology FileStation Shared Folder."""
additional: SynoFileSharedFolderAdditional | None
is_dir: bool
name: str
path: str
# -------------------------------------
# file
# -------------------------------------
@dataclass
class SynoFileFileAdditionalPermission:
"""Representation of an Synology FileStation additionl permission data."""
acl: dict
is_acl_mode: bool
posix: int
@dataclass
class SynoFileFileAdditionalTime:
"""Representation of an Synology FileStation additionl permission data."""
atime: int
ctime: int
crtime: int
mtime: int
@dataclass
class SynoFileFileAdditional:
"""Representation of an Synology FileStation File additionl data."""
mount_point_type: str
owner: SynoFileAdditionalOwner
perm: SynoFileFileAdditionalPermission
real_path: str
size: int
time: SynoFileFileAdditionalTime
type: str
@dataclass
class SynoFileFile:
"""Representation of an Synology FileStation File."""
additional: SynoFileFileAdditional | None
is_dir: bool
name: str
path: str
py-synologydsm-api-2.7.1/src/synology_dsm/api/photos/ 0000775 0000000 0000000 00000000000 14762405272 0022720 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/photos/__init__.py 0000664 0000000 0000000 00000014464 14762405272 0025042 0 ustar 00root root 0000000 0000000 """Synology Photos API wrapper."""
from __future__ import annotations
from synology_dsm.api import SynoBaseApi
from .model import SynoPhotosAlbum, SynoPhotosItem
class SynoPhotos(SynoBaseApi):
"""An implementation of a Synology Photos."""
API_KEY = "SYNO.Foto.*"
BROWSE_ALBUMS_API_KEY = "SYNO.Foto.Browse.Album"
BROWSE_ITEM_API_KEY = "SYNO.Foto.Browse.Item"
DOWNLOAD_API_KEY = "SYNO.Foto.Download"
DOWNLOAD_FOTOTEAM_API_KEY = "SYNO.FotoTeam.Download"
SEARCH_API_KEY = "SYNO.Foto.Search.Search"
THUMBNAIL_API_KEY = "SYNO.Foto.Thumbnail"
THUMBNAIL_FOTOTEAM_API_KEY = "SYNO.FotoTeam.Thumbnail"
BROWSE_ITEM_FOTOTEAM_API_KEY = "SYNO.FotoTeam.Browse.Item"
async def get_albums(
self, offset: int = 0, limit: int = 100
) -> list[SynoPhotosAlbum] | None:
"""Get a list of all albums."""
albums: list[SynoPhotosAlbum] = []
raw_data = await self._dsm.get(
self.BROWSE_ALBUMS_API_KEY,
"list",
{"offset": offset, "limit": limit, "category": "normal_share_with_me"},
)
if not isinstance(raw_data, dict) or (data := raw_data.get("data")) is None:
return None
for album in data["list"]:
albums.append(
SynoPhotosAlbum(
album["id"],
album["name"],
album["item_count"],
album["passphrase"],
)
)
return albums
def _raw_data_to_items( # noqa: S107
self, raw_data: dict, passphrase: str = ""
) -> list[SynoPhotosItem] | None:
"""Parse the raw data response to a list of photo items."""
items: list[SynoPhotosItem] = []
if (data := raw_data.get("data")) is None:
return None
for item in data["list"]:
if item["additional"]["thumbnail"]["xl"] == "ready":
size = "xl"
elif item["additional"]["thumbnail"]["m"] == "ready":
size = "m"
else:
size = "sm"
items.append(
SynoPhotosItem(
item["id"],
item["type"],
item["filename"],
item["filesize"],
item["additional"]["thumbnail"]["cache_key"],
size,
item["owner_user_id"] == 0,
passphrase,
)
)
return items
async def get_items_from_album(
self, album: SynoPhotosAlbum, offset: int = 0, limit: int = 100
) -> list[SynoPhotosItem] | None:
"""Get a list of all items from given album."""
params = {
"offset": offset,
"limit": limit,
"additional": '["thumbnail"]',
}
if album.passphrase:
params["passphrase"] = album.passphrase
else:
params["album_id"] = album.album_id
raw_data = await self._dsm.get(
self.BROWSE_ITEM_API_KEY,
"list",
params,
)
if not isinstance(raw_data, dict):
return None
return self._raw_data_to_items(raw_data, album.passphrase)
async def get_items_from_shared_space(
self, offset: int = 0, limit: int = 100
) -> list[SynoPhotosItem] | None:
"""Get a list of all items from the shared space."""
raw_data = await self._dsm.get(
self.BROWSE_ITEM_FOTOTEAM_API_KEY,
"list",
{
"offset": offset,
"limit": limit,
"additional": '["thumbnail"]',
},
)
if not isinstance(raw_data, dict):
return None
return self._raw_data_to_items(raw_data)
async def get_items_from_search(
self, search_string: str, offset: int = 0, limit: int = 100
) -> list[SynoPhotosItem] | None:
"""Get a list of all items matching the keyword."""
raw_data = await self._dsm.get(
self.SEARCH_API_KEY,
"list_item",
{
"keyword": search_string,
"offset": offset,
"limit": limit,
"additional": '["thumbnail"]',
},
)
if not isinstance(raw_data, dict):
return None
return self._raw_data_to_items(raw_data)
async def download_item(self, item: SynoPhotosItem) -> bytes | None:
"""Download the given item."""
download_api = self.DOWNLOAD_API_KEY
if item.is_shared:
download_api = self.DOWNLOAD_FOTOTEAM_API_KEY
params = {
"unit_id": f"[{item.item_id}]",
"cache_key": item.thumbnail_cache_key,
}
if item.passphrase:
params["passphrase"] = item.passphrase
raw_data = await self._dsm.get(
download_api,
"download",
params,
)
if isinstance(raw_data, bytes):
return raw_data
return None
async def download_item_thumbnail(self, item: SynoPhotosItem) -> bytes | None:
"""Download the given items thumbnail."""
download_api = self.THUMBNAIL_API_KEY
if item.is_shared:
download_api = self.THUMBNAIL_FOTOTEAM_API_KEY
params = {
"id": item.item_id,
"cache_key": item.thumbnail_cache_key,
"size": item.thumbnail_size,
"type": "unit",
}
if item.passphrase:
params["passphrase"] = item.passphrase
raw_data = await self._dsm.get(
download_api,
"get",
params,
)
if isinstance(raw_data, bytes):
return raw_data
return None
async def get_item_thumbnail_url(self, item: SynoPhotosItem) -> str:
"""Get the url of given items thumbnail."""
download_api = self.THUMBNAIL_API_KEY
if item.is_shared:
download_api = self.THUMBNAIL_FOTOTEAM_API_KEY
params = {
"id": item.item_id,
"cache_key": item.thumbnail_cache_key,
"size": item.thumbnail_size,
"type": "unit",
}
if item.passphrase:
params["passphrase"] = item.passphrase
return await self._dsm.generate_url(
download_api,
"get",
params,
)
py-synologydsm-api-2.7.1/src/synology_dsm/api/photos/model.py 0000664 0000000 0000000 00000001030 14762405272 0024364 0 ustar 00root root 0000000 0000000 """Data models for Synology Photos Module."""
from __future__ import annotations
from dataclasses import dataclass
@dataclass
class SynoPhotosAlbum:
"""Representation of an Synology Photos Album."""
album_id: int
name: str
item_count: int
passphrase: str
@dataclass
class SynoPhotosItem:
"""Representation of an Synology Photos Item."""
item_id: int
item_type: str
file_name: str
file_size: str
thumbnail_cache_key: str
thumbnail_size: str
is_shared: bool
passphrase: str
py-synologydsm-api-2.7.1/src/synology_dsm/api/storage/ 0000775 0000000 0000000 00000000000 14762405272 0023050 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/storage/__init__.py 0000664 0000000 0000000 00000000043 14762405272 0025156 0 ustar 00root root 0000000 0000000 """Synology Storage API models."""
py-synologydsm-api-2.7.1/src/synology_dsm/api/storage/storage.py 0000664 0000000 0000000 00000021046 14762405272 0025071 0 ustar 00root root 0000000 0000000 """DSM Storage data."""
from __future__ import annotations
from typing import TypedDict, cast
from synology_dsm.api import SynoBaseApi
from synology_dsm.helpers import SynoFormatHelper
class SynoStorageDisk(TypedDict, total=False):
"""Synology Storage Disk."""
id: str
name: str
device: str
firm: str
diskType: str # noqa: N815
smart_status: str
status: str
exceed_bad_sector_thr: bool
below_remain_life_thr: bool
temp: int
model: str
vendor: str
size_total: int
SynoStoragePoolChild = TypedDict(
"SynoStoragePoolChild", {"id": str, "size": dict}, total=False
)
class SynoStoragePool(TypedDict, total=False):
"""Synology Storage Pool."""
disks: list[str]
pool_child: list[SynoStoragePoolChild]
SynoStorageVolumeSize = TypedDict(
"SynoStorageVolumeSize",
{
"free_inode": str,
"total": str,
"total_device": str,
"total_inode": str,
"used": str,
},
)
class SynoStorageVolume(TypedDict, total=False):
"""Synology Storage Volume."""
id: str
device_type: str
size: SynoStorageVolumeSize
status: str
fs_type: str
class StorageDataType(TypedDict, total=False):
"""Synology Storage Data type."""
disks: list[SynoStorageDisk]
env: dict
storagePools: list[SynoStoragePool] # noqa: N815
volumes: list[SynoStorageVolume]
class SynoStorage(SynoBaseApi[StorageDataType]):
"""Class containing Storage data."""
API_KEY = "SYNO.Storage.CGI.Storage"
async def update(self) -> None:
"""Updates storage data."""
raw_data = await self._dsm.get(self.API_KEY, "load_info")
if isinstance(raw_data, dict):
self._data = cast(StorageDataType, raw_data)
if (data := raw_data.get("data")) is not None:
self._data = data
# Root
@property
def disks(self) -> list[SynoStorageDisk]:
"""Gets all (internal) disks."""
return self._data.get("disks", [])
@property
def env(self) -> dict | None:
"""Gets storage env."""
return self._data.get("env")
@property
def storage_pools(self) -> list[SynoStoragePool]:
"""Gets all storage pools."""
return self._data.get("storagePools", [])
@property
def volumes(self) -> list[SynoStorageVolume]:
"""Gets all volumes."""
return self._data.get("volumes", [])
# Volume
@property
def volumes_ids(self) -> list[str]:
"""Returns volumes ids."""
volumes: list[str] = []
for volume in self.volumes:
volumes.append(volume["id"])
return volumes
def get_volume(self, volume_id: str) -> SynoStorageVolume | None:
"""Returns a specific volume."""
for volume in self.volumes:
if volume["id"] == volume_id:
return volume
return None
def volume_status(self, volume_id: str) -> str | None:
"""Status of the volume (normal, degraded, etc)."""
if volume := self.get_volume(volume_id):
return volume.get("status")
return None
def volume_device_type(self, volume_id: str) -> str | None:
"""Returns the volume type (RAID1, RAID2, etc)."""
if volume := self.get_volume(volume_id):
return volume.get("device_type")
return None
def volume_size_total(
self, volume_id: str, human_readable: bool = False
) -> int | str | None:
"""Total size of volume."""
if (volume := self.get_volume(volume_id)) is None or (
size := volume.get("size")
) is None:
return None
return_data = int(size["total"])
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def volume_size_used(
self, volume_id: str, human_readable: bool = False
) -> int | str | None:
"""Total used size in volume."""
if (volume := self.get_volume(volume_id)) is None or (
size := volume.get("size")
) is None:
return None
return_data = int(size["used"])
if human_readable:
return SynoFormatHelper.bytes_to_readable(return_data)
return return_data
def volume_percentage_used(self, volume_id: str) -> float | None:
"""Total used size in percentage for volume."""
if (volume := self.get_volume(volume_id)) is None or (
size := volume.get("size")
) is None:
return None
total = int(size["total"])
used = int(size["used"])
return round((float(used) / float(total)) * 100.0, 1)
def volume_disk_temp_avg(self, volume_id: str) -> float | None:
"""Average temperature of all disks making up the volume."""
total_temp = 0
total_disks = 0
disks = self._get_disks_for_volume(volume_id)
for disk in disks:
if disk_temp := self.disk_temp(disk["id"]):
total_disks += 1
total_temp += disk_temp
if total_temp > 0 and total_disks > 0:
return round(total_temp / total_disks, 0)
return None
def volume_disk_temp_max(self, volume_id: str) -> int | None:
"""Maximum temperature of all disks making up the volume."""
disks = self._get_disks_for_volume(volume_id)
if not disks:
return None
disk_temps: list[int] = [0]
for disk in disks:
if disk_temp := self.disk_temp(disk["id"]):
disk_temps.append(disk_temp)
return max(disk_temps)
# Disk
@property
def disks_ids(self) -> list[str]:
"""Returns (internal) disks ids."""
disks: list[str] = []
for disk in self.disks:
disks.append(disk["id"])
return disks
def get_disk(self, disk_id: str) -> SynoStorageDisk | None:
"""Returns a specific disk."""
for disk in self.disks:
if disk["id"] == disk_id:
return disk
return None
def _get_disks_for_volume(self, volume_id: str) -> list[SynoStorageDisk]:
"""Returns a list of disk for a specific volume."""
disks: list[SynoStorageDisk] = []
for pool in self.storage_pools:
if pool.get("deploy_path") == volume_id:
# RAID disk redundancy
for disk_id in pool["disks"]:
if disk := self.get_disk(disk_id):
disks.append(disk)
if pool.get("pool_child"):
# SHR disk redundancy
for pool_child in pool["pool_child"]:
if pool_child["id"] != volume_id:
continue
for disk_id in pool["disks"]:
if disk := self.get_disk(disk_id):
disks.append(disk)
return disks
def disk_name(self, disk_id: str) -> str | None:
"""The name of this disk."""
if disk := self.get_disk(disk_id):
return disk.get("name")
return None
def disk_device(self, disk_id: str) -> str | None:
"""The mount point of this disk."""
if disk := self.get_disk(disk_id):
return disk.get("device")
return None
def disk_smart_status(self, disk_id: str) -> str | None:
"""Status of disk according to S.M.A.R.T)."""
if disk := self.get_disk(disk_id):
return disk.get("smart_status")
return None
def disk_status(self, disk_id: str) -> str | None:
"""Status of disk."""
if disk := self.get_disk(disk_id):
return disk.get("status")
return None
def disk_exceed_bad_sector_thr(self, disk_id: str) -> bool | None:
"""Checks if disk has exceeded maximum bad sector threshold."""
if disk := self.get_disk(disk_id):
return disk.get("exceed_bad_sector_thr")
return None
def disk_below_remain_life_thr(self, disk_id: str) -> bool | None:
"""Checks if disk has fallen below minimum life threshold."""
if disk := self.get_disk(disk_id):
return disk.get("below_remain_life_thr")
return None
def disk_temp(self, disk_id: str) -> int | None:
"""Returns the temperature of the disk."""
if disk := self.get_disk(disk_id):
return disk.get("temp")
return None
py-synologydsm-api-2.7.1/src/synology_dsm/api/surveillance_station/ 0000775 0000000 0000000 00000000000 14762405272 0025641 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/surveillance_station/__init__.py 0000664 0000000 0000000 00000022736 14762405272 0027764 0 ustar 00root root 0000000 0000000 """Synology SurveillanceStation API wrapper."""
from __future__ import annotations
from typing import TypedDict, cast
from synology_dsm.api import SynoBaseApi
from .camera import SynoCamera, SynoCameraLiveView
from .const import (
MOTION_DETECTION_BY_SURVEILLANCE,
MOTION_DETECTION_DISABLED,
SNAPSHOT_PROFILE_BALANCED,
)
SurveillanceStationInfoData = TypedDict(
"SurveillanceStationInfoData",
{
"CMSMinVersion": str,
"DSModelName": str,
"SvsClientMinVersion": str,
"VS360HDLoginMinVersion": str,
"VS960HDMinVersion": str,
"cameraNumber": int,
"defaultWallpaperCount": int,
"enableVideoRelay": bool,
"hostname": str,
"inaAdvancedPriv": int,
"isBeta": bool,
"isLicenseEnough": int,
"is_beta": bool,
"liscenseNumber": int,
"maxCameraSupport": int,
"maxlanport": str,
"path": str,
"pluginHelperVersion": str,
"productName": str,
"remindQuickconnectTunnel": bool,
"reportURL": str,
"serial": str,
"serviceVolSize": float,
"strInaAdvancedPriv": str,
"timezone": str,
"timezoneTZDB": str,
"uid": int,
"unique": str,
"userPriv": int,
"version": dict,
"webPluginVersion": str,
},
total=False,
)
SurveillanceStationInfo = TypedDict(
"SurveillanceStationInfo", {"data": SurveillanceStationInfoData, "success": bool}
)
SurveillanceStationTakeSnapshotDataType = TypedDict(
"SurveillanceStationTakeSnapshotDataType", {"id": int}
)
SurveillanceStationTakeSnapshotType = TypedDict(
"SurveillanceStationTakeSnapshotType",
{"data": SurveillanceStationTakeSnapshotDataType, "success": bool},
)
class SynoSurveillanceStation(SynoBaseApi["dict[int, SynoCamera]"]):
"""An implementation of a Synology SurveillanceStation."""
API_KEY = "SYNO.SurveillanceStation.*"
INFO_API_KEY = "SYNO.SurveillanceStation.Info"
CAMERA_API_KEY = "SYNO.SurveillanceStation.Camera"
CAMERA_EVENT_API_KEY = "SYNO.SurveillanceStation.Camera.Event"
HOME_MODE_API_KEY = "SYNO.SurveillanceStation.HomeMode"
SNAPSHOT_API_KEY = "SYNO.SurveillanceStation.SnapShot"
async def update(self) -> None:
"""Update cameras and motion settings with latest from API."""
self._data: dict[int, SynoCamera] = {}
raw_data = await self._dsm.get(self.CAMERA_API_KEY, "List", max_version=7)
if not isinstance(raw_data, dict) or (data := raw_data.get("data")) is None:
return
for camera_data in data["cameras"]:
if camera_data["id"] in self._data:
self._data[camera_data["id"]].update(camera_data)
else:
self._data[camera_data["id"]] = SynoCamera(camera_data)
for camera_id, camera in self._data.items():
motion_raw_data = await self._dsm.get(
self.CAMERA_EVENT_API_KEY, "MotionEnum", {"camId": camera_id}
)
if (
isinstance(motion_raw_data, dict)
and (motion_data := motion_raw_data.get("data")) is not None
):
camera.update_motion_detection(motion_data)
if not self._data:
return
live_view_raw_datas = await self._dsm.get(
self.CAMERA_API_KEY,
"GetLiveViewPath",
{"idList": ",".join(str(k) for k in self._data)},
)
if (
isinstance(live_view_raw_datas, dict)
and (live_view_datas := live_view_raw_datas.get("data")) is not None
):
for live_view_data in live_view_datas:
self._data[live_view_data["id"]].live_view.update(live_view_data)
# Global
async def get_info(self) -> SurveillanceStationInfo | None:
"""Return general informations about the Surveillance Station instance."""
raw_data = await self._dsm.get(self.INFO_API_KEY, "GetInfo")
if isinstance(raw_data, dict) and raw_data.get("success"):
return cast(SurveillanceStationInfo, raw_data)
return None
# Camera
def get_all_cameras(self) -> list[SynoCamera]:
"""Return a list of cameras."""
return list(self._data.values())
def get_camera(self, camera_id: int) -> SynoCamera | None:
"""Return camera matching camera_id."""
return self._data.get(camera_id)
def get_camera_live_view_path(
self, camera_id: int, video_format: str | None = None
) -> SynoCameraLiveView | str | None:
"""Return camera live view path matching camera_id.
Args:
camera_id: ID of the camera we want to get the live view path.
video_format: mjpeg_http | multicast | mxpeg_http | rtsp_http | rtsp.
"""
if (camera := self._data.get(camera_id)) is None:
return None
if video_format:
return getattr(camera.live_view, video_format, None)
return camera.live_view
async def get_camera_image(
self, camera_id: int, profile: int = SNAPSHOT_PROFILE_BALANCED
) -> bytes:
"""Return bytes of camera image for camera matching camera_id.
Args:
camera_id: ID of the camera we want to take a snapshot from
profile: SNAPSHOT_PROFILE_HIGH_QUALITY |
SNAPSHOT_PROFILE_BALANCED |
SNAPSHOT_PROFILE_LOW_BANDWIDTH
"""
return cast(
bytes,
await self._dsm.get(
self.CAMERA_API_KEY,
"GetSnapshot",
{"id": camera_id, "cameraId": camera_id, "profileType": profile},
),
)
async def enable_camera(self, camera_ids: str) -> bool | None:
"""Enable camera(s) - multiple ID or single ex 1 or 1,2,3."""
raw_data = await self._dsm.get(
self.CAMERA_API_KEY, "Enable", {"idList": camera_ids}
)
if (
isinstance(raw_data, dict)
and (result := raw_data.get("success")) is not None
):
return bool(result)
return None
async def disable_camera(self, camera_ids: str) -> bool | None:
"""Disable camera(s) - multiple ID or single ex 1 or 1,2,3."""
raw_data = await self._dsm.get(
self.CAMERA_API_KEY, "Disable", {"idList": camera_ids}
)
if (
isinstance(raw_data, dict)
and (result := raw_data.get("success")) is not None
):
return bool(result)
return None
# Snapshot
async def capture_camera_image(
self, camera_id: int, save: bool = True
) -> SurveillanceStationTakeSnapshotType | None:
"""Capture a snapshot for camera matching camera_id."""
raw_data = await self._dsm.get(
self.SNAPSHOT_API_KEY,
"TakeSnapshot",
{
"camId": camera_id,
"blSave": int(save), # API requires an integer instead of a boolean
},
)
if isinstance(raw_data, dict):
return cast(SurveillanceStationTakeSnapshotType, raw_data)
return None
async def download_snapshot(
self, snapshot_id: int, snapshot_size: int
) -> bytes | None:
"""Download snapshot image binary for a givent snapshot_id.
Args:
snapshot_id: ID of the snapshot we want to download.
snapshot_size: SNAPSHOT_SIZE_ICON | SNAPSHOT_SIZE_FULL.
"""
raw_data = await self._dsm.get(
self.SNAPSHOT_API_KEY,
"LoadSnapshot",
{"id": snapshot_id, "imgSize": snapshot_size},
)
if isinstance(raw_data, bytes):
return raw_data
return None
# Motion
def is_motion_detection_enabled(self, camera_id: int) -> bool:
"""Return motion setting matching camera_id."""
return bool(self._data[camera_id].is_motion_detection_enabled)
async def enable_motion_detection(self, camera_id: int) -> dict | None:
"""Enable motion detection for camera matching camera_id."""
raw_data = await self._dsm.get(
self.CAMERA_EVENT_API_KEY,
"MDParamSave",
{"camId": camera_id, "source": MOTION_DETECTION_BY_SURVEILLANCE},
)
if isinstance(raw_data, dict):
return raw_data
return None
async def disable_motion_detection(self, camera_id: int) -> dict | None:
"""Disable motion detection for camera matching camera_id."""
raw_data = await self._dsm.get(
self.CAMERA_EVENT_API_KEY,
"MDParamSave",
{"camId": camera_id, "source": MOTION_DETECTION_DISABLED},
)
if isinstance(raw_data, dict):
return raw_data
return None
# Home mode
async def get_home_mode_status(self) -> bool | None:
"""Get the state of Home Mode."""
raw_data = await self._dsm.get(self.HOME_MODE_API_KEY, "GetInfo")
if (
isinstance(raw_data, dict)
and raw_data.get("data")
and (status := raw_data["data"].get("on")) is not None
):
return bool(status)
return None
async def set_home_mode(self, state: bool) -> bool | None:
"""Set the state of Home Mode (state: bool)."""
raw_data = await self._dsm.get(
self.HOME_MODE_API_KEY, "Switch", {"on": str(state).lower()}
)
if (
isinstance(raw_data, dict)
and (result := raw_data.get("success")) is not None
):
return bool(result)
return None
py-synologydsm-api-2.7.1/src/synology_dsm/api/surveillance_station/camera.py 0000664 0000000 0000000 00000007334 14762405272 0027452 0 ustar 00root root 0000000 0000000 """SurveillanceStation camera."""
from __future__ import annotations
from typing import TypedDict
from .const import MOTION_DETECTION_DISABLED, RECORDING_STATUS
SynoCameraData = TypedDict(
"SynoCameraData",
{
"enabled": bool,
"fps": int,
"id": int,
"MDParam": dict,
"model": str,
"name": str,
"recStatus": int,
"resolution": str,
},
total=False,
)
SynoCameraLifeViewData = TypedDict(
"SynoCameraLifeViewData",
{
"mjpegHttpPath": str,
"multicstPath": str,
"mxpegHttpPath": str,
"rtspOverHttpPath": str,
"rtspPath": str,
},
total=False,
)
class SynoCamera:
"""An representation of a Synology SurveillanceStation camera."""
def __init__(
self, data: SynoCameraData, live_view_data: SynoCameraLifeViewData | None = None
) -> None:
"""Initialize a Surveillance Station camera."""
self._data: SynoCameraData = data
self.live_view = SynoCameraLiveView(live_view_data)
self._motion_detection_enabled: bool | None = None
def update(self, data: SynoCameraData) -> None:
"""Update the camera."""
self._data = data
def update_motion_detection(self, data: SynoCameraData) -> None:
"""Update the camera motion detection."""
self._motion_detection_enabled = (
MOTION_DETECTION_DISABLED != data["MDParam"]["source"]
)
@property
def id(self) -> int:
"""Return id of the camera."""
return self._data["id"]
@property
def name(self) -> str:
"""Return name of the camera."""
return self._data["name"]
@property
def model(self) -> str:
"""Return model of the camera."""
return self._data["model"]
@property
def resolution(self) -> str:
"""Return resolution of the camera."""
return self._data["resolution"]
@property
def fps(self) -> int:
"""Return FPS of the camera."""
return self._data["fps"]
@property
def is_enabled(self) -> bool:
"""Return true if camera is enabled."""
return self._data["enabled"]
@property
def is_motion_detection_enabled(self) -> bool | None:
"""Return true if motion detection is enabled."""
return self._motion_detection_enabled
@property
def is_recording(self) -> bool:
"""Return true if camera is recording."""
return self._data["recStatus"] in RECORDING_STATUS
class SynoCameraLiveView:
"""An representation of a Synology SurveillanceStation camera live view."""
def __init__(self, data: SynoCameraLifeViewData | None):
"""Initialize a Surveillance Station camera live view."""
if data is not None:
self._data = data
else:
self._data = {}
def update(self, data: SynoCameraLifeViewData) -> None:
"""Update the camera live view."""
self._data = data
@property
def mjpeg_http(self) -> str | None:
"""Return the mjpeg stream (over http) path of the camera."""
return self._data.get("mjpegHttpPath")
@property
def multicast(self) -> str | None:
"""Return the multi-cast path of the camera."""
return self._data.get("multicstPath")
@property
def mxpeg_http(self) -> str | None:
"""Return the mxpeg stream path of the camera."""
return self._data.get("mxpegHttpPath")
@property
def rtsp_http(self) -> str | None:
"""Return the RTSP stream (over http) path of the camera."""
return self._data.get("rtspOverHttpPath")
@property
def rtsp(self) -> str | None:
"""Return the RTSP stream path of the camera."""
return self._data.get("rtspPath")
py-synologydsm-api-2.7.1/src/synology_dsm/api/surveillance_station/const.py 0000664 0000000 0000000 00000001013 14762405272 0027334 0 ustar 00root root 0000000 0000000 """Synology SurveillanceStation API constants."""
RECORDING_STATUS = [
1, # Continue recording schedule
2, # Motion detect recording schedule
3, # Digital input recording schedule
4, # Digital input recording schedule
5, # Manual recording schedule
]
MOTION_DETECTION_DISABLED = -1
MOTION_DETECTION_BY_CAMERA = 0
MOTION_DETECTION_BY_SURVEILLANCE = 1
SNAPSHOT_SIZE_ICON = 1
SNAPSHOT_SIZE_FULL = 2
SNAPSHOT_PROFILE_HIGH_QUALITY = 0
SNAPSHOT_PROFILE_BALANCED = 1
SNAPSHOT_PROFILE_LOW_BANDWIDTH = 2
py-synologydsm-api-2.7.1/src/synology_dsm/api/virtual_machine_manager/ 0000775 0000000 0000000 00000000000 14762405272 0026250 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/api/virtual_machine_manager/__init__.py 0000664 0000000 0000000 00000004507 14762405272 0030367 0 ustar 00root root 0000000 0000000 """Synology Virtual Machine Manager API models."""
from __future__ import annotations
from synology_dsm.api import SynoBaseApi
from .guest import SynoVmmGuest
class SynoVirtualMachineManager(SynoBaseApi["dict[str, SynoVmmGuest]"]):
"""Class containing Virtual Machine Guests."""
API_KEY = "SYNO.Virtualization.*"
GUEST_API_KEY = "SYNO.Virtualization.Guest"
ACTION_API_KEY = "SYNO.Virtualization.Guest.Action"
async def update(self) -> None:
"""Updates Virtual Machine Manager data."""
raw_data = await self._dsm.get(self.GUEST_API_KEY, "list")
print(raw_data)
if not isinstance(raw_data, dict) or (data := raw_data.get("data")) is None:
return
for guest in data["guests"]:
if guest["guest_id"] in self._data:
self._data[guest["guest_id"]].update(guest)
else:
self._data[guest["guest_id"]] = SynoVmmGuest(guest)
def get_all_guests(self) -> list[SynoVmmGuest]:
"""Return a list of all vmm guests."""
return list(self._data.values())
def get_guest(self, guest_id: str) -> SynoVmmGuest | None:
"""Return vmm guest by guest_id."""
return self._data.get(guest_id)
async def _guest_action(self, guest_id: str, action: str) -> bool | None:
raw_data = await self._dsm.post(
self.ACTION_API_KEY,
"pwr_ctl",
{
"guest_id": guest_id,
"action": action,
},
)
if (
isinstance(raw_data, dict)
and (result := raw_data.get("success")) is not None
):
return bool(result)
return None
async def guest_poweron(self, guest_id: str) -> bool | None:
"""Power on a vmm guest."""
return await self._guest_action(guest_id, "poweron")
async def guest_poweroff(self, guest_id: str) -> bool | None:
"""Power off a vmm guest."""
return await self._guest_action(guest_id, "poweroff")
async def guest_shutdown(self, guest_id: str) -> bool | None:
"""Graceful shutdown a vmm guest."""
return await self._guest_action(guest_id, "shutdown")
async def guest_restart(self, guest_id: str) -> bool | None:
"""Graceful restart a vmm guest."""
return await self._guest_action(guest_id, "reboot")
py-synologydsm-api-2.7.1/src/synology_dsm/api/virtual_machine_manager/guest.py 0000664 0000000 0000000 00000004144 14762405272 0027754 0 ustar 00root root 0000000 0000000 """VirtualMachineManager guest."""
from __future__ import annotations
from typing import TypedDict, Union
SynoVmmGuestData = TypedDict(
"SynoVmmGuestData",
{
"autorun": int,
"desc": str,
"guest_id": str,
"name": str,
"ram_used": int,
"status": str,
"vcpu_num": int,
"vcpu_usage": Union[str, int], # empty str when offline
"vram_size": int,
},
total=False,
)
class SynoVmmGuest:
"""An representation of a Synology Virtual Machine Manager guest."""
def __init__(self, data: SynoVmmGuestData) -> None:
"""Initialize a Virtual Machine Manager guest."""
self._data: SynoVmmGuestData = data
def update(self, data: SynoVmmGuestData) -> None:
"""Update the vmm guest."""
self._data = data
@property
def autorun(self) -> bool:
"""Return autorun of the vmm guest."""
return bool(self._data["autorun"])
@property
def description(self) -> str:
"""Return description of the vmm guest."""
return self._data["desc"]
@property
def guest_id(self) -> str:
"""Return guest_id of the vmm guest."""
return self._data["guest_id"]
@property
def name(self) -> str:
"""Return name of the vmm guest."""
return self._data["name"]
@property
def status(self) -> str:
"""Return status of the vmm guest."""
return self._data["status"]
@property
def host_cpu_usage(self) -> int:
"""Return host cpu usage in one thousandth of the vmm guest."""
if isinstance(self._data["vcpu_usage"], str):
return 0
return self._data["vcpu_usage"]
@property
def host_ram_usage(self) -> int:
"""Return host ram usage in KiByte of the vmm guest."""
return self._data["ram_used"]
@property
def vcpu_num(self) -> int:
"""Return number of vcpu of the vmm guest."""
return self._data["vcpu_num"]
@property
def vram_size(self) -> int:
"""Return size of vram in KiByte of the vmm guest."""
return self._data["vram_size"]
py-synologydsm-api-2.7.1/src/synology_dsm/const.py 0000664 0000000 0000000 00000017516 14762405272 0022345 0 ustar 00root root 0000000 0000000 """Library constants."""
from typing import Final
# APIs
API_INFO: Final = "SYNO.API.Info"
API_AUTH: Final = "SYNO.API.Auth"
# Parameters to be masked on debug output
SENSITIV_PARAMS: Final = ["account", "passwd", "_sid", "SynoToken", "device_id"]
# SYNO.*
ERROR_COMMON: Final = {
100: "Unknown error",
101: "No parameter API, method, or version",
102: "API does not exist",
103: "API method does not exist",
104: "API version not supported",
105: "Insufficient user privilege",
106: "Session timeout",
107: "Session interrupted by duplicate login",
114: "Missing required parameters",
117: "Unknown internal error",
120: "Invalid parameter",
160: "Insufficient application privilege",
}
# SYNO.API.Auth
ERROR_AUTH: Final = {
400: "Invalid credentials",
401: "Guest or disabled account",
402: "Permission denied",
403: "One time password not specified",
404: "One time password authenticate failed",
405: "App portal incorrect",
406: "One time password code enforced",
407: "Max Tries (if auto blocking is set to true)",
408: "Password Expired Can not Change",
409: "Password Expired",
410: "Password must change (when first time use or after reset password by admin)",
411: "Account Locked (when account max try exceed)",
}
# SYNO.DownloadStation[2].BTSearch
ERROR_DOWNLOAD_SEARCH: Final = {
400: "Unknown error",
401: "Invalid parameter",
402: "Parse the user setting failed",
403: "Get category failed",
404: "Get the search result from DB failed",
405: "Get the user setting failed",
}
# SYNO.DownloadStation[2].Task
ERROR_DOWNLOAD_TASK: Final = {
400: "File upload failed",
401: "Max number of tasks reached",
402: "Destination denied",
403: "Destination does not exist",
404: "Invalid task id",
405: "Invalid task action",
406: "No default destination",
407: "Set destination failed",
408: "File does not exist",
}
# SYNO.FileStation.*
ERROR_FILE: Final = {
400: "Invalid parameter of file operation",
401: "Unknown error of file operation",
402: "System is too busy",
403: "Invalid user does this file operation",
404: "Invalid group does this file operation",
405: "Invalid user and group does this file operation",
406: "Can’t get user/group information from the account server Operation not permitted",
407: "Operation not permitted",
408: "No such file or directory",
409: "Non-supported file system",
410: "Failed to connect internet-based file system (ex: CIFS)",
411: "Read-only file system",
412: "Filename too long in the non-encrypted file system",
413: "Filename too long in the encrypted file system",
414: "File already exists",
415: "Disk quota exceeded",
416: "No space left on device",
417: "Input/output error",
418: "Illegal name or path",
419: "Illegal file name",
420: "Illegal file name on FAT file system",
421: "Device or resource busy",
599: "No such task of the file operation",
900: "Failed to delete file(s)/folder(s). More information in object",
1000: "Failed to copy files/folders. More information in object",
1001: "Failed to move files/folders. More information in object",
1002: "An error occurred at the destination. More information in object",
1003: "Cannot overwrite or skip the existing file because no overwrite parameter is given",
1004: "File cannot overwrite a folder with the same name, or folder cannot overwrite a file with the same name", # pylint: disable=line-too-long
1006: "Cannot copy/move file/folder with special characters to a FAT32 file system",
1007: "Cannot copy/move a file bigger than 4G to a FAT32 file system",
1100: "Failed to create a folder. More information in object",
1101: "The number of folders to the parent folder would exceed the system limitation",
1300: "Failed to compress files/folders",
1301: "Cannot create the archive because the given archive name is too long",
1400: "Failed to extract files",
1401: "Cannot open the file as archive",
1402: "Failed to read archive data error",
1403: "Wrong archive password",
1404: "Failed to get the file and dir list in an archive",
1405: "Failed to find the item ID in an archive file",
1200: "Failed to rename it. More information in object",
1800: "There is no Content-Length information in the HTTP header or the received size doesn’t match the value of Content-Length information in the HTTP header", # pylint: disable=line-too-long
1801: "Wait too long, no date can be received from client (Default maximum wait time is 3600 seconds)", # pylint: disable=line-too-long
1802: "No filename information in the last part of file content",
1803: "Upload connection is cancelled",
1804: "Failed to upload too big file to FAT file system",
1805: "Can’t overwrite or skip the existed file, if no overwrite parameter is given",
2000: "Sharing link does not exist",
2001: "Cannot generate sharing link because too many sharing links exist",
2002: "Failed to access sharing links",
}
# SYNO.SurveillanceStation.*
ERROR_SURVEILLANCE: Final = {
400: "Execution failed",
401: "Invalid parameter",
402: "Camera disabled",
403: "Insufficient license",
404: "Codec activation failed",
405: "CMS server connection failed",
407: "CMS closed",
412: "Need to add license",
413: "Reach the maximum of platform",
414: "Some events not exist",
415: "Message connect failed",
417: "Test connection error",
418: "Object/VisualStation ID does not exist",
419: "VisualStation name repetition",
439: "Too many items selected",
446: "Task path already exist",
522: "Original task is migrating",
534: "Exceed name length limitation",
}
# SYNO.Virtualization.*
ERROR_VIRTUALIZATION: Final = {
400: "Unknown error",
401: "Bad parameter",
402: "Operation failed",
403: "Name conflict",
404: "The number of iSCSI LUNs has reached the system limit",
500: "Note: vdisk is based on iSCSI LUN, which is also limited by the system",
501: "The cluster is frozen. More than half of the hosts are offline",
600: "The cluster is in the incompatible mode. Please upgrade to a compatible DSM version and try again", # pylint: disable=line-too-long
601: "The cluster is not ready",
700: "The host is offline",
900: "The storage is in invalid",
901: "Failed to set a host to a virtual machine",
902: "The virtual machine does not have a host",
903: "Can't shutdown the guest, it is not running",
904: "Can't power off the guest, it is not running",
905: "Can't restart the guest, it is not running",
906: "MAC conflict",
907: "Failed to create virtual machine because the selected image is not found",
908: "The status of virtual machine is offline",
909: "Failed to power on a virtual machine due to insufficient CPU threads for reservation on the host", # pylint: disable=line-too-long
910: "Failed to power on the virtual machine because there is no corresponding networking on the host", # pylint: disable=line-too-long
911: "Only the VirtIO hard disk controller can be used to boot the virtual machine remotely. Virtual machines with UEFI enabled cannot be powered on remotely", # pylint: disable=line-too-long
939: "Guest already running",
1000: "Cannot find task_id",
1001: "Need Virtual Machine Manager Pro",
1400: "The result of image creating is partial success",
1600: "The virtual machine has been successfully edited. However, errors occurred while reserving the memory or CPU on the HA hosts", # pylint: disable=line-too-long
}
py-synologydsm-api-2.7.1/src/synology_dsm/exceptions.py 0000664 0000000 0000000 00000011507 14762405272 0023372 0 ustar 00root root 0000000 0000000 """Library exceptions."""
from __future__ import annotations
from .const import (
API_AUTH,
ERROR_AUTH,
ERROR_COMMON,
ERROR_DOWNLOAD_SEARCH,
ERROR_DOWNLOAD_TASK,
ERROR_FILE,
ERROR_SURVEILLANCE,
ERROR_VIRTUALIZATION,
)
class SynologyDSMException(Exception):
"""Generic Synology DSM exception."""
def __init__(self, api: str | None, code: int, details: str | None = None) -> None:
"""Constructor method."""
reason = ERROR_COMMON.get(code)
if api and not reason:
if api == API_AUTH:
reason = ERROR_AUTH.get(code)
elif "SYNO.DownloadStation" in api:
if "BTSearch" in api:
reason = ERROR_DOWNLOAD_SEARCH.get(code)
elif "Task" in api:
reason = ERROR_DOWNLOAD_TASK.get(code)
elif "SYNO.FileStation" in api:
reason = ERROR_FILE.get(code)
elif "SYNO.SurveillanceStation" in api:
reason = ERROR_SURVEILLANCE.get(code)
elif "SYNO.Virtualization" in api:
reason = ERROR_VIRTUALIZATION.get(code)
if not reason:
reason = "Unknown"
error_message = {"api": api, "code": code, "reason": reason, "details": details}
super().__init__(error_message)
class SynologyDSMNotLoggedInException(SynologyDSMException):
"""Not logged in exception."""
def __init__(self) -> None:
"""Constructor method."""
super().__init__(None, -1, "Not logged in. You have to do login() first.")
# Request
class SynologyDSMRequestException(SynologyDSMException):
"""Request exception."""
def __init__(self, exception: Exception) -> None:
"""Constructor method."""
ex_class = exception.__class__.__name__
if not exception.args:
super().__init__(None, -1, ex_class)
return
ex_reason = exception.args[0]
if hasattr(exception.args[0], "reason"):
ex_reason = exception.args[0].reason
super().__init__(None, -1, f"{ex_class} = {ex_reason}")
# API
class SynologyDSMAPINotExistsException(SynologyDSMException):
"""API not exists exception."""
def __init__(self, api: str) -> None:
"""Constructor method."""
super().__init__(api, -2, f"API {api} does not exists")
class SynologyDSMAPIErrorException(SynologyDSMException):
"""API returns an error exception."""
def __init__(self, api: str, code: int, details: str) -> None:
"""Constructor method."""
super().__init__(api, code, details)
# Login
class SynologyDSMLoginFailedException(SynologyDSMException):
"""Failed to login exception."""
def __init__(self, code: int, details: str | None = None) -> None:
"""Constructor method."""
super().__init__(API_AUTH, code, details)
class SynologyDSMLoginInvalidException(SynologyDSMLoginFailedException):
"""Invalid password & not admin account exception."""
def __init__(self, username: str) -> None:
"""Constructor method."""
message = f"Invalid password or not admin account: {username}"
super().__init__(400, message)
class SynologyDSMLoginDisabledAccountException(SynologyDSMLoginFailedException):
"""Guest & disabled account exception."""
def __init__(self, username: str) -> None:
"""Constructor method."""
message = f"Guest or disabled account: {username}"
super().__init__(401, message)
class SynologyDSMLoginPermissionDeniedException(SynologyDSMLoginFailedException):
"""No access to login exception."""
def __init__(self, username: str) -> None:
"""Constructor method."""
message = f"Permission denied for account: {username}"
super().__init__(402, message)
class SynologyDSMLogin2SARequiredException(SynologyDSMLoginFailedException):
"""2SA required to login exception."""
def __init__(self, username: str) -> None:
"""Constructor method."""
message = f"Two-step authentication required for account: {username}"
super().__init__(403, message)
class SynologyDSMLogin2SAFailedException(SynologyDSMLoginFailedException):
"""2SA code failed exception."""
def __init__(self) -> None:
"""Constructor method."""
message = "Two-step authentication failed, retry with a new pass code"
super().__init__(404, message)
class SynologyDSMLogin2SAForcedException(SynologyDSMLoginFailedException):
"""2SA force to setup exception."""
def __init__(self, username: str) -> None:
"""Constructor method."""
message = (
f"Two-step authentication forced to be setuped for account: {username}"
)
super().__init__(406, message)
py-synologydsm-api-2.7.1/src/synology_dsm/helpers.py 0000664 0000000 0000000 00000002632 14762405272 0022652 0 ustar 00root root 0000000 0000000 """Helpers."""
from __future__ import annotations
class SynoFormatHelper:
"""Class containing various formatting functions."""
@staticmethod
def bytes_to_readable(num: int) -> str:
"""Converts bytes to a human readable format."""
if num < 512:
return "0 Kb"
if num < 1024:
return "1 Kb"
work_num = float(num)
for unit in ["", "Kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb"]:
if abs(work_num) < 1024.0:
return f"{round(work_num, 1)}{unit}"
work_num /= 1024.0
return f"{round(work_num, 1)}Yb"
@staticmethod
def bytes_to_megabytes(num: int) -> float:
"""Converts bytes to megabytes."""
var_mb = num / 1024.0 / 1024.0
return round(var_mb, 1)
@staticmethod
def bytes_to_gigabytes(num: int) -> float:
"""Converts bytes to gigabytes."""
var_gb = num / 1024.0 / 1024.0 / 1024.0
return round(var_gb, 1)
@staticmethod
def bytes_to_terrabytes(num: int) -> float:
"""Converts bytes to terrabytes."""
var_tb = num / 1024.0 / 1024.0 / 1024.0 / 1024.0
return round(var_tb, 1)
@staticmethod
def megabytes_to_bytes(num: int | float) -> int:
"""Converts megabytes to bytes."""
var_bytes = num * 1024.0 * 1024.0
return int(round(var_bytes, 0))
py-synologydsm-api-2.7.1/src/synology_dsm/py.typed 0000664 0000000 0000000 00000000000 14762405272 0022320 0 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/src/synology_dsm/synology_dsm.py 0000664 0000000 0000000 00000060273 14762405272 0023743 0 ustar 00root root 0000000 0000000 """Class to interact with Synology DSM."""
from __future__ import annotations
import asyncio
import logging
import socket
from hashlib import md5
from ipaddress import IPv6Address
from json import JSONDecodeError
from typing import Any, Coroutine, TypedDict
from urllib.parse import quote, urlencode
from aiohttp import (
ClientError,
ClientSession,
ClientTimeout,
MultipartWriter,
StreamReader,
hdrs,
)
from yarl import URL
from .api import SynoBaseApi
from .api.core.external_usb import SynoCoreExternalUSB
from .api.core.security import SynoCoreSecurity
from .api.core.share import SynoCoreShare
from .api.core.system import SynoCoreSystem
from .api.core.upgrade import SynoCoreUpgrade
from .api.core.utilization import SynoCoreUtilization
from .api.download_station import SynoDownloadStation
from .api.dsm.information import SynoDSMInformation
from .api.dsm.network import SynoDSMNetwork
from .api.file_station import SynoFileStation
from .api.photos import SynoPhotos
from .api.storage.storage import SynoStorage
from .api.surveillance_station import SynoSurveillanceStation
from .api.virtual_machine_manager import SynoVirtualMachineManager
from .const import API_AUTH, API_INFO, SENSITIV_PARAMS
from .exceptions import (
SynologyDSMAPIErrorException,
SynologyDSMAPINotExistsException,
SynologyDSMLogin2SAFailedException,
SynologyDSMLogin2SAForcedException,
SynologyDSMLogin2SARequiredException,
SynologyDSMLoginDisabledAccountException,
SynologyDSMLoginFailedException,
SynologyDSMLoginInvalidException,
SynologyDSMLoginPermissionDeniedException,
SynologyDSMNotLoggedInException,
SynologyDSMRequestException,
)
_LOGGER = logging.getLogger(__name__)
class ApiType(TypedDict):
"""Synology api info description."""
maxVersion: int # noqa: N815
minVersion: int # noqa: N815
path: str
class SynologyDSM:
"""Class containing the main Synology DSM functions."""
DSM_5_WEIRD_URL_API = [
SynoStorage.API_KEY,
]
def __init__(
self,
session: ClientSession,
dsm_ip: str,
dsm_port: int,
username: str,
password: str,
use_https: bool = False,
timeout: int | ClientTimeout = 10,
device_token: str | None = None,
debugmode: bool = False,
):
"""Constructor method."""
self.username = username
self._password = password
if isinstance(timeout, ClientTimeout):
self._aiohttp_timeout = timeout
else:
self._aiohttp_timeout = ClientTimeout(total=timeout)
self._debugmode = debugmode
# Session
self._session = session
# Login
self._session_id: str | None = None
self._syno_token: str | None = None
self._device_token = device_token
# Services
self._apis: dict[str, ApiType] = {
"SYNO.API.Info": {"maxVersion": 1, "minVersion": 1, "path": "query.cgi"}
}
self._download: SynoDownloadStation | None = None
self._external_usb: SynoCoreExternalUSB | None = None
self._file: SynoFileStation | None = None
self._information: SynoDSMInformation | None = None
self._network: SynoDSMNetwork | None = None
self._photos: SynoPhotos | None = None
self._security: SynoCoreSecurity | None = None
self._share: SynoCoreShare | None = None
self._storage: SynoStorage | None = None
self._surveillance: SynoSurveillanceStation | None = None
self._system: SynoCoreSystem | None = None
self._utilisation: SynoCoreUtilization | None = None
self._upgrade: SynoCoreUpgrade | None = None
self._vmm: SynoVirtualMachineManager | None = None
try:
IPv6Address(dsm_ip)
dsm_ip = f"[{dsm_ip}]"
except ValueError:
pass
# Build variables
if use_https:
self._base_url = URL(f"https://{dsm_ip}:{dsm_port}")
else:
self._base_url = URL(f"http://{dsm_ip}:{dsm_port}")
def _debuglog(self, message: str) -> None:
"""Outputs message if debug mode is enabled."""
_LOGGER.debug(message)
if self._debugmode:
print("DEBUG: " + message)
def _is_weird_api_url(self, api: str) -> bool:
"""Returns True if the API URL is not common.
Common template is nas_base_url/webapi/path?params
Only handles DSM 5 for now.
"""
return (
api in self.DSM_5_WEIRD_URL_API
and self._information is not None
and int(self._information.version) < 7321 # < DSM 6
)
def _build_url(self, api: str) -> URL:
if self._is_weird_api_url(api) and api == SynoStorage.API_KEY:
return self._base_url.join(
URL("/webman/modules/StorageManager/storagehandler.cgi?")
)
return self._base_url.join(URL(f"/webapi/{self.apis[api]['path']}?"))
async def discover_apis(self) -> None:
"""Retreives available API infos from the NAS."""
if self._apis.get(API_AUTH):
return
data = await self.get(API_INFO, "query")
if not isinstance(data, dict):
return
self._apis = data["data"]
@property
def apis(self) -> dict[str, ApiType]:
"""Gets available API infos from the NAS."""
return self._apis
async def login(self, otp_code: str | None = None) -> bool:
"""Create a logged session."""
# First reset the session
self._debuglog("Creating new session")
params = {
"account": self.username,
"passwd": self._password,
# "enable_syno_token": "yes",
"enable_device_token": "yes",
"device_name": socket.gethostname(),
}
if otp_code:
params["otp_code"] = otp_code
if self._device_token:
params["device_id"] = self._device_token
# Request login
result = await self.get(API_AUTH, "login", params)
if not isinstance(result, dict):
return False
# Handle errors
if result.get("error"):
switcher = {
400: SynologyDSMLoginInvalidException(self.username),
401: SynologyDSMLoginDisabledAccountException(self.username),
402: SynologyDSMLoginPermissionDeniedException(self.username),
403: SynologyDSMLogin2SARequiredException(self.username),
404: SynologyDSMLogin2SAFailedException(),
406: SynologyDSMLogin2SAForcedException(self.username),
}
raise switcher.get(
result["error"]["code"],
SynologyDSMLoginFailedException(result["error"]["code"], self.username),
)
# Parse result if valid
self._session_id = result["data"]["sid"]
if result["data"].get("synotoken"):
# Not available on API version < 3
self._syno_token = result["data"]["synotoken"]
if result["data"].get("did"):
# Not available on API version < 6 && device token is given once
# per device_name
self._device_token = result["data"]["did"]
if result["data"].get("device_id"):
# Not available on API version < 7
self._device_token = result["data"]["device_id"]
self._debuglog("Authentication successful, token: " + str(self._session_id))
if not self._information:
self._information = SynoDSMInformation(self)
await self._information.update()
return bool(result["success"])
async def logout(self) -> bool:
"""Log out of the session."""
result = await self.get(API_AUTH, "logout")
if not isinstance(result, dict):
return False
return bool(result["success"])
@property
def device_token(self) -> str | None:
"""Gets the device token.
Used to remember the 2SA access was granted on this device.
"""
return self._device_token
async def get(
self, api: str, method: str, params: dict | None = None, **kwargs: Any
) -> bytes | dict | str | StreamReader:
"""Handles API GET request."""
return await self._request("GET", api, method, params, **kwargs)
async def post(
self, api: str, method: str, params: dict | None = None, **kwargs: Any
) -> bytes | dict | str | StreamReader:
"""Handles API POST request."""
return await self._request("POST", api, method, params, **kwargs)
async def generate_url(
self,
api: str,
method: str,
params: dict | None = None,
) -> str:
"""Generate an url for external usage."""
url, params, _ = await self._prepare_request(api, method, params)
return str(URL(url).update_query(params))
async def _prepare_request(
self,
api: str,
method: str,
params: dict | None = None,
**kwargs: Any,
) -> tuple[URL, dict, dict]:
"""Prepare the url and parameters for a request."""
# Discover existing APIs
if api != API_INFO:
await self.discover_apis()
# Check if logged
if not self._session_id and api not in [API_AUTH, API_INFO]:
raise SynologyDSMNotLoggedInException
# Build request params
if not params:
params = {}
params["api"] = api
params["version"] = 1
if not self._is_weird_api_url(api):
# Check if API is available
if not self.apis.get(api):
raise SynologyDSMAPINotExistsException(api)
params["version"] = self.apis[api]["maxVersion"]
max_version = kwargs.pop("max_version", None)
if max_version and params["version"] > max_version:
params["version"] = max_version
params["method"] = method
if api == SynoStorage.API_KEY:
params["action"] = method
if self._session_id:
params["_sid"] = self._session_id
if self._syno_token:
params["SynoToken"] = self._syno_token
url = self._build_url(api)
return (url, params, kwargs)
async def _request(
self,
request_method: str,
api: str,
method: str,
params: dict | None = None,
retry_once: bool = True,
raw_response_content: bool = False,
**kwargs: Any,
) -> bytes | dict | str | StreamReader:
"""Handles API request."""
url, params, kwargs = await self._prepare_request(api, method, params, **kwargs)
# Request data
self._debuglog("---------------------------------------------------------")
self._debuglog("API: " + api)
self._debuglog("Request Method: " + request_method)
response = await self._execute_request(
request_method, url, params, raw_response_content, **kwargs
)
self._debuglog("Successful returned data")
if not raw_response_content:
self._debuglog("RESPONSE: " + str(response))
# Handle data errors
if isinstance(response, dict) and response.get("error") and api != API_AUTH:
self._debuglog("Session error: " + str(response["error"]["code"]))
if response["error"]["code"] == 119 and retry_once:
# Session ID not valid
# see https://github.com/aerialls/synology-srm/pull/3
self._session_id = None
self._syno_token = None
return await self._request(request_method, api, method, params, False)
raise SynologyDSMAPIErrorException(
api, response["error"]["code"], response["error"].get("errors")
)
return response
async def _execute_request(
self,
method: str,
url: URL,
params: dict,
raw_response_content: bool = False,
**kwargs: Any,
) -> bytes | dict | str | StreamReader:
"""Function to execute and handle a request."""
# special handling for spaces in parameters
# because yarl.URL does encode a space as + instead of %20
# safe extracted from yarl.URL._QUERY_PART_QUOTER
query = urlencode(params, safe="?/:@-._~!$'()*,", quote_via=quote)
url_encoded = url.join(URL(f"?{query}", encoded=True))
if params.get("api") in [
SynoFileStation.UPLOAD_API_KEY,
SynoFileStation.DOWNLOAD_API_KEY,
]:
timeout = ClientTimeout(connect=10.0, total=43200.0)
else:
timeout = self._aiohttp_timeout
try:
if method == "GET":
response = await self._session.get(
url_encoded, timeout=timeout, **kwargs
)
elif (
method == "POST" and params.get("api") == SynoFileStation.UPLOAD_API_KEY
):
content = kwargs.pop("content")
path = kwargs.pop("path")
filename = kwargs.pop("filename")
create_parents = kwargs.pop("create_parents", None)
boundary = md5(
str(url_encoded).encode("utf-8"), usedforsecurity=False
).hexdigest()
with MultipartWriter("form-data", boundary=boundary) as mp:
part = mp.append(path)
part.headers.pop(hdrs.CONTENT_TYPE)
part.set_content_disposition("form-data", name="path")
if create_parents:
part = mp.append("true")
part.headers.pop(hdrs.CONTENT_TYPE)
part.set_content_disposition("form-data", name="create_parents")
part = mp.append(content)
part.headers.pop(hdrs.CONTENT_TYPE)
part.set_content_disposition(
"form-data", name="file", filename=filename
)
part.headers.add(hdrs.CONTENT_TYPE, "application/octet-stream")
response = await self._session.post(
url_encoded,
timeout=timeout,
data=mp,
)
elif method == "POST":
data = {}
if params is not None:
data.update(params)
data.update(kwargs.pop("data", {}))
data["mimeType"] = "application/json"
kwargs["data"] = data
self._debuglog("POST data: " + str(data))
response = await self._session.post(
url_encoded, timeout=timeout, **kwargs
)
# mask sesitive parameters
if _LOGGER.isEnabledFor(logging.DEBUG) or self._debugmode:
response_url = response.url # pylint: disable=E0606
for param in SENSITIV_PARAMS:
if params is not None and params.get(param):
response_url = response_url.update_query({param: "*********"})
self._debuglog("Request url: " + str(response_url))
self._debuglog(
"Request headers: " + str(dict(response.request_info.headers))
)
self._debuglog("Response status_code: " + str(response.status))
self._debuglog("Response headers: " + str(dict(response.headers)))
if response.status == 200:
# We got a DSM response
content_type = response.headers.get("Content-Type", "").split(";")[0]
if raw_response_content:
return response.content
if content_type in [
"application/json",
"text/json",
"text/plain", # Can happen with some API
]:
return dict(await response.json(content_type=content_type))
if (
content_type == "application/octet-stream"
or content_type.startswith("image")
):
return await response.read()
return await response.text()
# We got a 400, 401 or 404 ...
raise ClientError(response)
except (ClientError, asyncio.TimeoutError, JSONDecodeError) as exp:
raise SynologyDSMRequestException(exp) from exp
async def update(
self, with_information: bool = False, with_network: bool = False
) -> None:
"""Updates the various instanced modules."""
update_methods: list[Coroutine[Any, Any, None]] = []
if self._download:
update_methods.append(self._download.update())
if self._external_usb:
update_methods.append(self._external_usb.update())
if self._information and with_information:
update_methods.append(self._information.update())
if self._network and with_network:
update_methods.append(self._network.update())
if self._security:
update_methods.append(self._security.update())
if self._utilisation:
update_methods.append(self._utilisation.update())
if self._storage:
update_methods.append(self._storage.update())
if self._share:
update_methods.append(self._share.update())
if self._surveillance:
update_methods.append(self._surveillance.update())
if self._system:
update_methods.append(self._system.update())
if self._upgrade:
update_methods.append(self._upgrade.update())
if self._vmm:
update_methods.append(self._vmm.update())
await asyncio.gather(*update_methods)
def reset(self, api: SynoBaseApi | str) -> bool:
"""Reset an API to avoid fetching in on update."""
if isinstance(api, str):
if api in ("information", SynoDSMInformation.API_KEY):
return False
if hasattr(self, "_" + api):
setattr(self, "_" + api, None)
return True
if api == SynoCoreExternalUSB.API_KEY:
self._external_usb = None
return True
if api == SynoFileStation.API_KEY:
self._file = None
return True
if api == SynoCoreSecurity.API_KEY:
self._security = None
return True
if api == SynoCoreShare.API_KEY:
self._share = None
return True
if api == SynoCoreSystem.API_KEY:
self._system = None
return True
if api == SynoCoreUpgrade.API_KEY:
self._upgrade = None
return True
if api == SynoCoreUtilization.API_KEY:
self._utilisation = None
return True
if api == SynoDownloadStation.API_KEY:
self._download = None
return True
if api == SynoPhotos.API_KEY:
self._photos = None
return True
if api == SynoStorage.API_KEY:
self._storage = None
return True
if api == SynoSurveillanceStation.API_KEY:
self._surveillance = None
return True
if api == SynoVirtualMachineManager.API_KEY:
self._vmm = None
return True
if isinstance(api, SynoCoreExternalUSB):
self._external_usb = None
return True
if isinstance(api, SynoFileStation):
self._file = None
return True
if isinstance(api, SynoCoreSecurity):
self._security = None
return True
if isinstance(api, SynoCoreShare):
self._share = None
return True
if isinstance(api, SynoCoreSystem):
self._system = None
return True
if isinstance(api, SynoCoreUpgrade):
self._upgrade = None
return True
if isinstance(api, SynoCoreUtilization):
self._utilisation = None
return True
if isinstance(api, SynoDownloadStation):
self._download = None
return True
if isinstance(api, SynoPhotos):
self._photos = None
return True
if isinstance(api, SynoStorage):
self._storage = None
return True
if isinstance(api, SynoSurveillanceStation):
self._surveillance = None
return True
if isinstance(api, SynoVirtualMachineManager):
self._vmm = None
return True
return False
@property
def download_station(self) -> SynoDownloadStation:
"""Gets NAS DownloadStation."""
if not self._download:
self._download = SynoDownloadStation(self)
return self._download
@property
def external_usb(self) -> SynoCoreExternalUSB:
"""Gets NAS external USB storage information."""
if not self._external_usb:
self._external_usb = SynoCoreExternalUSB(self)
return self._external_usb
@property
def file(self) -> SynoFileStation:
"""Gets NAS FileStation."""
if not self._file:
self._file = SynoFileStation(self)
return self._file
@property
def information(self) -> SynoDSMInformation:
"""Gets NAS informations."""
if not self._information:
self._information = SynoDSMInformation(self)
return self._information
@property
def network(self) -> SynoDSMNetwork:
"""Gets NAS network informations."""
if not self._network:
self._network = SynoDSMNetwork(self)
return self._network
@property
def photos(self) -> SynoPhotos:
"""Gets NAS photos."""
if not self._photos:
self._photos = SynoPhotos(self)
return self._photos
@property
def security(self) -> SynoCoreSecurity:
"""Gets NAS security informations."""
if not self._security:
self._security = SynoCoreSecurity(self)
return self._security
@property
def share(self) -> SynoCoreShare:
"""Gets NAS shares information."""
if not self._share:
self._share = SynoCoreShare(self)
return self._share
@property
def storage(self) -> SynoStorage:
"""Gets NAS storage informations."""
if not self._storage:
self._storage = SynoStorage(self)
return self._storage
@property
def surveillance_station(self) -> SynoSurveillanceStation:
"""Gets NAS SurveillanceStation."""
if not self._surveillance:
self._surveillance = SynoSurveillanceStation(self)
return self._surveillance
@property
def system(self) -> SynoCoreSystem:
"""Gets NAS system information."""
if not self._system:
self._system = SynoCoreSystem(self)
return self._system
@property
def upgrade(self) -> SynoCoreUpgrade:
"""Gets NAS upgrade informations."""
if not self._upgrade:
self._upgrade = SynoCoreUpgrade(self)
return self._upgrade
@property
def utilisation(self) -> SynoCoreUtilization:
"""Gets NAS utilisation informations."""
if not self._utilisation:
self._utilisation = SynoCoreUtilization(self)
return self._utilisation
@property
def virtual_machine_manager(self) -> SynoVirtualMachineManager:
"""Gets NAS virtual machine manager informations."""
if not self._vmm:
self._vmm = SynoVirtualMachineManager(self)
return self._vmm
py-synologydsm-api-2.7.1/tests/ 0000775 0000000 0000000 00000000000 14762405272 0016460 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/__init__.py 0000664 0000000 0000000 00000031007 14762405272 0020572 0 ustar 00root root 0000000 0000000 """Library tests."""
from json import JSONDecodeError
from urllib.parse import urlencode
import aiohttp
from synology_dsm import SynologyDSM
from synology_dsm.api.core.external_usb import SynoCoreExternalUSB
from synology_dsm.api.core.security import SynoCoreSecurity
from synology_dsm.api.core.share import SynoCoreShare
from synology_dsm.api.core.system import SynoCoreSystem
from synology_dsm.api.core.upgrade import SynoCoreUpgrade
from synology_dsm.api.core.utilization import SynoCoreUtilization
from synology_dsm.api.download_station import SynoDownloadStation
from synology_dsm.api.dsm.information import SynoDSMInformation
from synology_dsm.api.dsm.network import SynoDSMNetwork
from synology_dsm.api.file_station import SynoFileStation
from synology_dsm.api.photos import SynoPhotos
from synology_dsm.api.storage.storage import SynoStorage
from synology_dsm.api.surveillance_station import SynoSurveillanceStation
from synology_dsm.api.virtual_machine_manager import SynoVirtualMachineManager
from synology_dsm.const import API_AUTH, API_INFO
from synology_dsm.exceptions import SynologyDSMRequestException
from .api_data.dsm_5 import (
DSM_5_API_INFO,
DSM_5_AUTH_LOGIN,
DSM_5_AUTH_LOGIN_2SA,
DSM_5_AUTH_LOGIN_2SA_OTP,
DSM_5_CORE_UTILIZATION,
DSM_5_DSM_INFORMATION,
DSM_5_DSM_NETWORK,
DSM_5_STORAGE_STORAGE_DS410J_RAID5_4DISKS_1VOL,
)
from .api_data.dsm_6 import (
DSM_6_API_INFO,
DSM_6_API_INFO_SURVEILLANCE_STATION,
DSM_6_AUTH_LOGIN,
DSM_6_AUTH_LOGIN_2SA,
DSM_6_AUTH_LOGIN_2SA_OTP,
DSM_6_CORE_SECURITY,
DSM_6_CORE_SECURITY_UPDATE_OUTOFDATE,
DSM_6_CORE_SHARE,
DSM_6_CORE_SYSTEM_DS918_PLUS,
DSM_6_CORE_UPGRADE_TRUE,
DSM_6_CORE_UTILIZATION,
DSM_6_CORE_UTILIZATION_ERROR_1055,
DSM_6_DOWNLOAD_STATION_INFO_CONFIG,
DSM_6_DOWNLOAD_STATION_INFO_INFO,
DSM_6_DOWNLOAD_STATION_STAT_INFO,
DSM_6_DOWNLOAD_STATION_TASK_LIST,
DSM_6_DSM_INFORMATION,
DSM_6_DSM_NETWORK_2LAN_1PPPOE,
DSM_6_STORAGE_STORAGE_DS213_PLUS_SHR1_2DISKS_2VOLS,
DSM_6_STORAGE_STORAGE_DS918_PLUS_RAID5_3DISKS_1VOL,
DSM_6_STORAGE_STORAGE_DS1515_PLUS_SHR2_10DISKS_1VOL_WITH_EXPANSION,
DSM_6_STORAGE_STORAGE_DS1819_PLUS_SHR2_8DISKS_1VOL,
DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MD_PARAM_SAVE,
DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MOTION_ENUM,
DSM_6_SURVEILLANCE_STATION_CAMERA_GET_LIVE_VIEW_PATH,
DSM_6_SURVEILLANCE_STATION_CAMERA_LIST,
DSM_6_SURVEILLANCE_STATION_HOME_MODE_GET_INFO,
DSM_6_SURVEILLANCE_STATION_HOME_MODE_SWITCH,
)
from .api_data.dsm_7 import (
DSM_7_API_INFO,
DSM_7_AUTH_LOGIN,
DSM_7_AUTH_LOGIN_2SA,
DSM_7_AUTH_LOGIN_2SA_OTP,
DSM_7_CORE_EXTERNAL_USB_DS1821_PLUS_EXTERNAL_USB,
DSM_7_CORE_UPGRADE_TRUE,
DSM_7_DSM_INFORMATION,
DSM_7_FILE_STATION_FILES,
DSM_7_FILE_STATION_FOLDERS,
DSM_7_FOTO_ALBUMS,
DSM_7_FOTO_ITEMS,
DSM_7_FOTO_ITEMS_SEARCHED,
DSM_7_FOTO_ITEMS_SHARED_ALBUM,
DSM_7_FOTO_SHARED_ITEMS,
DSM_7_VMM_GUESTS,
)
from .const import (
DEVICE_TOKEN,
ERROR_AUTH_INVALID_CREDENTIALS,
ERROR_AUTH_MAX_TRIES,
ERROR_AUTH_OTP_AUTHENTICATE_FAILED,
ERROR_INSUFFICIENT_USER_PRIVILEGE,
)
API_SWITCHER = {
5: {
"API_INFO": DSM_5_API_INFO,
"AUTH_LOGIN": DSM_5_AUTH_LOGIN,
"AUTH_LOGIN_2SA": DSM_5_AUTH_LOGIN_2SA,
"AUTH_LOGIN_2SA_OTP": DSM_5_AUTH_LOGIN_2SA_OTP,
"DSM_INFORMATION": DSM_5_DSM_INFORMATION,
"DSM_NETWORK": DSM_5_DSM_NETWORK,
"CORE_UTILIZATION": DSM_5_CORE_UTILIZATION,
"STORAGE_STORAGE": {
"RAID": DSM_5_STORAGE_STORAGE_DS410J_RAID5_4DISKS_1VOL,
},
},
6: {
"API_INFO": DSM_6_API_INFO,
"AUTH_LOGIN": DSM_6_AUTH_LOGIN,
"AUTH_LOGIN_2SA": DSM_6_AUTH_LOGIN_2SA,
"AUTH_LOGIN_2SA_OTP": DSM_6_AUTH_LOGIN_2SA_OTP,
"DSM_INFORMATION": DSM_6_DSM_INFORMATION,
"DSM_NETWORK": DSM_6_DSM_NETWORK_2LAN_1PPPOE,
"CORE_SECURITY": DSM_6_CORE_SECURITY,
"CORE_SHARE": DSM_6_CORE_SHARE,
"CORE_SYSTEM": DSM_6_CORE_SYSTEM_DS918_PLUS,
"CORE_UTILIZATION": DSM_6_CORE_UTILIZATION,
"CORE_UPGRADE": DSM_6_CORE_UPGRADE_TRUE,
"STORAGE_STORAGE": {
"RAID": DSM_6_STORAGE_STORAGE_DS918_PLUS_RAID5_3DISKS_1VOL,
"SHR1": DSM_6_STORAGE_STORAGE_DS213_PLUS_SHR1_2DISKS_2VOLS,
"SHR2": DSM_6_STORAGE_STORAGE_DS1819_PLUS_SHR2_8DISKS_1VOL,
"SHR2_EXPANSION": DSM_6_STORAGE_STORAGE_DS1515_PLUS_SHR2_10DISKS_1VOL_WITH_EXPANSION, # noqa: B950
},
},
7: {
"API_INFO": DSM_7_API_INFO,
"AUTH_LOGIN": DSM_7_AUTH_LOGIN,
"AUTH_LOGIN_2SA": DSM_7_AUTH_LOGIN_2SA,
"AUTH_LOGIN_2SA_OTP": DSM_7_AUTH_LOGIN_2SA_OTP,
"CORE_UPGRADE": DSM_7_CORE_UPGRADE_TRUE,
"DSM_INFORMATION": DSM_7_DSM_INFORMATION,
"FOTO_ALBUMS": DSM_7_FOTO_ALBUMS,
"FOTO_ITEMS": DSM_7_FOTO_ITEMS,
"VMM_GUESTS": DSM_7_VMM_GUESTS,
},
}
VALID_HOST = "nas.mywebsite.me"
VALID_PORT = "5001"
VALID_HTTPS = True
VALID_VERIFY_SSL = True
VALID_USER = "valid_user"
VALID_USER_2SA = "valid_user_2sa"
VALID_PASSWORD = "valid_password" # noqa: S105
VALID_OTP = "123456"
USER_MAX_TRY = "user_max"
class SynologyDSMMock(SynologyDSM):
"""Mocked SynologyDSM."""
API_URI = "api="
def __init__(
self,
session,
dsm_ip,
dsm_port,
username,
password,
use_https=False,
timeout=10,
device_token=None,
debugmode=False,
):
"""Constructor method."""
SynologyDSM.__init__(
self,
session,
dsm_ip,
dsm_port,
username,
password,
use_https,
timeout,
device_token,
debugmode,
)
self.dsm_version = 6 # 5 or 6
self.disks_redundancy = "RAID" # RAID or SHR[number][_EXPANSION]
self.error = False
self.with_surveillance = False
async def _execute_request(
self, method, url, params, raw_response_content, **kwargs
):
url = str(url)
url += urlencode(params or {})
if "no_internet" in url:
raise SynologyDSMRequestException(
aiohttp.ClientError(
": Failed to establish a new connection: "
"[Errno 8] nodename nor servname provided, or not known"
)
)
if VALID_HOST not in url:
raise SynologyDSMRequestException(
aiohttp.ClientError(
":"
" Failed to establish a new connection: [Errno 8] nodename "
"nor servname provided, or not known"
)
)
if VALID_PORT not in url and "https" not in url:
raise SynologyDSMRequestException(
JSONDecodeError("Expecting value", "document", 0)
)
if VALID_PORT not in url:
raise SynologyDSMRequestException(
aiohttp.ClientError(
"[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1076)"
)
)
if "https" not in url:
raise SynologyDSMRequestException(aiohttp.ClientError("Bad request"))
if API_INFO in url:
if self.with_surveillance:
return DSM_6_API_INFO_SURVEILLANCE_STATION
return API_SWITCHER[self.dsm_version]["API_INFO"]
if API_AUTH in url:
if VALID_USER_2SA in url and VALID_PASSWORD in url:
if "otp_code" not in url and "device_id" not in url:
return API_SWITCHER[self.dsm_version]["AUTH_LOGIN_2SA"]
if "device_id" in url and DEVICE_TOKEN in url:
return API_SWITCHER[self.dsm_version]["AUTH_LOGIN"]
if "otp_code" in url:
if VALID_OTP in url:
return API_SWITCHER[self.dsm_version]["AUTH_LOGIN_2SA_OTP"]
return ERROR_AUTH_OTP_AUTHENTICATE_FAILED
if VALID_USER in url and VALID_PASSWORD in url:
return API_SWITCHER[self.dsm_version]["AUTH_LOGIN"]
if USER_MAX_TRY in url:
return ERROR_AUTH_MAX_TRIES
return ERROR_AUTH_INVALID_CREDENTIALS
if self.API_URI in url:
if not self._session_id:
return ERROR_INSUFFICIENT_USER_PRIVILEGE
if SynoCoreExternalUSB.API_KEY in url:
return DSM_7_CORE_EXTERNAL_USB_DS1821_PLUS_EXTERNAL_USB
if SynoCoreSecurity.API_KEY in url:
if self.error:
return DSM_6_CORE_SECURITY_UPDATE_OUTOFDATE
return API_SWITCHER[self.dsm_version]["CORE_SECURITY"]
if SynoCoreShare.API_KEY in url:
return API_SWITCHER[self.dsm_version]["CORE_SHARE"]
if SynoCoreSystem.API_KEY in url:
if SynoCoreUtilization.API_KEY in url:
if self.error:
return DSM_6_CORE_UTILIZATION_ERROR_1055
return API_SWITCHER[self.dsm_version]["CORE_UTILIZATION"]
return API_SWITCHER[self.dsm_version]["CORE_SYSTEM"]
if SynoCoreUpgrade.API_KEY in url:
return API_SWITCHER[self.dsm_version]["CORE_UPGRADE"]
if SynoDSMInformation.API_KEY in url:
return API_SWITCHER[self.dsm_version]["DSM_INFORMATION"]
if SynoDSMNetwork.API_KEY in url:
return API_SWITCHER[self.dsm_version]["DSM_NETWORK"]
if SynoDownloadStation.INFO_API_KEY in url:
if "GetInfo" in url:
return DSM_6_DOWNLOAD_STATION_INFO_INFO
if "GetConfig" in url:
return DSM_6_DOWNLOAD_STATION_INFO_CONFIG
if SynoDownloadStation.STAT_API_KEY in url:
if "GetInfo" in url:
return DSM_6_DOWNLOAD_STATION_STAT_INFO
if SynoDownloadStation.TASK_API_KEY in url:
if "List" in url:
return DSM_6_DOWNLOAD_STATION_TASK_LIST
if SynoFileStation.LIST_API_KEY in url:
if "list_share" in url:
return DSM_7_FILE_STATION_FOLDERS
if "list" in url:
return DSM_7_FILE_STATION_FILES
if SynoPhotos.BROWSE_ALBUMS_API_KEY in url:
return DSM_7_FOTO_ALBUMS
if SynoPhotos.BROWSE_ITEM_API_KEY in url:
if "passphrase" in url:
return DSM_7_FOTO_ITEMS_SHARED_ALBUM
return DSM_7_FOTO_ITEMS
if SynoPhotos.SEARCH_API_KEY in url:
return DSM_7_FOTO_ITEMS_SEARCHED
if SynoPhotos.BROWSE_ITEM_FOTOTEAM_API_KEY in url:
return DSM_7_FOTO_SHARED_ITEMS
if SynoVirtualMachineManager.GUEST_API_KEY in url:
return DSM_7_VMM_GUESTS
if SynoStorage.API_KEY in url:
return API_SWITCHER[self.dsm_version]["STORAGE_STORAGE"][
self.disks_redundancy
]
if SynoSurveillanceStation.CAMERA_API_KEY in url:
if "GetLiveViewPath" in url:
return DSM_6_SURVEILLANCE_STATION_CAMERA_GET_LIVE_VIEW_PATH
if "List" in url:
assert params["version"] == 7
return DSM_6_SURVEILLANCE_STATION_CAMERA_LIST
if "MDParamSave" in url:
return DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MD_PARAM_SAVE
if "MotionEnum" in url:
return DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MOTION_ENUM
if SynoSurveillanceStation.HOME_MODE_API_KEY in url:
if "GetInfo" in url:
return DSM_6_SURVEILLANCE_STATION_HOME_MODE_GET_INFO
if "Switch" in url:
return DSM_6_SURVEILLANCE_STATION_HOME_MODE_SWITCH
if (
"SYNO.FileStation.Upload" in url
and "upload" in url
and "file_already_exists" in kwargs["files"]["file"]
):
return {"error": {"code": 1805}, "success": False}
if (
"SYNO.DownloadStation2.Task" in url
and "create" in url
and "test_not_exists" in url
):
return {"error": {"code": 408}, "success": False}
return {"success": False}
return None
py-synologydsm-api-2.7.1/tests/api_data/ 0000775 0000000 0000000 00000000000 14762405272 0020222 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/__init__.py 0000664 0000000 0000000 00000000037 14762405272 0022333 0 ustar 00root root 0000000 0000000 """APIs raw data constants."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/ 0000775 0000000 0000000 00000000000 14762405272 0021231 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_5/__init__.py 0000664 0000000 0000000 00000001312 14762405272 0023337 0 ustar 00root root 0000000 0000000 """DSM 5 datas."""
from .const_5_api_auth import (
DSM_5_AUTH_LOGIN,
DSM_5_AUTH_LOGIN_2SA,
DSM_5_AUTH_LOGIN_2SA_OTP,
)
from .const_5_api_info import DSM_5_API_INFO
from .core.const_5_core_utilization import DSM_5_CORE_UTILIZATION
from .dsm.const_5_dsm_info import DSM_5_DSM_INFORMATION
from .dsm.const_5_dsm_network import DSM_5_DSM_NETWORK
from .storage.const_5_storage_storage import (
DSM_5_STORAGE_STORAGE_DS410J_RAID5_4DISKS_1VOL,
)
__all__ = [
"DSM_5_AUTH_LOGIN",
"DSM_5_AUTH_LOGIN_2SA",
"DSM_5_AUTH_LOGIN_2SA_OTP",
"DSM_5_API_INFO",
"DSM_5_CORE_UTILIZATION",
"DSM_5_DSM_INFORMATION",
"DSM_5_DSM_NETWORK",
"DSM_5_STORAGE_STORAGE_DS410J_RAID5_4DISKS_1VOL",
]
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/const_5_api_auth.py 0000664 0000000 0000000 00000000663 14762405272 0025034 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.API.Auth data."""
from tests.const import DEVICE_TOKEN, ERROR_AUTH_OTP_NOT_SPECIFIED, SESSION_ID
# No synotoken for an unknown reason
DSM_5_AUTH_LOGIN = {
"data": {"is_portal_port": False, "sid": SESSION_ID},
"success": True,
}
DSM_5_AUTH_LOGIN_2SA = ERROR_AUTH_OTP_NOT_SPECIFIED
DSM_5_AUTH_LOGIN_2SA_OTP = {
"data": {"did": DEVICE_TOKEN, "is_portal_port": False, "sid": SESSION_ID},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/const_5_api_info.py 0000664 0000000 0000000 00000257431 14762405272 0025035 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.API.Info data."""
DSM_5_API_INFO = {
"data": {
"SYNO.ACEEditor": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ACEEditor.Preference": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Auth": {"maxVersion": 4, "minVersion": 1, "path": "auth.cgi"},
"SYNO.API.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "encryption.cgi",
},
"SYNO.API.Info": {"maxVersion": 1, "minVersion": 1, "path": "query.cgi"},
"SYNO.AudioPlayer.Stream": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioPlayer/stream.cgi",
},
"SYNO.Backup.App": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Log": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository.Certificate": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository.PrivilegedUser": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.NetworkBackup": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.TimeBackup": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.VersionBackup": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Share.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Source.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Connect.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.S3.Bucket": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.S3.Region": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Local": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Volume.Local": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target.Owner": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target.PrivilegedUser": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Task": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Task.Data": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CloudSync": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ACL": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AHA": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AHA.Enclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AHA.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AHA.Monitor": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AHA.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AHA.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.Style": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.App": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.Rule": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Cache": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.ServerInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CRT": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CSR": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CurrentConnection": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.ExtIP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Provider": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Record": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Synology": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect.Application": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.BaseDN": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.DefaultPermission": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.BonjourSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Driver": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.OAuth": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.EUnit": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.SD": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.eSATA": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.UPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EzInternet": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.AFP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP": {
"maxVersion": 3,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.ChrootUser": {
"maxVersion": 2,
"minVersion": 2,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.SFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.Security": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.AdvancedSetting": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.IDMap": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.Kerberos": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.SharePrivilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB": {
"maxVersion": 3,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.WebDAV": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.WebDAV.CalDAV": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.WebDAV.CalDAV.Calendar": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.Member": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.BeepControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.DCOutput": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.DCOutput.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.FanSpeed": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Hibernation": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.LCM": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Led.Brightness": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.MemoryLayout": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerRecovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerSchedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.ZRAM": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.IndexFolder": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.MediaConverter": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Unify": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bond": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bridge": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.ClientList": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.PXE": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.Reservation": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.WPAD": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Ethernet": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router.Prefix": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6Tunnel": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Interface": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.LocalBridge": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.MACClone": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE.Relay": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.ConnectionList": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.CountryCode": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.DMZ": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Gateway.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.LocalLan": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.MacFilter": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.ParentalControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.PkgList": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.PortForward": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Static.Route": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Topology": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.RouterRules": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.UPnPServer": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.USBModem": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.L2TP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.PPTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.WOL": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.Hotspot": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.WPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.CustomizedData": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.FilterSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.Variables": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.WarningPercentage": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Auth": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.AuthToken": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mobile": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Provider": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.EnforcePolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Control": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Uninstallation": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Compatibility": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterList": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Upnp": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Quota": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.Language": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SNMP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Embed": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DoS": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.VPNPassthrough": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.VPNPassthrough.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Operation": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.PortInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.CryptoFile": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Fileindex": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Snapshot": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Disk": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSILUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSITargets": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Form": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.CustRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.FileTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.PersonalActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Setting.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Setting.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Setting.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ResetButton": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Utilization": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TaskScheduler": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Terminal": {
"maxVersion": 3,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.AutoUpgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Patch": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Setting": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Home": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordPolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UserSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM.External": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.HTTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.HTTP.Dependency": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.HTTP.VHost": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.PHP": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.PHP.Extension": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Application": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/app.cgi",
},
"SYNO.DSM.AutoBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/autoblock.cgi",
},
"SYNO.DSM.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/connection.cgi",
},
"SYNO.DSM.FindMe": {"maxVersion": 1, "minVersion": 1, "path": "dsm/findme.cgi"},
"SYNO.DSM.Group": {"maxVersion": 1, "minVersion": 1, "path": "dsm/group.cgi"},
"SYNO.DSM.Info": {"maxVersion": 1, "minVersion": 1, "path": "dsm/info.cgi"},
"SYNO.DSM.LogViewer": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/logviewer.cgi",
},
"SYNO.DSM.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/network.cgi",
},
"SYNO.DSM.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/package.cgi",
},
"SYNO.DSM.PushNotification": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/notification.cgi",
},
"SYNO.DSM.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/service.cgi",
},
"SYNO.DSM.System": {"maxVersion": 1, "minVersion": 1, "path": "dsm/system.cgi"},
"SYNO.DSM.SystemLoading": {
"maxVersion": 1,
"minVersion": 1,
"path": "dsm/system_loading.cgi",
},
"SYNO.DSM.User": {"maxVersion": 1, "minVersion": 1, "path": "dsm/user.cgi"},
"SYNO.DSM.Volume": {"maxVersion": 1, "minVersion": 1, "path": "dsm/volume.cgi"},
"SYNO.DSM.iSCSI": {"maxVersion": 1, "minVersion": 1, "path": "dsm/iscsi.cgi"},
"SYNO.DisasterRecovery.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Retention": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/btsearch.cgi",
},
"SYNO.DownloadStation.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "DownloadStation/info.cgi",
},
"SYNO.DownloadStation.RSS.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/RSSfeed.cgi",
},
"SYNO.DownloadStation.RSS.Site": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/RSSsite.cgi",
},
"SYNO.DownloadStation.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/schedule.cgi",
},
"SYNO.DownloadStation.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/statistic.cgi",
},
"SYNO.DownloadStation.Task": {
"maxVersion": 3,
"minVersion": 1,
"path": "DownloadStation/task.cgi",
},
"SYNO.DownloadStation.Xunlei.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/xunlei/dl_queue.cgi",
},
"SYNO.DownloadStation2.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.Peer": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.Tracker": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request.Polling": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.BackgroundTask": {
"maxVersion": 2,
"minVersion": 1,
"path": "FileStation/background_task.cgi",
},
"SYNO.FileStation.CheckExist": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_checkDir.cgi",
},
"SYNO.FileStation.CheckPermission": {
"maxVersion": 2,
"minVersion": 1,
"path": "FileStation/file_permission.cgi",
},
"SYNO.FileStation.Compress": {
"maxVersion": 2,
"minVersion": 1,
"path": "FileStation/file_compress.cgi",
},
"SYNO.FileStation.CopyMove": {
"maxVersion": 2,
"minVersion": 1,
"path": "FileStation/file_MVCP.cgi",
},
"SYNO.FileStation.CreateFolder": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_crtfdr.cgi",
},
"SYNO.FileStation.Delete": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_delete.cgi",
},
"SYNO.FileStation.DirSize": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_dirSize.cgi",
},
"SYNO.FileStation.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_download.cgi",
},
"SYNO.FileStation.Extract": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_extract.cgi",
},
"SYNO.FileStation.Favorite": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_favorite.cgi",
},
"SYNO.FileStation.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/info.cgi",
},
"SYNO.FileStation.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_share.cgi",
},
"SYNO.FileStation.MD5": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_md5.cgi",
},
"SYNO.FileStation.OpenGoogleDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_opengdrive.cgi",
},
"SYNO.FileStation.Rename": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_rename.cgi",
},
"SYNO.FileStation.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_find.cgi",
},
"SYNO.FileStation.Sharing": {
"maxVersion": 2,
"minVersion": 1,
"path": "FileStation/file_sharing.cgi",
},
"SYNO.FileStation.Snapshot": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_snapshot.cgi",
},
"SYNO.FileStation.Thumb": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_thumb.cgi",
},
"SYNO.FileStation.Upload": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/api_upload.cgi",
},
"SYNO.FileStation.VFS.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.GDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VirtualFolder": {
"maxVersion": 1,
"minVersion": 1,
"path": "FileStation/file_virtual.cgi",
},
"SYNO.FolderSharing.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "FolderSharing/file_download.cgi",
},
"SYNO.FolderSharing.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "FolderSharing/file_share.cgi",
},
"SYNO.FolderSharing.Thumb": {
"maxVersion": 1,
"minVersion": 1,
"path": "FolderSharing/file_thumb.cgi",
},
"SYNO.NoteStation.Export.Note": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Export.Notebook": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.FTS": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Import.Evernote": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Import.Notebook": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Note": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Note.AppLink": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Note.Encrypt": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Note.Ghost": {
"maxVersion": 2,
"minVersion": 2,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Note.Polling": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Note.Version": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Notebook": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Notebook.Polling": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Notebook.Preset": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Permission.Public": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Permission.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Setting.DSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Shard": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Shard.Link": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Share.Priv": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Shortcut": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Stack": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Tag": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.NoteStation.Todo": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Contacts": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client.Job": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server.Pair": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SocialAccount": {
"maxVersion": 2,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SocialAccount.Friend": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SocialAccount.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "_______________________________________________________entry.cgi",
"requestFormat": "JSON",
},
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/core/ 0000775 0000000 0000000 00000000000 14762405272 0022161 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_5/core/__init__.py 0000664 0000000 0000000 00000000037 14762405272 0024272 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.Core.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/core/const_5_core_utilization.py 0000664 0000000 0000000 00000007173 14762405272 0027560 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.Core.System.Utilization data."""
DSM_5_CORE_UTILIZATION = {
"data": {
"cpu": {
"15min_load": 53,
"1min_load": 57,
"5min_load": 56,
"device": "System",
"other_load": 63,
"system_load": 10,
"user_load": 27,
},
"disk": {
"disk": [
{
"device": "sda",
"display_name": "Disk 1",
"read_access": 21,
"read_byte": 645529,
"type": "internal",
"utilization": 46,
"write_access": 4,
"write_byte": 86220,
},
{
"device": "sdb",
"display_name": "Disk 2",
"read_access": 23,
"read_byte": 711338,
"type": "internal",
"utilization": 33,
"write_access": 4,
"write_byte": 95641,
},
{
"device": "sdc",
"display_name": "Disk 3",
"read_access": 21,
"read_byte": 786841,
"type": "internal",
"utilization": 31,
"write_access": 5,
"write_byte": 99874,
},
{
"device": "sdd",
"display_name": "Disk 4",
"read_access": 21,
"read_byte": 729907,
"type": "internal",
"utilization": 32,
"write_access": 4,
"write_byte": 76663,
},
{
"device": "sdq",
"display_name": "USB Disk 1",
"read_access": 0,
"read_byte": 0,
"type": "usb",
"utilization": 0,
"write_access": 0,
"write_byte": 0,
},
],
"total": {
"device": "total",
"read_access": 86,
"read_byte": 2873615,
"utilization": 28,
"write_access": 17,
"write_byte": 358398,
},
},
"memory": {
"avail_real": 8188,
"avail_swap": 1933436,
"buffer": 3700,
"cached": 25636,
"device": "Memory",
"memory_size": 131072,
"real_usage": 68,
"si_disk": 5,
"so_disk": 3,
"swap_usage": 7,
"total_real": 118464,
"total_swap": 2097080,
},
"network": [
{"device": "total", "rx": 1680, "tx": 553},
{"device": "eth0", "rx": 1680, "tx": 553},
],
"space": {
"lun": [],
"total": {
"device": "total",
"read_access": 261,
"read_byte": 1069875,
"utilization": 100,
"write_access": 51,
"write_byte": 208896,
},
"volume": [
{
"device": "md2",
"display_name": "volume1",
"read_access": 261,
"read_byte": 1069875,
"utilization": 100,
"write_access": 51,
"write_byte": 208896,
}
],
},
"time": 1586592505,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/dsm/ 0000775 0000000 0000000 00000000000 14762405272 0022014 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_5/dsm/__init__.py 0000664 0000000 0000000 00000000036 14762405272 0024124 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.DSM.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/dsm/const_5_dsm_info.py 0000664 0000000 0000000 00000001515 14762405272 0025620 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.DSM.Info data."""
DSM_5_DSM_INFORMATION_DS410J = {
"data": {
"codepage": "enu",
"model": "DS410j",
"ram": 128,
"serial": "A3G7N00628",
"temperature": 52,
"temperature_warn": False,
"time": "Mon Apr 13 18:26:27 2020",
"uptime": 7077254,
"version": "5967",
"version_string": "DSM 5.2-5967 Update 9",
},
"success": True,
}
DSM_5_DSM_INFORMATION_DS3615XS = {
"data": {
"codepage": "rus",
"model": "DS3615xs",
"ram": 6144,
"serial": "B3J4N01003",
"temperature": 40,
"time": "Sat Apr 25 20:21:57 2020",
"uptime": 3897,
"version": "5967",
"version_string": "DSM 5.2-5967 Update 9",
},
"success": True,
}
DSM_5_DSM_INFORMATION = DSM_5_DSM_INFORMATION_DS3615XS
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/dsm/const_5_dsm_network.py 0000664 0000000 0000000 00000000743 14762405272 0026360 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.DSM.Network data."""
DSM_5_DSM_NETWORK = {
"data": {
"dns": ["192.168.1.1"],
"gateway": "192.168.1.1",
"hostname": "HOME-NAS",
"interfaces": [
{
"id": "eth0",
"ip": [{"address": "192.168.1.10", "netmask": "255.255.255.0"}],
"mac": "XX-XX-XX-XX-XX-XX",
"type": "lan",
}
],
"workgroup": "WORKGROUP",
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/storage/ 0000775 0000000 0000000 00000000000 14762405272 0022675 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_5/storage/__init__.py 0000664 0000000 0000000 00000000042 14762405272 0025002 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.Storage.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_5/storage/const_5_storage_storage.py 0000664 0000000 0000000 00000021730 14762405272 0030074 0 ustar 00root root 0000000 0000000 """DSM 5 SYNO.Storage.CGI.Storage data."""
from tests.const import UNIQUE_KEY
DSM_5_STORAGE_STORAGE_DS410J_RAID5_4DISKS_1VOL = {
"disks": [
{"id": "test_disk"},
{
"container": {
"order": 0,
"str": "DS410j",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdd",
"disable_secera": False,
"diskType": "SATA",
"erase_time": 374,
"firm": "SC60",
"has_system": True,
"id": "sdd",
"is4Kn": False,
"isSsd": False,
"is_erasing": False,
"longName": "Disk 4",
"model": "ST3000VN007-2E4166 ",
"name": "Disk 4",
"num_id": 4,
"order": 4,
"portType": "normal",
"serial": "Z73095S2",
"size_total": "3000592982016",
"smart_status": "safe",
"status": "normal",
"support": False,
"temp": 42,
"used_by": "volume_1",
"vendor": "Seagate",
},
{
"container": {
"order": 0,
"str": "DS410j",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdc",
"disable_secera": False,
"diskType": "SATA",
"erase_time": 410,
"firm": "80.00A80",
"has_system": True,
"id": "sdc",
"is4Kn": False,
"isSsd": False,
"is_erasing": False,
"longName": "Disk 3",
"model": "WD30EZRZ-00Z5HB0 ",
"name": "Disk 3",
"num_id": 3,
"order": 3,
"portType": "normal",
"serial": "WD-WCC4N0TEJ4F0",
"size_total": "3000592982016",
"smart_status": "safe",
"status": "normal",
"support": False,
"temp": 42,
"used_by": "volume_1",
"vendor": "WDC ",
},
{
"container": {
"order": 0,
"str": "DS410j",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdb",
"disable_secera": False,
"diskType": "SATA",
"erase_time": 408,
"firm": "82.00A82",
"has_system": True,
"id": "sdb",
"is4Kn": False,
"isSsd": False,
"is_erasing": False,
"longName": "Disk 2",
"model": "WD30EFRX-68EUZN0 ",
"name": "Disk 2",
"num_id": 2,
"order": 2,
"portType": "normal",
"serial": "WD-WCC4N6LSVCVX",
"size_total": "3000592982016",
"smart_status": "safe",
"status": "normal",
"support": False,
"temp": 43,
"used_by": "volume_1",
"vendor": "WDC ",
},
{
"container": {
"order": 0,
"str": "DS410j",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sda",
"disable_secera": False,
"diskType": "SATA",
"erase_time": 0,
"firm": "82.00A82",
"has_system": True,
"id": "sda",
"is4Kn": False,
"isSsd": False,
"is_erasing": False,
"longName": "Disk 1",
"model": "WD30EFRX-68N32N0 ",
"name": "Disk 1",
"num_id": 1,
"order": 1,
"portType": "normal",
"serial": "WD-WCC7K5YA5H40",
"size_total": "3000592982016",
"smart_status": "90%",
"status": "normal",
"support": False,
"temp": 44,
"used_by": "volume_1",
"vendor": "WDC ",
},
],
"env": {
"batchtask": {"max_task": 64, "remain_task": 64},
"bay_number": "4",
"ebox": [],
"fs_acting": False,
"is_space_actioning": False,
"isns": {"address": "", "enabled": False},
"isns_server": "",
"max_fs_bytes": "17592181850112",
"max_fs_bytes_high_end": "219902325555200",
"model_name": "DS410j",
"ram_enough_for_fs_high_end": False,
"ram_size": 0,
"ram_size_required": 32,
"settingSwap": False,
"showpooltab": False,
"status": {"system_crashed": False, "system_need_repair": False},
"support": {"ebox": False, "raid_cross": False, "sysdef": True},
"unique_key": UNIQUE_KEY,
},
"hotSpares": [],
"iscsiLuns": [
{
"can_do": {
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"migrate": {"to_raid5+spare": "1-1", "to_raid6": 1},
},
"id": "iscsilun_LUN-1",
"is_actioning": False,
"iscsi_lun": {
"blkNum": "19614744",
"device_type": "file",
"lid": 1,
"location": "volume_1",
"mapped_targets": [1],
"name": "LUN-1",
"restored_time": "0",
"rootpath": "/volume1",
"size": "10737418240",
"thin_provision": False,
"uuid": "fcf3a450-681c-06cb-fbb9-0400bdbe0780",
"vaai_extent_size": "0",
"vaai_support": False,
},
"num_id": 1,
"progress": {"percent": "-1", "step": "none"},
"status": "normal",
}
],
"iscsiTargets": [
{
"auth": {"mutual_username": "", "type": "none", "username": ""},
"data_chksum": 0,
"enabled": True,
"hdr_chksum": 0,
"iqn": "iqn.2000-01.com.synology:DiskStation.name",
"mapped_logical_unit_number": [0],
"mapped_luns": [1],
"masking": [
{"iqn": "iqn.2000-01.com.synology:default.acl", "permission": "rw"}
],
"multi_sessions": False,
"name": "Target-1",
"num_id": 1,
"recv_seg_bytes": 262144,
"remote": [],
"send_seg_bytes": 4096,
"status": "online",
"tid": 1,
}
],
"ports": [],
"storagePools": [],
"success": True,
"volumes": [
{"id": "test_volume"},
{
"can_do": {
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"migrate": {"to_raid5+spare": "1-1", "to_raid6": 1},
},
"container": "internal",
"device_type": "raid_5",
"disk_failure_number": 0,
"disks": ["sda", "sdb", "sdc", "sdd"],
"eppool_used": "10042748928",
"fs_type": "ext3",
"id": "volume_1",
"is_acting": False,
"is_actioning": False,
"is_inode_full": False,
"is_writable": True,
"max_fs_size": "17592181850112",
"maximal_disk_size": "0",
"minimal_disk_size": "2995767869440",
"num_id": 1,
"pool_path": "",
"progress": {"percent": "-1", "step": "none"},
"size": {
"free_inode": "547237217",
"total": "8846249701376",
"total_device": "8987275100160",
"total_inode": "548544512",
"used": "5719795761152",
},
"space_path": "/dev/md2",
"spares": [],
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [],
"timebackup": True,
"used_by_gluster": False,
"vol_path": "/volume1",
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"remove": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
},
"snapshot": {
"resize": {"can_do": True, "errCode": 0, "stopService": False}
},
},
},
],
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/ 0000775 0000000 0000000 00000000000 14762405272 0021232 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/__init__.py 0000664 0000000 0000000 00000006303 14762405272 0023345 0 ustar 00root root 0000000 0000000 """DSM 6 datas."""
from .const_6_api_auth import (
DSM_6_AUTH_LOGIN,
DSM_6_AUTH_LOGIN_2SA,
DSM_6_AUTH_LOGIN_2SA_OTP,
)
from .const_6_api_info import DSM_6_API_INFO
from .core.const_6_core_security import (
DSM_6_CORE_SECURITY,
DSM_6_CORE_SECURITY_UPDATE_OUTOFDATE,
)
from .core.const_6_core_share import DSM_6_CORE_SHARE
from .core.const_6_core_system import (
DSM_6_CORE_SYSTEM_DS218_PLAY,
DSM_6_CORE_SYSTEM_DS918_PLUS,
)
from .core.const_6_core_upgrade import DSM_6_CORE_UPGRADE_FALSE, DSM_6_CORE_UPGRADE_TRUE
from .core.const_6_core_utilization import (
DSM_6_CORE_UTILIZATION,
DSM_6_CORE_UTILIZATION_ERROR_1055,
)
from .download_station.const_6_download_station_info import (
DSM_6_DOWNLOAD_STATION_INFO_CONFIG,
DSM_6_DOWNLOAD_STATION_INFO_INFO,
)
from .download_station.const_6_download_station_stat import (
DSM_6_DOWNLOAD_STATION_STAT_INFO,
)
from .download_station.const_6_download_station_task import (
DSM_6_DOWNLOAD_STATION_TASK_LIST,
)
from .dsm.const_6_dsm_info import DSM_6_DSM_INFORMATION
from .dsm.const_6_dsm_network import DSM_6_DSM_NETWORK_2LAN_1PPPOE
from .storage.const_6_storage_storage import (
DSM_6_STORAGE_STORAGE_DS213_PLUS_SHR1_2DISKS_2VOLS,
DSM_6_STORAGE_STORAGE_DS918_PLUS_RAID5_3DISKS_1VOL,
DSM_6_STORAGE_STORAGE_DS1515_PLUS_SHR2_10DISKS_1VOL_WITH_EXPANSION,
DSM_6_STORAGE_STORAGE_DS1819_PLUS_SHR2_8DISKS_1VOL,
)
from .surveillance_station.const_6_api_info import (
DSM_6_API_INFO as DSM_6_API_INFO_SURVEILLANCE_STATION,
)
from .surveillance_station.const_6_surveillance_station_camera import (
DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MD_PARAM_SAVE,
DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MOTION_ENUM,
DSM_6_SURVEILLANCE_STATION_CAMERA_GET_LIVE_VIEW_PATH,
DSM_6_SURVEILLANCE_STATION_CAMERA_LIST,
)
from .surveillance_station.const_6_surveillance_station_home_mode import (
DSM_6_SURVEILLANCE_STATION_HOME_MODE_GET_INFO,
DSM_6_SURVEILLANCE_STATION_HOME_MODE_SWITCH,
)
__all__ = [
"DSM_6_AUTH_LOGIN",
"DSM_6_AUTH_LOGIN_2SA",
"DSM_6_AUTH_LOGIN_2SA_OTP",
"DSM_6_API_INFO",
"DSM_6_CORE_SECURITY",
"DSM_6_CORE_SECURITY_UPDATE_OUTOFDATE",
"DSM_6_CORE_SHARE",
"DSM_6_CORE_SYSTEM_DS218_PLAY",
"DSM_6_CORE_SYSTEM_DS918_PLUS",
"DSM_6_CORE_UPGRADE_FALSE",
"DSM_6_CORE_UPGRADE_TRUE",
"DSM_6_CORE_UTILIZATION",
"DSM_6_CORE_UTILIZATION_ERROR_1055",
"DSM_6_DOWNLOAD_STATION_INFO_CONFIG",
"DSM_6_DOWNLOAD_STATION_INFO_INFO",
"DSM_6_DOWNLOAD_STATION_STAT_INFO",
"DSM_6_DOWNLOAD_STATION_TASK_LIST",
"DSM_6_DSM_INFORMATION",
"DSM_6_DSM_NETWORK_2LAN_1PPPOE",
"DSM_6_STORAGE_STORAGE_DS1515_PLUS_SHR2_10DISKS_1VOL_WITH_EXPANSION",
"DSM_6_STORAGE_STORAGE_DS1819_PLUS_SHR2_8DISKS_1VOL",
"DSM_6_STORAGE_STORAGE_DS213_PLUS_SHR1_2DISKS_2VOLS",
"DSM_6_STORAGE_STORAGE_DS918_PLUS_RAID5_3DISKS_1VOL",
"DSM_6_API_INFO_SURVEILLANCE_STATION",
"DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MD_PARAM_SAVE",
"DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MOTION_ENUM",
"DSM_6_SURVEILLANCE_STATION_CAMERA_GET_LIVE_VIEW_PATH",
"DSM_6_SURVEILLANCE_STATION_CAMERA_LIST",
"DSM_6_SURVEILLANCE_STATION_HOME_MODE_GET_INFO",
"DSM_6_SURVEILLANCE_STATION_HOME_MODE_SWITCH",
]
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/const_6_api_auth.py 0000664 0000000 0000000 00000001057 14762405272 0025034 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.API.Auth data."""
from tests.const import (
DEVICE_TOKEN,
ERROR_AUTH_OTP_NOT_SPECIFIED,
SESSION_ID,
SYNO_TOKEN,
)
DSM_6_AUTH_LOGIN = {
"data": {"is_portal_port": False, "sid": SESSION_ID, "synotoken": SYNO_TOKEN},
"success": True,
}
DSM_6_AUTH_LOGIN_2SA = ERROR_AUTH_OTP_NOT_SPECIFIED
DSM_6_AUTH_LOGIN_2SA_OTP = {
"data": {
"did": DEVICE_TOKEN,
"is_portal_port": False,
"sid": SESSION_ID,
"synotoken": SYNO_TOKEN,
},
"success": True,
}
DSM_6_AUTH_LOGOUT = {"success": True}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/const_6_api_info.py 0000664 0000000 0000000 00000300211 14762405272 0025020 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.API.Info data."""
DSM_6_API_INFO = {
"data": {
"SYNO.API.Auth": {"maxVersion": 6, "minVersion": 1, "path": "auth.cgi"},
"SYNO.API.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "encryption.cgi",
},
"SYNO.API.Info": {"maxVersion": 1, "minVersion": 1, "path": "query.cgi"},
"SYNO.API.OTP": {"maxVersion": 1, "minVersion": 1, "path": "otp.cgi"},
"SYNO.AudioPlayer": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioPlayer.Stream": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Backup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Restore": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.NetworkBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.TimeBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ACL": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.AccessControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.ReverseProxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.App": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.Rule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Cache": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.ServerInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CRT": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CSR": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CurrentConnection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.ExtIP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Provider": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Record": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Synology": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.TWNIC": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DSMNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect.Application": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Defs": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Initdata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.JSUIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.SessionData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.UIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Azure.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.ADHealthCheck": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.BaseDN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Login.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.WebSphere.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EventScheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.DefaultPermission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.BonjourSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Driver": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.OAuth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.EUnit": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.eSATA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.UPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EzInternet": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Factory.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Factory.Manutild": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.AFP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.ChrootUser": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.SFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.Security": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.AdvancedSetting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.IDMap": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.Kerberos": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.SharePrivilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ReflinkCopy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.Rsync.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ServiceDiscovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ServiceDiscovery.WSTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Findhost": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.ExtraAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.Member": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.ValidLocalAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.GroupSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.BeepControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.DCOutput": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.DCOutput.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.FanSpeed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Hibernation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.LCM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Led.Brightness": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.MemoryLayout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.NeedReboot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerRecovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerSchedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.SpectreMeltdown": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.VideoTranscoding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.ZRAM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Help": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.LUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Lunbkp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Replication": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.VLUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.IndexFolder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.MediaConverter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.MobileEnabled": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.ThumbnailQuality": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Authentication": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Authentication.Cert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bond": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bridge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.ClientList": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.PXE": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.Reservation": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.Vendor": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.WPAD": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Ethernet": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router.Prefix": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6Tunnel": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Interface": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.LocalBridge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.MACClone": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.OVS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE.Relay": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.ConnectionList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.CountryCode": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.DMZ": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Gateway.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.LocalLan": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.MacFilter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.ParentalControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.PkgList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.PortForward": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Static.Route": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Topology": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.RouterRules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.UPnPServer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.USBModem": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.L2TP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPNWithConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPNWithConf.Certs": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.PPTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.WOL": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.Hotspot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.WPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.NormalUser": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.NormalUser.LoginNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.CustomizedData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.FilterSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.Variables": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.WarningPercentage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Auth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.AuthToken": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mobile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Provider": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OAuth.Scope": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OAuth.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Admin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.EnforcePolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Control": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.FakeIFrame": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Feed.Keyring": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.MyDS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.MyDS.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Screenshot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Screenshot.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting.Update": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Thumb": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Uninstallation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Event": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.android": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.iOS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.windows": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PhotoViewer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Polling.Data": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Compatibility": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.UserDataCollector": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Upnp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickStart.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickStart.Install": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Quota": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.Language": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.DateTimeFormat": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.History": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Redirect": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Util": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SNMP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Embed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DoS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Adapter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Geoip": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Profile.Apply": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.VPNPassthrough": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.VPNPassthrough.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Operation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.PortInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.CryptoFile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.AutoKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.MachineKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.Store": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Snapshot": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Initdata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Session": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Trusted": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Untrusted": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Disk": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSILUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSITargets": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSIUtils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Form": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Synohdpack": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.FileTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.PersonalActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Setting.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Process": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ProcessGroup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ResetButton": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Utilization": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TaskScheduler": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Terminal": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.AppPortalLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Desktop": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.FileSharingLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TrustDevice": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Tuned": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UISearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.AutoUpgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Patch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.PreCheck": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Setting": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Home": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordConfirm": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordExpiry": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordMeter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordPolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UserSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Virtualization.Host.Capability": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM.External": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.Security.HTTPCompression": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.Security.TLSProfile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node.Credential": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node.Session": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.FindMe": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Info": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Network": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.PortEnable": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.PushNotification": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Retention": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Container": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Container.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Container.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Container.Resource": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM.Network.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM.Restore": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.DDSM.Update": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.License": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Docker.Registry": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/btsearch.cgi",
},
"SYNO.DownloadStation.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "DownloadStation/info.cgi",
},
"SYNO.DownloadStation.RSS.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/RSSfeed.cgi",
},
"SYNO.DownloadStation.RSS.Site": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/RSSsite.cgi",
},
"SYNO.DownloadStation.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/schedule.cgi",
},
"SYNO.DownloadStation.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/statistic.cgi",
},
"SYNO.DownloadStation.Task": {
"maxVersion": 3,
"minVersion": 1,
"path": "DownloadStation/task.cgi",
},
"SYNO.DownloadStation2.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Captcha": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Package.Info": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Package.Module": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Package.Service": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.RSS.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.RSS.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.RSS.Item": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.BT": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Emule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Emule.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.FileHosting": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.FtpHttp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Global": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Nzb": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Rss": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Scheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.Peer": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.Tracker": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.List.Polling": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.NZB.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.NZB.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.Source": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.eMule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Thumbnail": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.eMule.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.eMule.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request.Polling": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.BackgroundTask": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CheckExist": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CheckPermission": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Compress": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CopyMove": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CreateFolder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Delete": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.DirSize": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.External.GoogleDrive": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Extract": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Favorite": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.FormUpload": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.MD5": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Mount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Mount.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.ACLOwner": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.CompressSize": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.Mtime": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Rename": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Search": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Search.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Sharing": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Sharing.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Snapshot": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Thumb": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.UIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Upload": {
"maxVersion": 3,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.UserGrp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.GDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VirtualFolder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.AppIndexing.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Bookmark": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.SearchHistory": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.Spotlight": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File.Cover": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Folder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Highlight": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Indicate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Preference": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.UserGrp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.Thumb": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.License.HA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Client.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.RecvRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Setting.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Common": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Contacts": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.EventRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client.Job": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server.Pair": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Checklist": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Checklist.Alert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.LoginActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Report.HTML": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Snap.Usage.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Check": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.DualEnclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Enclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Flashcache": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.HddMan": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Smart": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Smart.Scheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Spare": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Spare.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VideoPlayer.Subtitle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VideoPlayer.SynologyDrive.Subtitle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/ 0000775 0000000 0000000 00000000000 14762405272 0022162 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/__init__.py 0000664 0000000 0000000 00000000037 14762405272 0024273 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Core.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/const_6_core_security.py 0000664 0000000 0000000 00000013667 14762405272 0027063 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Core.SecurityScan.Status data."""
DSM_6_CORE_SECURITY = {
"data": {
"items": {
"malware": {
"category": "malware",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 3,
"waitNum": 0,
},
"network": {
"category": "network",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 4,
"waitNum": 0,
},
"securitySetting": {
"category": "securitySetting",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 0,
"waitNum": 0,
},
"systemCheck": {
"category": "systemCheck",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 6,
"waitNum": 0,
},
"update": {
"category": "update",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 4,
"waitNum": 0,
},
"userInfo": {
"category": "userInfo",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 6,
"waitNum": 0,
},
},
"lastScanTime": "1588298442",
"startTime": "",
"success": True,
"sysProgress": 100,
"sysStatus": "safe",
},
"success": True,
}
DSM_6_CORE_SECURITY_UPDATE_OUTOFDATE = {
"data": {
"items": {
"malware": {
"category": "malware",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 3,
"waitNum": 0,
},
"network": {
"category": "network",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 4,
"waitNum": 0,
},
"securitySetting": {
"category": "securitySetting",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 0,
"waitNum": 0,
},
"systemCheck": {
"category": "systemCheck",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 6,
"waitNum": 0,
},
"update": {
"category": "update",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 1,
"risk": 0,
"warning": 0,
},
"failSeverity": "outOfDate",
"progress": 100,
"runningItem": "",
"total": 4,
"waitNum": 0,
},
"userInfo": {
"category": "userInfo",
"fail": {
"danger": 0,
"info": 0,
"outOfDate": 0,
"risk": 0,
"warning": 0,
},
"failSeverity": "safe",
"progress": 100,
"runningItem": "",
"total": 6,
"waitNum": 0,
},
},
"lastScanTime": "1590717640",
"startTime": "",
"success": True,
"sysProgress": 100,
"sysStatus": "outOfDate",
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/const_6_core_share.py 0000664 0000000 0000000 00000013761 14762405272 0026311 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Core.Share data."""
DSM_6_CORE_SHARE = {
"data": {
"shares": [
{
"desc": "Docker Containers",
"enable_recycle_bin": False,
"enable_share_compress": False,
"enable_share_cow": True,
"enc_auto_mount": False,
"encryption": 0,
"force_readonly_reason": "",
"hidden": True,
"is_aclmode": True,
"is_block_snap_action": False,
"is_cluster_share": False,
"is_cold_storage_share": False,
"is_exfat_share": False,
"is_force_readonly": False,
"is_share_moving": False,
"is_support_acl": True,
"is_sync_share": False,
"is_usb_share": False,
"name": "docker",
"quota_value": 0,
"recycle_bin_admin_only": False,
"share_quota_used": 0,
"support_action": 511,
"support_snapshot": True,
"task_id": "",
"unite_permission": False,
"uuid": "78egut02-b5b1-4933-adt8-a9208526d234",
"vol_path": "/volume1",
},
{
"desc": "",
"enable_recycle_bin": True,
"enable_share_compress": False,
"enable_share_cow": True,
"enc_auto_mount": False,
"encryption": 0,
"force_readonly_reason": "",
"hidden": False,
"is_aclmode": True,
"is_block_snap_action": False,
"is_cluster_share": False,
"is_cold_storage_share": False,
"is_exfat_share": False,
"is_force_readonly": False,
"is_share_moving": False,
"is_support_acl": True,
"is_sync_share": False,
"is_usb_share": False,
"name": "test_share",
"quota_value": 0,
"recycle_bin_admin_only": False,
"share_quota_used": 36146658672640.0,
"support_action": 511,
"support_snapshot": True,
"task_id": "",
"unite_permission": False,
"uuid": "2ee6c06a-8766-48b5-013d-63b18652a393",
"vol_path": "/volume1",
},
{
"desc": "user home",
"enable_recycle_bin": False,
"enable_share_compress": False,
"enable_share_cow": True,
"enc_auto_mount": False,
"encryption": 0,
"force_readonly_reason": "",
"hidden": False,
"is_aclmode": True,
"is_block_snap_action": False,
"is_cluster_share": False,
"is_cold_storage_share": False,
"is_exfat_share": False,
"is_force_readonly": False,
"is_share_moving": False,
"is_support_acl": True,
"is_sync_share": False,
"is_usb_share": False,
"name": "homes",
"quota_value": 0,
"recycle_bin_admin_only": False,
"share_quota_used": 0.015625,
"support_action": 511,
"support_snapshot": True,
"task_id": "",
"unite_permission": False,
"uuid": "2b829t90-9512-4236-qqe0-d4133e9992d0",
"vol_path": "/volume1",
},
{
"desc": "Log volume",
"enable_recycle_bin": True,
"enable_share_compress": True,
"enable_share_cow": True,
"enc_auto_mount": True,
"encryption": 0,
"force_readonly_reason": "",
"hidden": True,
"is_aclmode": True,
"is_block_snap_action": False,
"is_cluster_share": False,
"is_cold_storage_share": False,
"is_exfat_share": False,
"is_force_readonly": False,
"is_share_moving": False,
"is_support_acl": True,
"is_sync_share": False,
"is_usb_share": False,
"name": "logs",
"quota_value": 0,
"recycle_bin_admin_only": True,
"share_quota_used": 947.28515625,
"support_action": 511,
"support_snapshot": True,
"task_id": "",
"unite_permission": False,
"uuid": "b9876507-6880-4wes-8d61-6c984c0813ty",
"vol_path": "/volume2",
},
{
"desc": "VMs",
"enable_recycle_bin": False,
"enable_share_compress": False,
"enable_share_cow": True,
"enc_auto_mount": False,
"encryption": 0,
"force_readonly_reason": "",
"hidden": False,
"is_aclmode": True,
"is_block_snap_action": False,
"is_cluster_share": False,
"is_cold_storage_share": False,
"is_exfat_share": False,
"is_force_readonly": False,
"is_share_moving": False,
"is_support_acl": True,
"is_sync_share": False,
"is_usb_share": False,
"name": "Virtual_Machines",
"quota_value": 0,
"recycle_bin_admin_only": False,
"share_quota_used": 33911668,
"support_action": 511,
"support_snapshot": True,
"task_id": "",
"unite_permission": False,
"uuid": "5416f693-04tt-4re2-b8e4-f6b18731689b",
"vol_path": "/volume3",
},
],
"total": 5,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/const_6_core_system.py 0000664 0000000 0000000 00000006354 14762405272 0026533 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Core.System data."""
DSM_6_CORE_SYSTEM_DS918_PLUS = {
"data": {
"cpu_clock_speed": 1500,
"cpu_cores": "4",
"cpu_family": "Celeron",
"cpu_series": "J3455",
"cpu_vendor": "INTEL",
"enabled_ntp": True,
"firmware_date": "2020/07/08",
"firmware_ver": "DSM 6.2.3-25426 Update 2",
"model": "DS918+",
"ntp_server": "time.google.com",
"ram_size": 4096,
"sata_dev": [],
"serial": "1920PDN001501",
"support_esata": "yes",
"sys_temp": 40,
"sys_tempwarn": False,
"systempwarn": False,
"temperature_warning": False,
"time": "2020-10-19 23:33:52",
"time_zone": "Brussels",
"time_zone_desc": "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris",
"up_time": "75:12:9",
"usb_dev": [
{
"cls": "hub",
"pid": "0612",
"producer": "Genesys Logic, Inc.",
"product": "Hub",
"rev": "92.23",
"vid": "05e3",
},
{
"cls": "other",
"pid": "1790",
"producer": "ASIX Electronics Corp.",
"product": "AX88179 Gigabit Ethernet",
"rev": "1.00",
"vid": "0b95",
},
{
"cls": "hub",
"pid": "0610",
"producer": "Genesys Logic, Inc.",
"product": "4-port hub",
"rev": "92.23",
"vid": "05e3",
},
{
"cls": "other",
"pid": "0200",
"producer": "Sigma Designs, Inc.",
"product": "Aeotec Z-Stick Gen5 (ZW090) - UZB",
"rev": "0.00",
"vid": "0658",
},
{
"cls": "ups",
"pid": "0002",
"producer": "American Power Conversion",
"product": "Uninterruptible Power Supply",
"rev": "1.06",
"vid": "051d",
},
],
},
"success": True,
}
DSM_6_CORE_SYSTEM_DS218_PLAY = {
"data": {
"cpu_clock_speed": 1400,
"cpu_cores": "4",
"cpu_family": "RTD1296",
"cpu_series": "SoC",
"cpu_vendor": "Realtek",
"enabled_ntp": True,
"firmware_date": "2020/07/14",
"firmware_ver": "DSM 6.2.3-25426 Update 2",
"model": "DS218play",
"ntp_server": "pool.ntp.org",
"ram_size": 1024,
"serial": "123456abcdefg",
"support_esata": "no",
"sys_temp": 40,
"sys_tempwarn": False,
"systempwarn": False,
"temperature_warning": False,
"time": "2020-10-16 20:26:58",
"time_zone": "Amsterdam",
"time_zone_desc": "(GMT+01:00) Amsterdam, Berlin, Rome, Stockholm, Vienna",
"up_time": "289:31:54",
"usb_dev": [
{
"cls": "disk",
"pid": "2621",
"producer": "Western Digital Technologies, Inc.",
"product": "Elements 2621",
"rev": "10.26",
"vid": "1058",
}
],
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/const_6_core_upgrade.py 0000664 0000000 0000000 00000001163 14762405272 0026627 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Core.Upgrade data."""
DSM_6_CORE_UPGRADE_FALSE = {"data": {"update": {"available": False}}, "success": True}
DSM_6_CORE_UPGRADE_TRUE = {
"data": {
"update": {
"available": True,
"reboot": "now",
"restart": "some",
"type": "nano",
"version": "DSM 6.2.3-25426 Update 2",
"version_details": {
"buildnumber": 25426,
"major": 6,
"micro": 3,
"minor": 2,
"nano": 2,
"os_name": "DSM",
},
}
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/core/const_6_core_utilization.py 0000664 0000000 0000000 00000006367 14762405272 0027566 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Core.System.Utilization data."""
DSM_6_CORE_UTILIZATION_ERROR_1055 = {
"error": {
"code": 1055,
"errors": {
"err_key": "",
"err_line": 883,
"err_msg": "Transmition failed.",
"err_session": "",
},
},
"success": False,
}
DSM_6_CORE_UTILIZATION = {
"data": {
"cpu": {
"15min_load": 51,
"1min_load": 37,
"5min_load": 33,
"device": "System",
"other_load": 3,
"system_load": 2,
"user_load": 4,
},
"disk": {
"disk": [
{
"device": "sdc",
"display_name": "Drive 3",
"read_access": 3,
"read_byte": 55261,
"type": "internal",
"utilization": 12,
"write_access": 15,
"write_byte": 419425,
},
{
"device": "sda",
"display_name": "Drive 1",
"read_access": 3,
"read_byte": 63905,
"type": "internal",
"utilization": 8,
"write_access": 14,
"write_byte": 414795,
},
{
"device": "sdb",
"display_name": "Drive 2",
"read_access": 3,
"read_byte": 55891,
"type": "internal",
"utilization": 10,
"write_access": 15,
"write_byte": 415658,
},
],
"total": {
"device": "total",
"read_access": 9,
"read_byte": 175057,
"utilization": 10,
"write_access": 44,
"write_byte": 1249878,
},
},
"lun": [],
"memory": {
"avail_real": 156188,
"avail_swap": 4146316,
"buffer": 15172,
"cached": 2764756,
"device": "Memory",
"memory_size": 4194304,
"real_usage": 24,
"si_disk": 0,
"so_disk": 0,
"swap_usage": 6,
"total_real": 3867268,
"total_swap": 4415404,
},
"network": [
{"device": "total", "rx": 109549, "tx": 45097},
{"device": "eth0", "rx": 109549, "tx": 45097},
{"device": "eth1", "rx": 0, "tx": 0},
],
"space": {
"total": {
"device": "total",
"read_access": 1,
"read_byte": 27603,
"utilization": 1,
"write_access": 23,
"write_byte": 132496,
},
"volume": [
{
"device": "md2",
"display_name": "volume1",
"read_access": 1,
"read_byte": 27603,
"utilization": 1,
"write_access": 23,
"write_byte": 132496,
}
],
},
"time": 1585503221,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/download_station/ 0000775 0000000 0000000 00000000000 14762405272 0024602 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/download_station/__init__.py 0000664 0000000 0000000 00000000052 14762405272 0026710 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DownloadStation.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/download_station/const_6_download_station_info.py 0000664 0000000 0000000 00000001210 14762405272 0033164 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DownloadStation.Info data."""
DSM_6_DOWNLOAD_STATION_INFO_INFO = {
"data": {"is_manager": True, "version": 3543, "version_string": "3.8-3543"},
"success": True,
}
DSM_6_DOWNLOAD_STATION_INFO_CONFIG = {
"data": {
"bt_max_download": 0,
"bt_max_upload": 800,
"default_destination": "downloads",
"emule_default_destination": None,
"emule_enabled": False,
"emule_max_download": 0,
"emule_max_upload": 20,
"ftp_max_download": 0,
"http_max_download": 0,
"nzb_max_download": 0,
"unzip_service_enabled": False,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/download_station/const_6_download_station_stat.py 0000664 0000000 0000000 00000000253 14762405272 0033212 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DownloadStation.Statistic data."""
DSM_6_DOWNLOAD_STATION_STAT_INFO = {
"data": {"speed_download": 89950232, "speed_upload": 0},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/download_station/const_6_download_station_task.py 0000664 0000000 0000000 00000030015 14762405272 0033200 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DownloadStation.Task data."""
DSM_6_DOWNLOAD_STATION_TASK_LIST = {
"data": {
"offset": 0,
"tasks": [
{
"additional": {
"detail": {
"completed_time": 0,
"connected_leechers": 0,
"connected_peers": 0,
"connected_seeders": 0,
"create_time": 1550089068,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 1592549339,
"total_peers": 0,
"total_pieces": 1239,
"unzip_password": "",
"uri": "magnet:?xt=urn:btih:1234ABCD1234ABCD1234ABCD1234ABCD1234ABCD&dn=1234",
"waiting_seconds": 0,
},
"file": [
{
"filename": "INFO.nfo",
"index": 0,
"priority": "low",
"size": 1335,
"size_downloaded": 0,
"wanted": True,
},
{
"filename": "My super movie 2 2022.mkv",
"index": 1,
"priority": "normal",
"size": 1591087515,
"size_downloaded": 0,
"wanted": True,
},
{
"filename": "My super movie 2 sample.mkv",
"index": 2,
"priority": "normal",
"size": 2754524,
"size_downloaded": 0,
"wanted": False,
},
{
"filename": "My super movie 2021.mkv",
"index": 3,
"priority": "normal",
"size": 1155085341,
"size_downloaded": 0,
"wanted": True,
},
{
"filename": "My super movie 2021 sample.mkv",
"index": 4,
"priority": "normal",
"size": 4359701,
"size_downloaded": 0,
"wanted": False,
},
{
"filename": "My super movie 3 2023.mkv",
"index": 5,
"priority": "normal",
"size": 1288819263,
"size_downloaded": 0,
"wanted": True,
},
{
"filename": "My super movie 3 sample.mkv",
"index": 6,
"priority": "normal",
"size": 3077684,
"size_downloaded": 0,
"wanted": False,
},
{
"filename": "My super movie 4 2031.mkv",
"index": 7,
"priority": "normal",
"size": 1149397942,
"size_downloaded": 0,
"wanted": True,
},
{
"filename": "My super movie 4 sample.mkv",
"index": 8,
"priority": "normal",
"size": 2023179,
"size_downloaded": 0,
"wanted": False,
},
],
},
"id": "dbid_86",
"size": 5196586484,
"status": "downloading",
"title": "My super movie Complete 2021-2031",
"type": "bt",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 0,
"connected_leechers": 0,
"connected_peers": 0,
"connected_seeders": 0,
"create_time": 1551214114,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 1592549348,
"total_peers": 0,
"total_pieces": 948,
"unzip_password": "",
"uri": "magnet:?xt=urn:btih:1234ABCD1234ABCD1234ABCD1234ABCD1234ABCD&dn=1234",
"waiting_seconds": 0,
},
"file": [
{
"filename": "Blade Swipper 1984.mkv",
"index": 0,
"priority": "normal",
"size": 1986298376,
"size_downloaded": 1602519560,
"wanted": True,
}
],
},
"id": "dbid_164",
"size": 1986298376,
"status": "downloading",
"title": "Blade Swipper 1984.mkv",
"type": "bt",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 0,
"connected_leechers": 0,
"connected_peers": 50,
"connected_seeders": 50,
"create_time": 1585435581,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 1592549349,
"total_peers": 0,
"total_pieces": 0,
"unzip_password": "",
"uri": "magnet:?xt=urn:btih:1234ABCD1234ABCD1234ABCD1234ABCD1234ABCD&dn=1234",
"waiting_seconds": 0,
},
"file": [],
},
"id": "dbid_486",
"size": 0,
"status": "downloading",
"title": "The falling State",
"type": "bt",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 0,
"connected_leechers": 0,
"connected_peers": 1,
"connected_seeders": 1,
"create_time": 1591562665,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 1591563597,
"total_peers": 0,
"total_pieces": 1494,
"unzip_password": "",
"uri": "magnet:?xt=urn:btih:1234ABCD1234ABCD1234ABCD1234ABCD1234ABCD&dn=1234",
"waiting_seconds": 0,
}
},
"id": "dbid_518",
"size": 391580448,
"status": "paused",
"title": "Welcome to the North.mkv",
"type": "bt",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 1591565351,
"connected_leechers": 0,
"connected_peers": 0,
"connected_seeders": 0,
"create_time": 1591563606,
"destination": "Folder/containing/downloads",
"seedelapsed": 172800,
"started_time": 1592601577,
"total_peers": 0,
"total_pieces": 5466,
"unzip_password": "",
"uri": "magnet:?xt=urn:btih:1234ABCD1234ABCD1234ABCD1234ABCD1234ABCD&dn=1234",
"waiting_seconds": 0,
}
},
"id": "dbid_522",
"size": 5731285821,
"status": "finished",
"title": "Birds of Pokémon.mkv",
"type": "bt",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 1591566799,
"connected_leechers": 0,
"connected_peers": 0,
"connected_seeders": 0,
"create_time": 1591566523,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 1591566696,
"total_peers": 0,
"total_pieces": 0,
"unzip_password": "",
"uri": "https://1fichier.com/?1234ABCD1234ABCD1234&af=22123",
"waiting_seconds": 0,
}
},
"id": "dbid_531",
"size": 2811892495,
"status": "finished",
"title": "1234ABCD1234ABCD1234",
"type": "https",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 0,
"connected_leechers": 0,
"connected_peers": 0,
"connected_seeders": 0,
"create_time": 1591566903,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 0,
"total_peers": 0,
"total_pieces": 0,
"unzip_password": "",
"uri": "https://1fichier.com/?123ABC123ABC123ABC12",
"waiting_seconds": 0,
}
},
"id": "dbid_533",
"size": 0,
"status": "error",
"status_extra": {"error_detail": "unknown"},
"title": "?123ABC123ABC123ABC12",
"type": "https",
"username": "Test_useR",
},
{
"additional": {
"detail": {
"completed_time": 0,
"connected_leechers": 0,
"connected_peers": 0,
"connected_seeders": 0,
"create_time": 1592605687,
"destination": "Folder/containing/downloads",
"seedelapsed": 0,
"started_time": 1592605731,
"total_peers": 0,
"total_pieces": 0,
"unzip_password": "",
"uri": "https://1fichier.com/?123ABC123ABC123ABC12",
"waiting_seconds": 0,
}
},
"id": "dbid_549",
"size": 0,
"status": "error",
"status_extra": {"error_detail": "broken_link"},
"title": "123ABC123ABC123ABC12",
"type": "https",
"username": "Test_useR",
},
],
"total": 8,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/dsm/ 0000775 0000000 0000000 00000000000 14762405272 0022015 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/dsm/__init__.py 0000664 0000000 0000000 00000000036 14762405272 0024125 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DSM.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/dsm/const_6_dsm_info.py 0000664 0000000 0000000 00000001604 14762405272 0025621 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DSM.Info data."""
DSM_6_DSM_INFORMATION_DS213_PLUS = {
"data": {
"codepage": "enu",
"model": "DS213+",
"ram": 512,
"serial": "XXXXXXXXXXX",
"temperature": 30,
"temperature_warn": False,
"time": "Thu Apr 30 14:57:35 2020",
"uptime": 3258607,
"version": "24922",
"version_string": "DSM 6.2.2-24922 Update 4",
},
"success": True,
}
DSM_6_DSM_INFORMATION_DS918_PLUS = {
"data": {
"codepage": "fre",
"model": "DS918+",
"ram": 4096,
"serial": "1920PDN001501",
"temperature": 40,
"temperature_warn": False,
"time": "Sun Mar 29 19:33:41 2020",
"uptime": 155084,
"version": "24922",
"version_string": "DSM 6.2.2-24922 Update 4",
},
"success": True,
}
DSM_6_DSM_INFORMATION = DSM_6_DSM_INFORMATION_DS918_PLUS
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/dsm/const_6_dsm_network.py 0000664 0000000 0000000 00000005541 14762405272 0026363 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.DSM.Network data."""
DSM_6_DSM_NETWORK_1LAN = {
"data": {
"dns": ["192.168.0.35"],
"gateway": "192.168.0.254",
"hostname": "NAS_[NAME]",
"interfaces": [
{
"id": "eth0",
"ip": [{"address": "192.168.0.35", "netmask": "255.255.255.0"}],
"ipv6": [
{
"address": "2a01:e35:2434:d420:211:32ff:fea6:ca59",
"prefix_length": 64,
"scope": "global",
},
{
"address": "fe80::211:32ff:fea6:ca59",
"prefix_length": 64,
"scope": "link",
},
],
"mac": "00-11-32-XX-XX-59",
"type": "lan",
},
{
"id": "eth1",
"ip": [{"address": "169.254.158.209", "netmask": "255.255.0.0"}],
"mac": "00-11-32-XX-XX-5A",
"type": "lan",
},
],
"workgroup": "WORKGROUP",
},
"success": True,
}
DSM_6_DSM_NETWORK_2LAN_1PPPOE = {
"data": {
"dns": ["192.168.0.35"],
"gateway": "192.168.0.254",
"hostname": "NAS_[NAME]",
"interfaces": [
{
"id": "eth0",
"ip": [{"address": "192.168.5.10", "netmask": "255.255.255.0"}],
"ipv6": [
{
"address": "2001:b211:317c:147e:211:32ff:fe5d:fd11",
"prefix_length": 64,
"scope": "global",
},
{
"address": "fe80::211:32ff:fe5d:fd11",
"prefix_length": 64,
"scope": "link",
},
],
"mac": "00-11-32-XX-XX-11",
"type": "lan",
},
{
"id": "eth1",
"ip": [{"address": "192.168.1.100", "netmask": "255.255.255.0"}],
"ipv6": [
{
"address": "2001:b011:300c:176c:211:11ff:fe5d:fd12",
"prefix_length": 64,
"scope": "global",
},
{
"address": "fe80::211:31ff:ff5d:fd12",
"prefix_length": 64,
"scope": "link",
},
],
"mac": "00-11-32-XX-XX-12",
"type": "lan",
},
{
"id": "ppp0",
"ip": [{"address": "114.45.2.158", "netmask": "255.255.255.255"}],
"type": "pppoe",
},
],
"workgroup": "WORKGROUP",
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/storage/ 0000775 0000000 0000000 00000000000 14762405272 0022676 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/storage/__init__.py 0000664 0000000 0000000 00000000042 14762405272 0025003 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Storage.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/storage/const_6_storage_storage.py 0000664 0000000 0000000 00000243577 14762405272 0030115 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.Storage.CGI.Storage data."""
from tests.const import UNIQUE_KEY
DSM_6_STORAGE_STORAGE_DS1819_PLUS_SHR2_8DISKS_1VOL = {
"data": {
"disks": [
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sda",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 0,
"exceed_bad_sector_thr": False,
"firm": "81.00A81",
"has_system": True,
"id": "sda",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 1",
"model": "WD80EFAX-68KNBN0 ",
"name": "Drive 1",
"num_id": 1,
"order": 1,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "VAHG7V1L",
"size_total": "8001563222016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 39,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdb",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 0,
"exceed_bad_sector_thr": False,
"firm": "81.00A81",
"has_system": True,
"id": "sdb",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 2",
"model": "WD80EFAX-68KNBN0 ",
"name": "Drive 2",
"num_id": 2,
"order": 2,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "VAHGLLPL",
"size_total": "8001563222016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 40,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdc",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 0,
"exceed_bad_sector_thr": False,
"firm": "81.00A81",
"has_system": True,
"id": "sdc",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 3",
"model": "WD80EFAX-68KNBN0 ",
"name": "Drive 3",
"num_id": 3,
"order": 3,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "VAHH38AL",
"size_total": "8001563222016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 40,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdd",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 0,
"exceed_bad_sector_thr": False,
"firm": "81.00A81",
"has_system": True,
"id": "sdd",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 4",
"model": "WD80EFAX-68KNBN0 ",
"name": "Drive 4",
"num_id": 4,
"order": 4,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "VAHGW7VL",
"size_total": "8001563222016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 41,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sde",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 0,
"exceed_bad_sector_thr": False,
"firm": "GX2M",
"has_system": True,
"id": "sde",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 5",
"model": "HDWN180 ",
"name": "Drive 5",
"num_id": 5,
"order": 5,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "399CK0FUFAVG",
"size_total": "8001563222016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 36,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "TOSHIBA ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdf",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 0,
"exceed_bad_sector_thr": False,
"firm": "GX2M",
"has_system": True,
"id": "sdf",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 6",
"model": "HDWN180 ",
"name": "Drive 6",
"num_id": 6,
"order": 6,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "399CK0G0FAVG",
"size_total": "8001563222016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 36,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "TOSHIBA ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdg",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 510,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sdg",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 7",
"model": "WD40EFRX-68WT0N0 ",
"name": "Drive 7",
"num_id": 7,
"order": 7,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC4E7PD98ZY",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 33,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1819+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdh",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 488,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sdh",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 8",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 8",
"num_id": 8,
"order": 8,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K3FP148E",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 31,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
],
"env": {
"batchtask": {"max_task": 64, "remain_task": 64},
"bay_number": "8",
"data_scrubbing": {"sche_enabled": "0", "sche_status": "disabled"},
"ebox": [],
"fs_acting": False,
"isSyncSysPartition": False,
"is_space_actioning": False,
"isns": {"address": "", "enabled": False},
"isns_server": "",
"max_fs_bytes": "118747255799808",
"max_fs_bytes_high_end": "219902325555200",
"model_name": "DS1819+",
"ram_enough_for_fs_high_end": False,
"ram_size": 16,
"ram_size_required": 32,
"showpooltab": True,
"status": {"system_crashed": False, "system_need_repair": False},
"support": {"ebox": True, "raid_cross": True, "sysdef": True},
"support_fit_fs_limit": True,
"unique_key": UNIQUE_KEY,
"volume_full_critical": 0.1,
"volume_full_warning": 0.2,
},
"hotSpareConf": {"cross_repair": True, "disable_repair": []},
"hotSpares": [],
"iscsiLuns": [],
"iscsiTargets": [],
"ports": [],
"ssdCaches": [],
"storagePools": [
{
"cacheStatus": "",
"can_do": {
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"raid_cross": True,
},
"container": "internal",
"desc": "SHR-2",
"device_type": "shr_with_2_disk_protect",
"disk_failure_number": 0,
"disks": ["sda", "sdb", "sdc", "sdd", "sde", "sdf", "sdg", "sdh"],
"drive_type": 0,
"id": "reuse_1",
"is_actioning": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 0,
"limited_disk_number": 24,
"maximal_disk_size": "0",
"minimal_disk_size": "8001457274880",
"next_schedule_time": 0,
"num_id": 1,
"pool_child": [{"id": "volume_1", "size": {"total": "39978088267776"}}],
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "multiple",
"raids": [
{
"designedDiskCount": 6,
"devices": [
{"id": "sdf", "slot": 5, "status": "normal"},
{"id": "sde", "slot": 4, "status": "normal"},
{"id": "sdd", "slot": 3, "status": "normal"},
{"id": "sdc", "slot": 2, "status": "normal"},
{"id": "sdb", "slot": 1, "status": "normal"},
{"id": "sda", "slot": 0, "status": "normal"},
],
"hasParity": True,
"minDevSize": "8001457274880",
"normalDevCount": 6,
"raidPath": "/dev/md3",
"raidStatus": 1,
"spares": [],
},
{
"designedDiskCount": 8,
"devices": [
{"id": "sdh", "slot": 7, "status": "normal"},
{"id": "sdg", "slot": 6, "status": "normal"},
{"id": "sdf", "slot": 5, "status": "normal"},
{"id": "sde", "slot": 4, "status": "normal"},
{"id": "sdd", "slot": 3, "status": "normal"},
{"id": "sdc", "slot": 2, "status": "normal"},
{"id": "sdb", "slot": 1, "status": "normal"},
{"id": "sda", "slot": 0, "status": "normal"},
],
"hasParity": True,
"minDevSize": "8001457274880",
"normalDevCount": 8,
"raidPath": "/dev/md2",
"raidStatus": 1,
"spares": [],
},
],
"scrubbingStatus": "has_not_run_yet",
"size": {"total": "39978100850688", "used": "39978100850688"},
"space_path": "/dev/vg1",
"spares": [],
"status": "normal",
"suggestions": [],
"timebackup": False,
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": False,
"errCode": 768,
"stopService": False,
},
"remove": {
"can_do": False,
"errCode": 768,
"stopService": False,
},
"resize": {
"can_do": False,
"errCode": 768,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
}
],
"volumes": [
{
"atime_checked": False,
"atime_opt": "relatime",
"cacheStatus": "",
"can_do": {"delete": True, "raid_cross": True},
"container": "internal",
"desc": "Located on Storage Pool 1, SHR",
"device_type": "shr_with_2_disk_protect",
"disk_failure_number": 0,
"disks": [],
"drive_type": 0,
"eppool_used": "0",
"exist_alive_vdsm": False,
"fs_type": "btrfs",
"id": "volume_1",
"is_acting": False,
"is_actioning": False,
"is_inode_full": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 0,
"limited_disk_number": 24,
"max_fs_size": "1152921504606846976",
"next_schedule_time": 0,
"num_id": 1,
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "multiple",
"scrubbingStatus": "",
"size": {
"free_inode": "0",
"total": "38378964738048",
"total_device": "39978088267776",
"total_inode": "0",
"used": "26724878606336",
},
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [],
"timebackup": False,
"used_by_gluster": False,
"vol_path": "/volume1",
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {"can_do": True, "errCode": 0, "stopService": True},
"remove": {"can_do": True, "errCode": 0, "stopService": False},
"resize": {"can_do": True, "errCode": 0, "stopService": False},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
}
],
},
"success": True,
}
DSM_6_STORAGE_STORAGE_DS1515_PLUS_SHR2_10DISKS_1VOL_WITH_EXPANSION = {
"data": {
"disks": [
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1515+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sda",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 510,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sda",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 1",
"model": "WD40EFRX-68WT0N0 ",
"name": "Drive 1",
"num_id": 1,
"order": 1,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC4E2JL3SNU",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 33,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1515+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdb",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 490,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sdb",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 2",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 2",
"num_id": 2,
"order": 2,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K0NAV92K",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 30,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1515+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdc",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 510,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sdc",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 3",
"model": "WD40EFRX-68WT0N0 ",
"name": "Drive 3",
"num_id": 3,
"order": 3,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC4E4NTR3PK",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 31,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1515+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdd",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 510,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sdd",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 4",
"model": "WD40EFRX-68WT0N0 ",
"name": "Drive 4",
"num_id": 4,
"order": 4,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC4E2CDEDH1",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 32,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS1515+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sde",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 510,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": True,
"id": "sde",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 5",
"model": "WD40EFRX-68WT0N0 ",
"name": "Drive 5",
"num_id": 5,
"order": 5,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC4E2HAC6NK",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 30,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 1,
"str": "DX513-1",
"supportPwrBtnDisable": True,
"type": "ebox",
},
"device": "/dev/sdga",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 492,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": False,
"id": "sdga",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 1 (DX513-1)",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 1 (DX513-1)",
"num_id": 1,
"order": 1,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K1UZSF9D",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 33,
"testing_progress": "",
"testing_type": "",
"tray_status": "",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 1,
"str": "DX513-1",
"supportPwrBtnDisable": True,
"type": "ebox",
},
"device": "/dev/sdgb",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 498,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": False,
"id": "sdgb",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 2 (DX513-1)",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 2 (DX513-1)",
"num_id": 2,
"order": 2,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K6ZKJE8Y",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 34,
"testing_progress": "",
"testing_type": "",
"tray_status": "",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 1,
"str": "DX513-1",
"supportPwrBtnDisable": True,
"type": "ebox",
},
"device": "/dev/sdgc",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 494,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": False,
"id": "sdgc",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 3 (DX513-1)",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 3 (DX513-1)",
"num_id": 3,
"order": 3,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K6AKHYDP",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 35,
"testing_progress": "",
"testing_type": "",
"tray_status": "",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 1,
"str": "DX513-1",
"supportPwrBtnDisable": True,
"type": "ebox",
},
"device": "/dev/sdgd",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 502,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": False,
"id": "sdgd",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 4 (DX513-1)",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 4 (DX513-1)",
"num_id": 4,
"order": 4,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K7JSL21J",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 35,
"testing_progress": "",
"testing_type": "",
"tray_status": "",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 1,
"str": "DX513-1",
"supportPwrBtnDisable": True,
"type": "ebox",
},
"device": "/dev/sdge",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 508,
"exceed_bad_sector_thr": False,
"firm": "82.00A82",
"has_system": False,
"id": "sdge",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 5 (DX513-1)",
"model": "WD40EFRX-68N32N0 ",
"name": "Drive 5 (DX513-1)",
"num_id": 5,
"order": 5,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-WCC7K6ZKJJ7S",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 34,
"testing_progress": "",
"testing_type": "",
"tray_status": "",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
],
"env": {
"batchtask": {"max_task": 64, "remain_task": 64},
"bay_number": "5",
"data_scrubbing": {"sche_enabled": "1", "sche_status": "done"},
"ebox": [{"id": "sdg", "str": "DX513-1"}],
"fs_acting": False,
"isSyncSysPartition": False,
"is_space_actioning": False,
"isns": {"address": "", "enabled": False},
"isns_server": "",
"max_fs_bytes": "118747255799808",
"max_fs_bytes_high_end": "219902325555200",
"model_name": "DS1515+",
"ram_enough_for_fs_high_end": False,
"ram_size": 2,
"ram_size_required": 32,
"showpooltab": False,
"status": {"system_crashed": False, "system_need_repair": False},
"support": {"ebox": True, "raid_cross": True, "sysdef": True},
"support_fit_fs_limit": True,
"unique_key": UNIQUE_KEY,
"volume_full_critical": 0.1,
"volume_full_warning": 0.2,
},
"hotSpareConf": {"cross_repair": True, "disable_repair": []},
"hotSpares": [],
"iscsiLuns": [],
"iscsiTargets": [],
"ports": [],
"ssdCaches": [],
"storagePools": [
{
"cacheStatus": "",
"can_do": {
"convert_shr_to_pool": 1,
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"raid_cross": True,
},
"container": "cross",
"deploy_path": "volume_1",
"desc": "",
"device_type": "shr_with_2_disk_protect",
"disk_failure_number": 0,
"disks": [
"sda",
"sdb",
"sdc",
"sdd",
"sde",
"sdga",
"sdgb",
"sdgc",
"sdgd",
"sdge",
],
"drive_type": 0,
"id": "reuse_1",
"is_actioning": False,
"is_scheduled": True,
"is_writable": True,
"last_done_time": 1585897389,
"limited_disk_number": 12,
"maximal_disk_size": "0",
"minimal_disk_size": "4000681082880",
"next_schedule_time": 1588320000,
"num_id": 1,
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "single",
"raids": [
{
"designedDiskCount": 10,
"devices": [
{"id": "sdge", "slot": 6, "status": "normal"},
{"id": "sdgd", "slot": 7, "status": "normal"},
{"id": "sdgc", "slot": 8, "status": "normal"},
{"id": "sdgb", "slot": 9, "status": "normal"},
{"id": "sdga", "slot": 5, "status": "normal"},
{"id": "sde", "slot": 4, "status": "normal"},
{"id": "sdd", "slot": 3, "status": "normal"},
{"id": "sdc", "slot": 2, "status": "normal"},
{"id": "sdb", "slot": 1, "status": "normal"},
{"id": "sda", "slot": 0, "status": "normal"},
],
"hasParity": True,
"minDevSize": "4000681082880",
"normalDevCount": 10,
"raidPath": "/dev/md2",
"raidStatus": 1,
"spares": [],
}
],
"scrubbingStatus": "done",
"size": {"total": "31966715969536", "used": "31966715969536"},
"space_path": "/dev/vg1000/lv",
"spares": [],
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [],
"timebackup": False,
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {"can_do": True, "errCode": 0, "stopService": True},
"remove": {"can_do": True, "errCode": 0, "stopService": False},
"resize": {"can_do": True, "errCode": 0, "stopService": False},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
}
],
"volumes": [
{
"atime_checked": False,
"atime_opt": "relatime",
"cacheStatus": "",
"can_do": {
"convert_shr_to_pool": 1,
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"raid_cross": True,
},
"container": "cross",
"deploy_path": "volume_1",
"desc": "",
"device_type": "shr_with_2_disk_protect",
"disk_failure_number": 0,
"disks": [],
"drive_type": 0,
"eppool_used": "0",
"exist_alive_vdsm": False,
"fs_type": "ext4",
"id": "volume_1",
"is_acting": False,
"is_actioning": False,
"is_inode_full": False,
"is_scheduled": True,
"is_writable": True,
"last_done_time": 1585897389,
"limited_disk_number": 12,
"max_fs_size": "1152921504606846976",
"next_schedule_time": 1588320000,
"num_id": 1,
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "single",
"scrubbingStatus": "done",
"size": {
"free_inode": "974296118",
"total": "31714659872768",
"total_device": "31966715969536",
"total_inode": "975548416",
"used": "25419707531264",
},
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [{"str": "volume_usage_suggestion", "type": "warning"}],
"timebackup": False,
"used_by_gluster": False,
"vol_path": "/volume1",
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {"can_do": True, "errCode": 0, "stopService": True},
"remove": {"can_do": True, "errCode": 0, "stopService": False},
"resize": {"can_do": True, "errCode": 0, "stopService": False},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
}
],
},
"success": True,
}
DSM_6_STORAGE_STORAGE_DS213_PLUS_SHR1_2DISKS_2VOLS = {
"data": {
"disks": [
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS213+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sda",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 510,
"exceed_bad_sector_thr": False,
"firm": "80.00A80",
"has_system": True,
"id": "sda",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 1",
"model": "WD30E",
"name": "Drive 1",
"num_id": 1,
"order": 1,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "WD-xxxxx",
"size_total": "3000592982016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 29,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "WDC ",
},
{
"adv_progress": "",
"adv_status": "not_support",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS213+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdb",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "",
"erase_time": 424,
"exceed_bad_sector_thr": False,
"firm": "1AN10003",
"has_system": True,
"id": "sdb",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 2",
"model": "HD20xxx",
"name": "Drive 2",
"num_id": 2,
"order": 2,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "S1Uxxxxxxxxxxxx",
"size_total": "2000398934016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 30,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_2",
"vendor": "SAMSUNG ",
},
],
"env": {
"batchtask": {"max_task": 64, "remain_task": 64},
"bay_number": "2",
"data_scrubbing": {"sche_enabled": "0", "sche_status": "disabled"},
"ebox": [],
"fs_acting": False,
"isSyncSysPartition": False,
"is_space_actioning": False,
"isns": {"address": "", "enabled": False},
"isns_server": "",
"max_fs_bytes": "17592181850112",
"max_fs_bytes_high_end": "219902325555200",
"model_name": "DS213+",
"ram_enough_for_fs_high_end": False,
"ram_size": 0,
"ram_size_required": 32,
"showpooltab": True,
"status": {"system_crashed": False, "system_need_repair": False},
"support": {"ebox": True, "raid_cross": False, "sysdef": True},
"support_fit_fs_limit": False,
"unique_key": UNIQUE_KEY,
"volume_full_critical": 0.05,
"volume_full_warning": 0.1,
},
"hotSpareConf": {"cross_repair": True, "disable_repair": []},
"hotSpares": [],
"iscsiLuns": [],
"iscsiTargets": [],
"ports": [],
"storagePools": [
{
"cacheStatus": "",
"can_do": {
"delete": True,
"expand_by_disk": 1,
"migrate": {"to_shr2": 3},
},
"container": "internal",
"desc": "Diskgroep 2",
"device_type": "shr_without_disk_protect",
"disk_failure_number": 0,
"disks": ["sdb"],
"drive_type": 0,
"id": "reuse_2",
"is_actioning": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 0,
"limited_disk_number": 12,
"maximal_disk_size": "0",
"minimal_disk_size": "2000292986880",
"next_schedule_time": 0,
"num_id": 2,
"pool_child": [{"id": "volume_2", "size": {"total": "1995435933696"}}],
"pool_path": "reuse_2",
"progress": {"percent": "-1", "step": "none"},
"raidType": "multiple",
"raids": [
{
"designedDiskCount": 1,
"devices": [{"id": "sdb", "slot": 0, "status": "normal"}],
"hasParity": False,
"minDevSize": "2000292986880",
"normalDevCount": 1,
"raidPath": "/dev/md3",
"raidStatus": 1,
"spares": [],
}
],
"scrubbingStatus": "has_not_run_yet",
"size": {"total": "1995448516608", "used": "1995448516608"},
"space_path": "/dev/vg2",
"spares": [],
"status": "normal",
"suggestions": [],
"timebackup": False,
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"remove": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
},
{
"cacheStatus": "",
"can_do": {
"delete": True,
"expand_by_disk": 1,
"migrate": {"to_shr2": 3},
},
"container": "internal",
"desc": "Diskgroep1",
"device_type": "shr_without_disk_protect",
"disk_failure_number": 0,
"disks": ["sda"],
"drive_type": 0,
"id": "reuse_1",
"is_actioning": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 0,
"limited_disk_number": 12,
"maximal_disk_size": "0",
"minimal_disk_size": "3000487034880",
"next_schedule_time": 0,
"num_id": 1,
"pool_child": [{"id": "volume_1", "size": {"total": "2995630637056"}}],
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "multiple",
"raids": [
{
"designedDiskCount": 1,
"devices": [{"id": "sda", "slot": 0, "status": "normal"}],
"hasParity": False,
"minDevSize": "3000487034880",
"normalDevCount": 1,
"raidPath": "/dev/md2",
"raidStatus": 1,
"spares": [],
}
],
"scrubbingStatus": "has_not_run_yet",
"size": {"total": "2995643219968", "used": "2995643219968"},
"space_path": "/dev/vg1",
"spares": [],
"status": "normal",
"suggestions": [],
"timebackup": False,
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"remove": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
},
],
"volumes": [
{
"atime_checked": False,
"atime_opt": "relatime",
"cacheStatus": "",
"can_do": {"delete": True},
"container": "internal",
"desc": "Volume_Diskgroep2",
"device_type": "shr_without_disk_protect",
"disk_failure_number": 0,
"disks": [],
"drive_type": 0,
"eppool_used": "0",
"exist_alive_vdsm": False,
"fs_type": "ext4",
"id": "volume_2",
"is_acting": False,
"is_actioning": False,
"is_inode_full": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 0,
"limited_disk_number": 12,
"max_fs_size": "17577577283584",
"next_schedule_time": 0,
"num_id": 2,
"pool_path": "reuse_2",
"progress": {"percent": "-1", "step": "none"},
"raidType": "multiple",
"scrubbingStatus": "",
"size": {
"free_inode": "121689412",
"total": "1964124495872",
"total_device": "1995435933696",
"total_inode": "121798656",
"used": "1684179374080",
},
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [],
"timebackup": False,
"used_by_gluster": False,
"vol_path": "/volume2",
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"remove": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
},
{
"atime_checked": False,
"atime_opt": "relatime",
"cacheStatus": "",
"can_do": {"delete": True},
"container": "internal",
"desc": "Volume_Diskgroep1",
"device_type": "shr_without_disk_protect",
"disk_failure_number": 0,
"disks": [],
"drive_type": 0,
"eppool_used": "0",
"exist_alive_vdsm": False,
"fs_type": "ext4",
"id": "volume_1",
"is_acting": False,
"is_actioning": False,
"is_inode_full": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 0,
"limited_disk_number": 12,
"max_fs_size": "17581339574272",
"next_schedule_time": 0,
"num_id": 1,
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "multiple",
"scrubbingStatus": "",
"size": {
"free_inode": "182794183",
"total": "2948623499264",
"total_device": "2995630637056",
"total_inode": "182845440",
"used": "2710796488704",
},
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [{"str": "volume_usage_suggestion", "type": "warning"}],
"timebackup": False,
"used_by_gluster": False,
"vol_path": "/volume1",
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"remove": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
},
],
},
"success": True,
}
DSM_6_STORAGE_STORAGE_DS918_PLUS_RAID5_3DISKS_1VOL = {
"data": {
"disks": [
{"id": "test_disk"},
{
"adv_progress": "",
"adv_status": "normal",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS918+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sda",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "ironwolf",
"erase_time": 448,
"exceed_bad_sector_thr": False,
"firm": "SC60",
"has_system": True,
"id": "sda",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 1",
"model": "ST4000VN008-2DR166 ",
"name": "Drive 1",
"num_id": 1,
"order": 1,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "ZDH4LYTS",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 24,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "Seagate",
},
{
"adv_progress": "",
"adv_status": "normal",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS918+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdb",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "ironwolf",
"erase_time": 448,
"exceed_bad_sector_thr": False,
"firm": "SC60",
"has_system": True,
"id": "sdb",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 2",
"model": "ST4000VN008-2DR166 ",
"name": "Drive 2",
"num_id": 2,
"order": 2,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "ZDH4LS72",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 24,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "Seagate",
},
{
"adv_progress": "",
"adv_status": "normal",
"below_remain_life_thr": False,
"compatibility": "disabled",
"container": {
"order": 0,
"str": "DS918+",
"supportPwrBtnDisable": False,
"type": "internal",
},
"device": "/dev/sdc",
"disable_secera": False,
"diskType": "SATA",
"disk_code": "ironwolf",
"erase_time": 452,
"exceed_bad_sector_thr": False,
"firm": "SC60",
"has_system": True,
"id": "sdc",
"ihm_testing": False,
"is4Kn": False,
"isSsd": False,
"isSynoPartition": True,
"is_erasing": False,
"longName": "Drive 3",
"model": "ST4000VN008-2DR166 ",
"name": "Drive 3",
"num_id": 3,
"order": 3,
"overview_status": "normal",
"pciSlot": -1,
"perf_testing": False,
"portType": "normal",
"remain_life": -1,
"remote_info": {"compatibility": "disabled", "unc": 0},
"serial": "ZDH4LQ1H",
"size_total": "4000787030016",
"smart_progress": "",
"smart_status": "normal",
"smart_test_limit": 0,
"smart_testing": False,
"status": "normal",
"support": False,
"temp": 23,
"testing_progress": "",
"testing_type": "",
"tray_status": "join",
"unc": 0,
"used_by": "reuse_1",
"vendor": "Seagate",
},
],
"env": {
"batchtask": {"max_task": 64, "remain_task": 64},
"bay_number": "4",
"data_scrubbing": {
"sche_enabled": "0",
"sche_status": "disabled",
},
"ebox": [],
"fs_acting": False,
"isSyncSysPartition": False,
"is_space_actioning": False,
"isns": {"address": "", "enabled": False},
"isns_server": "",
"max_fs_bytes": "118747255799808",
"max_fs_bytes_high_end": "219902325555200",
"model_name": "DS918+",
"ram_enough_for_fs_high_end": False,
"ram_size": 4,
"ram_size_required": 32,
"showpooltab": False,
"status": {
"system_crashed": False,
"system_need_repair": False,
},
"support": {
"ebox": True,
"raid_cross": True,
"sysdef": True,
},
"support_fit_fs_limit": True,
"unique_key": UNIQUE_KEY,
"volume_full_critical": 0.1,
"volume_full_warning": 0.2,
},
"hotSpareConf": {"cross_repair": True, "disable_repair": []},
"hotSpares": [],
"iscsiLuns": [],
"iscsiTargets": [],
"ports": [],
"ssdCaches": [],
"storagePools": [
{
"cacheStatus": "",
"can_do": {
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"migrate": {"to_raid5+spare": "1-1", "to_raid6": 1},
"raid_cross": True,
},
"container": "internal",
"deploy_path": "volume_1",
"desc": "Situé sur Groupe de stockage 1, RAID 5",
"device_type": "raid_5",
"disk_failure_number": 0,
"disks": ["sda", "sdb", "sdc"],
"drive_type": 0,
"id": "reuse_1",
"is_actioning": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 1551201018,
"limited_disk_number": 24,
"maximal_disk_size": "0",
"minimal_disk_size": "4000681164800",
"next_schedule_time": 0,
"num_id": 1,
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "single",
"raids": [
{
"designedDiskCount": 3,
"devices": [
{
"id": "sdc",
"slot": 2,
"status": "normal",
},
{
"id": "sdb",
"slot": 1,
"status": "normal",
},
{
"id": "sda",
"slot": 0,
"status": "normal",
},
],
"hasParity": True,
"minDevSize": "4000681164800",
"normalDevCount": 3,
"raidPath": "/dev/md2",
"raidStatus": 1,
"spares": [],
}
],
"scrubbingStatus": "no_action",
"size": {
"total": "7991698522112",
"used": "7991698522112",
},
"space_path": "/dev/md2",
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [],
"timebackup": False,
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": True,
"errCode": 0,
"stopService": True,
},
"remove": {
"can_do": True,
"errCode": 0,
"stopService": False,
},
"resize": {
"can_do": True,
"errCode": 0,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
}
],
"volumes": [
{"id": "test_volume"},
{
"atime_checked": False,
"atime_opt": "relatime",
"cacheStatus": "",
"can_do": {
"data_scrubbing": True,
"delete": True,
"expand_by_disk": 1,
"migrate": {"to_raid5+spare": "1-1", "to_raid6": 1},
"raid_cross": True,
},
"container": "internal",
"deploy_path": "volume_1",
"desc": "Situé sur Groupe de stockage 1, RAID 5",
"device_type": "raid_5",
"disk_failure_number": 0,
"disks": [],
"drive_type": 0,
"eppool_used": "0",
"exist_alive_vdsm": False,
"fs_type": "btrfs",
"id": "volume_1",
"is_acting": False,
"is_actioning": False,
"is_inode_full": False,
"is_scheduled": False,
"is_writable": True,
"last_done_time": 1551201018,
"limited_disk_number": 24,
"max_fs_size": "1152921504606846976",
"next_schedule_time": 0,
"num_id": 1,
"pool_path": "reuse_1",
"progress": {"percent": "-1", "step": "none"},
"raidType": "single",
"scrubbingStatus": "no_action",
"size": {
"free_inode": "0",
"total": "7672030584832",
"total_device": "7991698522112",
"total_inode": "0",
"used": "4377452806144",
},
"ssd_trim": {"support": "not support"},
"status": "normal",
"suggestions": [],
"timebackup": False,
"used_by_gluster": False,
"vol_path": "/volume1",
"vspace_can_do": {
"drbd": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
"flashcache": {
"apply": {
"can_do": True,
"errCode": 0,
"stopService": True,
},
"remove": {
"can_do": True,
"errCode": 0,
"stopService": False,
},
"resize": {
"can_do": True,
"errCode": 0,
"stopService": False,
},
},
"snapshot": {
"resize": {
"can_do": False,
"errCode": 53504,
"stopService": False,
}
},
},
},
],
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/surveillance_station/ 0000775 0000000 0000000 00000000000 14762405272 0025467 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/surveillance_station/__init__.py 0000664 0000000 0000000 00000000056 14762405272 0027601 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.SurveillanceStation.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_6/surveillance_station/const_6_api_info.py 0000664 0000000 0000000 00000436734 14762405272 0031301 0 ustar 00root root 0000000 0000000 """DSM 6 SYNO.API.Info data with surveillance surppot."""
DSM_6_API_INFO = {
"data": {
"SYNO.API.Auth": {"maxVersion": 6, "minVersion": 1, "path": "auth.cgi"},
"SYNO.API.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "encryption.cgi",
},
"SYNO.API.Info": {"maxVersion": 1, "minVersion": 1, "path": "query.cgi"},
"SYNO.API.OTP": {"maxVersion": 1, "minVersion": 1, "path": "otp.cgi"},
"SYNO.AntiVirus.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.FileExt": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.General": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.Quarantine": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.Scan": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AntiVirus.WhiteList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioPlayer": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioPlayer.Stream": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.Album": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/album.cgi",
},
"SYNO.AudioStation.Artist": {
"maxVersion": 4,
"minVersion": 1,
"path": "AudioStation/artist.cgi",
},
"SYNO.AudioStation.Browse.Playlist": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.Composer": {
"maxVersion": 2,
"minVersion": 1,
"path": "AudioStation/composer.cgi",
},
"SYNO.AudioStation.Cover": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/cover.cgi",
},
"SYNO.AudioStation.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioStation/download.cgi",
},
"SYNO.AudioStation.Folder": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/folder.cgi",
},
"SYNO.AudioStation.Genre": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/genre.cgi",
},
"SYNO.AudioStation.Info": {
"maxVersion": 4,
"minVersion": 1,
"path": "AudioStation/info.cgi",
},
"SYNO.AudioStation.Lyrics": {
"maxVersion": 2,
"minVersion": 1,
"path": "AudioStation/lyrics.cgi",
},
"SYNO.AudioStation.LyricsSearch": {
"maxVersion": 2,
"minVersion": 1,
"path": "AudioStation/lyrics_search.cgi",
},
"SYNO.AudioStation.MediaServer": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioStation/media_server.cgi",
},
"SYNO.AudioStation.Pin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.Playlist": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/playlist.cgi",
},
"SYNO.AudioStation.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioStation/proxy.cgi",
},
"SYNO.AudioStation.Radio": {
"maxVersion": 2,
"minVersion": 1,
"path": "AudioStation/radio.cgi",
},
"SYNO.AudioStation.RemotePlayer": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/remote_player.cgi",
},
"SYNO.AudioStation.RemotePlayerStatus": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioStation/remote_player_status.cgi",
},
"SYNO.AudioStation.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioStation/search.cgi",
},
"SYNO.AudioStation.Song": {
"maxVersion": 3,
"minVersion": 1,
"path": "AudioStation/song.cgi",
},
"SYNO.AudioStation.Stream": {
"maxVersion": 2,
"minVersion": 1,
"path": "AudioStation/stream.cgi",
},
"SYNO.AudioStation.Tag": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.VoiceAssistant.Browse": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.VoiceAssistant.Challenge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.VoiceAssistant.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.VoiceAssistant.Stream": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioStation.WebPlayer": {
"maxVersion": 1,
"minVersion": 1,
"path": "AudioStation/web_player.cgi",
},
"SYNO.Backup.App": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Backup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Restore": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App2.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App2.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Lunbackup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository.Certificate": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.NetworkBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.TimeBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Share.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Source.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.AmazonCloudDrive.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Azure.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Connect.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Dropbox.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.GoogleDrive.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.HiDrive.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.OpenStack.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.OpenStack.Region": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.S3.Bucket": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Local": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Rsync": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.WebDAV.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.hubiC.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target.Config": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Task": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Version.History": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.AuthForeign": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Cal": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Chatbot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Event": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.InviteMail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.InviteMailInit": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.SendMail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Share.Priv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.SyncUser": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Timezone": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Todo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CloudSync": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ACL": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.AccessControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.ReverseProxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.App": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.Rule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Cache": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.ServerInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CRT": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CSR": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CurrentConnection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.ExtIP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Provider": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Record": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Synology": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.TWNIC": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DSMNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect.Application": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Defs": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Initdata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.JSUIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.SessionData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.UIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Azure.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.ADHealthCheck": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.BaseDN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Login.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.WebSphere.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EventScheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.DefaultPermission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.BonjourSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Driver": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.OAuth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.EUnit": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.eSATA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.UPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EzInternet": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Factory.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Factory.Manutild": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.AFP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.ChrootUser": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.SFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.Security": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.AdvancedSetting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.IDMap": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.Kerberos": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.SharePrivilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ReflinkCopy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.Rsync.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ServiceDiscovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ServiceDiscovery.WSTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Findhost": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.ExtraAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.Member": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.ValidLocalAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.GroupSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.BeepControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.DCOutput": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.DCOutput.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.FanSpeed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Hibernation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.LCM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Led.Brightness": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.MemoryLayout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.NeedReboot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerRecovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerSchedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.RemoteFanStatus": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.SpectreMeltdown": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.VideoTranscoding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.ZRAM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Help": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.LUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Lunbkp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Replication": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.VLUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.IndexFolder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.MediaConverter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.MobileEnabled": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.ThumbnailQuality": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Authentication": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Authentication.Cert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bond": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bridge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.ClientList": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.PXE": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.Reservation": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.Vendor": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.DHCPServer.WPAD": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Ethernet": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router.Prefix": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6Tunnel": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Interface": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.LocalBridge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.MACClone": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.OVS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE.Relay": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.ConnectionList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.CountryCode": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.DMZ": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Gateway.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.LocalLan": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.MacFilter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.ParentalControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.PkgList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.PortForward": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Static.Route": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Topology": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.RouterRules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.UPnPServer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.USBModem": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.L2TP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPNWithConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPNWithConf.Certs": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.PPTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.WOL": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.Hotspot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Wifi.WPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.NormalUser": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.NormalUser.LoginNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.CustomizedData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.FilterSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.Variables": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.WarningPercentage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Auth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.AuthToken": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mobile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Provider": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OAuth.Scope": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OAuth.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Admin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.EnforcePolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Control": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.FakeIFrame": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Feed.Keyring": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.MyDS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.MyDS.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Screenshot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Screenshot.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting.Update": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Thumb": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Uninstallation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Event": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.android": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.iOS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.windows": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PhotoViewer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Polling.Data": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Compatibility": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.UserDataCollector": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Upnp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickStart.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickStart.Install": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Quota": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.Language": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.DateTimeFormat": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SNMP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Embed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DoS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Adapter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Geoip": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Profile.Apply": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.VPNPassthrough": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.VPNPassthrough.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Operation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.PortInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.CryptoFile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.AutoKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.MachineKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.Store": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Snapshot": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Initdata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Session": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Trusted": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Untrusted": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Disk": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSILUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSITargets": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSIUtils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Form": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Synohdpack": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.FileTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.PersonalActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Setting.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Process": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ProcessGroup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ResetButton": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Utilization": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TaskScheduler": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Terminal": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.AppPortalLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Desktop": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.FileSharingLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TrustDevice": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Tuned": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UISearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.AutoUpgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Patch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.PreCheck": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Setting": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Home": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordConfirm": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordExpiry": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordMeter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordPolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UserSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Virtualization.Host.Capability": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM.External": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.Security.HTTPCompression": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.Security.TLSProfile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node.Credential": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node.Session": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.FindMe": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Info": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Network": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.PortEnable": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.PushNotification": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Retention": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request.Polling": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.BackgroundTask": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CheckExist": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CheckPermission": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Compress": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CopyMove": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CreateFolder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Delete": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.DirSize": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.External.GoogleDrive": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Extract": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Favorite": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.FormUpload": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.MD5": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Mount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Mount.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.ACLOwner": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.CompressSize": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.Mtime": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Rename": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Search": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Search.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Sharing": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Sharing.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Snapshot": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Thumb": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.UIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Upload": {
"maxVersion": 3,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.UserGrp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.GDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VirtualFolder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.AppIndexing.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Bookmark": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.SearchHistory": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.Spotlight": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File.Cover": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Folder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Highlight": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Indicate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Preference": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.UserGrp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.Thumb": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.License.HA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Common": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Contacts": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Application.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.MailAccount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.MailAccount.Contacts": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.MailAccount.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Device": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Event": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.GDPR": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Identifier": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Mobile": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Settings": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.VapidPublicKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Profile": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Profile.Photo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Album": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Category": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Concept": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Diff": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Folder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.GeneralTag": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Geocoding": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Item": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Person": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.RecentlyAdded": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Timeline": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Browse.Unit": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Discover.Category": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Discover.Similar": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Discover.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Discover.Style": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Enhancement": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Index": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Search": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Setting.Admin": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Setting.Mobile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Setting.User": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.SharingLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Streaming": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Photo.Upload.Item": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Album": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Category": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Concept": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Diff": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Folder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.GeneralTag": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Geocoding": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Item": {
"maxVersion": 3,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Person": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.RecentlyAdded": {
"maxVersion": 3,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Timeline": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Browse.Unit": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Discover.Category": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Discover.Similar": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Discover.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Discover.Style": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Enhancement": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Index": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Search": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Setting.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Streaming": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PhotoTeam.Upload.Item": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.EventRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client.Job": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server.Pair": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.APIRunner": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.APIRunner.Chatbot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Group.Members": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Guest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Version": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Job": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Fuse.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Checklist": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Checklist.Alert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.LoginActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Report.HTML": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ShareLink.Action": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ShareLink.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ShareLink.Manage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Snap.Usage.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Check": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.DualEnclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Enclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Flashcache": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.HddMan": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Smart": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Smart.Scheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Spare": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Spare.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.TaipeiEnclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.ActionRule": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.AddOns": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Alert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Alert.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Analytics.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.AppCenter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Archiving.Pull": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Archiving.Push": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.AudioOut": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.AudioPattern": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.AudioStream": {
"maxVersion": 2,
"minVersion": 1,
"path": "SurveillanceStation/audioStreaming.cgi",
},
"SYNO.SurveillanceStation.AxisAcsCtrler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.AxisAcsCtrler.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CMS.DsSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CMS.Failover": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CMS.GetDsStatus": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CMS.SlavedsList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CMS.SlavedsWizard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera": {
"maxVersion": 9,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Event": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Export": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Import": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Intercom": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Status": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.VolEval": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Camera.Wizard": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.CameraCap": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Device": {
"maxVersion": 2,
"minVersion": 1,
"path": "SurveillanceStation/device.cgi",
},
"SYNO.SurveillanceStation.DigitalOutput": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.DualAuth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Emap": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Emap.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Event": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Event.Export": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Event.Mount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Event.Mount.Wizard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.ExternalDevice.IFTTT": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.ExternalDevice.Storage.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.ExternalDevice.Webhook": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.ExternalEvent": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.ExternalRecording": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Fisheye": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.GlobalSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Help": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.HomeMode": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.HomeMode.Mobile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IOModule": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IOModule.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IPSpeaker": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IPSpeaker.Broadcast": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IPSpeaker.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IPSpeaker.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA.Archive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA.License": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA.Recording": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA.Simulator": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.IVA.TaskGroup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Info": {
"maxVersion": 8,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.JoystickSetting": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Layout": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.License": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.LocalDisplay": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Log": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.MobileCam": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification": {
"maxVersion": 8,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.Email": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.Filter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.MobileSetting": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.PushService": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.SMS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.SMS.ServiceProvider": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Notification.Schedule": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.PTZ": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.PTZ.Patrol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.PTZ.Preset": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.PersonalSettings.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.PersonalSettings.Layout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.PersonalSettings.Photo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Player": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Player.LiveviewSrc": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Preload": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording": {
"maxVersion": 6,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording.Bookmark": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording.Export": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording.Mount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording.Mount.Wizard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording.Reindex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Recording.ShareRecording": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.RecordingPicker": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.SnapShot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Sort": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Stream": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Stream.VideoStreaming": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Streaming": {
"maxVersion": 2,
"minVersion": 1,
"path": "SurveillanceStation/streaming.cgi",
},
"SYNO.SurveillanceStation.System": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.TaskQueue": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.TimeLapse": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.TimeLapse.Recording": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Transactions.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Transactions.Transaction": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.UserPrivilege": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.VideoStream": {
"maxVersion": 1,
"minVersion": 1,
"path": "SurveillanceStation/videoStreaming.cgi",
},
"SYNO.SurveillanceStation.VideoStreaming": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.VisualStation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.VisualStation.Install": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.VisualStation.Layout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.VisualStation.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.Webhook": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SurveillanceStation.YoutubeLive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.AdvanceSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.AdvanceSharing.Public": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.AppIntegration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Authentication": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.DBUsage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.DSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Export": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Files": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.KeyManagement": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Labels": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Metrics": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Metrics.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node.Delete": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node.Restore": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Notifications": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Office": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Photos": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Privilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Revisions": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.SCIM.Photo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.SCIM.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Services.DocumentViewer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Services.SynologyChat": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Services.VideoStation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Shard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Share.Priv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Sharing": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.String": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Tasks": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.TeamFolders": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Trash": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Users": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Webhooks": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Session": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Session.Set": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VideoPlayer.Subtitle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VideoPlayer.SynologyDrive.Subtitle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebDAV.CalDAV": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebDAV.CalDAV.Calendar": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebDAV.Common": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
},
"success": True,
}
const_6_surveillance_station_camera.py 0000664 0000000 0000000 00000111647 14762405272 0035174 0 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/surveillance_station """DSM 6 SYNO.SurveillanceStation.Camera data."""
DSM_6_SURVEILLANCE_STATION_CAMERA_LIST = {
"data": {
"cameras": [
{
"ADCap": 0,
"AppList": [],
"DINum": 0,
"DONum": 0,
"MDCap": 0,
"MDModeList": [0, 1],
"PDCap": 0,
"PDDepend": 0,
"TDCap": 0,
"advLiveMinDuration": 10,
"advLiveProfile": 1,
"advLiveTrigAuto": False,
"advLiveTrigEvt": "10000000000000000000000000000000000000000000000000000000000000000000000000000000",
"advLiveTrigSingle": True,
"analyticsType": 0,
"application": False,
"audioCap": False,
"audioOut": False,
"audioType": 6,
"autoFocus": False,
"autoPan": 0,
"auto_restart_interval": 0,
"blAudioDisableRec": False,
"blAudioPriv": True,
"blDisableRec": False,
"blEnableExtDI": False,
"blEnableLiveBuffering": False,
"blG726LE": False,
"blLiveviewPriv": True,
"blPresetSpeed": False,
"blPtzShowIcon": False,
"blReceivePocZero": False,
"blThirdStream": True,
"calling_notify_ado_src_id": 0,
"calling_notify_duration": 0,
"camIdOnRecServer": 0,
"camLiveMode": 0,
"camMobileLiveMode": 0,
"camMountType": 0,
"camRecShare": "surveillance",
"camRecShareMountType": 0,
"camRecSharePath": "/volume1/surveillance",
"camRecStorageStatus": 0,
"camRecVolume": "/volume1",
"camRotOption": 0,
"camStatus": 1,
"channel_id": "1",
"daybegin": 8,
"dayend": 18,
"defLiveProfile": 1,
"deleted": False,
"detailInfo": {
"advContMinDuration": 10,
"advContTrigEvt": "10000000000000000000000000000000000000000000000000000000000000000000000000000000",
"advLiveMinDuration": 10,
"advLiveTrigAuto": False,
"advLiveTrigEvt": "10000000000000000000000000000000000000000000000000000000000000000000000000000000",
"advLiveTrigSingle": True,
"blAudioDisableRec": False,
"blDisableRec": False,
"blEnableExtDI": False,
"blThirdStreamProfile": True,
"camApplyCodecOptimization": False,
"camApplyKeyFrameInterval": False,
"camAudioType": 6,
"camChannel": "1",
"camCodecOptimization": "",
"camDeviceType": 1,
"camDynamicFps": False,
"camDynamicGop": False,
"camFirmware": "",
"camFolder": "Camera1",
"camFov": "",
"camFps": "",
"camIP": "192.168.1.101",
"camIsRotByDate": True,
"camIsRotBySpace": False,
"camIsSetEvtPrefix": False,
"camIsSetRecFolder": False,
"camKeyFrameInterval": -1,
"camLastKeyFrameInterval": -1,
"camLiveAvgBitrate": 1000,
"camLiveBitrateCtrl": 0,
"camLiveCbrBitrate": 1000,
"camLiveFps": "",
"camLiveMode": 0,
"camLiveQuality": "",
"camLiveResolution": "1920x1080",
"camLiveSmartBitrateCtrl": 0,
"camLiveStreamNo": 0,
"camMobileAvgBitrate": 1000,
"camMobileBitrateCtrl": 0,
"camMobileCbrBitrate": 1000,
"camMobileFps": "",
"camMobileLiveMode": 0,
"camMobileQuality": "",
"camMobileResolution": "1920x1080",
"camMobileSmartBitrateCtrl": 0,
"camMobileStreamNo": 0,
"camModel": "",
"camMountType": 0,
"camName": "Camera1",
"camPassWord": "########",
"camPort": 554,
"camPostRecTime": 5,
"camPreRecTime": 5,
"camPrefix": "Camera1",
"camQuality": "",
"camRecAvgBitrate": 1000,
"camRecBitrateCtrl": 0,
"camRecCbrBitrate": 1000,
"camRecShare": "surveillance",
"camRecSharePath": "/volume1/surveillance",
"camRecSmartBitrateCtrl": 0,
"camRecStorageStatus": 0,
"camRecStreamNo": 0,
"camRecTime": 30,
"camResolution": "1920x1080",
"camRotByDate": 30,
"camRotBySpace": 10,
"camRotOption": 0,
"camRtspKeepAlive": 1,
"camRtspProtocol": 4,
"camSchedule": [
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
],
"camServer": 0,
"camSourcePath": "/live",
"camSourceType": 1,
"camTvStandard": 0,
"camUserName": "cam1",
"camVendor": "User Define",
"camVideoMode": "",
"camVideoType": "H.264",
"custom1DIDetect": 0,
"custom1Detect": 1,
"custom2DIDetect": 0,
"custom2Detect": 1,
"edgeStgDownloadSch": [
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
],
],
"edgeStgEnabled": False,
"edgeStgPostRecTime": 5,
"edgeStgPreRecTime": 5,
"edgeStgRecDays": 127,
"edgeStgRecMode": 1,
"edgeStgRecStartTime": "00:00",
"edgeStgRecStopTime": "00:00",
"edgeStgRecTime": 60,
"edgeStgRetEnabled": False,
"edgeStgRetrieveAction": 2,
"enableAdvCont": False,
"enableAdvLive": False,
"enableAutoLiveProfile": False,
"enablePtzControl": True,
"extDIDev": 0,
"extDIPorts": -1,
"extraDataSrc": 0,
"informationHint": "",
"isRemovableLens": False,
"pairedSpeakerEnabled": False,
"pairedSpeakerId": 0,
"profileSettingList": "1,1,1,1,1,1,1,1,1,1,1,1",
},
"deviceType": 1,
"doorbellNum": 0,
"dsIp": "",
"dsPort": 7850,
"enableAdvLive": False,
"enableAutoLiveProfile": False,
"enableMulticast": False,
"enableMulticastMobile": False,
"enablePtzControl": True,
"enable_calling_notify": False,
"enabled": True,
"exposure_control": 6,
"exposure_mode": 4,
"extDIDev": 0,
"extDIPorts": -1,
"feRegionList": [],
"firmware": "",
"fisheyeDispMode": "",
"fisheyeParam": {},
"folder": "/volume1/surveillance/Camera1",
"forceEnableMulticast": False,
"fps": 0,
"hasCamParam": False,
"host": "192.168.1.101",
"id": 1,
"isStatusUnrecognized": False,
"is_rotated_by_date": True,
"is_rotated_by_space": False,
"last_restart_time": "2020-03-27T07:00:07Z",
"last_sync_time": "2020-03-27T07:00:07Z",
"ledCap": False,
"liveBufferingSec": 1,
"model": "Define",
"multiDI": False,
"multicastAudioPort": 0,
"multicastAudioPortMobile": 0,
"multicastGrpAddr": "",
"multicastGrpAddrMobile": "",
"multicastVideoPort": 0,
"multicastVideoPortMobile": 0,
"mute": False,
"name": "Camera1",
"objTrack": False,
"osd_format": 0,
"osd_position": 6,
"osd_status": True,
"ownerDsId": 0,
"pairedSpeakerEnabled": False,
"pairedSpeakerId": 0,
"param_chklist": 0,
"period_sync_time_hour": 0,
"port": 554,
"presetNum": 0,
"privilege": 31,
"profileSettingList": "1,1,1,1,1,1,1,1,1,1,1,1",
"ptzCap": 0,
"ptzContinuous": 0,
"ptzDirection": 0,
"quality": "",
"recBitrateCtrl": 0,
"recCbrBitrate": 1000,
"recStatus": 1,
"relayPortList": [],
"resolution": "1920x1080",
"restart_day": 0,
"rotation_by_date": 30,
"rotation_by_space": "10",
"rotation_option": 0,
"rtspPathTimeout": 0,
"setDICap": False,
"setDOCap": False,
"singleStream": False,
"snapshot_path": "/webapi/entry.cgi?api=SYNO.SurveillanceStation.Camera&method=GetSnapshot&version=1&cameraId=1×tamp=1592532741&preview=true",
"speedDryCap": False,
"status": 0,
"status_flags": 0,
"stmFisheyeType": 0,
"stm_info": [
{
"camPath": "camPath",
"fps": 0,
"quality": "",
"resolution": "1920x1080",
"stmNo": 1,
"type": 0,
},
{
"camPath": "camPath",
"fps": 0,
"quality": "",
"resolution": "1920x1080",
"stmNo": 1,
"type": 1,
},
{
"camPath": "camPath",
"fps": 0,
"quality": "",
"resolution": "1920x1080",
"stmNo": 1,
"type": 2,
},
],
"time_server": "",
"tvStandard": 0,
"type": 3,
"uiStmNoList": "1,1,1",
"update_time": 14630,
"vendor": "User",
"videoCapList": [
{"stList": ["RTSP"], "vt": "H.264"},
{"stList": ["RTSP"], "vt": "MPEG4"},
{"stList": ["HTTP"], "vt": "MJPEG"},
{"stList": ["RTSP"], "vt": "H.265"},
{"stList": ["RTSP"], "vt": "H.264+"},
{"stList": ["RTSP"], "vt": "H.265+"},
],
"videoMode": "",
"video_flip": True,
"video_mirror": True,
"video_rotation": 0,
"volume": 50,
"volume_space": "460.402",
"wiperCap": False,
}
],
"delcam": [],
"existCamMntTypeMap": None,
"keyTotalCnt": 2,
"keyUsedCnt": 1,
"timestamp": "1592532741",
"total": 1,
},
"success": True,
}
DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MOTION_ENUM = {
"data": {
"DVAParam": None,
"MDParam": {
"camRoi": {"channel": "", "type": 0},
"enhanceMDWithPD": {"value": False},
"history": {
"camCap": False,
"maxValue": 99,
"minValue": 1,
"ssCap": False,
"value": 90,
},
"keep": True,
"mode": 0,
"objectSize": {
"camCap": False,
"maxValue": 99,
"minValue": 1,
"ssCap": False,
"value": 50,
},
"percentage": {
"camCap": False,
"maxValue": 99,
"minValue": 1,
"ssCap": False,
"value": 50,
},
"region": "000000000000000000000000000000000000000001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100111111111111111111111111111111111111110011111111111111111111111111111111111111001111111111111111111111111111111111111100000000000000000000000000000000000000000",
"relatedEvents": [],
"sensitivity": {
"camCap": False,
"maxValue": 99,
"minValue": 1,
"ssCap": True,
"value": 90,
},
"shortLiveSecond": {"camCap": False, "ssCap": True, "value": 0},
"source": 1,
"threshold": {
"camCap": False,
"maxValue": 99,
"minValue": 1,
"ssCap": True,
"value": 10,
},
},
"PDParam": {
"keep": True,
"sensitivity": {"cap": False, "maxValue": 0, "minValue": 0, "value": 0},
"source": -1,
"triggerMotion": False,
},
},
"success": True,
}
DSM_6_SURVEILLANCE_STATION_CAMERA_EVENT_MD_PARAM_SAVE = {
"data": {"camId": 1},
"success": True,
}
DSM_6_SURVEILLANCE_STATION_CAMERA_GET_LIVE_VIEW_PATH = {
"data": [
{
"id": 1,
"mjpegHttpPath": 'http://192.168.1.100:5000/webapi/entry.cgi?api=SYNO.SurveillanceStation.Stream.VideoStreaming&version=1&method=Stream&format=mjpeg&cameraId=1&StmKey="stmkey1234567890"',
"multicstPath": "rtsp://syno:stmkey1234567890@192.168.1.100:554/Sms=1.multicast",
"mxpegHttpPath": 'http://192.168.1.100:5000/webapi/entry.cgi?api=SYNO.SurveillanceStation.Stream.VideoStreaming&version=1&method=Stream&format=mxpeg&cameraId=1&StmKey="stmkey1234567890"',
"rtspOverHttpPath": "rtsp://192.168.1.100:5000/webman/3rdparty/SurveillanceStation/cgi/rtsp.cgi?Sms=1.unicast&DsId=0&StmKey=stmkey1234567890",
"rtspPath": "rtsp://syno:stmkey1234567890@192.168.1.100:554/Sms=1.unicast",
}
],
"success": True,
}
DSM_6_SURVEILLANCE_STATION_CAMERA_ENABLE = {"success": True}
DSM_6_SURVEILLANCE_STATION_CAMERA_DISABLE = {"success": True}
const_6_surveillance_station_home_mode.py 0000664 0000000 0000000 00000010150 14762405272 0035663 0 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_6/surveillance_station """DSM 6 SYNO.API.SurveillanceStation.HomeMode data."""
DSM_6_SURVEILLANCE_STATION_HOME_MODE_GET_INFO = {
"data": {
"actrule_on": False,
"actrules": "-1",
"cameras": "-1",
"custom1_det": 1,
"custom1_di": 1,
"custom2_det": 1,
"custom2_di": 1,
"geo_delay_time": 60,
"geo_lat": 12.00000,
"geo_lng": -12.00000,
"geo_radius": 100,
"io_modules": "",
"last_update_time": 0,
"mode_schedule": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"mode_schedule_next_time": -1,
"mode_schedule_on": True,
"notify_event_list": [
{"eventGroupType": 2, "eventType": 3, "filter": 4},
{"eventGroupType": 2, "eventType": 4, "filter": 4},
{"eventGroupType": 2, "eventType": 5, "filter": 0},
{"eventGroupType": 2, "eventType": 6, "filter": 0},
{"eventGroupType": 2, "eventType": 7, "filter": 0},
{"eventGroupType": 2, "eventType": 10, "filter": 0},
{"eventGroupType": 2, "eventType": 11, "filter": 4},
{"eventGroupType": 2, "eventType": 12, "filter": 0},
{"eventGroupType": 2, "eventType": 13, "filter": 0},
{"eventGroupType": 2, "eventType": 14, "filter": 0},
{"eventGroupType": 2, "eventType": 15, "filter": 0},
{"eventGroupType": 1, "eventType": 28, "filter": 4},
{"eventGroupType": 1, "eventType": 29, "filter": 4},
{"eventGroupType": 1, "eventType": 32, "filter": 4},
{"eventGroupType": 1, "eventType": 33, "filter": 4},
{"eventGroupType": 1, "eventType": 34, "filter": 4},
{"eventGroupType": 8, "eventType": 35, "filter": 0},
{"eventGroupType": 8, "eventType": 36, "filter": 0},
{"eventGroupType": 8, "eventType": 37, "filter": 0},
{"eventGroupType": 8, "eventType": 38, "filter": 0},
{"eventGroupType": 8, "eventType": 39, "filter": 0},
{"eventGroupType": 8, "eventType": 40, "filter": 0},
{"eventGroupType": 8, "eventType": 41, "filter": 0},
{"eventGroupType": 8, "eventType": 42, "filter": 0},
{"eventGroupType": 8, "eventType": 43, "filter": 0},
{"eventGroupType": 8, "eventType": 44, "filter": 0},
{"eventGroupType": 1, "eventType": 45, "filter": 0},
{"eventGroupType": 2, "eventType": 62, "filter": 0},
{"eventGroupType": 2, "eventType": 63, "filter": 0},
{"eventGroupType": 2, "eventType": 64, "filter": 0},
{"eventGroupType": 2, "eventType": 65, "filter": 0},
{"eventGroupType": 2, "eventType": 66, "filter": 0},
{"eventGroupType": 12, "eventType": 82, "filter": 0},
{"eventGroupType": 12, "eventType": 83, "filter": 0},
{"eventGroupType": 1, "eventType": 90, "filter": 0},
],
"notify_on": True,
"on": True,
"onetime_disable_on": False,
"onetime_disable_time": 0,
"onetime_enable_on": False,
"onetime_enable_time": 0,
"reason": 2,
"rec_sch_custom_det_app_list": [
{"custom1_app_det": 0, "custom2_app_det": 0},
{"custom1_app_det": 0, "custom2_app_det": 0},
],
"rec_schedule": "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
"rec_schedule_on": False,
"stream_profile": "1,1,1,1,1,1",
"streaming_on": False,
"wifi_ssid": "SSID",
},
"success": True,
}
DSM_6_SURVEILLANCE_STATION_HOME_MODE_SWITCH = {"success": True}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/ 0000775 0000000 0000000 00000000000 14762405272 0021233 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_7/__init__.py 0000664 0000000 0000000 00000002412 14762405272 0023343 0 ustar 00root root 0000000 0000000 """DSM 7 datas."""
from .const_7_api_auth import (
DSM_7_AUTH_LOGIN,
DSM_7_AUTH_LOGIN_2SA,
DSM_7_AUTH_LOGIN_2SA_OTP,
)
from .const_7_api_info import DSM_7_API_INFO
from .core.const_7_core_external_usb import (
DSM_7_CORE_EXTERNAL_USB_DS1821_PLUS_EXTERNAL_USB,
)
from .core.const_7_core_upgrade import DSM_7_CORE_UPGRADE_FALSE, DSM_7_CORE_UPGRADE_TRUE
from .dsm.const_7_dsm_info import DSM_7_DSM_INFORMATION
from .file_station.const_7_file_station import (
DSM_7_FILE_STATION_FILES,
DSM_7_FILE_STATION_FOLDERS,
)
from .photos.const_7_photo import (
DSM_7_FOTO_ALBUMS,
DSM_7_FOTO_ITEMS,
DSM_7_FOTO_ITEMS_SEARCHED,
DSM_7_FOTO_ITEMS_SHARED_ALBUM,
DSM_7_FOTO_SHARED_ITEMS,
)
from .virtual_machine_manager.const_7_vmm import DSM_7_VMM_GUESTS
__all__ = [
"DSM_7_AUTH_LOGIN",
"DSM_7_AUTH_LOGIN_2SA",
"DSM_7_AUTH_LOGIN_2SA_OTP",
"DSM_7_API_INFO",
"DSM_7_CORE_EXTERNAL_USB_DS1821_PLUS_EXTERNAL_USB",
"DSM_7_CORE_UPGRADE_FALSE",
"DSM_7_CORE_UPGRADE_TRUE",
"DSM_7_DSM_INFORMATION",
"DSM_7_FILE_STATION_FILES",
"DSM_7_FILE_STATION_FOLDERS",
"DSM_7_FOTO_ALBUMS",
"DSM_7_FOTO_ITEMS",
"DSM_7_FOTO_ITEMS_SHARED_ALBUM",
"DSM_7_FOTO_ITEMS_SEARCHED",
"DSM_7_FOTO_SHARED_ITEMS",
"DSM_7_VMM_GUESTS",
]
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/const_7_api_auth.py 0000664 0000000 0000000 00000001065 14762405272 0025035 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.API.Auth data."""
from tests.const import (
DEVICE_TOKEN,
ERROR_AUTH_OTP_NOT_SPECIFIED,
SESSION_ID,
SYNO_TOKEN,
)
DSM_7_AUTH_LOGIN = {
"data": {"is_portal_port": False, "sid": SESSION_ID, "synotoken": SYNO_TOKEN},
"success": True,
}
DSM_7_AUTH_LOGIN_2SA = ERROR_AUTH_OTP_NOT_SPECIFIED
DSM_7_AUTH_LOGIN_2SA_OTP = {
"data": {
"device_id": DEVICE_TOKEN,
"is_portal_port": False,
"sid": SESSION_ID,
"synotoken": SYNO_TOKEN,
},
"success": True,
}
DSM_7_AUTH_LOGOUT = {"success": True}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/const_7_api_info.py 0000664 0000000 0000000 00000573350 14762405272 0025042 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.API.Info data."""
DSM_7_API_INFO = {
"data": {
"SYNO.AME.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AME.License": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AME.Pack": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AME.Payment": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Auth": {"maxVersion": 7, "minVersion": 1, "path": "entry.cgi"},
"SYNO.API.Auth.Key": {
"maxVersion": 7,
"minVersion": 7,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Auth.Key.Code": {
"maxVersion": 7,
"minVersion": 7,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Auth.RedirectURI": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Auth.Type": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Auth.UIConfig": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.API.OTP": {"maxVersion": 1, "minVersion": 1, "path": "otp.cgi"},
"SYNO.ActiveBackup.Activation": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Agent": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Agent.Device": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Agentless": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Delegation": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Device": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Inventory": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Log": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.NFSPrivilege": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Overview": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Report": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.ReportConfig": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.ReportGet": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.RestoreVM": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Setting": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Share": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Storage": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Task": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.TaskTemplate": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.UserGroup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Wrapper.Domain": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Wrapper.LDAP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Wrapper.NFS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveBackup.Wrapper.NFSPrivilege": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveInsight.CompleteCollection": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveInsight.License": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveInsight.Package": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ActiveInsight.Setting": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AddressBook.Contact": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AddressBook.ContactGroup": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AddressBook.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioPlayer": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.AudioPlayer.Stream": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Auth.ForgotPwd": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Auth.RescueEmail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Backup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App.Restore": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App2.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.App2.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.AutoBackup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Backup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Config.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Lunbackup": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository.Certificate": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Repository.LoginPort": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.NetworkBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.VersionBackup.Config": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.VersionBackup.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.VersionBackup.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Service.VersionBackup.Version.History": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Share.Restore": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Source.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.AmazonCloudDrive.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Azure.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Connect.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Dropbox.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.GoogleDrive.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.HiDrive.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.OpenStack.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.OpenStack.Region": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.S3.Bucket": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Local": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.Share.Rsync": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.WebDAV.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Storage.hubiC.Container": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Target.Config": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Task": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Backup.Version.History": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Btrfs.Replica.Core": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Bucket": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Share.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Snapshot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Transform": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.C2FS.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.CLog": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Cluster": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Cluster.Member": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Guest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Guest.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Guest.VNC": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.GuestReplica": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.GuestSnap": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.GuestSnap.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.HA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.License": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.License.Pro": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.License.VDSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Network.SRIOV": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Repo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Resource": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.VDisk": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.CCC.VNic": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.AuthForeign": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Cal": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Chatbot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Contact": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Event": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.InviteMail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.InviteMailInit": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Proxy": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.SendMail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Setting": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Share.Priv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.SyncUser": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Timezone": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.Todo": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Cal.UserAction": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.Addressbook": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.AdminSetting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.Contact": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.ExternalSource": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.Label": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Contacts.OU": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ACL": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ActionPriv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ActionPriv.Role": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.AccessControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPortal.ReverseProxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.App": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.AppPriv.Rule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BackgroundTask": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Backup.ED": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.BandwidthControl.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Cache": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Identity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.ServerInfo": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CMS.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CRT": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.CSR": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.LetsEncrypt.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Certificate.Tencent": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.CurrentConnection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Ethernet": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.ExtIP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Provider": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Record": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.Synology": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DDNS.TWNIC": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DSMNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DSMNotify.MailContent": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DSMNotify.Strings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DataCollect.Application": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Defs": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Initdata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.JSUIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.PersonalUpdater": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.SessionData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.UIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Desktop.Upgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Azure.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Conf": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.Domain.Trust": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.BaseDN": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Login.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Profile": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.Refresh": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.LDAP.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.OIDC.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.CAS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.IWA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.SAML": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.SAML.Metadata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.SAML.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.SSO.utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Directory.WebSphere.SSO": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.Common": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.Debug": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.Domain": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.DomainJoin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.DomainService": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.DomainValidation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.LDAP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DirectoryServiceCheck.Progress": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.DisableAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EW.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EventScheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.EventScheduler.Root": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Bluetooth.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.DefaultPermission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.BonjourSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Driver": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.Network.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.OAuth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Printer.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.EUnit": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.USB": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.Storage.eSATA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ExternalDevice.UPS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Factory.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Factory.Manutild": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileHandle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.AFP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.ChrootUser": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.SFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.FTP.Security": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.AdvancedSetting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.ConfBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.IDMap": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.Kerberos": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.NFS.SharePrivilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ReflinkCopy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.Rsync.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB.ConfBackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB.Control": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.SMB.MSDFS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ServiceDiscovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.FileServ.ServiceDiscovery.WSTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Findhost": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.ExtraAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.Member": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Group.ValidLocalAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.GroupSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.BeepControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.FanSpeed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Hibernation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.LCM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.Led.Brightness": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.MemoryLayout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.NeedReboot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.OOBManagement": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerRecovery": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.PowerSchedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.RemoteFanStatus": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.SpectreMeltdown": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.VideoTranscoding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Hardware.ZRAM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Help": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.FCTarget": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.LUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Lunbkp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Replication": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ISCSI.VMware": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.IndexFolder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.MediaConverter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.Scheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MediaIndexing.ThumbnailQuality": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Account": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Logout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.MyDSCenter.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Authentication": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Authentication.Cert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Bond": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Ethernet": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Ethernet.External": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.IPv6.Router.Prefix": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Interface": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.MACClone": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.OVS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.PPPoE.Relay": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Gateway.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.Router.Static.Route": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.RouterRules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.TrafficControl.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.UPnPServer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.L2TP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPN.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPNWithConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.OpenVPNWithConf.Certs": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.VPN.PPTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Network.WOL": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.NormalUser": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.NormalUser.LoginNotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.CustomizedData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.FilterSettings": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.FilterSettings.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.FilterSettings.Template": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.Variables": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Advance.WarningPercentage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.CMS.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Line": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Auth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Oauth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Mail.Profile.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.AuthToken": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mail": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Mobile": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Push.Webhook.Provider": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.SMS.Provider": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Notification.Sysnotify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OAuth.Scope": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OAuth.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Admin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.EnforcePolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.OTP.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.AutoUpgrade.Progress": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Control": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.FakeIFrame": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Installation.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Legal.PreRelease": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.MyDS": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.MyDS.Purchase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Progress": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Screenshot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Screenshot.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Server": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting.Update": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Setting.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Thumb": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Thumb.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Package.Uninstallation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Event": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Mobile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalNotification.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PersonalSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PhotoViewer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Polling.Data": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Compatibility": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterConf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.RouterList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.PortForwarding.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Promotion.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Promotion.PreInstall": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Hostname": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.RegisterSite": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.SNI": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickConnect.Upnp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickStart.Info": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.QuickStart.Install": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Quota": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.RecycleBin.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.Language": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.DateTimeFormat": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Region.NTP.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Analyzer.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.History": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Redirect": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Report.Util": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.ResetAdmin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SNMP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.AutoBlock.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Embed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DSM.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.DoS": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Adapter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Geoip": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Profile.Apply": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Security.Firewall.Rules.Serv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Operation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SecurityScan.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Service.PortInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Crypto.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.CryptoFile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.AutoKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.Key": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.MachineKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.KeyManager.Store": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Migration.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Permission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.PermissionReport": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Share.Snapshot": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Initdata": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Sharing.Session": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Device": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Trusted": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.Untrusted": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SmartBlock.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Disk": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Disk.FWUpgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Storage.iSCSILUN": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Form": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SupportForm.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Synohdpack": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.FileTransfer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.PersonalActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Setting.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.SyslogClient.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Process": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ProcessGroup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.ResetButton": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.SystemHealth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.System.Utilization": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TFTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TaskScheduler": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TaskScheduler.Root": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Terminal": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.AppPortalLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Desktop": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.FileSharingLogin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Theme.Login": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.TrustDevice": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Tuned": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UISearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.AutoUpgrade": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Cluster.Patch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Cluster.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Cluster.Server.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Group.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.GroupInstall.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.JuniorModeData": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Patch": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.PreCheck": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.RemoteAction": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Server.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Upgrade.Setting": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.Home": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordConfirm": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordExpiry": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordMeter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.PasswordPolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.User.UsernamePolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.UserSettings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Virtualization.Host.Capability": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.DSM.External": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.Security.HTTPCompression": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Core.Web.Security.TLSProfile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node.Credential": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DR.Node.Session": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.FindMe": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Info": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.Network": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.PortEnable": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DSM.PushNotification": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Default.API": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DisasterRecovery.Retention": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/btsearch.cgi",
},
"SYNO.DownloadStation.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "DownloadStation/info.cgi",
},
"SYNO.DownloadStation.RSS.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/RSSfeed.cgi",
},
"SYNO.DownloadStation.RSS.Site": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/RSSsite.cgi",
},
"SYNO.DownloadStation.Schedule": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/schedule.cgi",
},
"SYNO.DownloadStation.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "DownloadStation/statistic.cgi",
},
"SYNO.DownloadStation.Task": {
"maxVersion": 3,
"minVersion": 1,
"path": "DownloadStation/task.cgi",
},
"SYNO.DownloadStation2.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Captcha": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Package.Info": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Package.Module": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Package.Service": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.RSS.Feed": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.RSS.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.RSS.Item": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.AutoExtraction": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.BT": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.BTSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Emule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Emule.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.FileHosting": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.FtpHttp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Global": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Nzb": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Rss": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Settings.Scheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.Peer": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.BT.Tracker": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.Complete": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.List.Polling": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.NZB.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.NZB.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.Source": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Task.eMule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.Thumbnail": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.eMule.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.DownloadStation2.eMule.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.Request.Polling": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Entry.SocketIo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.BackgroundTask": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CheckExist": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CheckPermission": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Compress": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CopyMove": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.CreateFolder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Delete": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.DirSize": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.External.GoogleDrive": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Extract": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Favorite": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.FormUpload": {
"maxVersion": 2,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.MD5": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Mount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Mount.List": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.PhotoUpload": {
"maxVersion": 3,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.ACLOwner": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.CompressSize": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Property.Mtime": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Rename": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Search": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Search.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Sharing": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Sharing.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Snapshot": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Thumb": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Timeout": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.UIString": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Upload": {
"maxVersion": 3,
"minVersion": 2,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.UserGrp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.GDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.Protocol": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VFS.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.VirtualFolder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Worm": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FileStation.Worm.Lock": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.AppIndexing.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Bookmark": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.SearchHistory": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.Spotlight": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Elastic.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File.Cover": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.File.Thumbnail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Folder": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Highlight": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Indicate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Search": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.FileIndexing.Term": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Preference": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Finder.UserGrp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.List": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FolderSharing.Thumb": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.BackgroundTask.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.BackgroundTask.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Album": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Category": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Concept": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.ConditionAlbum": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Diff": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.GeneralTag": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Geocoding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Item": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.NormalAlbum": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Person": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.RecentlyAdded": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Timeline": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Browse.Unit": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Development.Admin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Favorite": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Index": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Notification": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.PhotoRequest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.PublicSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Search.Filter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Search.Search": {
"maxVersion": 6,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Setting.Admin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Setting.Guest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Setting.MobileCompatibility": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Setting.TeamSpace": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Setting.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Setting.Wizard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Sharing.Misc": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Sharing.Passphrase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Streaming": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Thumbnail": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Udc": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Upload.ConvertedFile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Upload.Item": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.Upload.PhotoRequestItem": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Foto.UserInfo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.BackgroundTask.File": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Concept": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Diff": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.GeneralTag": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Geocoding": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Item": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Person": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.RecentlyAdded": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Timeline": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Browse.Unit": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Download": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Index": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Search.Filter": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Search.Search": {
"maxVersion": 6,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Sharing.FolderBatchPermission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Sharing.FolderPermission": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Sharing.Passphrase": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Streaming": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Thumbnail": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Upload.ConvertedFile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.FotoTeam.Upload.Item": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.HCI.Cluster": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.HCI.Guest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.HCI.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.HCI.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.License.HA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Client.CA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.History": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.RecvRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.LogCenter.Setting.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Lunbackup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Attachment": {
"maxVersion": 8,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.CMSCertificate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Draft": {
"maxVersion": 6,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Filter": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Info": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Label": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.MailMerge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.MailTemplate": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.MailTrack": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Mailbox": {
"maxVersion": 7,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Message": {
"maxVersion": 10,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.PGPKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.SearchHistory": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.CustomAutoReply": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.CustomLogo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.ForwardReply": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.General": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.Lab": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.MailTrack": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.ManualConfig": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.Notification": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.PGP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.POP3": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.PriorityMailbox": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.SMTP": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Setting.SharingLink": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Signature": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.SpamRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Sticker": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Theme": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.Thread": {
"maxVersion": 10,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.UserDataCollect": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailClient.UserPreference": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Account.Detail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Account.Maildir": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Account.Quota": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Alias": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Audit.AdminLog": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Audit.DovecotLog": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Audit.SearchTask": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Audit.SearchTaskResult": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Audit.TransactionLog": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Cluster": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.CreateWizard": {
"maxVersion": 7,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Delegation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Diagnosis": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Disclaimer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Domain": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Domain.AdditionalDomain": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Domain.BCC": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Domain.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Domain.Settings": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Domain.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.FullTextSearch": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.IMAP_POP3": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.IMAP_POP3_ADVANCED": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.License": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.License.BitDefender": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.License.Payment": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Log.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Log.Security": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.MailImportExport": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.MailPlus": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Normal.Util": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Personal.AutoReply": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Personal.Forward": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Personal.ForwardReply": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Queue": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.RemoteMigrate": {
"maxVersion": 5,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.SMTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.SMTP.Delivery": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.SMTP.General": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.SMTP.RelayControl": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.SMTP.Security": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.AttachmentFilter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.BlackwhiteList": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.DailyQuota": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.Dane": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.DkimTrustSender": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.Greylist": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.MCP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.MCPQuarantine": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.PostScreen": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Security.VirusQuarantine": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.SecurityDashboard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.ServerList": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Service.SMTP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Spam.ReportedHam": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Spam.ReportedSpam": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Spam.SpamAssassin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Statistic": {
"maxVersion": 4,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.UserGroupPolicy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Util": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.MailPlusServer.Version": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Common": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.OAUTH.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Contacts": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.PersonMailAccount.Mail.Oauth": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Application.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.MailAccount": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.MailAccount.Contacts": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.MailAccount.Mail": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Conf": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Device": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Event": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Filter": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.GDPR": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Identifier": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Mobile": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Settings": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Notification.VapidPublicKey": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Profile": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Personal.Profile.Photo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Remote.Credential": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Remote.Credential.Challenge": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Remote.Credential.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Remote.Credential.Verifier": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.EventRule": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ResourceMonitor.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Client.Job": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.S2S.Server.Pair": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.APIRunner": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.APIRunner.Chatbot": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Encryption": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Group": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Group.Members": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SAS.Guest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Common.Version": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Job": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Explore.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Client.Fuse.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Common.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Common.Statistic": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Common.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Common.Version": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Explore.File": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Explore.Folder": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Explore.Job": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Explore.Target": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Explore.Version": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SDS.Backup.Server.Fuse.Target": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.AMFA.Mail.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.AMFA.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.AMFA.SuggestConn": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator.Registration": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator.Registration.Ex": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator.Request": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Authenticator.Verdict": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Fido.Manage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Fido.Manage.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Fido.Register": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Fido.Register.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Method": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Method.Admin": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Method.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Package.Ex": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecureSignIn.Package.Request": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Checklist": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Checklist.Alert": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Conf.Location": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.LoginActivity": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.LoginActivity.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SecurityAdvisor.Report.HTML": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ShareLink.Action": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ShareLink.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.ShareLink.Manage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Snap.Usage.Share": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.BtrfsDedupe": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Cache.Protection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Check": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.DetectedPool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.DualEnclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Enclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.EncryptionKeyVault": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.EncryptionKeyVault.UnlockMode": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Flashcache": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.HddMan": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.KMIP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Pool": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Scrubbing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Smart": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Smart.Scheduler": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Spare": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Spare.Conf": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.TaipeiEnclosure": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Volume": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Volume.Installer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Storage.CGI.Volume.OfflineOp": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SupportService.Setting": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Activation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.AdvanceSharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.AdvanceSharing.Public": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.AppIntegration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Authentication": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Connection": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.DBUsage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.DSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Dashboard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Files": {
"maxVersion": 10,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.HybridShare.Privilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Index": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Info": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.KeyManagement": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Labels": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Metrics": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Metrics.Token": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Migration": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Migration.UserHome": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Mobile.Notification": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node.Delete": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node.Download": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Node.Restore": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Notifications": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Office": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Photos": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Privilege": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Profiles": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Revisions": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.SCIM.Photo": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.SCIM.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Services.DocumentViewer": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Services.SynologyChat": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Services.VideoStation": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Settings": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Shard": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Share": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Share.Priv": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Sharing": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Sharing.Report": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Statistics": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.String": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Tasks": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.TeamFolders": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Trash": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Users": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDrive.Webhooks": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Config": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Connection": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Session": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.SynologyDriveShareSync.Session.Set": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.TextEditor": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.TextEditor.Preference": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Btrfs.Replica": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Credential": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Plan": {
"maxVersion": 3,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Plan.DRSite": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Plan.MainSite": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Plan.Site": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VMMDR.Topology": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VideoPlayer.Subtitle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.VideoPlayer.SynologyDrive.Subtitle": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Guest": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Guest.Action": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Guest.Image": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Host": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Network": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Storage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.API.Task.Info": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Cluster": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Guest": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Guest.Action": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Guest.Image": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Guest.P2V": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.GuestProtect.Plan": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.GuestProtect.Policy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.GuestProtect.Snap": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.HA": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.HA.Setting": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Host": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.License": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.License.Pro": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.License.VDSM": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Network": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Network.SRIOV": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Repo": {
"maxVersion": 2,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Setting.General": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Setting.Notify": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Setting.UI": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Sharing.VNC": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.User": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.Virtualization.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebDAV.CalDAV.Calendar": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebDAV.Common": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebRTC.Proxy": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebRTC.Proxy.Sharing": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Backup": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Default": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Docker": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.ErrorPage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.HTTP.VHost": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.PHP": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.PHP.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Package": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Python": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Python.Profile": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.ScriptLanguage": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.ScriptLanguage.Utils": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Shortcut": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Status": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.Task": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.WebService.Portal": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.WebService.Portal.Log": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
"SYNO.WebStation.WebService.Service": {
"maxVersion": 1,
"minVersion": 1,
"path": "entry.cgi",
"requestFormat": "JSON",
},
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/core/ 0000775 0000000 0000000 00000000000 14762405272 0022163 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_7/core/__init__.py 0000664 0000000 0000000 00000000037 14762405272 0024274 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Core.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/core/const_7_core_external_usb.py 0000664 0000000 0000000 00000017012 14762405272 0027675 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Core.ExternalDevice.Storage.USB data."""
DSM_7_CORE_EXTERNAL_USB_DS1821_PLUS_NO_EXTERNAL_USB = {
"data": {"devices": []},
"success": True,
}
DSM_7_CORE_EXTERNAL_USB_DS1821_PLUS_EXTERNAL_USB = {
"data": {
"devices": [
{
"dev_id": "usb1",
"dev_title": "USB Disk 1",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "ntfs",
"filesystem": "ntfs",
"name_id": "usb1p1",
"partition_title": "USB Disk 1 Partition 1",
"share_name": "usbshare1-1",
"status": "normal",
"total_size_mb": 1024,
"used_size_mb": 10,
},
{
"dev_fstype": "vfat",
"filesystem": "FAT32",
"name_id": "usb1p2",
"partition_title": "USB Disk 1 Partition 2",
"share_name": "usbshare1-2",
"status": "normal",
"total_size_mb": 1024,
"used_size_mb": 0,
},
],
"producer": "PNY",
"product": "Flash Drive",
"progress": "",
"status": "normal",
"total_size_mb": 122070,
},
{
"dev_id": "usb2",
"dev_title": "USB Disk 2",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "ext4",
"filesystem": "ext4",
"name_id": "usb2p1",
"partition_title": "USB Disk 2 Partition 1",
"share_name": "usbshare2",
"status": "normal",
"total_size_mb": 15138295,
"used_size_mb": 10899326,
}
],
"producer": "Western Digital Technologies, Inc.",
"product": "easystore 264D",
"progress": "",
"status": "normal",
"total_size_mb": 15259648,
},
{
"dev_id": "usb3",
"dev_title": "USB Disk 3",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "vfat",
"filesystem": "FAT32",
"name_id": "usb3p1",
"partition_title": "USB Disk 3 Partition 1",
"share_name": "usbshare3-1",
"status": "normal",
"total_size_mb": 197,
"used_size_mb": 10,
},
{
"dev_fstype": "hfsplus",
"filesystem": "hfsplus",
"name_id": "usb3p2",
"partition_title": "USB Disk 3 Partition 2",
"share_name": "usbshare3-2",
"status": "normal",
"total_size_mb": 117020,
"used_size_mb": 13965,
},
],
"producer": "SanDisk Corp.",
"product": " SanDisk 3.2Gen1",
"progress": "",
"status": "normal",
"total_size_mb": 117348,
},
{
"dev_id": "usb4",
"dev_title": "USB Disk 4",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "exfat",
"filesystem": "exfat",
"name_id": "usb4p1",
"partition_title": "USB Disk 4 Partition 1",
"share_name": "usbshare4",
"status": "normal",
"total_size_mb": 241397,
"used_size_mb": 1,
}
],
"producer": "PNY",
"product": "USB 3.0 FD",
"progress": "",
"status": "normal",
"total_size_mb": 241408,
},
{
"dev_id": "usb5",
"dev_title": "USB Disk 5",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "vfat",
"filesystem": "FAT32",
"name_id": "usb5p1",
"partition_title": "USB Disk 5 Partition 1",
"share_name": "usbshare5-1",
"status": "normal",
"total_size_mb": 3886,
"used_size_mb": 0,
},
{
"dev_fstype": "vfat",
"filesystem": "FAT32",
"name_id": "usb5p2",
"partition_title": "USB Disk 5 Partition 2",
"share_name": "usbshare5-2",
"status": "normal",
"total_size_mb": 32,
"used_size_mb": 27,
},
],
"producer": "SanDisk Corp.",
"product": "Cruzer Titanium+",
"progress": "",
"status": "normal",
"total_size_mb": 3919,
},
{
"dev_id": "usb6",
"dev_title": "USB Disk 6",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "ntfs",
"filesystem": "ntfs",
"name_id": "usb6p1",
"partition_title": "USB Disk 6 Partition 1",
"share_name": "usbshare6",
"status": "normal",
"total_size_mb": 715371,
"used_size_mb": 203585,
}
],
"producer": "Western Digital Technologies, Inc.",
"product": "My Passport Essential (WDBACY)",
"progress": "",
"status": "normal",
"total_size_mb": 715372,
},
{
"dev_id": "usb8",
"dev_title": "USB Disk 8",
"dev_type": "usbDisk",
"formatable": True,
"partitions": [
{
"dev_fstype": "unknown",
"filesystem": "",
"name_id": "usb8",
"partition_title": "USB Disk 8",
"share_name": "",
"status": "normal",
"total_size_mb": "",
}
],
"producer": "Genesys Logic, Inc.",
"product": "All-in-One Cardreader",
"progress": "",
"status": "normal",
"total_size_mb": 29,
},
]
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/core/const_7_core_upgrade.py 0000664 0000000 0000000 00000001157 14762405272 0026634 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Core.Upgrade data."""
DSM_7_CORE_UPGRADE_FALSE = {"data": {"update": {"available": False}}, "success": True}
DSM_7_CORE_UPGRADE_TRUE = {
"data": {
"update": {
"available": True,
"reboot": "now",
"restart": "some",
"type": "nano",
"version": "7.0.1-42218 Update 3",
"version_details": {
"buildnumber": 42218,
"major": 7,
"micro": 1,
"minor": 0,
"nano": 3,
"os_name": "DSM",
},
}
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/dsm/ 0000775 0000000 0000000 00000000000 14762405272 0022016 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_7/dsm/__init__.py 0000664 0000000 0000000 00000000036 14762405272 0024126 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.DSM.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/dsm/const_7_dsm_info.py 0000664 0000000 0000000 00000001556 14762405272 0025631 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.DSM.Info data."""
DSM_7_DSM_INFORMATION_DS213_PLUS = {
"data": {
"codepage": "enu",
"model": "DS213+",
"ram": 512,
"serial": "XXXXXXXXXXX",
"temperature": 30,
"temperature_warn": False,
"time": "Thu Apr 30 14:57:35 2020",
"uptime": 3258607,
"version": "24922",
"version_string": "DSM 7.0-41222",
},
"success": True,
}
DSM_7_DSM_INFORMATION_DS918_PLUS = {
"data": {
"codepage": "fre",
"model": "DS918+",
"ram": 4096,
"serial": "1920PDN001501",
"temperature": 40,
"temperature_warn": False,
"time": "Sun Mar 29 19:33:41 2020",
"uptime": 155084,
"version": "24922",
"version_string": "DSM 7.0-41222",
},
"success": True,
}
DSM_7_DSM_INFORMATION = DSM_7_DSM_INFORMATION_DS918_PLUS
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/file_station/ 0000775 0000000 0000000 00000000000 14762405272 0023713 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_7/file_station/__init__.py 0000664 0000000 0000000 00000000046 14762405272 0026024 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.FileStation.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/file_station/const_7_file_station.py 0000664 0000000 0000000 00000014007 14762405272 0030403 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.FileStation.List data."""
DSM_7_FILE_STATION_FOLDERS = {
"data": {
"offset": 0,
"shares": [
{
"additional": {
"mount_point_type": "",
"owner": {"gid": 0, "group": "root", "uid": 0, "user": "root"},
"perm": {
"acl": {
"append": True,
"del": True,
"exec": True,
"read": True,
"write": True,
},
"acl_enable": True,
"adv_right": {
"disable_download": False,
"disable_list": False,
"disable_modify": False,
},
"is_acl_mode": True,
"is_share_readonly": False,
"posix": 777,
"share_right": "RW",
},
"real_path": "/volume1/backup",
"sync_share": False,
"time": {
"atime": 1736098543,
"crtime": 1669466095,
"ctime": 1736083030,
"mtime": 1733848814,
},
"volume_status": {
"freespace": 1553335107584,
"readonly": False,
"totalspace": 3821146505216,
},
},
"isdir": True,
"name": "backup",
"path": "/backup",
},
{
"additional": {
"mount_point_type": "",
"owner": {
"gid": 100,
"group": "users",
"uid": 1046,
"user": "hass",
},
"perm": {
"acl": {
"append": True,
"del": True,
"exec": True,
"read": True,
"write": True,
},
"acl_enable": True,
"adv_right": {
"disable_download": False,
"disable_list": False,
"disable_modify": False,
},
"is_acl_mode": True,
"is_share_readonly": False,
"posix": 777,
"share_right": "RW",
},
"real_path": "/volume1/homes/hass",
"sync_share": False,
"time": {
"atime": 1736109199,
"crtime": 1643818781,
"ctime": 1736109071,
"mtime": 1736109071,
},
"volume_status": {
"freespace": 1553335107584,
"readonly": False,
"totalspace": 3821146505216,
},
},
"isdir": True,
"name": "home",
"path": "/home",
},
],
"total": 2,
},
"success": True,
}
DSM_7_FILE_STATION_FILES = {
"data": {
"files": [
{
"additional": {
"mount_point_type": "",
"owner": {
"gid": 105733,
"group": "SynologyPhotos",
"uid": 1046,
"user": "hass",
},
"perm": {
"acl": {
"append": True,
"del": True,
"exec": True,
"read": True,
"write": True,
},
"is_acl_mode": True,
"posix": 711,
},
"real_path": "/volume1/homes/hass/Photos",
"size": 50,
"time": {
"atime": 1735700476,
"crtime": 1723653032,
"ctime": 1723653464,
"mtime": 1723653464,
},
"type": "",
},
"isdir": True,
"name": "Photos",
"path": "/home/Photos",
},
{
"additional": {
"mount_point_type": "",
"owner": {
"gid": 100,
"group": "users",
"uid": 1046,
"user": "hass",
},
"perm": {
"acl": {
"append": True,
"del": True,
"exec": True,
"read": True,
"write": True,
},
"is_acl_mode": True,
"posix": 711,
},
"real_path": "/volume1/homes/hass/3e57d06c.tar",
"size": 1660753920,
"time": {
"atime": 1736105132,
"crtime": 1736105128,
"ctime": 1736105132,
"mtime": 1736105132,
},
"type": "TAR",
},
"isdir": False,
"name": "3e57d06c.tar",
"path": "/home/3e57d06c.tar",
},
],
"offset": 0,
"total": 2,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/photos/ 0000775 0000000 0000000 00000000000 14762405272 0022547 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_7/photos/__init__.py 0000664 0000000 0000000 00000000037 14762405272 0024660 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Foto.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/photos/const_7_photo.py 0000664 0000000 0000000 00000020765 14762405272 0025720 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Foto.Browse.Album data."""
DSM_7_FOTO_ALBUMS = {
"data": {
"list": [
{
"condition": {"folder_filter": [597], "user_id": 1},
"create_time": 1674514932,
"end_time": 1640958550,
"id": 4,
"item_count": 3,
"name": "Album1",
"owner_user_id": 1,
"passphrase": "",
"shared": False,
"sort_by": "default",
"sort_direction": "default",
"start_time": 1601653233,
"type": "condition",
"version": 197920,
},
{
"cant_migrate_condition": {},
"condition": {},
"create_time": 1668690757,
"end_time": 1668538602,
"freeze_album": False,
"id": 1,
"item_count": 1,
"name": "Album2",
"owner_user_id": 1,
"passphrase": "",
"shared": False,
"sort_by": "default",
"sort_direction": "default",
"start_time": 1668538602,
"temporary_shared": False,
"type": "normal",
"version": 195694,
},
{
"cant_migrate_condition": {},
"condition": {},
"create_time": 1718658534,
"end_time": 1719075481,
"freeze_album": False,
"id": 3,
"item_count": 1,
"name": "Album3",
"owner_user_id": 7,
"passphrase": "NiXlv1i2N",
"shared": False,
"sort_by": "default",
"sort_direction": "default",
"start_time": 1659724703,
"temporary_shared": False,
"type": "normal",
"version": 102886,
},
]
},
"success": True,
}
DSM_7_FOTO_ITEMS = {
"success": True,
"data": {
"list": [
{
"id": 29807,
"filename": "20221115_185642.jpg",
"filesize": 2644859,
"time": 1668538602,
"indexed_time": 1668564550862,
"owner_user_id": 1,
"folder_id": 597,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "29807_1668560967",
"unit_id": 29807,
}
},
},
{
"id": 29808,
"filename": "20221115_185643.jpg",
"filesize": 2644859,
"time": 1668538602,
"indexed_time": 1668564550862,
"owner_user_id": 0,
"folder_id": 597,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "notready",
"preview": "broken",
"sm": "ready",
"cache_key": "29808_1668560967",
"unit_id": 29808,
}
},
},
{
"id": 29809,
"filename": "20221115_185644.jpg",
"filesize": 2644859,
"time": 1668538602,
"indexed_time": 1668564550862,
"owner_user_id": 1,
"folder_id": 597,
"type": "photo",
"additional": {
"thumbnail": {
"m": "notready",
"xl": "notready",
"preview": "broken",
"sm": "ready",
"cache_key": "29809_1668560967",
"unit_id": 29809,
}
},
},
]
},
}
DSM_7_FOTO_ITEMS_SHARED_ALBUM = {
"success": True,
"data": {
"list": [
{
"id": 29807,
"filename": "20221115_185645.jpg",
"filesize": 2644859,
"time": 1668538602,
"indexed_time": 1668564550862,
"owner_user_id": 7,
"folder_id": 597,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "29810_1668560967",
"unit_id": 29807,
}
},
},
]
},
}
DSM_7_FOTO_SHARED_ITEMS = {
"success": True,
"data": {
"list": [
{
"id": 77,
"filename": "shared_1.jpg",
"filesize": 1404758,
"time": 1627062628,
"indexed_time": 1628329471168,
"owner_user_id": 0,
"folder_id": 17,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "77_1628323785",
"unit_id": 77,
}
},
},
{
"id": 490,
"filename": "shared_2.jpg",
"filesize": 888192,
"time": 1627062618,
"indexed_time": 1628329516646,
"owner_user_id": 0,
"folder_id": 37,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "490_1628323817",
"unit_id": 490,
}
},
},
{
"id": 96,
"filename": "shared_3.jpg",
"filesize": 4903571,
"time": 1626987559,
"indexed_time": 1628329472531,
"owner_user_id": 0,
"folder_id": 18,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "96_1628323786",
"unit_id": 96,
}
},
},
]
},
}
DSM_7_FOTO_ITEMS_SEARCHED = {
"success": True,
"data": {
"list": [
{
"id": 12340,
"filename": "search_1.jpg",
"filesize": 2644859,
"time": 1668538602,
"indexed_time": 1668564550862,
"owner_user_id": 1,
"folder_id": 597,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "12340_1668560967",
"unit_id": 12340,
}
},
},
{
"id": 12341,
"filename": "search_2.jpg",
"filesize": 2644859,
"time": 1668538602,
"indexed_time": 1668564550862,
"owner_user_id": 1,
"folder_id": 597,
"type": "photo",
"additional": {
"thumbnail": {
"m": "ready",
"xl": "ready",
"preview": "broken",
"sm": "ready",
"cache_key": "12341_1668560967",
"unit_id": 12341,
}
},
},
]
},
}
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/virtual_machine_manager/ 0000775 0000000 0000000 00000000000 14762405272 0026077 5 ustar 00root root 0000000 0000000 py-synologydsm-api-2.7.1/tests/api_data/dsm_7/virtual_machine_manager/__init__.py 0000664 0000000 0000000 00000000051 14762405272 0030204 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Virtualization.* datas."""
py-synologydsm-api-2.7.1/tests/api_data/dsm_7/virtual_machine_manager/const_7_vmm.py 0000664 0000000 0000000 00000010370 14762405272 0030705 0 ustar 00root root 0000000 0000000 """DSM 7 SYNO.Virtualization.Guest data."""
DSM_7_VMM_GUESTS = {
"data": {
"canHA": False,
"canMove": True,
"guests": [
{
"autorun": 0,
"birth_info": {"desc": "", "from": "vmm", "method": "create"},
"boot_from": "disk",
"can_ha": True,
"cpu_passthru": True,
"cpu_pin_num": 0,
"cpu_weight": 8,
"desc": "vDSM test",
"dsm_version": "DSM 7.2.1-69057 Update 5",
"guest_id": "a39d0628-380e-42f8-8cb6-a00d6b930fa0",
"ha_status": "",
"ha_status_detail": "",
"ha_status_type": "",
"host_id": "f0310cdf-fa88-47d3-9e9e-be36fb8e121b",
"host_name": "KrosseKrabbe",
"host_ram_size": 6291456,
"http_port": 5000,
"https_enable": False,
"https_port": 5001,
"https_redirect": False,
"hyperv_enlighten": False,
"ip": "",
"is_acting": False,
"is_general_vm": False,
"is_online": False,
"is_replica_support": True,
"is_rs_install": True,
"iso_images": ["unmounted", "unmounted"],
"kb_layout": "Default",
"name": "vdsm",
"ram_used": 0,
"repo_id": "3a69ac31-004c-4b02-9b36-609099bc9be6",
"repo_name": "KrosseKrabbe - VM Storage 1",
"snap_num": 0,
"status": "shutdown",
"status_desc": "",
"status_type": "healthy",
"usb_device_name": None,
"usbs": ["unmounted", "unmounted", "unmounted", "unmounted"],
"use_ovmf": False,
"vcpu_num": 1,
"vcpu_usage": "",
"vdisk_num": 3,
"video_card": "cirrus",
"vram_size": 1048576,
},
{
"autorun": 1,
"birth_info": {"desc": "", "from": "vmm", "method": "create"},
"boot_from": "disk",
"can_ha": True,
"cpu_passthru": True,
"cpu_pin_num": 0,
"cpu_weight": 256,
"desc": "",
"dsm_version": "",
"guest_id": "2b4ec8c8-2bec-4daa-b36d-1a47b639254f",
"ha_status": "",
"ha_status_detail": "",
"ha_status_type": "",
"has_agent": False,
"host_id": "f0310cdf-fa88-47d3-9e9e-be36fb8e121b",
"host_name": "KrosseKrabbe",
"host_net_ifs": ["f0310cdf-fa88-47d3-9e9e-be36fb8e121b_bond0"],
"host_ram_size": 6291456,
"http_port": 5000,
"https_enable": False,
"https_port": 5001,
"https_redirect": False,
"hyperv_enlighten": True,
"ip": "",
"is_acting": False,
"is_general_vm": True,
"is_online": True,
"is_replica_support": True,
"is_rs_install": True,
"iso_images": ["unmounted", "unmounted"],
"kb_layout": "Default",
"max_disk_latency": 0,
"name": "lnx_test",
"ram_used": 1169544,
"repo_id": "3a69ac31-004c-4b02-9b36-609099bc9be6",
"repo_name": "KrosseKrabbe - VM Storage 1",
"snap_num": 0,
"status": "running",
"status_desc": "",
"status_type": "healthy",
"total_disk_iops": 0,
"total_disk_throughput": 0,
"total_net_receive": 0,
"total_net_send": 0,
"usb_device_name": None,
"usbs": ["unmounted", "unmounted", "unmounted", "unmounted"],
"use_ovmf": False,
"vcpu_num": 1,
"vcpu_usage": 25,
"vdisk_num": 1,
"video_card": "vmvga",
"vram_size": 1048576,
},
],
"is_freeze": False,
},
"success": True,
}
py-synologydsm-api-2.7.1/tests/conftest.py 0000664 0000000 0000000 00000001723 14762405272 0020662 0 ustar 00root root 0000000 0000000 """Main conftest."""
import pytest
from synology_dsm.synology_dsm import SynologyDSM
from . import (
VALID_HOST,
VALID_HTTPS,
VALID_PASSWORD,
VALID_PORT,
VALID_USER,
SynologyDSMMock,
)
@pytest.fixture
def api() -> SynologyDSM:
"""Return a mock DSM 6 API."""
return SynologyDSMMock(
None,
VALID_HOST,
VALID_PORT,
VALID_USER,
VALID_PASSWORD,
VALID_HTTPS,
)
@pytest.fixture(
params=[5, 6],
ids=["DSM 5", "DSM 6"],
)
def dsm(request, api) -> SynologyDSM:
"""Return a mock DSM 6 API."""
api.dsm_version = request.param
return api
@pytest.fixture
def dsm_5(api) -> SynologyDSM:
"""Return a mock DSM 5 API."""
api.dsm_version = 5
return api
@pytest.fixture
def dsm_6(api) -> SynologyDSM:
"""Alias for api fixture."""
return api
@pytest.fixture
def dsm_7(api) -> SynologyDSM:
"""Return a mock DSM 7 API."""
api.dsm_version = 7
return api
py-synologydsm-api-2.7.1/tests/const.py 0000664 0000000 0000000 00000003041 14762405272 0020156 0 ustar 00root root 0000000 0000000 """Test constants."""
# API test data are localized in
# `tests/api_data/dsm_[dsm_major_version]`
# Data constant names should be like :
# "DSM_[dsm_version]_[API_KEY]"
# if data failed, add "_FAILED"
SESSION_ID = "session_id"
SYNO_TOKEN = "Syñ0_T0k€ñ" # noqa: S105
DEVICE_TOKEN = "Dév!cè_T0k€ñ" # noqa: S105
UNIQUE_KEY = "1x2X3x!_UK"
# Common API error code
ERROR_UNKNOWN = {"error": {"code": 100}, "success": False}
ERROR_INVALID_PARAMETERS = {"error": {"code": 101}, "success": False}
ERROR_API_NOT_EXISTS = {"error": {"code": 102}, "success": False}
ERROR_API_METHOD_NOT_EXISTS = {"error": {"code": 103}, "success": False}
ERROR_API_VERSION_NOT_SUPPORTED = {"error": {"code": 104}, "success": False}
ERROR_INSUFFICIENT_USER_PRIVILEGE = {"error": {"code": 105}, "success": False}
ERROR_CONNECTION_TIME_OUT = {"error": {"code": 106}, "success": False}
ERROR_MULTIPLE_LOGIN_DETECTED = {"error": {"code": 107}, "success": False}
# Auth API error code
ERROR_AUTH_INVALID_CREDENTIALS = {"error": {"code": 400}, "success": False}
ERROR_AUTH_GUEST_OR_DISABLED_ACCOUNT = {"error": {"code": 401}, "success": False}
ERROR_AUTH_PERMISSION_DENIED = {"error": {"code": 402}, "success": False}
ERROR_AUTH_OTP_NOT_SPECIFIED = {"error": {"code": 403}, "success": False}
ERROR_AUTH_OTP_AUTHENTICATE_FAILED = {"error": {"code": 404}, "success": False}
ERROR_AUTH_INCORRECT_APP_PORTAL = {"error": {"code": 405}, "success": False}
ERROR_AUTH_OTP_CODE_ENFORCED = {"error": {"code": 406}, "success": False}
ERROR_AUTH_MAX_TRIES = {"error": {"code": 407}, "success": False}
py-synologydsm-api-2.7.1/tests/test_synology_dsm.py 0000664 0000000 0000000 00000052777 14762405272 0022641 0 ustar 00root root 0000000 0000000 """Synology DSM tests."""
# pylint: disable=protected-access
import pytest
from aiohttp import ClientTimeout
from synology_dsm.api.core.external_usb import SynoCoreExternalUSB
from synology_dsm.api.core.security import SynoCoreSecurity
from synology_dsm.api.core.share import SynoCoreShare
from synology_dsm.api.core.system import SynoCoreSystem
from synology_dsm.api.core.upgrade import SynoCoreUpgrade
from synology_dsm.api.core.utilization import SynoCoreUtilization
from synology_dsm.api.download_station import SynoDownloadStation
from synology_dsm.api.dsm.information import SynoDSMInformation
from synology_dsm.api.photos import SynoPhotos
from synology_dsm.api.storage.storage import SynoStorage
from synology_dsm.api.surveillance_station import SynoSurveillanceStation
from synology_dsm.const import API_AUTH, API_INFO
from synology_dsm.exceptions import (
SynologyDSMAPIErrorException,
SynologyDSMAPINotExistsException,
SynologyDSMLogin2SAFailedException,
SynologyDSMLogin2SARequiredException,
SynologyDSMLoginFailedException,
SynologyDSMLoginInvalidException,
SynologyDSMNotLoggedInException,
SynologyDSMRequestException,
)
from . import (
USER_MAX_TRY,
VALID_HOST,
VALID_HTTPS,
VALID_PASSWORD,
VALID_PORT,
VALID_USER,
VALID_USER_2SA,
SynologyDSMMock,
)
class TestSynologyDSM:
"""Common SynologyDSM 5 and 6 test cases."""
def test_init(self, dsm):
"""Test init."""
assert dsm.username == VALID_USER
assert str(dsm._base_url) == f"https://{VALID_HOST}:{VALID_PORT}"
assert dsm._aiohttp_timeout.total == 10
assert not dsm.apis.get(API_AUTH)
assert not dsm._session_id
@pytest.mark.parametrize("version", [5, 6, 7])
@pytest.mark.asyncio
async def test_login_neccessary(self, version):
"""Test login is neccessary."""
dsm = SynologyDSMMock(
None,
VALID_HOST,
VALID_PORT,
USER_MAX_TRY,
VALID_PASSWORD,
VALID_HTTPS,
)
dsm.dsm_version = version
with pytest.raises(SynologyDSMNotLoggedInException) as error:
await dsm.utilisation.update()
error_value = error.value.args[0]
assert error_value["api"] is None
assert error_value["code"] == -1
assert error_value["reason"] == "Unknown"
assert error_value["details"] == "Not logged in. You have to do login() first."
@pytest.mark.parametrize("version", [5, 6, 7])
@pytest.mark.asyncio
async def test_login_basic_failed(self, version):
"""Test basic failed login."""
dsm = SynologyDSMMock(
None,
VALID_HOST,
VALID_PORT,
USER_MAX_TRY,
VALID_PASSWORD,
VALID_HTTPS,
)
dsm.dsm_version = version
with pytest.raises(SynologyDSMLoginFailedException) as error:
await dsm.login()
error_value = error.value.args[0]
assert error_value["api"] == "SYNO.API.Auth"
assert error_value["code"] == 407
assert error_value["reason"] == "Max Tries (if auto blocking is set to true)"
assert error_value["details"] == USER_MAX_TRY
@pytest.mark.parametrize("version", [5, 6, 7])
@pytest.mark.asyncio
async def test_login_2sa_failed(self, version):
"""Test failed login with 2SA."""
dsm = SynologyDSMMock(
None,
VALID_HOST,
VALID_PORT,
VALID_USER_2SA,
VALID_PASSWORD,
VALID_HTTPS,
)
dsm.dsm_version = version
with pytest.raises(SynologyDSMLogin2SARequiredException) as error:
await dsm.login()
error_value = error.value.args[0]
assert error_value["api"] == "SYNO.API.Auth"
assert error_value["code"] == 403
assert error_value["reason"] == "One time password not specified"
assert (
error_value["details"]
== "Two-step authentication required for account: valid_user_2sa"
)
with pytest.raises(SynologyDSMLogin2SAFailedException) as error:
await dsm.login(888888)
error_value = error.value.args[0]
assert error_value["api"] == "SYNO.API.Auth"
assert error_value["code"] == 404
assert error_value["reason"] == "One time password authenticate failed"
assert (
error_value["details"]
== "Two-step authentication failed, retry with a new pass code"
)
assert dsm._session_id is None
assert dsm._syno_token is None
assert dsm._device_token is None
@pytest.mark.parametrize("version", [5, 6, 7])
@pytest.mark.asyncio
async def test_connection_failed(self, version):
"""Test failed connection."""
# No internet
dsm = SynologyDSMMock(
None,
"no_internet",
VALID_PORT,
VALID_USER,
VALID_PASSWORD,
VALID_HTTPS,
)
dsm.dsm_version = version
with pytest.raises(SynologyDSMRequestException) as error:
await dsm.login()
error_value = error.value.args[0]
assert not error_value["api"]
assert error_value["code"] == -1
assert error_value["reason"] == "Unknown"
assert (
"ClientError =