Anonymous
что лучше использовать в бд для записи паролей? шифрование или хеширование?
Anonymous
скорее всего хеширование
Maks
Тут двоякая ситуация. Если тебя будут ддосить, то сложный алгоритм будет здесь узким местом(нагрузка регистрациями) Например мд5 быстро работает, но на него полно таблиц и быстро перебирается. Бкрипт долго генерируется, соответственно безопаснее если базу увели, но для ддоса он удобнее. Но можно об этом не думать особо и брать на первое время любой алгоритм хеширования. Шифровать смысла не вижу. Шифрование имеет обратный алгоритм. А тебе это не нужно. Это выглядит менее безопасным
Anonymous
хеш можно брутить
Anonymous
но он в любом случае лучше чем шифрование
Антон
коллеги, добрый день. я не программист, но понадобилось написать себе небольшую утилиту на go. Не могу победить json.NewDecoder: есть у меня структуры: // KV is a set of key/value string pairs. type KV map[string]string // Alert holds one alert for notification templates. type Alert struct { Status string `json:"status"` Labels KV `json:"labels"` Annotations KV `json:"annotations"` StartsAt time.Time `json:"startsAt"` EndsAt time.Time `json:"endsAt"` GeneratorURL string `json:"generatorURL"` Fingerprint string `json:"fingerprint"` } // Alerts is a list of Alert objects. type Alerts []Alert type Message struct { Receiver string `json:"receiver"` Status string `json:"status"` Alerts Alerts `json:"alerts"` GroupLabels KV `json:"groupLabels"` CommonLabels KV `json:"commonLabels"` CommonAnnotations KV `json:"commonAnnotations"` ExternalURL string `json:"externalURL"` // The protocol version. Version string `json:"version"` GroupKey string `json:"groupKey"` TruncatedAlerts uint64 `json:"truncatedAlerts"` } Так же есть функция: func Handler(rw http.ResponseWriter, req *http.Request) { var m Message err = json.NewDecoder(req.Body).Decode(&m) if err != nil { fmt.Println("Can't decode alertmanager message", err.Error()) return ... В запросе прилетает json c ожидаемыми полями, однако постоянно при декодировании возникает ошибка. Может я что-то не так делаю? Подскажите плиз
🔥
коллеги, добрый день. я не программист, но понадобилось написать себе небольшую утилиту на go. Не могу победить json.NewDecoder: есть у меня структуры: // KV is a set of key/value string pairs. type KV map[string]string // Alert holds one alert for notification templates. type Alert struct { Status string `json:"status"` Labels KV `json:"labels"` Annotations KV `json:"annotations"` StartsAt time.Time `json:"startsAt"` EndsAt time.Time `json:"endsAt"` GeneratorURL string `json:"generatorURL"` Fingerprint string `json:"fingerprint"` } // Alerts is a list of Alert objects. type Alerts []Alert type Message struct { Receiver string `json:"receiver"` Status string `json:"status"` Alerts Alerts `json:"alerts"` GroupLabels KV `json:"groupLabels"` CommonLabels KV `json:"commonLabels"` CommonAnnotations KV `json:"commonAnnotations"` ExternalURL string `json:"externalURL"` // The protocol version. Version string `json:"version"` GroupKey string `json:"groupKey"` TruncatedAlerts uint64 `json:"truncatedAlerts"` } Так же есть функция: func Handler(rw http.ResponseWriter, req *http.Request) { var m Message err = json.NewDecoder(req.Body).Decode(&m) if err != nil { fmt.Println("Can't decode alertmanager message", err.Error()) return ... В запросе прилетает json c ожидаемыми полями, однако постоянно при декодировании возникает ошибка. Может я что-то не так делаю? Подскажите плиз
А какую ошибку жсон плюет?
Антон
EOF
Антон
Can't decode alertmanager message EOF
🔥
А сам жсон?
Антон
{ "receiver": "tg-bot", "status": "resolved", "alerts": [ { "status": "resolved", "labels": { "alertgroup": "general.rules", "alertname": "Watchdog", "cluster": "cluster-name", "severity": "none" }, "annotations": { "message": "This is an alert meant to ensure that the entire alerting pipeline is functional.\nThis alert is always firing, therefore it should always be firing in Alertmanager\nand always fire against a receiver. There are integrations with various notification\nmechanisms that send a notification when this alert is not firing. For example the\n\"DeadMansSnitch\" integration in PagerDuty.\n" }, "startsAt": "2021-10-13T02:40:13.939900982Z", "endsAt": "2021-10-13T03:28:28.93736161Z", "generatorURL": "http://vmalert-monitoring-88fd75d59-5mm7s:8080/api/v1/12085381733995192156/6246697130099853598/status", "fingerprint": "780ebbdb19b2d7dc" } ], "groupLabels": {}, "commonLabels": { "alertgroup": "general.rules", "alertname": "Watchdog", "cluster": "cluster-name", "severity": "none" }, "commonAnnotations": { "message": "This is an alert meant to ensure that the entire alerting pipeline is functional.\nThis alert is always firing, therefore it should always be firing in Alertmanager\nand always fire against a receiver. There are integrations with various notification\nmechanisms that send a notification when this alert is not firing. For example the\n\"DeadMansSnitch\" integration in PagerDuty.\n" }, "externalURL": "https://monitoring.prod.domain.tech/alertmanager", "version": "4", "groupKey": "{}:{}", "truncatedAlerts": 0 }
Azat
Мне кажется или это дело в том что body не закрывается?
Антон
Мне кажется или это дело в том что body не закрывается?
да нет, валидатор говорит что все ок
Антон
ааа, в том плане
Антон
хм... сейчас попроьую, спс
Антон
defer req.Body.Close() сделайте
увы ( не помогло
Антон
а подскажите плиз, если json будет вот таким, а структура type Message struct { Receiver string `json:"receiver"` } Здесь просто одно поле прочитается, или будет ошибка, потому что все поля должны присутствовать в json-е?
Антон
при таком раскладе ошибка сохраняется, и я начинаю подозревать, что в запросе что-то не так с json-ом
Антон
сам запрос, который прилетает в приложение выглядит так: ... "queryStringParameters": {}, "multiValueQueryStringParameters": {}, "requestContext": { "identity": { "sourceIp": "84.201.183.15", "userAgent": "Alertmanager/0.22.2" }, "httpMethod": "POST", "requestId": "5f09bc11-9fa6-4b30-bb3b-70520e23c134", "requestTime": "14/Oct/2021:04:24:09 +0000", "requestTimeEpoch": 1634185449 }, "body": "{\"receiver\":\"tg-bot\",\"status\":\"firing\",\"alerts\":[{\"status\":\"firing\",\"labels\":{\"alertgroup\":\"general.rules\",\"alertname\":\"Watchdog\",\"cluster\":\"cluster-name\",\"severity\":\"none\"},\"annotations\":{\"message\":\"This is an alert meant to ensure that the entire alerting pipeline is functional.\\nThis alert is always firing, therefore it should always be firing in Alertmanager\\nand always fire against a receiver. There are integrations with various notification\\nmechanisms that send a notification when this alert is not firing. For example the\\n\\\"DeadMansSnitch\\\" integration in PagerDuty.\\n\"},\"startsAt\":\"2021-10-14T04:19:13.937074418Z\",\"endsAt\":\"0001-01-01T00:00:00Z\",\"generatorURL\":\"http://vmalert-monitoring-88fd75d59-5mm7s:8080/api/v1/12085381733995192156/6246697130099853598/status\",\"fingerprint\":\"780ebbdb19b2d7dc\"}],\"groupLabels\":{},\"commonLabels\":{\"alertgroup\":\"general.rules\",\"alertname\":\"Watchdog\",\"cluster\":\"cluster-name\",\"severity\":\"none\"},\"commonAnnotations\":{\"message\":\"This is an alert meant to ensure that the entire alerting pipeline is functional.\\nThis alert is always firing, therefore it should always be firing in Alertmanager\\nand always fire against a receiver. There are integrations with various notification\\nmechanisms that send a notification when this alert is not firing. For example the\\n\\\"DeadMansSnitch\\\" integration in PagerDuty.\\n\"},\"externalURL\":\"https://monitoring.prod.katren.tech/alertmanager\",\"version\":\"4\",\"groupKey\":\"{}:{}\",\"truncatedAlerts\":0}\n", "isBase64Encoded": false }
Антон
тут все кавычки экранированы, может в этом все дело? как декодер должен это воспринимать?
Антон
Отвечу сам: да, дело в этом - экранирование. ДЕкодер такое не ест, поэтому пришлось сделать так: b, err := ioutil.ReadAll(req.Body) if err != nil { fmt.Println("Can't read request body", err.Error()) } fmt.Println("request body", string(b)) var m Message defer req.Body.Close() err = json.Unmarshal(b, &m) if err != nil { fmt.Println("Can't decode alertmanager message", err.Error()) return } так работает, как ожидалось
Maks
хеш можно брутить
любой можно брутить
Maxim
хеш можно брутить
Добавляешь соли и это превращается в адский Брут.
Maks
Зачем тебе соль, если можно просто взять бкрипт
Антон
Антон
это яндексовая лямбда оборачивает запрос от алертменеджера своим жсоном
Vitaliy
Десериализация в два этапа наверное тут была бы логична. Ничего костыльного тут нет, если такого протоколоа придерживается 3rd party service
Vitaliy
👍
Антон
Это да. Просто serverless функцию не очень удобно дебажить, вот и не разобрался сначала, подумал, что где-то в коде косячу) в go опыта почти ноль
Maxim
Зачем тебе соль, если можно просто взять бкрипт
Ну в реализации bcrypt, он сам соль генерит. Если нужно другой, более быстрый и менее затратный, можно соль добавлять.
Антон
а подскажите еще плиз такое. у меня два файла в package main в одном файле описаны структуры и функции, во втором я их хочу использовать: package main import ( "encoding/json" "fmt" ) func main() { b := `{"receiver":"tg-bot","status":"firing"}` var m Message err := json.Unmarshal([]byte(b), &m) if err != nil { fmt.Println("Can't decode alertmanager message", err.Error()) return } println(render(&m)) } однако выполняя go run cmd.go получаю такое: # command-line-arguments ./cmd.go:11:8: undefined: Message ./cmd.go:19:10: undefined: render А как тогда обращаться то к ним?
Антон
о! отставить вопросы, надо просто go run . сделать
Антон
)
SpiritOfSim
https://github.com/spiritofsim/go-space-crane Коллеги, сделал игрушку на GO по мотивам старой moonlander. Покритикуйте, ну либо просто поиграйте ) Зачем? Всегда мечтал написать игру! Почему GO? Потому что могу )
Aleksey
Aleksey
И как вам ebiten? :)
SpiritOfSim
нормуль. Но сравнивать особо не с чем
Null
Поддержка сжатия gRPC в Go, Java и Ballerina https://dev-gang.ru/article/podderzhka-szhatija-grpc-v-go-java-i-ballerina-j2eqv6a8ov/ @Golang_google
Anonymous
оффтоп, но кто нибудь собирал пк на хакинтоше? со степухи накопил и хотелось бы собрать пк(20-30к)
Shaplin
У меня есть функция, которую надо протестировать. Один из аргументов это интерфейс Claims. func ToTest(c Claims) { ... } Как мне замокать его Roles(), дабы он выдавал заданный мною массив стрингов? type Claims interface { Roles() []string }
SpiritOfSim
https://github.com/golang/mock
SpiritOfSim
генеришь мок с помощью mockgen, а далее что-то вроде claims.EXPECT().Roles().Return([]{"..."})
Павел
Приветствую! Можете подсказать, как мы вытащить изображение из post запроса? Сервер на го написан через gin, клиент на питоне через requests. Изображение хотел бы получить как image.Image
SpiritOfSim
jpeg.Decode(c.Request.Body)
Павел
попробую, спасибо
Anonymous
просто хочется :/
Anonymous
бывает так :/
Anonymous
ну, я с детства линух юзаю
Anonymous
6-7 класс
Anonymous
но в универе приходится юзать ворд эксель
Anonymous
а мусорку винду я ставить не намерен
Anonymous
сейчас любой шкет в состоянии купить модем и кидать деф пакеты на твою сеть
Anonymous
офк через кали
Anonymous
а мусорку винду я ставить не намерен
знаю, что хак не лучше, но все же
Anonymous
мне откуда знать? детский максимализм
Anonymous
ну у меня арты стоят
Anonymous
и не понимаю к чему это
Anonymous
и как ты можешь за это троллить
Anonymous
мне обидно должно быть?
Alexander
но в универе приходится юзать ворд эксель
есть онлайн версии за бесплатно
Anonymous
есть онлайн версии за бесплатно
в общаге с инетом беда
Alexander
неплохо работают
Alexander
я юзал, когда надо было распечатать документ в исходном виде, а не в интерпретации либре офиса
Alexander
збс
Anonymous
я только рад юзать линух
Anonymous
но я устал от него
Anonymous
Ilya
Новый в xlsx - открывает
Ilya
Ну памяти жрёт как не в себя.
Maks
По поводу макбук бу за 20-30 - категорически нет. Виндовый бук не за что хейтить. Докер на винде работает в разы лучше чем на маке. И конфиг остается как на линуксе. Мак стоит брать если пишешь под натив и у тебя парк устройств эпл - ради инфраструктуры. Хакинтош даже не заморачивайся. Нет того экспериенса.
Maks
По поводу моков: теоретический можно без этого пакета сделать)))) создаешь класс который должен быть зависимостью, реализуешь интерфейсы, через инициализацию задаешь параметры которые должен возвращать класс своими методами. Только не знаю, если в гомок тулзах штука которая говорит что тот или иной метод должен быть обязательно вызван
Anonymous
я ни слова не сказал ставил хак или нет
Anonymous
сидел под хаком год)
Anonymous
видюха, вифи карточка все настраивал, звук, дуал монитор
Anonymous
я спросил про дешевую сборку, а не про то как его ставить)
Maks
Не вижу смысла в дешевом хаке. Не уверен во первых что заведется, во вторых если с докером работать то там уж точно за этот прайс довить нечего) имхо