# Opções de transporte de ação e publicação explícita de TMS

> Testar CSRF, criptografar, compressar e publicar contra o HTTP real e TMS em vez de assumir metadados forçando comportamento.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: pt
Content-SHA256: 1a836e2f62e6f0e186f66d849a66d36c7f420457f0db1f02d332404cf70c7d30
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Em `total5@0.0.19`: `NEWACTION()` armazena `csrf`, `encrypt` e `compress` em metadados de ação, mas eles não estabelecem as garantias HTTP que seus nomes podem sugerir nas rotas HTTp:

- `csrf:true` por si só aceita um POST sem token. Use um middleware que chame `DEF.onCSRFcheck()` com `secret_csrf` configurado, como em [csrf-protection](/en/total5/csrf-protection/).
- `encrypt:true` em uma rota declarada adiciona metadados de `@encrypt`, mas esta versão ainda aceita o texto JSON e retorna o texto jSON.
- `compress:false` não desabilita o gzip HTTP comum; a compressão de resposta segue o `$httpcompress`, o tamanho de codificação e resposta aceito pelo cliente.
- `publish` declara um tópico/escema TMS. A conclusão de uma ação não publica automaticamente o seu resultado. Chame `$.publish(value)` explicitamente e construa a carga pública deliberadamente. Selecione os campos para publicar antes de chamar `$.publish(value)`.

Configure o token TMS para a sua aplicação. mensagens TMS vão aos assinantes desse tema; permissão de aplicação e regras de retenção ainda pertencem ao seu código.

```text config
secret_csrf : local-csrf-fixture-only
$tms : true
secret_tms : local-tms-fixture-only
$httpcompress : true
```

```js definitions/transport.js
NEWACTION('Transport|csrf', {
	csrf: true,
	input: '*value:String',
	action: function($, model) { $.callback(model); }
});
NEWACTION('Transport|encrypted', {
	encrypt: true,
	route: 'POST /encrypted/',
	input: '*value:String',
	action: function($, model) { $.callback(model); }
});
NEWACTION('Transport|compressed', {
	compress: false,
	action: function($) { $.callback({ text: 'abcdefghij'.repeat(400) }); }
});
NEWACTION('Transport|notice', {
	publish: 'value:String',
	input: '*value:String',
	action: function($, model) {
		$.publish({ value: model.value });
		$.success();
	}
});
```

```js controllers/transport.js
exports.install = function() {
	ROUTE('POST /csrf-option/ @json --> Transport|csrf');
	ROUTE('GET /compression-option/ --> Transport|compressed');
	ROUTE('POST /notice/ @json --> Transport|notice');
};
```
