Перейти к документации
Ruby

API-ключи

`keys.list`, `list_all`, `iterate`, `get`, `create`, `update`, `delete`, `rotate` и `revoke`, а также методы чтения журнала запросов и активности.

Все методы

keys.rb
key = client.keys.create(  name: "Billing sender",  scopes: ["emails:send"],  domainAllowlist: ["billing.acme.com"],  expiresInMinutes: 60 * 24 * 90) File.write(".openemail-billing-key", key[:token]) client.keys.update(key[:id], enabled: false) rotated = client.keys.rotate(key[:id])File.write(".openemail-billing-key", rotated[:token]) client.keys.revoke(key[:id], reason: "Replaced")client.keys.delete(key[:id])

create и rotate являются единственными вызовами, которые возвращают секрет, в token, один раз. Каждое чтение вместо этого возвращает maskedKey. update выключает и включает ключ через enabled, что является обратимой альтернативой revoke, а delete удаляет только отозванный ключ: любой другой даёт 409 not_revoked. Для чтения нужна keys:read, а для любого изменения keys:manage.

Гем никогда не повторяет create или rotate. Повтор после потерянного ответа выпустил бы второй ключ или сделал бы недействительным секрет, который вернула первая попытка. update и revoke повторяются после сетевого сбоя, потому что их повтор оставляет тот же ключ, а delete не повторяется.

Никогда не шире вызывающего

Ключ никогда не создаёт ключ шире себя и не получает к нему доступа. Области, роль, срок действия, режим и область отправки должны укладываться в рамки вызывающего ключа, иначе вызов выбрасывает OpenEmail::PermissionError с кодом beyond_caller_authority, а param называет ось. Ключ, суженный до некоторых доменов или адресов, видит только ключи в пределах собственной области отправки. rotate для вызывающего ключа работает и с keys:write, как client.me.rotate.

Повторное подтверждение нельзя применить к вызову, сделанному ключом, поэтому keys:manage является доступом, который создаёт доступы. Давайте его только автоматизации, выпускающей ключи, дайте этому ключу роль, область отправки и срок действия и следите за list_workspace_activity, где всё, что он делает, записывается на него.

Журнал запросов и активность

key_logs.rb
failures = client.keys.list_requests(  "4c1b257a66287fd113bd89d0",  failed_only: true,  since: Time.now - (24 * 60 * 60))puts failures.items.size client.keys.iterate_workspace_activity do |change|  puts [change[:keyName], change[:type], change.dig(:actor, :label)].join(" ")end

list_requests и list_activity читают один ключ, а list_workspace_requests и list_workspace_activity читают все ключи или те, что называет key_ids:. У каждого есть двойники list_all_ и iterate_, например list_all_requests и iterate_requests. Они принимают since: и until: как Time, DateTime или строку ISO 8601, а методы чтения запросов принимают также failed_only:.

until является зарезервированным словом в Ruby, но until: работает как именованный аргумент в таком виде. Он должен быть позже since:, иначе вызов выбрасывает OpenEmail::InvalidRequestError с кодом invalid_parameter.