Saltar para a documentação
Ruby

Chaves API

`keys.list`, `list_all`, `iterate`, `get`, `create`, `update`, `delete`, `rotate` e `revoke`, e os leitores do registo de pedidos e da atividade.

Todos os métodos

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 e rotate são as únicas chamadas que devolvem um segredo, em token, uma única vez. Todas as leituras devolvem maskedKey em vez disso. update desativa e ativa uma chave com enabled, que é a alternativa reversível a revoke, e delete só remove uma chave já revogada: qualquer outra chave dá um 409 not_revoked. Ler precisa de keys:read e todas as alterações precisam de keys:manage.

A gem nunca repete create nem rotate. Uma repetição depois de uma resposta perdida criaria uma segunda chave, ou invalidaria o segredo que a primeira tentativa devolveu. update e revoke são repetidos após uma falha de rede, porque repeti-los deixa a mesma chave, e delete não.

Nunca mais ampla do que quem chama

Uma chave nunca cria nem alcança uma chave mais ampla do que ela própria. Os âmbitos, a função, a expiração, o modo e o âmbito de envio têm todos de ficar dentro da chave que faz a chamada, caso contrário a chamada lança OpenEmail::PermissionError com o código beyond_caller_authority, e param indica o eixo. Uma chave restrita a alguns domínios ou endereços só vê as chaves dentro do seu próprio âmbito de envio. rotate sobre a chave que faz a chamada também funciona com keys:write, como client.me.rotate.

A verificação adicional não se pode aplicar a uma chamada feita com uma chave, por isso keys:manage é uma credencial que cria credenciais. Dê-a apenas a automações que emitem chaves, dê a essa chave uma função, um âmbito de envio e uma expiração, e acompanhe list_workspace_activity, onde tudo o que ela faz fica registado em seu nome.

Registo de pedidos e atividade

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 e list_activity leem uma chave, e list_workspace_requests e list_workspace_activity leem todas as chaves ou as que key_ids: nomeia. Cada um tem ao lado um equivalente list_all_ e um iterate_, como list_all_requests e iterate_requests. Aceitam since: e until: como Time, DateTime ou string ISO 8601, e os leitores de pedidos aceitam também failed_only:.

until é uma palavra reservada em Ruby, mas until: funciona como argumento nomeado tal como está escrito. Tem de ser posterior a since:, caso contrário a chamada lança OpenEmail::InvalidRequestError com o código invalid_parameter.