diff --git a/Dockerfile b/Dockerfile index 13a330b4..13c53e24 100755 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ ENV PATH="/opt/venv/bin:$PATH" COPY . ${INSTALL_DIR}/ -RUN pip install graphene flask netifaces tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros git+https://github.com/foreign-sub/aiofreepybox.git \ +RUN pip install OpenWrtRpc graphene flask netifaces tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros git+https://github.com/foreign-sub/aiofreepybox.git \ && bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \ && bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \ && bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;" diff --git a/Dockerfile.debian b/Dockerfile.debian index 789fa351..af997196 100755 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -43,7 +43,7 @@ RUN phpenmod -v 8.2 sqlite3 RUN apt-get install -y python3-venv RUN python3 -m venv myenv -RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros " +RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install OpenWrtRpc graphene flask netifaces tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros " # Create a buildtimestamp.txt to later check if a new version was released RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt diff --git a/front/css/app.css b/front/css/app.css index b8a604f4..7088a33e 100755 --- a/front/css/app.css +++ b/front/css/app.css @@ -1409,6 +1409,23 @@ input[readonly] { transition: box-shadow 0.1s ease-in-out, background-color 0.1s ease-in-out; } +.devicePropAction +{ + width: 1.2em; + height: 1.2em; + display: inline-block; + padding: 0.1em; + margin: 0.1em; +} + +.devicePropAction:hover +{ + font-size: larger; + padding: 0em; + margin: 0em; + +} + /* ----------------------------------------------------------------- */ /* MODAL popups */ /* ----------------------------------------------------------------- */ @@ -1746,7 +1763,8 @@ input[readonly] { table.dataTable tbody > tr.selected { - color:red; + /* color:red; */ + color: #353c42; } /* ----------------------------------------------------------------------------- diff --git a/front/devices.php b/front/devices.php index 60861254..2dd99ee2 100755 --- a/front/devices.php +++ b/front/devices.php @@ -925,7 +925,7 @@ function renderCustomProps(custProps, mac) { break; } - html += ` ${atob(propMap["CUSTPROP_icon"])} `; + html += `
schedule"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Когда должен запуститься плагин. Хорошими вариантами являются schedule"
+ }
+ ]
+ },
+ {
+ "function": "RUN_SCHD",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ { "elementType": "input", "elementOptions": [], "transformers": [] }
+ ]
+ },
+ "default_value": "*/1 * * * *",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Schedule"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Schedule"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Only enabled if you select schedule in the SYNC_RUN setting. Make sure you enter the schedule in the correct cron-like format (e.g. validate at crontab.guru). For example entering 0 4 * * * will run the scan after 4 am in the TIMEZONE you set above. Will be run NEXT time the time passes."
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Доступно только в том случае, если вы выбрали schedule в SYNC_RUN setting. Убедитесь, что вы вводите расписание в правильном формате, похожем на cron (например, проверьте на crontab.guru). Например, если вы введете 0 4 * * *, то сканирование будет запускаться после 4 часов утра в TIMEZONE который вы установили выше. Сканирование будет запускаться СЛЕДУЮЩИЙ РАЗ, когда пройдет это время."
+ }
+ ]
+ },
+ {
+ "function": "CMD",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "readonly": "true" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": "python3 /app/front/plugins/luci_import/script.py",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Command"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Command to run. This can not be changed"
+ }
+ ,
+ {
+ "language_code": "ru_ru",
+ "string": "Команда для запуска. Это невозможно изменить"
+ }
+ ]
+ },
+ {
+ "function": "RUN_TIMEOUT",
+ "type": {
+ "dataType": "integer",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "number" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": 30,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Run timeout"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Время ожидания выполнения"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Maximum time in seconds to wait for the script to finish. If this time is exceeded the script is aborted."
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Максимальное время в секундах, в течение которого нужно ждать завершения работы скрипта. Если это время превышено, скрипт прерывается."
+ }
+ ]
+ },
+ {
+ "function": "host",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ { "elementType": "input", "elementOptions": [], "transformers": [] }
+ ]
+ },
+ "default_value": "192.168.1.1",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Router ip"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Ip адрес роутера"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Router ip(do not include http:// or https://)."
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Ip адрес роутера(без http:// и https://)."
+ }
+ ]
+ },
+ {
+ "function": "user",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ { "elementType": "input", "elementOptions": [], "transformers": [] }
+ ]
+ },
+ "default_value": "root",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Router user"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Имя пользователя для подлючения к роутеру"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "User name used to login into your router."
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Имя пользователя для подлючения к роутеру."
+ }
+ ]
+ },
+ {
+ "function": "password",
+ "type": {
+ "dataType": "string",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "password" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": "",
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Router password"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Пароль роутера"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "Password used to login into your router."
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Пароль для подлючения к роутеру."
+ }
+ ]
+ },
+ {
+ "function": "ssl",
+ "type": {
+ "dataType": "boolean",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "checkbox" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": false,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Router SSL"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Роутер SSL."
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "If your router enforces SSL connections."
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Если роутер поддерживает SSL подключение."
+ }
+ ]
+ },
+ {
+ "function": "verify_ssl",
+ "type": {
+ "dataType": "boolean",
+ "elements": [
+ {
+ "elementType": "input",
+ "elementOptions": [{ "type": "checkbox" }],
+ "transformers": []
+ }
+ ]
+ },
+ "default_value": true,
+ "options": [],
+ "localized": ["name", "description"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Verify SSL"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Проверка SSL"
+ }
+ ],
+ "description": [
+ {
+ "language_code": "en_us",
+ "string": "If SSL/TLS verification for HTTPS resources needs to be turned off (for self-signed certs, etc.)"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Если необходимо отключить проверку SSL/TLS для ресурсов HTTPS (для самоподписанных сертификатов и т. д.)"
+ }
+ ]
+ }
+ ],
+ "database_column_definitions": [
+ {
+ "column": "Index",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "none",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Index"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Индекс"
+ }
+ ]
+ },
+ {
+ "column": "Object_PrimaryID",
+ "mapped_to_column": "cur_MAC",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "device_name_mac",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "MAC"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "MAC"
+ }
+ ]
+ },
+ {
+ "column": "Object_SecondaryID",
+ "mapped_to_column": "cur_IP",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "IP"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "IP"
+ }
+ ]
+ },
+ {
+ "column": "Watched_Value1",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Ip host"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Ip хоста"
+ }
+ ]
+ },
+ {
+ "column": "Watched_Value2",
+ "mapped_to_column": "cur_NAME",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Name"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Имя"
+ }
+ ]
+ },
+ {
+ "column": "Dummy",
+ "mapped_to_column": "cur_ScanMethod",
+ "mapped_to_column_data": {
+ "value": "LUCIRPC"
+ },
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Scan method"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Метод сканирования"
+ }
+ ]
+ },
+ {
+ "column": "DateTimeCreated",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Created"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Создано"
+ }
+ ]
+ },
+ {
+ "column": "DateTimeChanged",
+ "css_classes": "col-sm-2",
+ "show": true,
+ "type": "label",
+ "default_value": "",
+ "options": [],
+ "localized": ["name"],
+ "name": [
+ {
+ "language_code": "en_us",
+ "string": "Changed"
+ },
+ {
+ "language_code": "ru_ru",
+ "string": "Изменено"
+ }
+ ]
+ },
+ {
+ "column": "Status",
+ "css_classes": "col-sm-1",
+ "show": true,
+ "type": "replace",
+ "default_value": "",
+ "options": [
+ {
+ "equals": "watched-not-changed",
+ "replacement": "