quinta-feira, 17 de abril de 2008

Rich Text Editor para ASP.NET

Here we go.

Para abrir bem este blog, vamos falar de algo que qualquer programador web, se nunca precisou, certamente irá precisar um dia: um "editor rico" para textos em seu site.
Como assim? Imagine: você está escrevendo uma ferramenta de blog, de edição de notícias ou alguma coisa assim. Seus visitantes internautas vão querer pôr links, figuras, mudar a cor ou fonte do texto, etc. É disso que eu falo. Agora que estamos melhor situados, prossigamos.
Infelizmente a Microsoft parece ignorar o apelo forte de incluir este componente no pacote asp.net ou ajax toolkit.
Foi em uma situação desta que precisei "googlar" a internet. Queria uma ferramenta que não somente fizesse este papel de "word para a web" mas que eu pudesse integrar em um site asp.net e programar sobre usando C#. Achei várias, testei algumas, mas quem se saiu melhor mesmo foi o FCKEditor (http://www.fckeditor.net), seja pelo bom resultado, testado por mim no Internet Explorer 7, Internet Explorer 6 e no Mozilla Firefox (compreendendo assim algo em torno de 95% da internet, e não tenho fonte oficial para este número), seja pelo preço = freeware.
No quisito ASP.NET, este também é perfeito. No site oficial encontram-se links para ferramentas de interface para várias linguagens server-side, inclusive com um wiki (http://wiki.fckeditor.net) suficientemente bom. Mas neste mundo nem tudo é perfeito. Seguindo as instruções do wiki, criei um site asp.net, carreguei a dll para o diretório /bin e os arquivos do FCKEditor propriamente na pasta /FCKEditor. Nesta última pasta, editei o arquivo fckconfig.js para especificar que estarei utilizando asp.net. Criei a pasta para os uploads de imagens e swf's para as edições. Inclui as chaves no web.config para a dll saber quais folders tem o quê. Inclui na diretiva @Page ValidateRequest="false". O-ou: nada bom isso, estamos intencionalmente abrindo brechas de segurança desabilitando validações built-in do asp.net para Cross-site-scripts (XSS) e afins. Em teoria isto é tudo. Rodar o site: F5. Sucesso!
Agora que sabemos que funciona, vamos para a parte divertida da brincadeira: personalizar. Primeiro setar o valor inicial do editor: fácil, fckeditor1.value. Depois, receber o valor postado pelo internauta: fácil, ler fckeditor1.value. Terceiro: configurar pastas de arquivos de imagens e flash diferentes para cada usuário ou grupo. Não posso dizer que é difícil, mas aí comecei a achar informações desencontradas. Segundo o wiki, bastava setar um valor na sessão do usuário, mas assim não funcionou. Analisei o código fonte da dll (disponível via SourceForge), a lógica está perfeita. Depois de googlar mais um tanto, descobri que por padrão a ferramenta de upload e inclusão de arquivos não fica ligada a sessão do usuário (???) e que isto deve ser mudado no config do editor. Agora sim. Mas ainda não está bom, meu site continua exposto a ataques. Resolvi analisar o config. Surpresa! O FCKEditor é customizável de uma forma incrível! Tudo lá, esperando uma leitura com atenção. Foi lá também que descobri uma chave HtmlEncodeOutput com valor padrão false. Alterei este valor para true, exclui o validaterequest=false da minha página e tudo correu bem, bastando um Server.HTMLDecode na função que recebe o postback para ter novamente o HTML "utilizável". Finish, sem abrir mão da segurança.
Não detalhei muito as etapas, mas como "brinde" deixo o meu site de exemplo no SkyDrive (link na home do meu Space), pasta Componentes.NET.

Resumindo: o FCKEditor excelente editor Rich Text integrável com asp.net, altamente customizável, e ainda é free, mas precisa de uns ajustes fáceis para ficar melhor ainda.

Até a próxima. Abraços!

Nenhum comentário: