LINUX.ORG.RU

Сообщения conformist

 

Browse repo with self-hosted engine

Форум — Admin

Привет.

Чтобы избежать xy-problem опишу какую проблему я хочу решить.

Есть пачка приватных репо, которые иногда хочется просматривать. Разумеется не сильно хочется делать это через файловую систему, просто неудобно. Так же не хочется добавлять все репы как проекты в IDE и потом переключаться.

Цель получить self-hosted интерфейс типа гитхаба, чтобы там список репо и можно по ним клацать там, смотреть что нужно.

Вариант решения — self hosted gitea. Добавил её в список уже подобных решений через traefik, всё работает, что я хотел в этом сетапе:

настроить синк файлов с рабочей машины на малинку и чтобы всегда это можно было просматривать через браузер с помощью gitea.

Проблема, с которой столкнулся — формат репо у хоста иной, нежели просто репо, который клонируется (информация о ветках, ревизиях разных).

Как сконвертировать репо (пусть даже одну какую-то ветку) в репо для gitea, чтобы последовательно можно было копировать из настоящего с помощью rsync, чтобы обновлять текущий статус?

 , ,

conformist
()

Альтернатива Makefile для создания алиасов длинных комманд

Форум — General

В общем сабж, обычно для выполнения длинных комманд создаётся Makefile, который помогает писать меньше букв. Например:

build:
    docker compose build

и после просто пишем:

make build

и так далее. Конкретно с docker compose (который v2) это приводит к неприятным проблемам: отсутствие цветов, а так же буфферизация мешает обновлять терминал. Так же мешает запускать createsuperuser для django, сразу падает ошибка, что мол не интерактивно, а без make работает нормально.

Собственно ищу путь, как бы достичь сокращения команд, но чтобы это было в рамках проекта (т.е. алиасы в .bashrc или что-то подобное не совсем подходит).

Может есть какой-то инструмент, которым бы это было легко достичь?

 ,

conformist
()

Share local network through mikrotik openvpn client

Форум — Admin

Всем привет. Есть такая потребность: расшарить локальную сетку при подключении к vpn сети. Это нужно, чтобы извне иметь доступ к камерам наблюдения дома.

Что есть:

  • дроплет на DO с двумя openvpn серверами (один настроен давно и имеет несколько клиентов, потому конфиг менять не хочется, пусть подключение будет по tls, а второй специально для микрота, на нём авторизация по login/pass)
  • собственно микрот с настроенным соединением как клиент к openvpn-server-2

Оба vpn сервера настроены с такими подсетями:

  • openvpn-server-1: 10.10.10.0 255.255.255.128
  • openvpn-server-2: 10.10.10.128 255.255.255.128

Адрес микротика статический: 10.10.10.129

подключаясь с телефона, например, к vpn, могу пинговать оба сервера.

Последний этап — добавить маршруты так, чтобы любой клиент мог пинговать/подключаться к адресам внутри локальной сети 192.168.88.0/24.

Опция client-to-client добавлена, клиенты пинговать друг друга могут.

 , ,

conformist
()

Использование библиотеки, требующей `window` в nodejs

Форум — Development

В общем сабж. Есть желание написать обёртку над либой, но она для браузера и падает с ошибкой, когда внутри идёт обращение к объекту window.

Можно ли как-то это обойти?

 ,

conformist
()

Conditional lookahead regex in python

Форум — Development

Допустим есть такая регулярка на PHP:

^\+61(?(?=1800)1800\d{6}|\d{9})$

на странице видно, что из 4-х номеров она матчит только первые 2

+611800123456  # match
+61123456789   # match

+61180012345
+6112345678

В python такой синтаксис не поддерживается, указано, что группа должна быть именованная, чтобы на неё сослаться, т.е. как-то так, как я понимаю:

^\+61(?P<test>1800)?(?(test)\d{6}|\d{9})$

но проблема в том, что в этом варианте матчится и третий номер, хотя не должен.

Собственно вопрос, как исправить?

 ,

conformist
()

Using docker-compose inside a running network

Форум — Development

Привет.

Есть сеть, созданная с помощью docker-compose, которая работает (приложение, база данных, что-то ещё).

Я хочу что-то сделать с базой данных с помощью моего кастомного скрипта, который так же собран с помощью Dockerfile. Чтобы это сделать, я хочу написать другой docker-compose так, что он будет зависеть от базы данных, запущенной ранее (например при запуске передать какие-то параметры с помощью переменных окружения). Или как-то расшарить сеть, чтобы достучаться до БД.

Дело в том, что делая proxynetwork я не могу подключиться к БД, созданной в другом docker-compose.

Ищу совет, ссылку на документацию, что угодно, чтобы такое реализовать.

 ,

conformist
()

Запретить повторное отправление формы

Форум — Web-development

Есть простая форма:

<form method="get">
  <input type="text" name="email">
</form>

Так исторически сложилось в html, что при нажатии на Enter — она отправляется. Проблема в том, что Enter можно нажать много раз и хотелось бы после первого нажатия заблокировать возможность повторной отправки.

Если сделать:

<form onsubmit="email.disabled=true;">...</form>

то форма игнорирует disabled поля и она приходит пустой.

Форма inline, добавить кнопку, конечно, можно, но хотелось бы избежать этого, чтобы не изменять привычный пользователям интерфейс.

 , ,

conformist
()

Database level constraint

Форум — Development

Всем привет.

Есть в БД такое понятие, как ограничения. Например есть ограничение unique_together, когда нельзя иметь в БД 2 записи с одинаковыми парами полей. Но это ограничение не всегда работает в django. Т.е. запросто с этим ограничением можно создать объекты в базе методом model.save или через queryset: Model.objects.create — чтобы этого избежать, нужно вызвать метод full_clean или validate_unique.

Это всё методы из django ORM. А есть ли какой-то способ запретить на уровне базы данных? Т.е. создать такое ограничение, которое просто не позволит сделать insert, вызвав ошибку?

 , , , ,

conformist
()

Vue.js как добавление реактивности

Форум — Web-development

Привет.

Решил я сделать свой мини сайт на vps для лично своих заметок и прочих нужд. Т.к. в основном работаю с django, на ней и решил остановиться. Примерная концепция — отдельные приложения для реализации каких-то своих функций. Для упрощения восприятия положим, что это блог, какое-то приложение для учёта каких-то действий, может аналог pastebin, прочее.

Делать SPA я не собираюсь, равно как и использовать какие-либо route, т.е. классическая схема обычного веб приложения. Но! Хочется добавить какой-то реактивности, например, логин форма xhr запросом логинит. Так же в бложике может быть markdown редактор, например. Т.е. в некоторых местах могут быть какие-то сущности, которые работают исключительно с api бекенда. Такая примерно идея.

Понимая, что уже 2к19 и использовать jQuery как минимум странно, я решил заюзать vue. Написал конфиг для webpack, чтобы удобно собирать это всё вместе с scss стилями по разным файлам и хочу интегрировать это в страницы обычного django.

Собственно вопрос. Я ознакомился с документацией и разными решениями и что я понял:

  • почти всегда vue позиционируется как SPA. Типа вот тебе #app и тут делай что тебе надо. Но мне надо не это.
  • да, есть решение, когда тебе нужно не это и это — portal-vue — типа всё так же регистрируешь один #app, но магией работы с DOM из инициализированного приложения можно достучаться до элементов извне. Как мне кажется, это довольно костыльный метод.
  • сделать несколько инстансов vue App. Например в подключаемом файле js пишем конструкции типа: if element.exists => new vue.App... — несколько костыльно, но в общем мне решение подходит, т.к. я могу при нахождении какого-то элемента на странице сделать его реактивным.

Собственно вопрос — неужели всё так печально? Ладно, я могу создать несколько элементов, но, вдруг, мне понадобится шарить между ними какие-то данные? Скидывать всё в localStorage и добавлять кругом разных eventListener чтобы всё это отслеживать? Так это очень похоже на jQuery подход.

Если у кого есть пример решения подобной проблемы и как с этим боролись — заранее благодарен.

 , ,

conformist
()

Django nested formset

Форум — Web-development

Всем привет.

Вопрос по django formset. Допустим есть модель и относящаяся к ней вторая модель:

class SomeModel(models.Model):
    pass


class RelatedModel(models.Model):
    some_model = models.ForeingKey(to=SomeModel, ...)

Так же к ним обычные формы. Теперь, на странице может быть несколько SomeModel, для этого используем modelformset_factory:

SomeModelFormset = modelformset_factory(SomeModel, SomeModelForm, extra=2, can_delete=True)
some_model_formset = SomeModelFormset(request.POST, queryset=some_model_qs, prefix='sm')

Таким образом у нас может быть много форм SomeModel и к каждой из них нужно добавить таким же образом formset из RelatedModel.

Как один из вариантов — пройти по формам some_model_formset и к каждой из них создать отдельный formset из RelatedModel с префиксом — prefix='rm_%s % index_of_some_model_form' и потом так же в цикле валидировать эти формы.

Нет ли более изящного решения этой проблемы?

 , ,

conformist
()

Засыпает hdd во время просмотра фильмов/прослушивания музыки

Форум — General

Доброго времени суток.

Пролема в том, что основная система на ssd, а на hdd осталась помойка. При просмотра контента (конкретно музыка — deadbeef, фильмы — smplayer (бекэнд mpv)) — воспроизведение подвисает на доли секунды. Очень похоже, как будто плеер считал в буфер какое-то количество данных и до того времени, как он обратится за следующими данными — винт уже заснул. Он немного шумит, потому слышно, как он включается.

Собственно вопрос, как от этого избавиться?

OC: debian sid, DE: MATE, если это будет полезным.

 , ,

conformist
()

Не допустить читерства на backend

Форум — Development

Доброго времени суток.

Есть проект на django, отдельно от него есть проекты на angular и react. На django есть система вознаграждений и она хранит так же вознаграждения за проведённое время в приложениях на angular/react. Разумеется для учёта этого времени из фронта делаются запросы на api django, чтобы сохранить результат.

Исходные данные — используется JWT (т.е. мы в принципе знаем, когда токен был получен (время жизни токена 15мин), так же есть refresh token). Нужно хранить 5-тиминутные отрезки времени. Т.е. пользователь провёл 5 минут — шлём запрос. Запросы с большим временем тоже можно, но меньше времени жизни токена (15мин).

Теперь вопросы и проблемы:

1) допустим токен был получен в 21.00, но это был refresh token и пользователь на самом деле был на сайте с 20.57 и, соответственно, в 21.02 придёт запрос на запись 5 минут. Как это валидировать? дать возможность 5 минутного сдвига до времени получения токена?

2) и более важный — это же простой xhr запрос с фронта. В принципе пользователь может изучить ключи этиз запросов и из какого нибудь postman/insomnia или обычным curl слать запросы постоянно — как защититься от этого?

Используется django rest framework + rest framework simplejwt. Production инстансы на domain.tld — django, subdomain1.domain.tld — клиент 1 и второй так же. Т.е. по идее можно было бы ограничить по хосту запросы, чтобы урегулировать второй вопрос. Кто-то делал подобное?

 , , , ,

conformist
()

Разные workplaces для разных мониторов

Форум — Desktop

День добрый.

Имеется debian MATE, 2 монитора и 4 workplaces. Проблема в том, что переключая workplaces меняются окна на обоих мониторах, а хотелось бы чтобы на втором мониторе был отдельный workplace (например открыл окно и оно там статично). Похоже, что marco это не поддерживает, может был у кого опыт, как достичь этого?

 , ,

conformist
()

ISPConfig apache default virtualhost

Форум — Admin

Привет.

Есть vps с apache и opencart. Нормально работает, 2 конфига для http и https. Указывают на один каталог и там силами htaccess сделан редирект на https.

Захотел поставить ispconfig, который проживает обычно на отдельном порту (8080) и пытаюсь в него попасть. Вот тут странность, в конфиге ispconfig написано virtualhost _default_:8080, т.е. apache должен при запросе по этому порту перенаправлять на этот virtualhost. Но этого не происходит, при каждом запросе мне показывается сайт, а не панель.

Для проверки в обоих document root я создал файл test.php с разным содержимым (например, default и custom).

https://domain.tld/test.php → default
https://domain.tld:8080/test.php → default
http://ip:8080/test.php → bad request
https://ip:8080/test.php → default
В конфигах везде убрал _default_, заменив на *:443/*:80. Пробовал перенести на отдельный поддомен ispconfig, например: panel.domain.tld, порт 443 — открывает так же дефолтный сайт (т.е. SNI не работает, получается?). Не знаю что ещё предпринять.
root@domain:/etc/apache2/sites-enabled# apachectl -t -D DUMP_VHOSTS
VirtualHost configuration:
*:8081                 domain.tld (/etc/apache2/sites-enabled/000-apps.vhost:8)
*:80                   domain.tld (/etc/apache2/sites-enabled/000-default.conf:1)
*:8080                 domain.tld (/etc/apache2/sites-enabled/000-ispconfig.vhost:6)
*:443                  domain.tld (/etc/apache2/sites-enabled/default-ssl.conf:2

 , ,

conformist
()

Направить весь трафик на порт

Форум — Admin

Доброго времени суток. Есть желание направить весь исходящий трафик на определённый порт, на котором поднят ssh туннель. Пробовал sshuttle, но после его запуска по ssh подключиться к удалённой машине уже нельзя. Потому ищется простой способ как это сделать. Заранее спасибо.

P.S. openvpn, которым обычно решал проблему, запустить на удалённой машине нельзя (контейнер без tun/tap).

 , ,

conformist
()

Angular поиск элемента в списке

Форум — Web-development

Доброго времени суток. Такой вопрос — есть диалог, в который загружается пачка элементов, допустим штук 20-30. Хочу добавить поисковую форму, похожую на md-autocomplete, но так, чтобы все элементы были видны, а если начинаешь набирать текст, то оставались только те, которые совпадают по фильтру. Сам md-autocomplete, насколько я понял, мне не подходит, т.к. он не показывает то, что загрузил, а только по мере набора.

Вот пример view, который сейчас:

<md-dialog-content ms-scroll>
  <md-list>
    <div layout="row" layout-align="center center" ng-show="vm.loading">
      <md-progress-circular md-mode="indeterminate" md-diameter="50"></md-progress-circular>
    </div>
    <md-list-item>
      <div flex class="md-list-item-text" layout="row">
        <div flex="70"><strong>Item</strong></div>
        <div flex="30"><strong>Saved</strong></div>
      </div>
      <md-divider></md-divider>
    </md-list-item>

    <md-list-item ng-repeat="item in items" ng-click="vm.selectItem(item)">
      <div flex class="md-list-item-text" layout="row" layout-align="none center">
        <div flex="70">
          <span class="text-truncate padding-right-25">{{ item.title}}</span>
        </div>
        <div flex="20">{{ item.modified_at | date:"dd/MM/yyyy" }}</div>
      </div>
      <md-divider></md-divider>
    </md-list-item>
  </md-list>
</md-dialog-content>

 ,

conformist
()

lightdm не запускает сессию с ~/.xsession

Форум — General

Доброго времени суток!

В общем понадобилось в debian, чтобы был обновлён PATH, хочу в него добавить каталог $HOME/.local/bin. В ubuntu это работало, но там DM вроде был sddm и он читал .profile, а lightdm не хочет, ему нужен .xsession. Я его создал и написал в нём следующее:

#!/bin/sh

if [ -d "$HOME/.local/bin" ] ; then
    export PATH="$HOME/.local/bin:$PATH"
fi

exit 0
После этого я не могу создать сессию. Притом в логах lightdm он никак это не мотивирует, пишет просто — получил сигнал 15, выход. Не пойму, что ему мешает работает, может кто сталкивался?

 , ,

conformist
()

Форматирование вывода vnstat

Форум — Desktop

Доброго времени суток. В апплете МАТЕ command output хочу видеть количество потреблённого трафика. Раньше справлялся обычным awk, теперь решил чуть исправить вид.

Что хочу, что получилось:

~ vnstat -i enp3s0f5 --oneline
1;enp3s0f5;01/14/2018;164.21 MB;12.90 MB;177.11 MB;26.85 kbit/s;Jan '18;164.21 MB;12.90 MB;177.11 MB;1.27 kbit/s;164.21 MB;12.90 MB;177.11 MB
Вот так выглядит строка, которую нужно отформатировать. Интересуют 4-е и 5-е поле (если разбить с помощью ;), как хочу, чтобы оно выглядело: 164M/13M — т.е. округление и убрать букву B:
#!/bin/bash

function round_it(){
	count=${$1%.*}
	prefix=${$2%?}
	echo "$count$prefix"
}

IFACE=$(ip addr show | awk '/inet.*brd/{print $NF; exit}')
out=$(vnstat -i $IFACE --oneline)
IFS=';' array=($out)
down=${array[3]}
up=${array[4]}
echo $(round_it $down)
вот как написал, но не работает, жалуется на bad substitution, хотя в терминале если присвоить строку и разбить на массив — всё работает. Не пойму, где я накосячил.

Прошу помощи, заранее благодарен.

 

conformist
()

Загрузить содержимое файла в переменную

Форум — Development

В общем сабж. Есть форма с двумя <input type=file>. Они могут быть выбраны, а могут быть и нет или выбран один из двух. Проблема в том, что файла 2 и я не могу выйти из callback сохранив данные для последующего запроса.

Что я делаю:

function loadFile(element, getData){
  var file = element.prop('files')[0];
  var reader = new FileReader();
  reader.onload = function(e){
    var data = e.target.result;
    getData(data);
  }
  reader.readAsText(file);
};
// Далее проверяю, есть ли в element класс, определяющий, что это
// поле с файлом и пытаюсь его загрузить:
if(left_code.hasClass('file')){
  loadFile(left_code, function(result){
    console.log(result);  // здесь всё загружено
});
но как мне сохранить этот result в переменную и потом сделать точно так же со вторым файлом? Можно попробовать сделать ещё один внутренний if для второго, но если не будет первого, а будет второй → получим кашу.

Пробовал варианты из гугла типа $.wait, но что-то не получается.

 ,

conformist
()

Определить idle или нет

Форум — Development

Доброго времени суток. Пишу небольшой скрипт для себя с помощью python-xlib и потребовалось узнать мне, в какие моменты пк простаивает, чтобы это можно было отслеживать.

В гугле нашёл много ссылок на один и тот же кусок кода, в оригинале аж 2007-го года, который использует библиотеку C, но у меня сомнения:

1) неужели за это время не придумали ничего более удобного?

2) если всё же так, как мне это впихнуть в свой цикл?

Я использую в цикле next_event(), который ориентируется на Xlib.X.PropertyChangeMask: т.е. он реагирует на изменения в заголовках окон, например, и, когда пк неактивен, по идее вообще никаких event'ов происходить не будет.

Сразу лучше скажу зачем мне это: я хочу знать, сколько времени было открыто то или иное окно, но я не хочу засорять эти данные тем временем, когда пк бездействовал.

 , , ,

conformist
()

RSS подписка на новые темы