From 50844afe07254760a31ca0c7f2aba27ff200584e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=91=D0=BE=D1=8F=D1=80=D0=BA=D0=B8=D0=B9?=
 <aoboyarskiy@miem.hse.ru>
Date: Sun, 5 Mar 2023 23:20:27 +0300
Subject: [PATCH] new requests added

---
 flask-app/confs/conf.json             |   1 +
 flask-app/{utils => confs}/conf1.json |   4 +-
 flask-app/utils/conf.json             |   1 -
 flask-app/utils/onvif_classes.py      |  32 ++++++--
 flask-app/utils/swagger.yml           | 107 +++++++++++++++++++++++---
 5 files changed, 124 insertions(+), 21 deletions(-)
 create mode 100644 flask-app/confs/conf.json
 rename flask-app/{utils => confs}/conf1.json (99%)
 delete mode 100644 flask-app/utils/conf.json

diff --git a/flask-app/confs/conf.json b/flask-app/confs/conf.json
new file mode 100644
index 0000000..67d4700
--- /dev/null
+++ b/flask-app/confs/conf.json
@@ -0,0 +1 @@
+{"default": "1", "default_cam": "-1", "ports": {"first": "8001", "last": "8008"}, "remote_controller": {"1": {"1": {"ip": "172.18.191.193", "port": "8000", "streamuri": "rtsp://audi.proxy/studio/4"}, "2": {"ip": "172.18.191.194", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/5"}, "3": {"ip": "172.18.191.195", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/6"}, "4": {"ip": "172.18.191.196", "port": "80", "streamuri": "rtsp://audi.proxy/studio/7"}, "5": {"ip": "172.18.191.197", "port": "8080", "streamuri": "rtsp://audi.proxy/505/3"}}, "2": {"1": {"ip": "172.18.191.93", "port": "9000", "streamuri": "rtsp://audi.proxy/504/3"}, "2": {"ip": "172.18.191.94", "port": "80", "streamuri": "rtsp://audi.proxy/504/4"}, "3": {"ip": "172.18.191.95", "port": "80", "streamuri": "rtsp://audi.proxy/504/5"}, "4": {"ip": "172.18.191.96", "port": "80", "streamuri": "rtsp://audi.proxy/504/6"}, "5": {"ip": "172.18.191.53", "port": "80", "streamuri": "rtsp://audi.proxy/305/3"}, "6": {"ip": "172.18.191.54", "port": "80", "streamuri": "rtsp://audi.proxy/305/4"}, "7": {"ip": "172.18.191.55", "port": "80", "streamuri": "rtsp://audi.proxy/305/5"}}, "3": {"2": {"ip": "172.18.191.104", "port": "80", "streamuri": "rtsp://audi.proxy/506/4"}, "3": {"ip": "172.18.191.105", "port": "80", "streamuri": "rtsp://audi.proxy/506/5"}, "4": {"ip": "172.18.191.106", "port": "80", "streamuri": "rtsp://audi.proxy/506/6"}, "5": {"ip": "172.18.191.63", "port": "80", "streamuri": "rtsp://audi.proxy/306/3"}, "6": {"ip": "172.18.191.64", "port": "80", "streamuri": "rtsp://audi.proxy/306/4"}, "7": {"ip": "172.18.191.65", "port": "80", "streamuri": "rtsp://audi.proxy/306/5"}}, "4": {"1": {"ip": "172.18.191.83", "port": "80", "streamuri": "rtsp://audi.proxy/308/3"}, "2": {"ip": "172.18.191.84", "port": "80", "streamuri": "rtsp://audi.proxy/308/4"}, "3": {"ip": "172.18.191.85", "port": "80", "streamuri": "rtsp://audi.proxy/308/5"}, "4": {"ip": "172.18.191.86", "port": "80", "streamuri": "rtsp://audi.proxy/308/6"}, "5": {"ip": "172.18.191.73", "port": "80", "streamuri": "rtsp://audi.proxy/307/3"}, "6": {"ip": "172.18.191.74", "port": "80", "streamuri": "rtsp://audi.proxy/307/4"}, "7": {"ip": "172.18.191.75", "port": "80", "streamuri": "rtsp://audi.proxy/307/5"}}, "5": {"1": {"ip": "172.18.191.113", "port": "80", "streamuri": "rtsp://audi.proxy/00A/3"}, "2": {"ip": "172.18.191.114", "port": "80", "streamuri": "rtsp://audi.proxy/00A/4"}, "3": {"ip": "172.18.191.115", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}, "4": {"ip": "172.18.191.116", "port": "80", "streamuri": "rtsp://audi.proxy/00A/6"}, "5": {"ip": "172.18.191.117", "port": "80", "streamuri": "rtsp://audi.proxy/00A/7"}, "6": {"ip": "172.18.191.118", "port": "80", "streamuri": "rtsp://audi.proxy/00A/8"}}, "6": {"1": {"ip": "172.18.191.123", "port": "9000", "streamuri": "rtsp://audi.proxy/00A/3"}, "2": {"ip": "172.18.191.124", "port": "8899", "streamuri": "rtsp://audi.proxy/00A/4"}, "3": {"ip": "172.18.191.125", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}}, "7": {}, "8": {"2": {"ip": "172.18.191.184", "port": "80", "streamuri": "rtsp://audi.proxy/00A/4"}, "3": {"ip": "172.18.191.185", "port": "2000", "streamuri": "rtsp://audi.proxy/00A/5"}}}, "auditories": {"305": {"51": {"ip": "172.18.191.51", "port": "80", "streamuri": "rtsp://audi.proxy/305/1"}, "52": {"ip": "172.18.191.52", "port": "8999", "streamuri": "rtsp://audi.proxy/305/2"}, "53": {"ip": "172.18.191.53", "port": "80", "streamuri": "rtsp://audi.proxy/305/3"}, "54": {"ip": "172.18.191.54", "port": "80", "streamuri": "rtsp://audi.proxy/305/4"}, "55": {"ip": "172.18.191.55", "port": "80", "streamuri": "rtsp://audi.proxy/305/5"}}, "306": {"61": {"ip": "172.18.191.61", "port": "80", "streamuri": "rtsp://audi.proxy/306/1"}, "62": {"ip": "172.18.191.62", "port": "80", "streamuri": "rtsp://audi.proxy/306/2"}, "63": {"ip": "172.18.191.63", "port": "80", "streamuri": "rtsp://audi.proxy/306/3"}, "64": {"ip": "172.18.191.64", "port": "80", "streamuri": "rtsp://audi.proxy/306/4"}, "65": {"ip": "172.18.191.65", "port": "80", "streamuri": "rtsp://audi.proxy/306/5"}}, "307": {"71": {"ip": "172.18.191.71", "port": "80", "streamuri": "rtsp://audi.proxy/307/1"}, "72": {"ip": "172.18.191.72", "port": "80", "streamuri": "rtsp://audi.proxy/307/2"}, "73": {"ip": "172.18.191.73", "port": "80", "streamuri": "rtsp://audi.proxy/307/3"}, "74": {"ip": "172.18.191.74", "port": "80", "streamuri": "rtsp://audi.proxy/307/4"}, "75": {"ip": "172.18.191.75", "port": "80", "streamuri": "rtsp://audi.proxy/307/5"}}, "308": {"81": {"ip": "172.18.191.81", "port": "80", "streamuri": "rtsp://audi.proxy/308/1"}, "83": {"ip": "172.18.191.83", "port": "80", "streamuri": "rtsp://audi.proxy/308/3"}, "84": {"ip": "172.18.191.84", "port": "80", "streamuri": "rtsp://audi.proxy/308/4"}, "85": {"ip": "172.18.191.85", "port": "80", "streamuri": "rtsp://audi.proxy/308/5"}, "86": {"ip": "172.18.191.86", "port": "80", "streamuri": "rtsp://audi.proxy/308/6"}}, "435": {"15": {"ip": "172.18.212.15", "port": "80", "streamuri": "rtsp://audi.proxy/435/4"}, "16": {"ip": "172.18.212.16", "port": "8080", "streamuri": "rtsp://audi.proxy/435/5"}, "212": {"ip": "172.18.190.212", "port": "8899", "streamuri": "rtsp://audi.proxy/435/8"}}, "504": {"91": {"ip": "172.18.191.91", "port": "80", "streamuri": "rtsp://audi.proxy/504/1"}, "92": {"ip": "172.18.191.92", "port": "80", "streamuri": "rtsp://audi.proxy/504/2"}, "93": {"ip": "172.18.191.93", "port": "9000", "streamuri": "rtsp://audi.proxy/504/3"}, "94": {"ip": "172.18.191.94", "port": "80", "streamuri": "rtsp://audi.proxy/504/4"}, "95": {"ip": "172.18.191.95", "port": "80", "streamuri": "rtsp://audi.proxy/504/5"}, "96": {"ip": "172.18.191.96", "port": "80", "streamuri": "rtsp://audi.proxy/504/6"}}, "505": {"137": {"ip": "172.18.191.137", "port": "8899", "streamuri": "rtsp://audi.proxy/505/2"}, "192": {"ip": "172.18.191.192", "port": "8000", "streamuri": "rtsp://audi.proxy/studio/3"}, "193": {"ip": "172.18.191.193", "port": "8000", "streamuri": "rtsp://audi.proxy/studio/4"}, "194": {"ip": "172.18.191.194", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/5"}, "195": {"ip": "172.18.191.195", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/6"}, "196": {"ip": "172.18.191.196", "port": "80", "streamuri": "rtsp://audi.proxy/studio/7"}, "200": {"ip": "172.18.191.200", "port": "8899", "streamuri": "rtsp://audi.proxy/studio/8"}, "201": {"ip": "172.18.191.201", "port": "8899", "streamuri": "rtsp://audi.proxy/505/8"}}, "506": {"101": {"ip": "172.18.191.101", "port": "80", "streamuri": "rtsp://audi.proxy/506/1"}, "103": {"ip": "172.18.191.103", "port": "80", "streamuri": "rtsp://audi.proxy/506/3"}, "104": {"ip": "172.18.191.104", "port": "9000", "streamuri": "rtsp://audi.proxy/506/4"}, "105": {"ip": "172.18.191.105", "port": "80", "streamuri": "rtsp://audi.proxy/506/5"}, "106": {"ip": "172.18.191.106", "port": "80", "streamuri": "rtsp://audi.proxy/506/6"}}, "505a": {"197": {"ip": "172.18.191.197", "port": "8080", "streamuri": "rtsp://audi.proxy/505/3"}}, "00A": {"112": {"ip": "172.18.191.112", "port": "80", "streamuri": "rtsp://audi.proxy/00A/2"}, "113": {"ip": "172.18.191.113", "port": "80", "streamuri": "rtsp://audi.proxy/00A/3"}, "114": {"ip": "172.18.191.114", "port": "80", "streamuri": "rtsp://audi.proxy/00A/4"}, "115": {"ip": "172.18.191.115", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}, "116": {"ip": "172.18.191.116", "port": "80", "streamuri": "rtsp://audi.proxy/00A/6"}, "117": {"ip": "172.18.191.117", "port": "80", "streamuri": "rtsp://audi.proxy/00A/7"}, "118": {"ip": "172.18.191.118", "port": "80", "streamuri": "rtsp://audi.proxy/00A/8"}}, "00B": {"122": {"ip": "172.18.191.122", "port": "80", "streamuri": "rtsp://audi.proxy/00A/2"}, "123": {"ip": "172.18.191.123", "port": "9000", "streamuri": "rtsp://audi.proxy/00A/3"}, "124": {"ip": "172.18.191.124", "port": "8899", "streamuri": "rtsp://audi.proxy/00A/4"}, "125": {"ip": "172.18.191.125", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}}}}
\ No newline at end of file
diff --git a/flask-app/utils/conf1.json b/flask-app/confs/conf1.json
similarity index 99%
rename from flask-app/utils/conf1.json
rename to flask-app/confs/conf1.json
index 8d131cb..b59368e 100644
--- a/flask-app/utils/conf1.json
+++ b/flask-app/confs/conf1.json
@@ -2,8 +2,8 @@
   "default": "1",
   "default_cam": "-1",
   "ports": {
-    "f": "9001",
-    "l": "9028"
+    "first": "9001",
+    "last": "9028"
   },
   "remote_controller": {
     "1": {
diff --git a/flask-app/utils/conf.json b/flask-app/utils/conf.json
deleted file mode 100644
index 9fbdf13..0000000
--- a/flask-app/utils/conf.json
+++ /dev/null
@@ -1 +0,0 @@
-{"default": "8", "default_cam": "-1", "ports": {"f": "8001", "l": "8008"}, "remote_controller": {"1": {"1": {"ip": "172.18.191.193", "port": "8000", "streamuri": "rtsp://audi.proxy/studio/4"}, "2": {"ip": "172.18.191.194", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/5"}, "3": {"ip": "172.18.191.195", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/6"}, "4": {"ip": "172.18.191.196", "port": "80", "streamuri": "rtsp://audi.proxy/studio/7"}, "5": {"ip": "172.18.191.197", "port": "8080", "streamuri": "rtsp://audi.proxy/505/3"}}, "2": {"1": {"ip": "172.18.191.93", "port": "9000", "streamuri": "rtsp://audi.proxy/504/3"}, "2": {"ip": "172.18.191.94", "port": "80", "streamuri": "rtsp://audi.proxy/504/4"}, "3": {"ip": "172.18.191.95", "port": "80", "streamuri": "rtsp://audi.proxy/504/5"}, "4": {"ip": "172.18.191.96", "port": "80", "streamuri": "rtsp://audi.proxy/504/6"}, "5": {"ip": "172.18.191.53", "port": "80", "streamuri": "rtsp://audi.proxy/305/3"}, "6": {"ip": "172.18.191.54", "port": "80", "streamuri": "rtsp://audi.proxy/305/4"}, "7": {"ip": "172.18.191.55", "port": "80", "streamuri": "rtsp://audi.proxy/305/5"}}, "3": {"2": {"ip": "172.18.191.104", "port": "80", "streamuri": "rtsp://audi.proxy/506/4"}, "3": {"ip": "172.18.191.105", "port": "80", "streamuri": "rtsp://audi.proxy/506/5"}, "4": {"ip": "172.18.191.106", "port": "80", "streamuri": "rtsp://audi.proxy/506/6"}, "5": {"ip": "172.18.191.63", "port": "80", "streamuri": "rtsp://audi.proxy/306/3"}, "6": {"ip": "172.18.191.64", "port": "80", "streamuri": "rtsp://audi.proxy/306/4"}, "7": {"ip": "172.18.191.65", "port": "80", "streamuri": "rtsp://audi.proxy/306/5"}}, "4": {"1": {"ip": "172.18.191.83", "port": "80", "streamuri": "rtsp://audi.proxy/308/3"}, "2": {"ip": "172.18.191.84", "port": "80", "streamuri": "rtsp://audi.proxy/308/4"}, "3": {"ip": "172.18.191.85", "port": "80", "streamuri": "rtsp://audi.proxy/308/5"}, "4": {"ip": "172.18.191.86", "port": "80", "streamuri": "rtsp://audi.proxy/308/6"}, "5": {"ip": "172.18.191.73", "port": "80", "streamuri": "rtsp://audi.proxy/307/3"}, "6": {"ip": "172.18.191.74", "port": "80", "streamuri": "rtsp://audi.proxy/307/4"}, "7": {"ip": "172.18.191.75", "port": "80", "streamuri": "rtsp://audi.proxy/307/5"}}, "5": {"1": {"ip": "172.18.191.113", "port": "80", "streamuri": "rtsp://audi.proxy/00A/3"}, "2": {"ip": "172.18.191.114", "port": "80", "streamuri": "rtsp://audi.proxy/00A/4"}, "3": {"ip": "172.18.191.115", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}, "4": {"ip": "172.18.191.116", "port": "80", "streamuri": "rtsp://audi.proxy/00A/6"}, "5": {"ip": "172.18.191.117", "port": "80", "streamuri": "rtsp://audi.proxy/00A/7"}, "6": {"ip": "172.18.191.118", "port": "80", "streamuri": "rtsp://audi.proxy/00A/8"}}, "6": {"1": {"ip": "172.18.191.123", "port": "9000", "streamuri": "rtsp://audi.proxy/00A/3"}, "2": {"ip": "172.18.191.124", "port": "8899", "streamuri": "rtsp://audi.proxy/00A/4"}, "3": {"ip": "172.18.191.125", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}}, "7": {}, "8": {"2": {"ip": "172.18.191.184", "port": "80", "streamuri": "rtsp://audi.proxy/00A/4"}, "3": {"ip": "172.18.191.185", "port": "2000", "streamuri": "rtsp://audi.proxy/00A/5"}}}, "auditories": {"305": {"51": {"ip": "172.18.191.51", "port": "80", "streamuri": "rtsp://audi.proxy/305/1"}, "52": {"ip": "172.18.191.52", "port": "8999", "streamuri": "rtsp://audi.proxy/305/2"}, "53": {"ip": "172.18.191.53", "port": "80", "streamuri": "rtsp://audi.proxy/305/3"}, "54": {"ip": "172.18.191.54", "port": "80", "streamuri": "rtsp://audi.proxy/305/4"}, "55": {"ip": "172.18.191.55", "port": "80", "streamuri": "rtsp://audi.proxy/305/5"}}, "306": {"61": {"ip": "172.18.191.61", "port": "80", "streamuri": "rtsp://audi.proxy/306/1"}, "62": {"ip": "172.18.191.62", "port": "80", "streamuri": "rtsp://audi.proxy/306/2"}, "63": {"ip": "172.18.191.63", "port": "80", "streamuri": "rtsp://audi.proxy/306/3"}, "64": {"ip": "172.18.191.64", "port": "80", "streamuri": "rtsp://audi.proxy/306/4"}, "65": {"ip": "172.18.191.65", "port": "80", "streamuri": "rtsp://audi.proxy/306/5"}}, "307": {"71": {"ip": "172.18.191.71", "port": "80", "streamuri": "rtsp://audi.proxy/307/1"}, "72": {"ip": "172.18.191.72", "port": "80", "streamuri": "rtsp://audi.proxy/307/2"}, "73": {"ip": "172.18.191.73", "port": "80", "streamuri": "rtsp://audi.proxy/307/3"}, "74": {"ip": "172.18.191.74", "port": "80", "streamuri": "rtsp://audi.proxy/307/4"}, "75": {"ip": "172.18.191.75", "port": "80", "streamuri": "rtsp://audi.proxy/307/5"}}, "308": {"81": {"ip": "172.18.191.81", "port": "80", "streamuri": "rtsp://audi.proxy/308/1"}, "83": {"ip": "172.18.191.83", "port": "80", "streamuri": "rtsp://audi.proxy/308/3"}, "84": {"ip": "172.18.191.84", "port": "80", "streamuri": "rtsp://audi.proxy/308/4"}, "85": {"ip": "172.18.191.85", "port": "80", "streamuri": "rtsp://audi.proxy/308/5"}, "86": {"ip": "172.18.191.86", "port": "80", "streamuri": "rtsp://audi.proxy/308/6"}}, "435": {"15": {"ip": "172.18.212.15", "port": "80", "streamuri": "rtsp://audi.proxy/435/4"}, "16": {"ip": "172.18.212.16", "port": "8080", "streamuri": "rtsp://audi.proxy/435/5"}, "212": {"ip": "172.18.190.212", "port": "8899", "streamuri": "rtsp://audi.proxy/435/8"}}, "504": {"91": {"ip": "172.18.191.91", "port": "80", "streamuri": "rtsp://audi.proxy/504/1"}, "92": {"ip": "172.18.191.92", "port": "80", "streamuri": "rtsp://audi.proxy/504/2"}, "93": {"ip": "172.18.191.93", "port": "9000", "streamuri": "rtsp://audi.proxy/504/3"}, "94": {"ip": "172.18.191.94", "port": "80", "streamuri": "rtsp://audi.proxy/504/4"}, "95": {"ip": "172.18.191.95", "port": "80", "streamuri": "rtsp://audi.proxy/504/5"}, "96": {"ip": "172.18.191.96", "port": "80", "streamuri": "rtsp://audi.proxy/504/6"}}, "505": {"137": {"ip": "172.18.191.137", "port": "8899", "streamuri": "rtsp://audi.proxy/505/2"}, "192": {"ip": "172.18.191.192", "port": "8000", "streamuri": "rtsp://audi.proxy/studio/3"}, "193": {"ip": "172.18.191.193", "port": "8000", "streamuri": "rtsp://audi.proxy/studio/4"}, "194": {"ip": "172.18.191.194", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/5"}, "195": {"ip": "172.18.191.195", "port": "2000", "streamuri": "rtsp://audi.proxy/studio/6"}, "196": {"ip": "172.18.191.196", "port": "80", "streamuri": "rtsp://audi.proxy/studio/7"}, "200": {"ip": "172.18.191.200", "port": "8899", "streamuri": "rtsp://audi.proxy/studio/8"}, "201": {"ip": "172.18.191.201", "port": "8899", "streamuri": "rtsp://audi.proxy/505/8"}}, "506": {"101": {"ip": "172.18.191.101", "port": "80", "streamuri": "rtsp://audi.proxy/506/1"}, "103": {"ip": "172.18.191.103", "port": "80", "streamuri": "rtsp://audi.proxy/506/3"}, "104": {"ip": "172.18.191.104", "port": "9000", "streamuri": "rtsp://audi.proxy/506/4"}, "105": {"ip": "172.18.191.105", "port": "80", "streamuri": "rtsp://audi.proxy/506/5"}, "106": {"ip": "172.18.191.106", "port": "80", "streamuri": "rtsp://audi.proxy/506/6"}}, "505a": {"197": {"ip": "172.18.191.197", "port": "8080", "streamuri": "rtsp://audi.proxy/505/3"}}, "00A": {"112": {"ip": "172.18.191.112", "port": "80", "streamuri": "rtsp://audi.proxy/00A/2"}, "113": {"ip": "172.18.191.113", "port": "80", "streamuri": "rtsp://audi.proxy/00A/3"}, "114": {"ip": "172.18.191.114", "port": "80", "streamuri": "rtsp://audi.proxy/00A/4"}, "115": {"ip": "172.18.191.115", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}, "116": {"ip": "172.18.191.116", "port": "80", "streamuri": "rtsp://audi.proxy/00A/6"}, "117": {"ip": "172.18.191.117", "port": "80", "streamuri": "rtsp://audi.proxy/00A/7"}, "118": {"ip": "172.18.191.118", "port": "80", "streamuri": "rtsp://audi.proxy/00A/8"}}, "00B": {"122": {"ip": "172.18.191.122", "port": "80", "streamuri": "rtsp://audi.proxy/00A/2"}, "123": {"ip": "172.18.191.123", "port": "9000", "streamuri": "rtsp://audi.proxy/00A/3"}, "124": {"ip": "172.18.191.124", "port": "8899", "streamuri": "rtsp://audi.proxy/00A/4"}, "125": {"ip": "172.18.191.125", "port": "80", "streamuri": "rtsp://audi.proxy/00A/5"}}}}
\ No newline at end of file
diff --git a/flask-app/utils/onvif_classes.py b/flask-app/utils/onvif_classes.py
index 1aa4045..f284f16 100644
--- a/flask-app/utils/onvif_classes.py
+++ b/flask-app/utils/onvif_classes.py
@@ -136,6 +136,16 @@ def replace_token(response, octet):
 def return_soap(response):
     return Response(response, mimetype='application/soap+xml')
 
+def return_ports_and_presets(input):
+    output = {
+        "ports": input["ports"]
+    }
+    presets = {}
+    for i in list(input["remote_controller"].keys()):
+        presets[i] = list(input["remote_controller"][i].keys())
+    output["presets"] = presets
+    return output
+
 HTTP_METHODS = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']
 
 #cameras = json.load(open(os.path.join(os.path.dirname(__file__), 'conf.json')))
@@ -156,15 +166,26 @@ class Proccesser():
             with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'image', path), "rb") as f:
                 return Response(f.read(), mimetype="image/jpeg")
 
+        @self.app.route("/inconf/all", methods=HTTP_METHODS)
+        def return_all_conf_presets():
+            output = {}
+            confs_directory = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "confs")
+            for root, dirs, files in os.walk(os.path.abspath(confs_directory)):
+                for file in files:
+                    output[file] = return_ports_and_presets(json.load(open(os.path.join(root, file))))
+            return jsonify(output)
+
+        @self.app.route("/inconf", methods=HTTP_METHODS)
+        def return_this_conf_presets():
+            return jsonify(return_ports_and_presets(self.cameras))
+
         @self.app.route("/preset/total", methods=HTTP_METHODS)
         @self.app.route("/preset/total/<preset>", methods=HTTP_METHODS)
         def return_total(preset = None):
             if preset == None:
-                return Response(str(len(list(self.cameras["remote_controller"].keys()))).encode(),
-                                status=200)
+                return jsonify({"number": len(list(self.cameras["remote_controller"].keys()))})
             else:
-                return Response(str(len(list(self.cameras["remote_controller"][preset].keys()))).encode(),
-                                status=200)
+                return jsonify({"number": len(list(self.cameras["remote_controller"][preset].keys()))})
 
         @self.app.route("/ports", methods=HTTP_METHODS)
         def return_ports():
@@ -178,8 +199,7 @@ class Proccesser():
                 self.cameras["default"] = preset
                 with open(self.conf_path, 'w') as j:
                     json.dump(self.cameras, j)
-                return Response(str(len(list(self.cameras["remote_controller"][self.cameras["default"]].keys()))).encode(),
-                                status = 200)
+                return jsonify({"number": len(list(self.cameras["remote_controller"][self.cameras["default"]].keys()))})
         @self.app.route("/update", methods=HTTP_METHODS)
         def update_instance():
                 self.cameras = json.load(open(self.conf_path))
diff --git a/flask-app/utils/swagger.yml b/flask-app/utils/swagger.yml
index d0307e8..eb3b3a7 100644
--- a/flask-app/utils/swagger.yml
+++ b/flask-app/utils/swagger.yml
@@ -7,7 +7,7 @@ tags:
 - name: "Получение технической информации"
   description: "Получение технической информации, нужной для работы пультов"
 - name: "Настройка"
-  description: "Изменение настроек ONVOF-Proxy"
+  description: "Изменение настроек ONVIF-Proxy"
 schemes:
 - "http"
 paths:
@@ -20,10 +20,13 @@ paths:
       produces:
       - "application/json"
       responses:
-        "200":
-          description: "Пресет изменен успешно, возвращено число камер в пресете"
-        "400":
-          description: "Нет такого пресета"
+        200:
+          description: "Словарь из одного значения"
+          schema:
+            type: "object"
+            properties:
+              number:
+                type: "integer"
   /ports:
     get:
       tags:
@@ -33,13 +36,11 @@ paths:
       - "application/json"
       responses:
         200:
-          description: "Словарь из двух значений"
+          description: "Словарь из одного значения"
           schema:
             type: "object"
             properties:
-              f:
-                type: "integer"
-              l:
+              number:
                 type: "integer"
   /preset/total:
     get:
@@ -50,10 +51,92 @@ paths:
       produces:
       - "text/plain"
       responses:
-        "200":
-          description: "Возвращено число пресетов"
+        200:
+          description: "Словарь из одного значения"
           schema:
-            type: "integer"
+            type: "object"
+            properties:
+              number:
+                type: "integer"
+  /inconf:
+    get:
+      tags:
+        - "Получение технической информации"
+      summary: "Получение разбивки портов и занесенных камер в этом конфиге"
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "Словарь из двух словарей: с портами и с занесенными камерами"
+          schema:
+            type: "object"
+            properties:
+              ports:
+                type: "object"
+                properties:
+                  first:
+                    type: "integer"
+                  last:
+                    type: "integer"
+              presets:
+                type: "object"
+                properties:
+                  1:
+                    type: "array"
+                    example: ["1","2","5"]
+                  2:
+                    type: "array"
+                    example: [ "1","3","4" ]
+  /inconf/all:
+    get:
+      tags:
+        - "Получение технической информации"
+      summary: "Получение разбивки портов и занесенных камер во всех конфигах"
+      produces:
+        - "application/json"
+      responses:
+        200:
+          description: "Словарь из словарей"
+          type: "object"
+          properties:
+            conf_name1:
+              type: "object"
+              properties:
+                ports:
+                  type: "object"
+                  properties:
+                    first:
+                      type: "integer"
+                    last:
+                      type: "integer"
+                presets:
+                  type: "object"
+                  properties:
+                    1:
+                      type: "array"
+                      example: [ "1","2","5" ]
+                    2:
+                      type: "array"
+                      example: [ "1","3","4" ]
+            conf_name2:
+              type: "object"
+              properties:
+                ports:
+                  type: "object"
+                  properties:
+                    first:
+                      type: "integer"
+                    last:
+                      type: "integer"
+                presets:
+                  type: "object"
+                  properties:
+                    1:
+                      type: "array"
+                      example: [ "1","2","5" ]
+                    2:
+                      type: "array"
+                      example: [ "1","3","4" ]
   /preset/total/<preset>:
     get:
       tags:
-- 
GitLab