home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
73.31k stars 30.62k forks source link

2FA broken with Synology DSM version 7.0.1-42218 update 2 #64867

Closed j6s33m closed 2 years ago

j6s33m commented 2 years ago

Checklist

Describe the issue you are experiencing

Since restarting HA this morning, I have a notification that let's me know that I need to reconfigure my Synology integration. I follow the steps and use my login/password + 2FA and get success message. However, the integration does not update and show connection. I've restarted several times and it's still showing the same problem.

Describe the behavior you expected

I expect after successfully logging in that it works and the integration refreshes properly.

Steps to reproduce the issue

1.Click Reconfigure button in integration page for Synology 2.Login in with username, password, and then 2FA code

...

What version of Home Assistant Core has the issue?

core-2021.12.10

What was the last working version of Home Assistant Core?

core-2021.12.10

In which browser are you experiencing the issue with?

Google Chrome Version 97.0.4692.99 (Official Build) (x86_64)

Which operating system are you using to run this browser?

macOS Big Sur 11.6.2

State of relevant entities

No response

Problem-relevant frontend configuration

No response

Javascript errors shown in your browser console/inspector

Logger: homeassistant.config_entries
Source: config_entries.py:327
First occurred: 1:23:40 PM (1 occurrences)
Last logged: 1:23:40 PM

Config entry '192.168.[xxx.xxx]' for synology_dsm integration could not authenticate: reason: Two-step authentication required for account: [myaccountusername]

Additional information

No response

probot-home-assistant[bot] commented 2 years ago

synology documentation synology source (message by IssueLinks)

probot-home-assistant[bot] commented 2 years ago

Hey there @hacf-fr, @quentame, @mib1185, mind taking a look at this issue as it has been labeled with an integration (synology_dsm) you are listed as a code owner for? Thanks! (message by CodeOwnersMention)


synology_dsm documentation synology_dsm source (message by IssueLinks)

mib1185 commented 2 years ago

Hi @j6s33m , please enable debug logging and provide the logs. To do so add the following to your configuration.yaml:

logger:
  default: info
  logs:
    homeassistant.components.synology_dsm: debug
    synology_dsm: debug

Furthermore, are still able to login to you NAS with the same account directly via UI?

j6s33m commented 2 years ago

Hi @j6s33m , please enable debug logging and provide the logs. To do so add the following to your configuration.yaml:

logger:
  default: info
  logs:
    homeassistant.components.synology_dsm: debug
    synology_dsm: debug

Furthermore, are still able to login to you NAS with the same account directly via UI?

I've added this, but am not getting logs that are different from the error I added above. Nothing is showing up related to Synology for debug.

mib1185 commented 2 years ago

Did you have a look into the full log for this? There must be many more outputs with DEBUG [homeassistant.components.synology_dsm] and DEBUG [synology_dsm] visible.

j6s33m commented 2 years ago

Nope. Only shows Warning…not debug. I get plenty of logs, but can’t seem to get the debug to work…seems like a bug many others have had over the years.

Another person who’s having the same issue replied with their debug output…can you just use theirs?

On Jan 25, 2022, at 10:12 AM, Michael @.***> wrote:

Did you have a look into the full log for this? There must be many more outputs with DEBUG [homeassistant.components.synology_dsm] and DEBUG [synology_dsm] visible.

— Reply to this email directly, view it on GitHub https://github.com/home-assistant/core/issues/64867#issuecomment-1021352713, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEIZISW3AD62YINCBP3RI2TUX3DYNANCNFSM5MWLBCLQ. You are receiving this because you were mentioned.

mib1185 commented 2 years ago

Could you please try again to enable the debug logging, since the very first visible error could be the same, even the cause is different and to obtain the cause I need the debug logs. Did you try to get the full log of home assistant via UI or by console/ssh or maybe fileshare access?

j6s33m commented 2 years ago

I’ve tried six ways to Sunday and am in the log file in my console … no dice getting the debug data. If you look in the forums, this is a problem for a bunch of folks. Can you not use the debug data from the other poster having the same problem (including below)?

Same , web ui login is ok. Here is my log. 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request url: https://192.168.2.225:5001/webapi/entry.cgi?account=********&passwd=********&enable_device_token=yes&device_name=homeassistant&format=sid&api=SYNO.API.Auth&version=7&method=login https://192.168.2.225:5001/webapi/entry.cgi?account=********&passwd=********&enable_device_token=yes&device_name=homeassistant&format=sid&api=SYNO.API.Auth&version=7&method=login 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request status_code: 200 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request headers: {'Server': 'nginx', 'Date': 'Tue, 25 Jan 2022 11:37:56 GMT', 'Content-Type': 'application/json; charset="UTF-8"', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Encoding': 'gzip'} 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request Method: GET 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Successful returned data 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] API: SYNO.API.Auth 2022-01-25 19:37:56 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] RESPONSE: {'error': {'code': 403, 'errors': {'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIyRkEiLCJleHAiOjE2NDMxMTA5NzYsImlhdCI6MTY0MzExMDY3Niwic3ViIjoiYWRtaW4ifQ.pVpXkRQrxJTdLadzk_aGwKw0jtFnm7Rjo1JLDIf8AX8', 'types': [{'type': 'otp'}]}}, 'success': False} 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] Creating new session 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] Request url: https://192.168.2.225:5001/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query https://192.168.2.225:5001/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] Request status_code: 200 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] Request headers: {'Server': 'nginx', 'Date': 'Tue, 25 Jan 2022 11:38:02 GMT', 'Content-Type': 'application/json; charset="UTF-8"', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Encoding': 'gzip'} 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] Request Method: GET 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] Successful returned data 2022-01-25 19:38:02 DEBUG (SyncWorker_9) [synology_dsm.synology_dsm] API: SYNO.API.Info

On Jan 25, 2022, at 12:14 PM, Michael @.***> wrote:

Did you try to get the full log of home assistant via UI or by console/ssh or maybe fileshare access?

mib1185 commented 2 years ago

If you look in the forums, this is a problem for a bunch of folks

Sorry, but on a first fast search I only found one actual forum thread which is about connection issues from HA to Synology -> https://community.home-assistant.io/t/did-2021-12-break-synology-integration/367264 The this issue was caused by an issue with an local NFS service ... so not related to HA. If you could point my out some current forum threads/posts, where the user observe connection issues from HA to Synology DSM, than please provide them.

use the debug data from the other poster

There is no other user involved in this issue here, so I do not have any clue where this (partial) logs came from 🧐

I’ve tried six ways to Sunday and am in the log file in my console

If you share your configuration.yaml (limited to the part about logging configuration, so that no sensitive data is shared), so I could have a look and maybe give you a hint, why the debug log will not work for you?


Please allow me further questions about your issue description:

Since restarting HA this morning, I have a notification that let's me know that I need to reconfigure my Synology integration

j6s33m commented 2 years ago

logger: default: info logs: homeassistant.components.synology_dsm: debug synology_dsm: debug

On Jan 25, 2022, at 1:56 PM, Michael @.***> wrote:

If you look in the forums, this is a problem for a bunch of folks

Sorry, but on a first fast search I only found one actual forum thread which is about connection issues from HA to Synology -> https://community.home-assistant.io/t/did-2021-12-break-synology-integration/367264 https://community.home-assistant.io/t/did-2021-12-break-synology-integration/367264 The this issue was caused by an issue with an local NFS service ... so not related to HA. If you could point my out some current forum threads/posts, where the user observe connection issues from HA to Synology DSM, than please provide them.

use the debug data from the other poster

There is no other user involved in this issue here, so I do not have any clue where this (partial) logs came from 🧐

I’ve tried six ways to Sunday and am in the log file in my console

If you share your configuration.yaml (limited to the part about logging configuration, so that no sensitive data is shared), so I could have a look and maybe give you a hint, why the debug log will not work for you?

— Reply to this email directly, view it on GitHub https://github.com/home-assistant/core/issues/64867#issuecomment-1021554473, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEIZISWAKDEG7GB5NABZ7BTUX355LANCNFSM5MWLBCLQ. You are receiving this because you were mentioned.

mib1185 commented 2 years ago
logger:
  default: info
  logs:
    homeassistant.components.synology_dsm: debug
    synology_dsm: debug

if the indention is correct and there is no other logger: defined which overwrites this one than this should work after a reboot of HA

j6s33m commented 2 years ago

2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Request url: https://192.168.**xxx.xxx:xxxx**/webapi/entry.cgi?account=********&passwd=********&enable_device_token=yes&device_name=**[mynasnamehere]**&format=sid&api=SYNO.API.Auth&version=7&method=login 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Request status_code: 200 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Request headers: {'Server': 'nginx', 'Date': 'Tue, 25 Jan 2022 20:09:34 GMT', 'Content-Type': 'application/json; charset="UTF-8"', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Encoding': 'gzip'} 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Request Method: GET 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Successful returned data 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] API: SYNO.API.Auth 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] RESPONSE: {'error': {'code': 403, 'errors': {'token': '**[MYTOKENREMOVED]**', 'types': [{'type': 'otp'}]}}, 'success': False}

j6s33m commented 2 years ago

Encoding', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Encoding': 'gzip'} 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Request Method: GET 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Successful returned data 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] API: SYNO.API.Auth 2022-01-25 14:09:34 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] RESPONSE: {'error': {'code': 403, 'errors': {'token': '[MYTOKENREMOVED]', 'types': [{'type': 'otp'}]}}, 'success': False} 2022-01-25 14:09:34 INFO (MainThread) [homeassistant.components.sensor] Setting up sensor.ipp

I removed some of my information (url, NAS name, token, etc)

mib1185 commented 2 years ago

could you please provide more logs around this single log entry? These will contain many more needed debug information, which are needed to consider the whole setup process of the Synology DSM integration

j6s33m commented 2 years ago

I have no idea what else you want me to give you...these are the DEBUG logs tied to the Synology_dsm

2022-01-25 14:19:29 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Creating new session
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request url: https://192.168.[xxx.xxx:xxxx]/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request status_code: 200
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request headers: {'Server': 'nginx', 'Date': 'Tue, 25 Jan 2022 20:19:30 GMT', 'Content-Type': 'application/json; charset="UTF-8"', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Encoding': 'gzip'}
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request Method: GET
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Successful returned data
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] API: SYNO.API.Info
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] RESPONSE: {'data': {'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.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.Server': {'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.ActiveInsight.Package': {'maxVersion': 2, '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.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.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.Transform': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.C2FS.Utils': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.CloudSync': {'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.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.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': 2, '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': 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.SSO': {'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.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.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.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.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.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': 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.Push.Webhook.Provider': {'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': 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.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.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.PortForwarding.UserDataCollector': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Core.Promotion.Info': {'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': 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.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': 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': 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': 3, '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.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.Patch': {'maxVersion': 2, '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': 3, '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': 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.PkgProfile': {'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.Image': {'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.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.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': 2, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.Category': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.ConditionAlbum': {'maxVersion': 2, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.Diff': {'maxVersion': 2, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.Folder': {'maxVersion': 1, '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': 2, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.NormalAlbum': {'maxVersion': 1, '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': 3, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.Timeline': {'maxVersion': 3, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Browse.Unit': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Download': {'maxVersion': 1, '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.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': 3, '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': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Thumbnail': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Foto.Upload.Item': {'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.Diff': {'maxVersion': 2, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.FotoTeam.Browse.Folder': {'maxVersion': 1, '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': 2, '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': 3, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.FotoTeam.Browse.Timeline': {'maxVersion': 3, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.FotoTeam.Browse.Unit': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.FotoTeam.Download': {'maxVersion': 1, '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': 3, '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': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.FotoTeam.Thumbnail': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.FotoTeam.Upload.Item': {'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.MariaDB10.lib': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Network.DHCPServer': {'maxVersion': 4, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Network.DHCPServer.ClientList': {'maxVersion': 2, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Network.DHCPServer.PXE': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Network.DHCPServer.Reservation': {'maxVersion': 3, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Network.DHCPServer.Vendor': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.Network.DHCPServer.WPAD': {'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.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.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': 1, '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.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.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.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.Storage.CGI.Volume.Installer': {'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.Face': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.SurveillanceStation.Face.Archive': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.SurveillanceStation.Face.CMS': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.SurveillanceStation.Face.Result': {'maxVersion': 1, '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': 6, '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': 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': 5, '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.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': 2, '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': 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': 2, '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.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.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.WebStation.Default': {'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.Shortcut': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}, 'SYNO.WebStation.Status': {'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.Service': {'maxVersion': 1, 'minVersion': 1, 'path': 'entry.cgi', 'requestFormat': 'JSON'}}, 'success': True}
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request url: https://192.168.[removed rest of url xxx.xxx:xxxx]/webapi/entry.cgi?account=********&passwd=********&enable_device_token=yes&device_name=[removedNASname]&format=sid&api=SYNO.API.Auth&version=7&method=login
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request status_code: 200
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request headers: {'Server': 'nginx', 'Date': 'Tue, 25 Jan 2022 20:19:30 GMT', 'Content-Type': 'application/json; charset="UTF-8"', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'Vary': 'Accept-Encoding', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0', 'Content-Encoding': 'gzip'}
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Request Method: GET
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] Successful returned data
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] API: SYNO.API.Auth
2022-01-25 14:19:30 DEBUG (SyncWorker_4) [synology_dsm.synology_dsm] RESPONSE: {'error': {'code': 403, 'errors': {'token': '[removedtoken]', 'types': [{'type': 'otp'}]}}, 'success': False}
mib1185 commented 2 years ago

Could you also please answer my last questions from https://github.com/home-assistant/core/issues/64867#issuecomment-1021554473 and also provide the DSM version and model of your NAS?

From the provided logs, it looks like, that the NAS is not configured with 2FA in HA, since there is not device_id passed during the login call (_/webapi/entry.cgi?account=********&passwd=********&enable_device_token=yes&device_name=[removedNASname]&format=sid&api=SYNO.API.Auth&version=7&method=login_) 🤔

Therefore may I ask you to perform the reconfiguration via UI and provide the logs (debug and info and warning ... just the logs during the timeframe, you perform the reconfiguration)

j6s33m commented 2 years ago

I'm using 2FA...I tried deleting the integration and reading it and so I don't know if that's the reason it's not showing the 2FA anymore. I just reconfigured again and can't include the logs because they exceeded the maximum 655536 character limit.

Synology DS220+ DSM Version: 7.01-42218

mib1185 commented 2 years ago

they exceeded the maximum 655536 character limit.

Sorry, forgot to mention that - just save the logs in a txt file and drag&drop it here - so it will be added as attachment

j6s33m commented 2 years ago

debug.txt

mib1185 commented 2 years ago

could you please provide the log including the integration related log messages? If you filter the log with grep, than please just grep synology_dsm homeassistant.log

j6s33m commented 2 years ago

There is nothing in the log with "grep" or grep synology_dsm homeassistant.log

I noticed you pushed new code 4 days ago here: https://github.com/home-assistant/core/pull/64480

Everything seemed to be working fine until right around this date. Are you sure your latest pull request didn't break the code somewhere?

j6s33m commented 2 years ago

Others are having this problem too...

https://community.home-assistant.io/t/synology-dsm-7-2fa-problem/314505

mib1185 commented 2 years ago

There is nothing in the log with "grep" or grep synology_dsm homeassistant.log

no no, grep is a shell command to filter the output of a file ... for me every line from your (overall!) log which contains synology_dsm is of interesst - even it is info, warning or debug and if it is [synology_dsm...] or [homeassistant.components.synology_dsm...]

I noticed you pushed new code 4 days ago here: #64480

on initial post you mentioned, that you are on home assistant version 2021.12.10? So #64480 is not included in this version.


From the provided logs, I can see, that your NAS does not provide the device_id, which will be stored in HA to re-authenticate after a reboot.

I'm on DSM DSM 7.0.1-42218 (without update 2!) and everything works as expected ... from the logs I see, that you are already on DSM "7.0.1-42218 update 2". DId you do an update of your DSM?

j6s33m commented 2 years ago

Yes, my synology pushed an update last week (released on Jan 13) for v2. If that's the only variable that's different, then you probably found the culprit ...

mib1185 commented 2 years ago

ok, than I will skip this update on my NAS 😆 To be serious, if this is really the cause, than we cannot do anything for now, besides waiting for a fix from Synology. As workaround you could disable 2FA for the user you are using for HA to login to Syno.

j6s33m commented 2 years ago

Removing 2FA works, but I don’t like that as a long-term solution. Will you log the bug w/ Synology?

On Jan 25, 2022, at 4:50 PM, Michael @.***> wrote:

ok, than I will skip this update on my NAS 😆 To be serious, if this is really the cause, than we cannot do anything for now, besides waiting for a fix from Synology. As workaround you could disable 2FA for the user you are using for HA to login to Syno.

— Reply to this email directly, view it on GitHub https://github.com/home-assistant/core/issues/64867#issuecomment-1021682010, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEIZISXQ4S7QBUSJJ32UTSLUX4SMFANCNFSM5MWLBCLQ. You are receiving this because you were mentioned.

mib1185 commented 2 years ago

Could you please do a further test?

The OTA code should not be asked while re-login, since "remember this device" was enabled.

Will you log the bug w/ Synology?

I'm not familiar with the support contact possibilities for developer (API) related issues 🤔 Maybe I find some spare time on upcoming weekend, but cannot promise that. Further, since my NAS is not affected yet, I would not have the possibilities to perform any from Synology support requested actions/debug to reproduce the issue.

j6s33m commented 2 years ago

Yes I’ve done the above and 2FA works as it’s supposed to. It’s the HA integration that is broken.


From: Michael @.> Sent: Tuesday, January 25, 2022 5:10:40 PM To: home-assistant/core @.> Cc: Jordan @.>; Mention @.> Subject: Re: [home-assistant/core] Synology 2FA Broken Again (Issue #64867)

Could you please do a further test?

The OTA code should not be asked while re-login, since "remember this device" was enabled.

Will you log the bug w/ Synology?

I'm not familiar with the support contact possibilities for developer (API) related issues 🤔 Maybe I find some spare time on upcoming weekend, but cannot promise that.

— Reply to this email directly, view it on GitHubhttps://github.com/home-assistant/core/issues/64867#issuecomment-1021694457, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AEIZISXBP75QKYF7RQ6JRVTUX4UXBANCNFSM5MWLBCLQ. You are receiving this because you were mentioned.Message ID: @.***>

mib1185 commented 2 years ago

I have filed a support ticket with Synology, but cannot promis, that they will fix this … further I cannot really do any additional debugging or other checks, which could be requested by Synology within this support ticket, since my NAS is still on the unaffected version.

so cross fingers 🤞

Krispkiwi commented 2 years ago

Can confirm I'm also getting this error.

sdknij commented 2 years ago

I also have the same issue. I have no issue logging on using the DSM ui, but the 2FA fails from HA. Here is my log.

2022-02-12 22:27:48 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Response status_code: 200 2022-02-12 22:27:48 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Response headers: {'Server': 'nginx', 'Date': 'Sat, 12 Feb 2022 21:27:48 GMT', 'Content-Type': 'application/json; charset="UTF-8"', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=20', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'Cache-Control': 'max-age=0, no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0'} 2022-02-12 22:27:48 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] Successful returned data 2022-02-12 22:27:48 DEBUG (SyncWorker_3) [synology_dsm.synology_dsm] RESPONSE: {'error': {'code': 403, 'errors': {'token': '[myToken], 'types': [{'type': 'otp'}]}}, 'success': False}

brianacox commented 2 years ago

I have exactly the same issue - 2FA is fine with a browser but not via HA integration.

thoompje commented 2 years ago

Unfortunately, me too. After "successful" login it will print "Failed to set up: reason: Two-step authentication required for account: ABC"

Same here, hopefully with the following update they will have a fix..

mib1185 commented 2 years ago

There is nothing we can do from HA side, since it is a bug in the API of DSM version "7.0.1-42218 update 2". Unfortunately there is no (visible) progress in the Synology support ticket, yet (see https://github.com/home-assistant/core/issues/64867#issuecomment-1024963725)

But feel free to open an support ticket on your own with Synology and reference to #3011170 - feel free to use the following as template/blueprint:

[Symptome] when login with OTP and to enable to omit 2-factor verification via SYNO.API.Auth (example 3 on page 15), the response does not have the parameter did anymore, so later login with omitted OTP (example 4 on page 15) is not possible anymore.

This issue was first observed with 7.0.1-42218 Update 2, in prior version 7.0.1-42218 it works as expected

Referenced documentation: https://global.download.synology.com/download/Document/Software/DeveloperGuide/Os/DSM/All/enu/DSM_Login_Web_API_Guide_enu.pdf

[Schritte zum Reproduzieren]

  1. login with OTP and enable to omit 2-factor verification (example 3 on page 15)
  2. logout (example on page 16)
  3. login with omitted OTP (example 4 on page 15)

Further I would kindly ask you to ❗ stop commenting, that you have the same issue, unless have any further helpful information to solve the issue ❗ please use just the 👍 button on the initial post. This will help to keep the overview in this issue, thx.

AbsolutK commented 2 years ago

Synology has released DSM 7.1 (beta), did someone already test whether this solves the issue mentioned here?

mib1185 commented 2 years ago

On the release notes of DSM 7.1-beta I can not see a proper fixed mentioned

Edit: tested 7.1 beta with a vDSM, unfortunately the issue still persists

mib1185 commented 2 years ago

Did someone of you already created a ticket with Synology support, as suggested in https://github.com/home-assistant/core/issues/64867#issuecomment-1042862897? If yes, is there any noteworthy progress visible?

mundschenk-at commented 2 years ago

Did someone of you already created a ticket with Synology support, as suggested in #64867 (comment)? If yes, is there any progress visible?

I did and I got the information that they forwarded things to their development team, but can't give any time frame on when the issue will be fixed. The last update to the ticket was two days ago. If it had been fixed in the beta, the would likely have directed me to download that.

AbsolutK commented 2 years ago

Seems DSM 7.0.1 Update 3 was released and Update 2 was pulled, from the release notes it doesn't look like the bug is solved

FYI: https://www.synology.com/en-global/releaseNote/DSM#7_0

mib1185 commented 2 years ago

Would be appreciated if someone of you could test this DSM update?

AbsolutK commented 2 years ago

Would be appreciated if someone of you could test this DSM update?

I just did, seems it doesn't - as expected - resolve the two-step authentication issue.

snowmangh commented 2 years ago

Not sure if this can help but here it is.

I did raise a ticket with Synology and this is the answer I received.

_Hello,

Thanks for providing the additional information. This issue appears to be specific to the docker container home assistant. I would suggest reaching out to their support to see if there is a known fix for this issue. For now, I would suggest using an account for Home Assistant that does not have 2FA enabled.

If you have any questions please let me know.

Thanks,_

mib1185 commented 2 years ago

@snowmangh did you added a reference to my ticket as mentioned in https://github.com/home-assistant/core/issues/64867#issuecomment-1042862897 ?

snowmangh commented 2 years ago

@mib1185 I did as you suggested.

sdknij commented 2 years ago

It seems that 2FA is also broken with iCloud (https://github.com/home-assistant/core/issues/67510). Could it be an issue with HA?

mib1185 commented 2 years ago

It seems that 2FA is also broken with iCloud (#67510). Could it be an issue with HA?

Not sure what is the mentioned case about, but here (the 2fa issue with Synology DSM) is caused by an bug in DSM (see all previous posts for details)

brianacox commented 2 years ago

Would it help if a few of us reported the issue to Synology to get it up the priority list? If so, let me know how to best phrase it, e.g. if we can set it out in such a way that the 1st line support people make the connection with a known issue (rather than going round and round getting me to reboot the server etc).

From: Michael @.> Date: Friday, 11 March 2022 at 21:13 To: home-assistant/core @.> Cc: Brian Cox @.>, Comment @.> Subject: Re: [home-assistant/core] 2FA broken with Synology DSM version 7.0.1-42218 update 2 (Issue #64867)

It seems that 2FA is also broken with iCloud (#67510https://github.com/home-assistant/core/issues/67510). Could it be an issue with HA?

Not sure what is the mentioned case about, but here (the 2fa issue with Synology DSM) is caused by an bug in DSM (see all previous posts for details)

— Reply to this email directly, view it on GitHubhttps://github.com/home-assistant/core/issues/64867#issuecomment-1065531456, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ARUXIZMFRWPCX54JCCUUCJLU7OZNVANCNFSM5MWLBCLQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub. You are receiving this because you commented.Message ID: @.***>

mib1185 commented 2 years ago

Would it help if a few of us reported the issue to Synology to get it up the priority list?

See https://github.com/home-assistant/core/issues/64867#issuecomment-1042862897 😉

snowmangh commented 2 years ago

Strike two.

I contacted Synology for a second time and specifically asked to escalate the issue with the developer's team. Same answer.

This issue is specific to the docker container home assistant and I will not be able to escalate this ticket. Please reach out to the Home Assistant developers as they will need to look into this issue and provide a fix.

brianacox commented 2 years ago

I’m pretty sure, unless Docker forms part of the VMWare image that I downloaded that I’m Docker free so you can cite Synology call

[Synology Support] Ticket 3041680https://account.synology.com/en-global/support/3041680/detail has been updated

Get Outlook for iOShttps://aka.ms/o0ukef


From: snowmangh @.> Sent: Tuesday, March 15, 2022 17:22 To: home-assistant/core @.> Cc: Brian Cox @.>; Comment @.> Subject: Re: [home-assistant/core] 2FA broken with Synology DSM version 7.0.1-42218 update 2 (Issue #64867)

Strike two.

I contacted Synology for a second time and specifically asked to escalate the issue with the developer's team. Same answer.

This issue is specific to the docker container home assistant and I will not be able to escalate this ticket. Please reach out to the Home Assistant developers as they will need to look into this issue and provide a fix.

— Reply to this email directly, view it on GitHubhttps://github.com/home-assistant/core/issues/64867#issuecomment-1068249226, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ARUXIZPUR6V64AAYUMXTF53VADBLLANCNFSM5MWLBCLQ. Triage notifications on the go with GitHub Mobile for iOShttps://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Androidhttps://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub. You are receiving this because you commented.Message ID: @.***>