Oservidor http-pick não foi desenvolvido para ser uma solução autônoma para intranets. Essa versão não dispõe de recursos de segurança, nem do envio de arquivos de imagens. O servidor não é seguro se pensarmos que qualquer aplicação mal comportada poderá trava-lo.
No entanto, o servidor http-pick oferece recursos bastante razoáveis para o desenvolvimento rápido de aplicações gráficas, usando apenas o Pick-Basic.
O sistema baseia-se em chamadas a funções C %socket, %accept, %bind, %listen, %read, %write, e %close disponíveis ao basic das versões Pick para Unix. O programa principal, “httpd”, atende as solicitações de softwares que se comuniquem através do protocolo http.
Padrão usado nos exemplos:
Substitua as palavras entre o sinal de menor e maior, pelos valores da sua configuração local: <host> para o IP do host que hospeda o pick (ex: 173.173.10.4) <porta> pelo endereço da porta TCP escolhida para escutar as conexões. (ex: 1028) <recurso> nome do recurso disponibilizado para acesso
Instalação:
Para rodar o serviço http, em tcl digite: :httpd ou :httpd –l<host>:<porta> –d
exemplo: :httpd –l173.173.10.4:1028
O parâmetro –l173.173.10.4:1028 indica o host local e em que porta o processo “escutará” as solicitações dos browsers. Se omitido, será assumido o endereço IP armazenado no arquivo dm,hosts, lido através do valor presente no atributo 1 do item “localhost” (dict dm,hosts).
O parâmetro –d permite depurar as conexões. Toda requisição feita pelo browser, será mostrada na tela. Testando o serviço:
Para ativar o serviço, em tcl do account sac digite:
:Httpd
Para
testar o serviço digite no campo address do browser . Na tela
do browser deverá ser apresentada uma página html como
a abaixo: Como desenvolver uma página de formulário para ser analisada, processada e respondida diretamente do pick ao browser? O conceito é simples e baseia-se na estrutura padrão de uma subrotina pick-basic. A subrotina em questão, será solicitada duas vezes pelo browser. A primeira para definir o formulário que será apresentado pelo browser. A segunda para processar os valores preenchidos pelo usuário e retornar a página de resposta ou de erro.
Como a subrotina identifica em qual instante ela se encontra?
Pseudocódigo:
Criando um formulário: Vá para o account dm (logto dm) e crie a subrotina sform1 no arquivo bp. Compile-a:
Sform1
Associe a subrotina a um recurso:
Digite no browser “http://<host>:<porta>/teste “. Se tudo estiver OK, será apresentado na área de trabalho do browser a página de um formulário com os campos “Nome do Arquivo” e “Nome do item”, ambos aceitando 25 caracteres. Também será apresentado como título a frase “Apresentação de itens” e “Exemplo 1”
No exemplo, verificamos que se o atributo 1 do item form (formulário) não contér valor, os campos e o título do formulário serão definidos. O Servidor http analisará a variável form e gerará um formulário html para ser retornado ao browser.
Processando um formulário: Inclua o código em negrito na rotina sform1.
Compile a subrotina. No browser, pressione o botão enviar (do formulário)
Nesse caso, se o atributo 1 do item form contiver algum valor, os dados do formulário deverão ser consistidos e processados. Caso haja algum erro na consistência ou no processamento, será atribuído à variável erro a mensagem que será retornada ao browser. Se não houver erros, uma página html será gerada e atribuída à variável parm
Nota Existem cinco tipos de campos que podem ser gerados pelo servidor. No atributo 4, pode-se definir a aparência de cada um dos campos. Todo campo (atr 1) que não tenha um multi-valor correspondente no atributo 4 será formatado como caixa de texto padrão. Em nosso exemplo o atr 4 está vazio e portanto todos os campos serão gerados como caixa de texto. Cada tipo de campo deve ser usado para uma situação específica:
Encadeando formulários: Quando deseja-se que ao processar um formulário, o servidor retorne um outro formulário ao browser, deve-se especificar no campo atr 13 do registro form o recurso cujo alvo seja o formulário escolhido. O atributo 16 de form solicita que o servidor preserve os dados do primeiro formulário para ser utilizado no segundo. O nome dos campos (atr 1) do primeiro formulário será armazenado no atr 17 da matriz dinâmica form e os valores correspondentes no atr 18 de form.
Altere o código do programa sform1 para que se pareça com esse:
Compile a subrotina.
Crie o segundo formulário sform2. A subrotina abaixo (dm,bp, sform2) recebe os dados do formulário sform1 (atr 17 e 18) e inverte a ordem de apresentação dos campos.
Associe a subrotina ao recurso /teste2:
No campo tipo informe: “form” (sem aspas) No campo alvo informe: “dm,bp, sform2” (sem aspas) No campo acesso livre informe: “S” (sem aspas)
Salve o item
Tente reenviar os dados. Deverá ser apresentado um formulário com os campos invertidos. Pode-se definir códigos html como cenário para a página de formulário, de resposta ou de erro. Assim, é possível deixar o site mais atraente e personalizado.
1 - Modelo para página de formulário Usando um editor como o front-page, crie sua página padrão. Insira no local destinado ao formulário a palavra form entre chaves. Grave-a com o nome de hform1.html e transfira-a para o arquivo dm,bp, com mesmo nome.
Exemplo da página hform1.html gerada no front-page: Hform1.html Inclua o código em negrito na rotina sform1 e compile-o: Subroutine(form,parm,erro) No browser ao pressionar o botão REFRESH deverá ser apresentado uma página html com nosso formulário inserido em seu contexto.
2 - Modelo para página de resposta ao processamento bem sucedido: Quando se escolhe uma página modelo para resposta de um processamento bem sucedido, a variável parm não será a própria página html de resposta mas sim uma matriz dinâmica (item), contendo os valores que serão substituídos na página html modelo.
Exemplo da página hresp1.html : Hresp1.html Transfira a arquivo acima como um item em dm,bp,
Altere a subrotina sform1 para o código abaixo: Subroutine(form,parm,erro)
Após pressionar o botão submit, a página html retornada não apresentará mais todos os atributos do registro dm,md, system-coldstart, mas apenas o terceiro e quinto. 3 - Modelo para página de resposta de erro: Seguindo o mesmo princípio do “modelo para formulário”, a “página de erro” deverá conter a palavra err entre chaves, no local destinado às mensagens de erro. Se a variável err for uma matriz dinâmica, o conteúdo de cada atributo corresponderá a uma linha de texto.
Exemplo da página herro1.html gerada no front-page:
Herro1.html Transfira o arquivo acima para dm,bp, Inclua o código em negrito: Sform1 Para executar corretamente a página, pressione o botão REFRESH do browser.
Nota: Informe um arquivo ou item inválido como valor para os campos “Nome do arquivo” ou “Nome do item” SAC – Sistema de Controle de Acesso.
Administração do dados do sistema: Através de um site dirigido, é possível ao administrador do SAC, efetuar a inclusão de usuários, grupos e recursos.
Novos usuários poderão requisitar a inclusão através de um formulário de solicitação (recurso /solicitacao). O sistema necessita da disponibilidade de um servidor SMTP (envio de mensagens) para que possa encaminhar por correio eletrônico a requisição do novo usuário ao administrador. Esse, analisará o pedido, e automaticamente enviará a resposta ao solicitante. No caso de uma resposta positiva, o sistema envia via e-mail a identificação para login acompanhado da senha de acesso. A senha é gerada pelo sistema, e nem o administrador tem conhecimento da senha gerada.
1) Formulário de cadastramento de usuários no sistema de controle de acesso:
2) usuário
solicitante acessa o site http://<host>:<porta>/solicitacao.
O site apresentará o formulário de cadastro, que
deverá ser preenchido pelo usuário. 3) Após o envio, os dados serão enviados ao administrador do sistema via e-mail. O endereço do destinatário está arquivado no registro: sac,aacaux, notificacao e o texto enviado sac,aacaux, txtsolicitacao. Esse endereço não representa necessariamente o endereço de e-mail do usuário administrator. Porém, para ter acesso ao formulário de liberação, o usuário deverá ter permissão de administrador (pertencer ao grupo admin).
4) Todo: descrver {página de confirmação de postagem aqui}
5) No e-mail de solicitação, o administrador poderá clicar no hyperlink para proceder com a liberação.
6) Se no campo acesso não for escolhido a opção SIM, não será executado o processo de geração de senha Após a conferência ou alteração dos dados do usuário, o sistema gerará a notificação que será enviada ao usuário. Caso tenha sido gerado uma senha (resposta para campo acesso = SIM) a notificação enviada será o texto sac,aacaux, txtliberacao. Caso a senha não tenha sido gerada, a notificação enviada será o texto sac,aacaux, txtnegação.
Apêndice A - Descrição da estrutura da variável form.
DICA: Mais de um formulário
pode ser especificado no atributo 12 e 13. Separe cada formulário
por uma barra invertida “\”: parm = “2\dados....” Apêndice B – Definição dos tipos de campos
Através do atributo 4 do item form pode-se definir a aparência de cada um dos campos do formulário. A aparência de um campo, está ligada a sua funcionalidade e portanto deve ser usada adequadamente para que tenha sentido.
As opções são especificacadas após a definição do tipo, através do sinal de dois-pontos. Como exemplo, será analisado a confecção de um formulário com 3 campos. form<1> = “Codigo”:@vm:”apresentacao”:@vm:”incluir”:@vm:”Contem” form<2> = 10:@vm:35:@vm:14:@vm:35 form<3> = “Axe”:@vm:”50ml”:@sm:”100ml”:@vm:”Sim”:@sm:”Nao”:@vm:”Alcool Etilico”: @sm:”Agua”:@sm:”Eter”:@sm:”Perfume”:@sm:”Glicerol” form<4> = “text”:@vm:”checkbox:1,2”:@vm:”radio:2”:@vm:”Select:Multi:1,3”
Os campos que permitem múltipla seleção (select e checkbox) retornará os valores separados em campos subvalorados (separador ASCII 252)
Variável form resultante: form<1> = Codigo]apresentacao]incluir]Contem form<2> = 10]35]14]35 form<3> = Axe]50ml\100ml]Nao]Alcool Etilico\Eter
“]” = ASCII 253 “\” = ASCII 252
Apêndice C – Definição de Recursos
Na versão 1.0 do servidor http, toda requisição feita pelo cliente (browser) era associada a um registro de um arquivo pick. Dessa forma, uma URL válida para acesso ao servidor seria:
http://<host>:<porta>/account,arquivo,/item_id.
Note que desta forma, para que o servidor WEB possa distinguir uma página html de uma subrotina de formulário era necessário a análise do código fonte do registro. Da mesma forma, no modelo acima para se implantar um esquema mínimo de segurança, seria necessário associar as permissões a item ou a arquivo. Um outro problema era a falta de conformidade com o padrão adotado pelos desenvolvedores. Apesar da RFC1945 – (3.2.2 http URL) definir o esquema de localização de recursos de rede via protocolo HTTP como:
http_URL “http:” “//” host [ “:” port ] [ abs_path ]
Para que pudesse, sem a análise do código fonte, ser respeitado o tipo de tratamento que deve ser dado á uma página, a versão 2.0 implementa o conceito de acesso a recurso e não a itens. A URL fornecida ao browser deverá conter um recurso cadastrado e não mais o nome do account,arquivo, onde a página/subrotina alvo se encontra.
Um recurso corresponde a um registro do arquivo sac,aac002,. Sua chave (item_id) deve começar com o caracter “/” seguido do nome do recurso. Não será possível cadastrar recursos sem a precedência do caracter “/”. Pode-se estruturar hierarquicamente os recursos, possibilitando a atribuição de permissão a usuários ou grupos: Recurso: id: /vendas/regiãoleste/resumo.html tipo: html alvo: vendas,html, resumoleste.html livre: n usuarios: osmar maria grupos: vendasleste
Recurso: id: /vendas/regiaosul/resumo.html tipo: html alvo: vendas,html, resumosul.html livre: n usuários: maria grupos: vendassul
Recurso: id: /vendas tipo: sac alvo: livre: n usuários: maria grupos: gerenciavendas
No exemplo, o primeiro e o segundo recurso, estão associados a relatórios de vendas específicos de cada região. Usuários que não pertençam ao grupo vendasleste não terão acesso ao recurso /vendas/regiaoleste/resumo.html (exceto Maria e Osmar), e usuários que não pertençam ao grupo vendassul não terão acesso ao recurso /vendas/regiaosul/resumo.html (exceto maria). Porém usuários que pertençam ao grupo gerenciavendas terão acesso a ambos os recursos, pois os mesmos encontram-se abaixo da hierarquia de /vendas. Recursos utilizados apenas para controle de acesso, não necessitam de valor no campo alvo.
Apêndice D – Definição de usuários e grupos de usuários
Para que um recurso protegido (campo livre=N) seja acessado, é necessário efetuarmos o cadastro dos usuários que terão acesso a tal recurso.
Usuários correspondem a registros do arquivo sac,aac001, e grupos a registro do arquivo sac,aac003, Quando em um usuário é inserido a referência de um grupo inexistente, esse grupo é automaticamente criado no arquivo sac,aac003,. O contrário é verdadeiro: quando em um grupo é inserido a referência de um usuário inexistente, esse usuário é automaticamente criado no arquivo sac,aac001,
O usuário administrator e os grupos admin e usuarios não podem ser apagados, pois são valores padrão para o sistema.
Pode-se utilizar o update processor ou o Sistema de Controle de Acesso (SAC) para inserir um novo usuário ou grupo de usuários.
:up aac001 administrator admin tela de inclusão de usuários através do UP. Apêndice E – Definição dos arquivos e suas estruturas:
Sac,aac001, Sac,aac002, Sac,aac003, Sac,aacaux, Txtsolicitacao Txtliberacao Txtnegacao
Pendências:
1. Documentação: Falar sobre o sistema sac (controle de acesso e inclusao de novos usuários) 1.1. Documentação: falar sobre os itens do arquivo aacaux (default) 1.2. Documentação: processo de cadastramento de usuário 1.3. documentação: acrescentar tela de cadastro dos usuários 1.4. código: No formulário de liberação de acesso colocar a opção de não liberar. 1.5. código: usuário administrator deve Ter em seu e-mail o texto [notificação] para ser substituído pelo e-mail cadastrado no item sac,aacaux, notificação, 2. Fazer pagina inicial com links 2.1. para a documentação 2.2. acesso aos recursos cadastrados 2.3. cadastro de novo usuário 3. Descrever a estrutura de cada arquivo 3.1. Sac,aac001, 3.2. Sac,aac002, 3.3. Sac,aac003, 3.4. Sac,aacaux, notificacao 3.5. Sac,aacaux, default 3.6. Sac,aacaux, txtnotificacao 3.7. Sac,aacaux, txtsenha 4. Implementar campo Recurso inicial no arquivo aac001 4.1. Implementar no formulário fac002 campo: recurso inicial (selecao do aac002) 5. Criar página de login 6. Criar rotina de empilhamento via socket para processo multi-usuário 7. Verificar e corrigir: ativação default não está funcionando (httpd) 8. Implementar campo tipo SAC no aac002. 9. Definir tipos de alvo nos recursos 9.1. Form – subrotina que retorna parametros para confecção de formulários. 9.2. Html – página html armazenada em arquivo pick 9.3. Sub – subrotina que gera página html como retorno mesmo acionada ativada pelo comando GET. (Para uma subrotina retornar uma página html pronta na variavel RESP, é necessário ativa-la pelo método POST (envio de formulário)) 9.4. Sac – Recurso usado apenas para dar permissão a um grupo.
|
