Ir para o conteúdo

Domínio

Entidade domínio. Os domínios são utilizados como parte dos endereços de remetente de mensagens.

Os domínios no DUO podem ser activados de duas formas: - Domínio de envio — utilizável no header-from dos emails. - Domínio de bounce — utilizado no envelope-from (Return-Path) e nos URLs de páginas de destino. Não deve ser usado como header-from.

Nota

Os parâmetros is_sending e is_bounce no POST/PUT são ignorados até que todos os registos DNS necessários estejam presentes nos resolvers públicos.

Endpoints

Método URL
GET /domain/<domain>
POST /domain
PUT /domain/<domain>
DELETE /domain/<domain>

Prova de Controlo do Domínio

Chave Pré-partilhada

  1. Crie o domínio via POST.
  2. Faça GET ao novo domínio e leia o campo proof_of_control.
  3. Publique um registo DNS TXT no domínio com o conteúdo exacto de proof_of_control.

Chave RSA

  1. Gere um par de chaves RSA de 1024 bits:
    openssl genrsa -out duo-private.pem 1024
    openssl rsa -in duo-private.pem -pubout -out duo-public.pem
    
  2. Publique um registo DNS TXT: DUO-DOMAIN-VERIFICATION=rsa:<conteúdo de duo-public.pem>
  3. Defina proof_of_control como DUO-DOMAIN-VERIFICATION=rsa:<conteúdo de duo-private.pem> no POST ou PUT.

A chave pública pode ser publicada num domínio pai (ex: example.com cobre todos os subdomínios).


Registos DNS

Domínios de envio: - Publique um registo DKIM TXT: <dkim_selector>._domainkey.<domain> com valor v=DKIM1; k=rsa; s=email; p=<dkim_public_key> - Se tiver um registo SPF, adicione include:_spf.duo.pt como primeiro mecanismo.

Domínios de bounce: - Publique um registo CNAME para o domínio apontando para go.duo.pt.

Aviso

Os domínios de bounce são totalmente delegados ao DUO e não podem albergar outros serviços.


Activação

Os domínios activam-se automaticamente quando os registos DNS estão presentes. Pode forçar uma verificação DNS via PUT definindo is_sending e/ou is_bounce como true.


GET /domain/<domain>

Payload: Sem payload.

Devolve: O domínio.

Exemplo:

curl -u "username:api_key" -H "Accept: application/json" \
  https://app.duo.pt/domain/{domain_id}

Resposta:

{
  "success": true,
  "data": {
    "domain": {
      "id": 1,
      "name": "mail.yourdomain.com",
      "owner": 1,
      "dkim_selector": "duo202012",
      "dkim_public_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUrNpRSBAG/RT9DAJ1R9dg1Az3+p2HmjizZL/vlZVYo7mAo2UFRYFI7Y8mc+SgtYwMIzp+hXZAFrpvx0e5NJPnnAqQGecE2jvZUQ0EQJfmNme+hVP6TcBeIspIhftXbjRs2xgljoKga3bDLiah7sS2VC2NNe3zPqGItPWDEFc0yQIDAQAB",
      "shared_with_children": false,
      "dkim_domain_name": "duo.pt",
      "proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW",
      "is_sending": false,
      "is_bounce": false
    },
    "dns_validation": {
      "bounce": false,
      "sending": true,
      "control": false
    }
  }
}

POST /domain

Parâmetro Tipo Descrição
name string Nome do domínio
proof_of_control string Opcional. Utilizado apenas para prova de controlo RSA.
is_sending boolean Activar como domínio de envio (requer validação DNS)
is_bounce boolean Activar como domínio de bounce (requer validação DNS)

Devolve: O novo domínio.

Exemplo:

curl -u "username:api_key" -H "Accept: application/json" \
  -d "name=mail.yourdomain.com" \
  https://app.duo.pt/domain

Resposta:

{
  "success": true,
  "data": {
    "domain": {
      "id": 1,
      "name": "mail.yourdomain.com",
      "owner": 1,
      "dkim_selector": null,
      "dkim_public_key": null,
      "shared_with_children": null,
      "dkim_domain_name": null,
      "proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW"
    }
  }
}

PUT /domain/<domain>

Mesmo payload que o POST.

Devolve: O domínio editado.

Exemplo:

curl -u "username:api_key" -H "Accept: application/json" -X PUT \
  -d "name=mail.yourdomain.com&is_sending=true" \
  https://app.duo.pt/domain/{domain_id}

Resposta:

{
  "success": true,
  "data": {
    "uneditableField": "dkim_private_key",
    "domain": {
      "id": 1,
      "name": "mail.yourdomain.com",
      "owner": 1,
      "dkim_selector": "duo202012",
      "dkim_public_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUrNpRSBAG/RT9DAJ1R9dg1Az3+p2HmjizZL/vlZVYo7mAo2UFRYFI7Y8mc+SgtYwMIzp+hXZAFrpvx0e5NJPnnAqQGecE2jvZUQ0EQJfmNme+hVP6TcBeIspIhftXbjRs2xgljoKga3bDLiah7sS2VC2NNe3zPqGItPWDEFc0yQIDAQAB",
      "shared_with_children": false,
      "dkim_domain_name": null,
      "proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW",
      "is_sending": false,
      "is_bounce": false
    }
  }
}

DELETE /domain/<domain>

Payload: Sem payload.

Devolve: O domínio eliminado.

Exemplo:

curl -u "username:api_key" -H "Accept: application/json" -X DELETE \
  https://app.duo.pt/domain/{domain_id}

Resposta:

{
  "success": true,
  "data": {
    "domain": {
      "id": 1,
      "name": "mail.yourdomain.com",
      "owner": 1,
      "dkim_selector": "duo202012",
      "dkim_public_key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCUrNpRSBAG/RT9DAJ1R9dg1Az3+p2HmjizZL/vlZVYo7mAo2UFRYFI7Y8mc+SgtYwMIzp+hXZAFrpvx0e5NJPnnAqQGecE2jvZUQ0EQJfmNme+hVP6TcBeIspIhftXbjRs2xgljoKga3bDLiah7sS2VC2NNe3zPqGItPWDEFc0yQIDAQAB",
      "shared_with_children": false,
      "dkim_domain_name": null,
      "proof_of_control": "DUO-DOMAIN-VERIFICATION=psk:ZbGpYyhRPYKxbMW",
      "is_sending": false,
      "is_bounce": false
    }
  }
}