Форматирование закрытого ключа для APNS не работает правильно с командой echo в AWS Elasti c Beanstalk + Circle CI - PullRequest
0 голосов
/ 01 апреля 2020

Я использую API GraphQL через AWS Elasti c Beanstalk с Docker. Чтобы включить уведомления pu sh, я использую Node-APN (https://github.com/node-apn/node-apn) и передаю ему файл AuthKey.p8, который содержит секретный ключ, например:

-----BEGIN PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END PRIVATE KEY-----

This файл должен быть отформатирован с этими точными 6 строками, иначе токен, сгенерированный APNS, не будет работать и вылетает API. Чтобы заставить его работать локально, я конвертирую его в одну строку и помещаю \ n для каждого перевода строки.

В моем конвейере CI я выполняю следующее (сокращенно для краткости):

command: echo "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxxxxxxxx\nxxxxxxxxxxx\n-----END PRIVATE KEY-----" >> AuthKey.p8

Эта линия работает локально идеально. Он выводит ключ в файл и правильно его форматирует. В конвейере CI (Circle Ci) он не может удалить \ n и держит все это в одной строке, что в конечном итоге приводит к сбою генератора токенов APNS. Я пробовал как жестко кодировать ключ через файл конвейера окружности ci, так и извлекать его из переменных ENV, и ни одна из них не работает.

Конечный результат будет следующим:

  • CI создает docker image и вставляет AuthKey.p8, делая это с помощью команды echo
  • AWS загружает образ docker, а моя библиотека ENV позаботится обо всем остальном

Неважно что я пытаюсь, я не могу заставить AuthKey.p8 правильно отформатировать, несмотря на то, что он работает нормально локально с теми же командами. Я также попытался передать ключ напрямую в node-apn, так как он поддерживает передачу ключа напрямую, но я также столкнулся с теми же проблемами форматирования, которые усугубляются тем фактом, что единственный способ правильно импортировать его - это окружить одну строку переносы новой строки в двойных кавычках, но AWS не поддерживает это в своих переменных ENV.

...