Skip to content

About

Web Exams for Programmers

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

WEProg — Web Exams for Programmers

Plataforma de provas online voltada para avaliações de programação. Substitui provas em papel por um ambiente controlado no navegador, com editor de código, execução em tempo real e monitoramento de comportamento do aluno.


Motivação

Escrever código em papel é inviável. Ferramentas genéricas como Google Forms não oferecem ambiente de execução. O WEProg resolve isso com um editor Monaco integrado, compilação de C no servidor e um sistema de tokens para controle de acesso — tudo sem depender de plataformas externas.


Funcionalidades

Professor (/secret)

  • Cadastro e login com JWT
  • Dashboard com estatísticas gerais
  • Criação de provas com múltiplas questões (título + descrição/exemplo opcional)
  • Definição de tempo limite por prova (individual por aluno)
  • Geração de tokens de acesso com apelido customizável
  • Revogação de tokens
  • Pausar/retomar prova (bloqueia entradas e envios)
  • Visualização de submissões por prova
  • Correção individual com Monaco em modo leitura + terminal executável
  • Painel de comportamento do aluno com score de suspeita

Aluno (/)

  • Acesso via token fornecido pelo professor
  • Identificação com nome completo e turma
  • Timer individual (começa quando o aluno inicia, não quando a prova é criada)
  • Editor Monaco com syntax highlight para C
  • Terminal com suporte a entradas linha a linha
  • Envio automático ao esgotar o tempo
  • Bloqueio de DevTools, F12, Ctrl+U, troca de aba, clique direito, copy/paste fora do editor

Segurança e monitoramento

  • Eventos registrados: tentativas de cópia, cola, DevTools, troca de aba, foco perdido, idle
  • Score de suspeita calculado automaticamente por pesos por tipo de evento
  • Badge visual no painel do professor (normal / suspeito / muito suspeito)

Stack

Camada Tecnologia
Backend Node.js + Express
Autenticação JWT + bcryptjs
Banco de dados JSON flat files (fs)
Compilação gcc via child_process
Editor Monaco Editor (CDN)
Frontend HTML + CSS + JS vanilla

Estrutura

weprog/
├── server.js
├── package.json
├── .env
├── .env.example
├── .gitignore
├── routes/
│   ├── auth.js
│   ├── exams.js
│   ├── submissions.js
│   ├── compiler.js
│   └── behavior.js
├── controllers/
│   ├── authController.js
│   ├── examController.js
│   ├── submissionController.js
│   ├── compilerController.js
│   └── behaviorController.js
├── middleware/
│   ├── authMiddleware.js
│   └── rateLimiter.js
├── utils/
│   ├── db.js
│   ├── tokenGenerator.js
│   └── behaviorLogger.js
├── data/          ← gerado automaticamente (gitignored)
├── temp/          ← arquivos .c temporários (gitignored)
└── public/
    ├── index.html
    ├── secret/
    │   └── index.html
    └── assets/
        ├── css/
        │   ├── main.css
        │   ├── student.css
        │   └── professor.css
        └── js/
            ├── student.js
            └── professor.js

Instalação local

Pré-requisitos: Node.js 18+, gcc instalado

# Instala dependências
npm install

# Copia e configura o .env
cp .env.example .env

# Inicia em modo desenvolvimento
npm run dev

Acesse:

  • Aluno: http://localhost:3000
  • Professor: http://localhost:3000/secret

Variáveis de ambiente

Variável Descrição
PORT Porta do servidor (padrão: 3000)
JWT_SECRET Chave de assinatura dos tokens JWT
NODE_ENV development ou production
ALLOWED_ORIGIN Origem permitida pelo CORS em produção

Deploy (Render)

  1. Suba o repositório no GitHub
  2. Crie um novo Web Service no Render
  3. Configure as variáveis de ambiente no painel do Render
  4. Build command: npm install
  5. Start command: node server.js

O gcc já está disponível no ambiente Linux do Render — nenhuma configuração extra necessária.


Linguagens suportadas

Linguagem Status
C ✅ Disponível
Python 🔜 Planejado

About

Web Exams for Programmers

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages