Repository navigation
internos plugins
Home > Guia de contribuição > Internos: Plugins
Para quem mexe no código: o host de plugins, autenticação, segurança, CORS, conteúdo, concorrência e certificado automático. Aqui fica o porquê de cada parte ser como é, e o que não pode mudar sem quebrar algo. O código traz só a descrição curta de cada coisa.
Conteúdo da versão 2.0, ainda em desenvolvimento (branch 2.0).
O que a página de uso já diz (fases, Priority, como escrever um) está em
Criar um plugin.
-
Plugins primeiro, módulos depois.
ProcessCommandsroda os plugins porPrioritye depois os módulos, que acham a rota e a executam. Servidor sem plugin ainda responde. Tudo o que não é roteamento é plugin (limite, compressão, cifra, listas, força bruta, flood, CORS, cada autenticação, corpo JSON como params), como um middleware, mas a ordem vem da prioridade e não da ordem em que a aplicação liga; empate mantém a ordem em que foram adicionados. -
Uma lista por fase. O plugin declara as suas (
Phases) e o host guarda uma lista para cada uma: fase que ninguém usa não custa nada. -
ppValidateroda antes de o corpo ser decodificado: pedido recusado nunca é descomprimido nem decifrado.ppProcessé o laço dos plugins (quem responde marcaAHandled).ppResolveRoute,ppAuthenticateeppAuthResultnão são laços do servidor: são chamadas entre plugins (rota própria, autenticadores decidindo, e quem quer saber o veredito; a força bruta conta as falhas ali, antes de qualquer módulo). -
A rota é procurada uma vez (
FindRoute) e guardada no pedido. A autenticação precisa dela (o método pula autenticação?), o CORS precisa dos métodos dela, e os módulos respondem sem procurar de novo. -
RALPriorityConcurrency(50) fica depois de todo plugin do RAL que recusa emppValidate: um pedido que a lista negra, o flood ou o limite de tamanho recusam nunca espera uma vaga na fila.
-
ServerActivating/ServerDeactivatingtêm o contrato dos módulos. "Ativando" quer dizer pedido, não porta aberta: os motores chamam antes de abrir a porta, então o plugin ainda muda como ela abre (oTRALSelfSignedPluginentrega o certificado ali). Uma exceção mantém o servidor parado. Plugin adicionado a servidor rodando ouveServerActivatingna hora. -
PluginRemovedé o único aviso garantido. O plugin se tira do host antes de as notificações deFreesaírem. Descendente que guarda referência a um plugin (oAuthenticationdo servidor) limpa ali; só comNotificationa referência ficaria solta.
Qualquer mudança (adicionar, remover, Priority, Enabled) monta um snapshot novo
(TRALPluginSnapshot) sob o lock. O velho fica vivo até o host ser destruído, porque
um pedido pode estar percorrendo-o. Cada pedido lê o snapshot uma vez e anda nele.
O que vale como tentativa é o autenticador que diz (AttemptOf, que devolve
TRALAuthAttempt): segredo errado conta contra o endereço, certo zera a contagem, e
nenhum dos dois quando não veio credencial (não é tentativa) ou o token venceu
(ninguém adivinha token).
Começar
Servidor
- Rotas e parâmetros
- Ler o pedido e responder
- Plugins 🚧
- Autenticação
- Banco de dados (DBWare)
- Servir site e arquivos
- Swagger e Postman
- Servidor SOAP 🚧
- HTTPS
- Criptografia ponto a ponto
- Segurança para produção
- Colocar no ar
- Desempenho
Cliente
Motores
Avançado
Ajuda
- Problemas comuns
- Atualizar o Indy
- Várias versões do Delphi
- Vídeos e guias
- Módulos de terceiros
- Licenças
- Contribuir
- Roadmap e changelog
🚧 = em desenvolvimento, pode mudar