Armazenar informações confidenciais em um banco de dados sem criptografia não é bom, mas você já fez isso por acidente devido a erros no código do aplicativo ou a uma configuração incorreta no banco de dados? E se houvesse uma maneira de receber notificações sempre que algo sensível fosse detectado, para que uma ação imediata pudesse ser tomada?
Veremos como aproveitar o Eventos do Couchbase para escrever funções JavaScript que detectarão alterações em documentos à medida que elas ocorrerem. Em particular, veremos se os números de previdência social estão aparecendo nos documentos, quando não deveriam estar.
No futuro, é importante observar que esse é apenas um dos muitos casos de uso possíveis quando se trata de eventos em Couchbase. O serviço Eventing está disponível a partir de Servidor Couchbase 5.5 que acaba de ser lançado.
Observe que a construção N1QL ainda está em desenvolvimento. Esse recurso destina-se apenas a fins de desenvolvimento e não deve ser usado em ambientes de produção.
Criação de uma API RESTful com Node.js e Express Framework
Neste exemplo, não enviaremos notificações de fato. Essa é uma nova lata de vermes. Em vez disso, criaremos uma API de amostra para que o banco de dados faça ping sempre que uma função for acionada. Essa API imprimirá uma mensagem, mas, na realidade, você faria com que ela enviasse uma notificação push ou um e-mail.
Crie um novo diretório em algum lugar em seu computador e execute o seguinte a partir desse diretório:
1 |
npm inicial -y |
O comando acima criará um novo projeto Node.js, mais especificamente um projeto package.json arquivo. Nossa API não precisará usar o Couchbase para este exemplo, mas precisaremos de uma estrutura para receber solicitações HTTP.
No projeto, execute o seguinte comando:
1 |
npm instalar expresso corpo-analisador --salvar |
O comando acima instalará o Express, bem como um middleware para aceitar corpos de solicitação no formato JSON.
Agora crie um app.js em seu projeto e inclua o seguinte código JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const Expresso = exigir("expresso"); const Analisador de corpo = exigir("body-parser"); var aplicativo = Expresso(); aplicativo.uso(Analisador de corpo.json()); aplicativo.uso(Analisador de corpo.codificado por url({ estendido: verdadeiro })); aplicativo.postagem("/notify", (solicitação, resposta) => { console.registro("POST /notify"); para(chave em solicitação.corpo) { se(solicitação.corpo.hasOwnProperty(chave)) { console.registro(JSON.analisar(chave)); } } resposta.enviar("enviado"); }); var servidor = aplicativo.ouvir(3000, () => { console.registro("Ouvindo..."); }); |
A ênfase deste tutorial não é criar uma API com o Node.js, portanto, não vou me aprofundar muito nisso. Basicamente, estamos configurando um único endpoint de API, analisando os dados que chegam e imprimindo-os no console. Isso pode ser feito com qualquer tecnologia, não é específico do Node.js e, na realidade, você provavelmente enviaria algum tipo de mensagem quando o endpoint fosse acionado.
Agora podemos nos concentrar no que importa, as funções do Couchbase Server.
Criação de uma função para ouvir alterações em documentos NoSQL
Como eu disse anteriormente, o serviço Eventing está disponível a partir do Couchbase 5.5, que acaba de ser lançado.
Para ter sucesso com o serviço Eventing, no momento, você precisará de dois Buckets.
Em meu exemplo, tenho um exemplo Balde e um exemplo de evento Bucket. Ambos são Buckets padrão, mas um será usado para armazenar metadados.
Como faremos solicitações do Couchbase Server para nossa API de notificação, precisamos configurar uma lista de permissões porque, por padrão, nenhuma solicitação pode sair do Couchbase Server por motivos de segurança.
No Configurações do painel do Couchbase, procure a tag Configurações avançadas do N1QL seção. Estou executando o Couchbase e a API localmente, portanto, só preciso adicionar o host e a porta. Suas configurações podem ser ligeiramente diferentes.
Agora podemos criar a função que ficará atenta aos dados confidenciais.
Ao adicionar uma nova função, preencha as informações para que correspondam aos detalhes do Bucket. A lógica para conduzir a função virá em seguida.
Com a função disponível, queremos editar o JavaScript. Por padrão, você deve ver algo semelhante ao seguinte:
1 2 3 4 5 |
função Sobre a atualização(doc, meta) { registro("documento, doc); } função OnDelete(meta) { } |
Nosso objetivo é acionar uma função quando um documento for atualizado, em vez de excluído. Várias coisas precisarão acontecer.
- Verificar se criamos ou alteramos um
pessoa
documento. - Veja o
ssn
do documento e verifique se uma expressão regular pode validá-la como um número de previdência social. - Enviar uma solicitação cURL para uma API.
O código que explica as etapas acima pode ser visto abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
função Sobre a atualização(doc, meta) { registro("documento, doc); se(doc.tipo == "pessoa) { var isSSN = /^(?:\d{3}-\d{2}-\d{4}|\d{2}-\d{7})$/; se(isSSN.teste(doc.ssn)) { var http = SELECIONAR CURL( "http://localhost:3000/notify", { "request" (solicitação): "POST", "cabeçalho": "application/json", "dados": $meta } ); http.execQuery(); registro('ssn', 'sending notification for raw ssn' (enviando notificação para ssn bruto)) } } } |
Observe que estamos usando uma consulta N1QL para emitir a solicitação cURL. Essa não é a única maneira, mas é uma opção que pode ser lida na seção Documentação do N1QL.
Em nosso exemplo, em vez de enviar o próprio documento à nossa API e expor ainda mais o número do seguro social, enviamos as meta informações que incluem a chave do documento. Assim, o destinatário pode simplesmente procurar o documento com base na chave.
Conclusão
Você acabou de ver como usar o serviço Eventing do Couchbase para criar funções e detectar informações confidenciais, como números de previdência social. Você pode criar funções para alterar dados no banco de dados ou para enviar notificações, como demonstrado neste exemplo.
Se você tiver interesse em saber mais sobre o serviço Eventing, consulte a documentação por meio da página Portal do desenvolvedor do Couchbase ou leia o novo anúncio de serviço aqui. Saiba mais sobre outros recursos disponíveis no Lançamento do Couchbase Server 5.5.