Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 July 11

AA

Anna Alimova 👩‍💻... in NodeUA - JavaScript and Node.js in Ukraine
Что ж, успехов )
источник
2020 July 12

Т

Тёмыч in NodeUA - JavaScript and Node.js in Ukraine
)))
источник

ДД

Димон Дурак... in NodeUA - JavaScript and Node.js in Ukraine
Доброе утро, чат!

Я тут вчерась случайно со служебного номера зашёл, чем вызвал неожиданное удивление... Ну ладно, бывает...

Но дело в другом... Сейчас я работаю в белгородском интернет-провайдере в стадии стартапа. Тянем оптику, короче говоря, а называемся "Альтернативные Коммерческие Сети", чтобы это не значило. Кстати и в сторону говоря, на роль маскота можно было бы выбрать либо чёрного лебедя, или не лебедя, а петуха, и не чёрного, а просто очень жаренного.

Дык вот, эта птица с маскота куда-то клюнула и внезапно свалилась на меня задача сделать правильно то, что сейчас делает скрипт из говна на повершелле. ЧСХ, сделать не только правильно, но и быстро...

Ну я и вспомнил про NodeStarterKit и всё заверте...

Короче, я сделал на WSL2 отдельную Ubuntu-20.04, куда поставил Nodejs, Postgres и склонировал форк с HowProgrammingWorks/NodejsStarterKit. Немножко поплясал по граблям, в очередной раз понял, что смотреть видеоуроки после плясок особо интересно, хоть и не так рационально, чем наоборот, но добился таки работающего прототипа API...

Теперь о задаче. У нас есть несколько внешних систем, являющихся источниками истины. Например, Netbox это про ip-адреса, сети, виланы, сетевое железо, абонентские терминалы и это вот всё. Ещё есть биллинг, мониторинг, база SQLlite с географией и, конечно, эксельные таблички. Часть этих систем имеют хорошее, годное, хорошо документированное REST API (например, Netbox), а у других  вместо этого какой-то свой 3,5-колёсный велосипед (это я про биллинг).

И наконец, есть скрипт на повершелле, который брал из эксельного файлика данные, дергал Netbox за API, создавая или редактируя объекты там и генерировал скрипты для сетевого железа - микротика, цисок и OLT-GEPON

Тут хочу извинится за долгое вступление, но это контекст )

Теперь к делу. Значится, для выполнения запросов к внешним API я задействовал axios, добавив его require  через константу internals в lib\dependencies. И теперь, пара десятков строк кода в api\netbox.js делает то же, что и две пары десятков файлов на повершелле.

Однако, у меня остались сомнения в правильности такого подключения третьесторонней библиотеки... Я обратил внимание, что в NodeStarterKit в версии для Impress'a, dependencies.js является частью Impress и непонятно - как юзать внешние либы там?

Второй вопрос касается базы данных. Мне надо где-то хранить токены от разных API для разных пользователей. Как это лучше сделать: через заведение ещё одной таблицы userTokens или через расширение полей существующей таблицы пользователей?
источник

VY

Vladimir Yefremov in NodeUA - JavaScript and Node.js in Ukraine
Димон Дурак
Доброе утро, чат!

Я тут вчерась случайно со служебного номера зашёл, чем вызвал неожиданное удивление... Ну ладно, бывает...

Но дело в другом... Сейчас я работаю в белгородском интернет-провайдере в стадии стартапа. Тянем оптику, короче говоря, а называемся "Альтернативные Коммерческие Сети", чтобы это не значило. Кстати и в сторону говоря, на роль маскота можно было бы выбрать либо чёрного лебедя, или не лебедя, а петуха, и не чёрного, а просто очень жаренного.

Дык вот, эта птица с маскота куда-то клюнула и внезапно свалилась на меня задача сделать правильно то, что сейчас делает скрипт из говна на повершелле. ЧСХ, сделать не только правильно, но и быстро...

Ну я и вспомнил про NodeStarterKit и всё заверте...

Короче, я сделал на WSL2 отдельную Ubuntu-20.04, куда поставил Nodejs, Postgres и склонировал форк с HowProgrammingWorks/NodejsStarterKit. Немножко поплясал по граблям, в очередной раз понял, что смотреть видеоуроки после плясок особо интересно, хоть и не так рационально, чем наоборот, но добился таки работающего прототипа API...

Теперь о задаче. У нас есть несколько внешних систем, являющихся источниками истины. Например, Netbox это про ip-адреса, сети, виланы, сетевое железо, абонентские терминалы и это вот всё. Ещё есть биллинг, мониторинг, база SQLlite с географией и, конечно, эксельные таблички. Часть этих систем имеют хорошее, годное, хорошо документированное REST API (например, Netbox), а у других  вместо этого какой-то свой 3,5-колёсный велосипед (это я про биллинг).

И наконец, есть скрипт на повершелле, который брал из эксельного файлика данные, дергал Netbox за API, создавая или редактируя объекты там и генерировал скрипты для сетевого железа - микротика, цисок и OLT-GEPON

Тут хочу извинится за долгое вступление, но это контекст )

Теперь к делу. Значится, для выполнения запросов к внешним API я задействовал axios, добавив его require  через константу internals в lib\dependencies. И теперь, пара десятков строк кода в api\netbox.js делает то же, что и две пары десятков файлов на повершелле.

Однако, у меня остались сомнения в правильности такого подключения третьесторонней библиотеки... Я обратил внимание, что в NodeStarterKit в версии для Impress'a, dependencies.js является частью Impress и непонятно - как юзать внешние либы там?

Второй вопрос касается базы данных. Мне надо где-то хранить токены от разных API для разных пользователей. Как это лучше сделать: через заведение ещё одной таблицы userTokens или через расширение полей существующей таблицы пользователей?
на 2-й - ИМХО отдельная таблица будет лучше
источник

ДД

Димон Дурак... in NodeUA - JavaScript and Node.js in Ukraine
Vladimir Yefremov
на 2-й - ИМХО отдельная таблица будет лучше
Да, я тоже так думаю...

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

A

Alexey in NodeUA - JavaScript and Node.js in Ukraine
Димон Дурак
Да, я тоже так думаю...

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

ДД

Димон Дурак... in NodeUA - JavaScript and Node.js in Ukraine
Alexey
если имея токен можно воссоздать сессию, то фактически это временный пароль и хранить его нужно как пароль
В том то и дело, что имея токен, например, от биллинга, можно делать там, всё, что угодно от имени угнанной учётки. По-сути, это пароль и есть, поэтому да - токены надо складывать в базу в зашифрованном виде.

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

Щаз курю исходники, много думаю...
источник

A

Alexey in NodeUA - JavaScript and Node.js in Ukraine
Димон Дурак
В том то и дело, что имея токен, например, от биллинга, можно делать там, всё, что угодно от имени угнанной учётки. По-сути, это пароль и есть, поэтому да - токены надо складывать в базу в зашифрованном виде.

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

Щаз курю исходники, много думаю...
никак не нужно расшифровывать, иметь возможность расшифровать — это то же самое что хранить в открытом виде
источник

A

Alexey in NodeUA - JavaScript and Node.js in Ukraine
нужно использовать необратимую хеш-функцию, например, argon2, scrypt, bcrypt
источник

VM

Vladimir Mironov in NodeUA - JavaScript and Node.js in Ukraine
Alexey
нужно использовать необратимую хеш-функцию, например, argon2, scrypt, bcrypt
Вы говорите больше о сессии, а не о токене
источник

VM

Vladimir Mironov in NodeUA - JavaScript and Node.js in Ukraine
Токен может быть расшифрован и нести в себе полезную информацию
источник

ДД

Димон Дурак... in NodeUA - JavaScript and Node.js in Ukraine
Vladimir Mironov
Токен может быть расшифрован и нести в себе полезную информацию
более того, он ДОЛЖЕН так себя вести, иначе не получится с ним работать
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Vladimir Mironov
Токен может быть расшифрован и нести в себе полезную информацию
Лучше рандомный токен, не нужно в нем ничего хранить
источник

ДД

Димон Дурак... in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
Лучше рандомный токен, не нужно в нем ничего хранить
тут немного другая задача - надо безопасно хранить секреты от других АПИ (access-токены или логины/пароли) и использовать их при запросах к этим АПИ
источник

AZ

Alexander Zakharov in NodeUA - JavaScript and Node.js in Ukraine
Варианты:
1. Пробросить их как переменные окружения.
2. Ходить на сторонние API  за каждый раз новыми токенами.
3. Хранить их в зашифрованном виде в Redis с короткими expiration time, например 5 минут. Соль для расшифровки - тоже переменная окружения.
источник

ДД

Димон Дурак... in NodeUA - JavaScript and Node.js in Ukraine
Чота сложна!

Я может щаз глупость скажу, но почему нельзя шифровать access-token'ы паролем пользователя? Ну или связкой пароля и адресом API, или как-то ещё...

Во время успешного signIn'а сходить в базу за зашифрованными токенами, расшифровать их паролем и сложить их в расшифрованном виде в контекст (к рандомному токену сессии), а при запросах к внешним АПИ подкладывать нужные секреты, беря их из контекста.

Чем плохо такое решение?
источник
2020 July 13

Т

Тёмыч in NodeUA - JavaScript and Node.js in Ukraine
А вообще, как лучше хранить информацию, которую есть необходимость расшифровывать, и нет возможности засунуть в переменную окружения?
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Я уже десятый раз открываю код этого СтартерКита и задаюсь вопросом: то что в коде нет ни строчки комментариев это так и должно быть? Я просто новенький в этом деле. С Реакта к вам пришёл. Посмотрел базовый курс по Ноде. Понимаю некоторые базовые вещи. Даже удалось сделать простейший чат с вэбсокетом. Может где нужно какие то видео посмотреть или документацию почитать? Только где эту документацию или видео найти? ссылок то тоже нет.

Я вижу что тут люди могут достаточно быстро понять что к чему, но вот тем кто только вникает что делать?
источник

AS

Alex Sarnakov in NodeUA - JavaScript and Node.js in Ukraine
Miseo
Я уже десятый раз открываю код этого СтартерКита и задаюсь вопросом: то что в коде нет ни строчки комментариев это так и должно быть? Я просто новенький в этом деле. С Реакта к вам пришёл. Посмотрел базовый курс по Ноде. Понимаю некоторые базовые вещи. Даже удалось сделать простейший чат с вэбсокетом. Может где нужно какие то видео посмотреть или документацию почитать? Только где эту документацию или видео найти? ссылок то тоже нет.

Я вижу что тут люди могут достаточно быстро понять что к чему, но вот тем кто только вникает что делать?
разбираться самим и спрашивать, если что-то непонятно тут или донатить на патреон, и ждать пока будет составлена документация или стать контрибьютором
источник

M

Miseo in NodeUA - JavaScript and Node.js in Ukraine
Alex Sarnakov
разбираться самим и спрашивать, если что-то непонятно тут или донатить на патреон, и ждать пока будет составлена документация или стать контрибьютором
Вот я и спрашиваю, с чего мне начать? ) Я изучаю Ноду от силы 3 недели. Меня интересует как построить сервер для вэбсокет подключений. Чтобы клиентское приложение получало данные в риал тайме. И чтобы клиент мог переключаться между потоками получаемой информации. Я если честно даже не понимаю какой запрос в гугле мне написать... Пока всё что нахожу это принципы работы TCP... но это не очень помогает делу ))
источник