Skip to content

Latest commit

 

History

History
95 lines (64 loc) · 3.68 KB

README.pt-BR.rst

File metadata and controls

95 lines (64 loc) · 3.68 KB

Descrição

O projeto Code Lab permite programar diretamente pelo navegador, sem nenhuma outra dependência externa. É interessante para os casos em que se quer fazer um experimento rápido mas não há um computador com a linguagem instalada e configurada por perto.

Esse projeto foi feito originalmente como uma prova de conceito e também ajudar meus alunos a usarem diferentes linguagens de programação sem a necessidade de instalar nada na máquina deles.

Funcionamento

A execução de um código de fonte desconhecida traz riscos à segurança porque um código malicioso pode tentar tomar o controle do sistema, acessar áreas e dados restritos ou fazer mau uso de recursos disponíveis (memória, processos, disco etc.). A forma de mitigar esse risco é executando o código em um sandbox, que é um tipo de virtualização de um ambiente restrito e controlado [1].

No Code Lab, o sandbox é baseado em um container Docker denominado de Codebox, que contém com todas as linguagens, bibliotecas e ferramentas oferecidas pelo Code Lab, mas que roda com limitações de permissões de usuário, tempo, memória e restrição de acesso à rede. Mesmo que haja uma violação, seus efeitos serão contidos e depois eliminados quando o container for destruído.

A comunicação é feita através da entrada e saída padrões stdin e stdout do Codebox. Os arquivos do projeto, dados de entrada e os comandos a serem executados são enviados pelo stdin. A saída (stdout) e os erros (stderr) dos comandos são agrupados e devolvidos pelo stdout do Codebox.

frontend/src/assets/images/codebox-operation.png

Os modelos usados para troca de informações estão especificados no arquivo backend/app/models.py.

Arquitetura

O Codebox é a parte mais importante mas não funciona sozinho: Tudo começa com a aplicação web, que segue o padrão SPA (Single Page Application) e é construída com Vue.js. O backend está hospedado em um droplet do DigitalOcean. A aplicação é servida através de um proxy reverso pelo Caddy e de um servidor Hypercorn, que usa o padrão ASGI (Asynchronous Server Gateway Interface), e serve a aplicação feita com FastAPI.

A execução dos projetos não é imediata. Primeiro é feita uma verificação no cache (Redis) e só se não estiver lá é que o projeto é executado no Codebox.

frontend/src/assets/images/codelab_codebox_v2.png

Note

Se você reparar, verá arquivos como .hgignore e .hgtags no repositório. Isso significa que eu uso o Mercurial como controle de versão dos meus projetos pessoais apesar de hospedá-los no GitHub.

Referências

[1]Sandbox (computer security): https://en.wikipedia.org/wiki/Sandbox_(computer_security)
[2]Repositório do Code Lab: https://github.com/andredias/codelab
[3]Repositório do Codebox: https://github.com/andredias/Codebox