• Как вернуть значение из form?

    @iddqda
    network engineer, netdevops
    Ваш код на фласке не имеет ничего общего с формами в html
    посмотрите может Вы файлы перепутали

    Если Вы используете метод request.form
    то ключ в методе и в форме должны совпадать

    т.е. для
    name = request.form["username"]

    в html форме должен быть такой input:
    <input type="text" name = "username" blablabla >
    Надеюсь понятно, что ключем здесь является username
    А ваши ключи в коде и форме не совпадают.

    Кроме того, для обработки и валидации html forms в Flask-е принято использовать WTF-Forms.
    По ссылке про него очень подробно и доходчиво: https://habr.com/en/post/346342/
    Ответ написан
    Комментировать
  • (Ubuntu) Как открыть доступ к передачи файлов в RocketChat?

    @iddqda
    network engineer, netdevops
    а почему бы встроенную и включенную по умолчанию GridFS использовать?

    А так похоже на проблемы с правами на доступ к файловой системе
    И тут надо понимать, что snap - это подобие песочницы в которой крутится процесс.
    сам процесс имеет расширенные права, но только внутри своей песочницы
    соответственно и директорию в которую может писать процесс, можно использовать только из его песочницы.
    например такую: /var/snap/rocketchat-server/common/uploads

    если же надо выйти за пределы песочницы, то, возможно, процесс snap позволяет смонтировать внешние директории внутрь, но это надо смотреть и настраивать отдельно.
    Я не знаком с snap-ом поэтому не подскажу
    Ответ написан
  • Выбор ОС для разработки под Docker: Windows или Linux?

    @iddqda
    network engineer, netdevops
    Да пофиг сейчас на чем прогать
    Я у себя на работе выделил сервер с убунтой под разработку (headless т.е. без X-ов)
    накатил туда code-server (vs-code) и gogs (aka github on prem)
    И теперь спокойно запускаю vscode в браузере из под винды ли, мака или той же убунты на моем основном рабочем компе.

    Кстати с удивлением обнаружил, что мак почти полностью заменяет мне линукс для моих задач.
    Так то я в основном сетевик и CLI моя родная среда. Но так же я лайтово занимаюсь прогерством.
    Автоматизирую сетевые задачи. Не только скрипты, есть и чатботы и веб-приложения с развесистым бекендом и на докерах. Правда не PHP. Python да js в основном.
    А вот чисто в винде когда прогать попытался - не осилил среду рабочую настроить
    Там же по умолчанию вообще ничего нет. Все приходится отдельно ставить из разных не особо доверенных источников
    Ответ написан
    Комментировать
  • Как вызвать функцию Python из JavaScript?

    @iddqda
    network engineer, netdevops
    Ну по сути тебе надо создать веб приложение
    где бекенд будет вызывать твою готовую функцию, а на фронте форма из пары полей ввода и кнопки, на которую вешается обработчик на JS

    для бекенда я бы использовал FastAPI
    что-то типа такого:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/dialog/")
    def read_item(message: str, lang: str = 'ru'):
        return {'message': detect_intent_texts(TOKEN, SESSION_ID, message, lang)


    На фронте обычный JS fetch GET c параметрами (или POST, просто он чуть сложнее для бека)

    document.querySelector("#button").addEventListener("click", (event) => {
        const msg = document.querySelector("#message").value;
        const lang = document.querySelector("#lang").value;
    
        fetch('/dialog/?' + new URLSearchParams({
            message: msg,
            lang: lang,
        }))
            .then((response) => {
                if (!response.ok) {
                    throw new Error("HTTP error, status = " + response.status);
                }
                return response.json();
            })
            .then((data) => {
                alert(data.message);
            })
            .catch((error) => {
                alert(error);
            });
    });


    з.ы. у меня одноклассник был с таким именем
    Ответ написан
    Комментировать
  • Почему в тестах выдает ошибку 'Response' object has no attribute 'items'?

    @iddqda
    network engineer, netdevops
    потому что функции, декорируемые @app.route должны возвращать Response object

    короче вот так правильно
    return Response("This is your login", status=200, content_type="text/plain")


    или если json то вот так проще:
    return jsonify({"message": "This is your login"}), 200
    Ответ написан
    1 комментарий
  • Не получается установить библиотеки на ubuntu, что делать?

    @iddqda
    network engineer, netdevops
    Похоже у вас нет прямого доступа в интернет
    если есть прокси то укажите его в переменных среды (HTTP_PROXY, HTTPS_PROXY) или непосредственно в команде pip3 install:
    pip3 install -r requirements --proxy http://10.1.1.1:8080
    Ответ написан
    Комментировать
  • Можно ли определить при помощи flask узнать MAC адрес клиента в локальной сети который запросил страницу?

    @iddqda
    network engineer, netdevops
    да можно. если есть доступ к маршрутизатору к которому подключен клиент
    из запроса выдергиваете ip адрес request.remote_ip
    и далее отдельным запросом или воркером запрашиваете маршрутизатор на предмет ip_to_mac
    Ответ написан
    Комментировать
  • Как в JS сделать запрос, аналогичный submit form в html?

    @iddqda
    network engineer, netdevops
    как то вот так:
    const formData = new FormData();
    const photos = document.querySelector('input[type="file"][multiple]');
    
    formData.append('title', 'My Vegas Vacation');
    for (let i = 0; i < photos.files.length; i++) {
      formData.append('photos', photos.files[i]);
    }
    
    fetch('https://example.com/posts', {
      method: 'POST',
      body: formData,
    })
    .then(response => response.json())
    .then(result => {
      console.log('Success:', result);
    })
    .catch(error => {
      console.error('Error:', error);
    });


    цельнотянуто отсюда: https://developer.mozilla.org/en-US/docs/Web/API/F...
    Ответ написан
    Комментировать
  • Случайные числа Python?

    @iddqda
    network engineer, netdevops
    как то так например:
    a = random.randint(1, 99)
    b = random.randint(1, 99)
    
    if a>b:
        a,b = b,a
    
    secret = random.randint(a,b)
    print (f"Это число от {a} до {b}. Я дам тебе 6 попыток.")
    Ответ написан
    6 комментариев
  • Как пробросить трафик по порту без подмены ip адреса?

    @iddqda
    network engineer, netdevops
    DNAT подменяет Destination address и не трогает Source
    т.е. вроде все правильно делаешь.
    но судя по симптомам, где то у тебя в правила iptables прокрался SNAT и/или маскарадинг
    Ответ написан
    1 комментарий
  • Крик души. Что можно замутить на 1500$?

    @iddqda
    network engineer, netdevops
    в качестве коммутаторов покупаешь пару б/у цисок например такие WS-C3750X-48P-S
    Только смотри чтоб L3 прошивка там была. И шнурки стековые. И блоки питания (их там по два вроде)

    В качестве почтовика берешь обычный комп, ставишь на него любой Linux + docker и ковыряешь dockerhub на предмет готовых решений которые тебе подойдут. Например вот на этот комбайн посмотри https://mailcow.email/

    Роутером можно пару микротиков взять. Модель подбирать под толщину аплинков.
    Пару потому что они дешевые и их проще менять если что.
    Ответ написан
    Комментировать
  • Как создать отказоустойчивую локальную сеть за счет физического дублирования оборудования, но избегая "петли\зацикленности "?

    @iddqda
    network engineer, netdevops
    возможно конечно
    но в любом случае не на хабах. К слову, хабы не производятся уже много лет
    если используются свичи, т.е. L2, то для распутывания петель применяется протокол STP и его разновидности.
    либо используется аггрегирование каналов LAG, MLAG итп
    если L3, то используются FHRP протоколы, протоколы динамической маршрутизации, ну или еще можно статику + BFD

    з.ы. и вопрос точно не относится к "сложным"
    Ответ написан
    Комментировать
  • Как хранить информацию о коммутации линий связи?

    @iddqda
    network engineer, netdevops
    пробовал решать эту задачу, но в итоге забил
    Просто потому, что кроссировка - это пассивное состояние, которое автоматически не верифицировать.
    портов на патч-панелях как правило в разы больше чем портов коммутаторов (если не опенспейс где можно зафиксировать рабочие места).
    Но даже если коммутаторов хватает, и каждая неиспользуемая розетка соединена с портом коммутатора то по соображениям ИБ порт на коммутаторе выключен и наличие кроссировки никак не помогает.

    В случае когда кроссировку выполняет всегда один и тот же человек, ведение кабельного журнала (неважно какого и в чем) еще целесообразно.
    Но когда кроссировкой занимаются 7 нянек, в этом самом журнале будет полный бардак. А верификация автоматическая невозможна. Все равно все делать ногами. Вот пусть эти 7 нянек и бегают

    А вот задача поиска активного порта по юзеру успешно решается множеством способов и инструментов.
    Я использую LibreNMS. Там из коробки такое есть. А как такое сделать в заббикс не представляю. Хотя нет, представляю. В том случае когда пользователь блокирует порт по portsecurity, мой zabbix мне смс-ку шлет с номером коммутатора, порта и мак-адресом, вызвавшим событие.
    Ответ написан
    Комментировать
  • Как дебажить Python по ssh на удаленной машине (в Линукс) из Visual Studio?

    @iddqda
    network engineer, netdevops
    самое простое если Вы подключаетесь с Linux-а (или мака) и на том сервере есть X-ы и vscode
    то просто при подключении используйте параметр -X (ssh -X user@server) и дальше запускаете vscode из консолии дебажьте на здоровье.

    а вобще vscode умеет работать по ssh из коробки
    https://code.visualstudio.com/docs/remote/ssh
    Ответ написан
    Комментировать
  • Как передать изменённые данные таблицы в views.py?

    @iddqda
    network engineer, netdevops
    наверняка в джанге есть какой то отдельный модуль наподобие flask-admin который сопоставит модель и представление.

    а если делать тупо в лоб, то я бы тянул таблицу так же шаблоном, а данные в ячейки отдельным get запросом получал.
    Этими данными инициализировать массив InitArr.
    Склонировать InitArr в оперативный массив OperArr.
    Все изменения в контенте в ячейках отражать в OperArr
    При нажатии Submit сравнивать два массива и изменения пушить на сервер.
    Если удачно клонировать OperArr в InitArr и так по кругу.

    все это на JS разумеется
    кнопку сохранить сделал бы одну на всю страницу
    а по кнопке удалить можно просто прятать линию посредсвом css
    Ответ написан
  • Как правильно создать макрос в Zabbix?

    @iddqda
    network engineer, netdevops
    ну как бы в этом и смысл макросов.
    Макросы раскрываются в требуемое значение в зависимости от контекста

    https://www.zabbix.com/documentation/current/ru/ma...
    Ответ написан
    Комментировать
  • Число пар одинаковых элементов в списке?

    @iddqda
    network engineer, netdevops
    какая то сложная логика
    просто взять длину списка и вычесть длину сета этого списка
    вот и будет количество пар (если троек, четверок итп то так просто уже нельзя)
    Ответ написан
  • Как определить, от какой именно формы приходит post-запрос, если форм на странице несколько?

    @iddqda
    network engineer, netdevops
    еще можно отправлять разные формы в разные route
    или отправлять не браузером, а JS и напихать в запрос чего угодно чтоб отличать

    document.getElementById("myForm").addEventListener('submit', (event) => {             
            const data = new FormData(event.target);
            data.append('formname','myform');
    
            fetch("/formproc", {
                method: 'POST',                                            
                body: data
            })
            .then((response) => response.text())
            .then((data) => {
                console.log(data);            
            })
            .catch((error) => {            
                console.log(`error: ${error}`);
            });
            event.preventDefault();  // если не нужно перегружать страницу
        })
    Ответ написан
    Комментировать
  • Как задать роут через определённый интерфейс и туннель?

    @iddqda
    network engineer, netdevops
    я так никогда не делал, но общих соображений накидаю. Вдруг поможет?

    второй конец veth0 со стороны NS настроен?
    а обратный маршрут есть? из vpn в 192.168.1.4?
    в NS такое прописано sysctl -w net.ipv4.ip_forward=1?
    Ответ написан
    Комментировать
  • Два основых шлюза на Windows Server 2016?

    @iddqda
    network engineer, netdevops
    какая интересная картинка
    интересная тем, что судя по картинке и тому что написано в вопросе, L2 связность двух Core обеспечивается только этим твоим сбриджованным сервером. Уверен что через твой бридж мультикаст (hsrp) пройдет?
    И зачем в этой топологии изначально L3 топологии вообще L2 использовать? Может OSPF сразу?
    Ответ написан