Backend C# (.NET 8) que utiliza o Telegram como sistema de armazenamento de arquivos, com PostgreSQL para autenticação e gerenciamento de usuários.
- ✅ Autenticação JWT com PostgreSQL
- ✅ Upload/Download de arquivos via Telegram Bot API
- ✅ Orquestração de arquivos com metadados
- ✅ APIs REST completas para gerenciamento
- ✅ Logging e middleware de tratamento de exceções
- ✅ Docker e docker-compose para deploy fácil
- ✅ Validação de tipos de arquivo e tamanho
- ✅ Segurança com JWT Bearer tokens
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend/ │ │ Backend API │ │ Telegram │
│ Mobile App │◄──►│ (.NET 8) │◄──►│ Storage │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ PostgreSQL │
│ (Metadata) │
└─────────────────┘
- Acesse @BotFather no Telegram
- Execute
/newbote siga as instruções - Copie o token do bot gerado
- Crie um chat privado ou canal para armazenamento
- Obtenha o Chat ID (use bots como @userinfobot)
# Copiar o template
cp TelegramStorage/appsettings.Example.json TelegramStorage/appsettings.json
# Editar com suas configurações
nano TelegramStorage/appsettings.jsonConfigurações necessárias:
{
"TelegramSettings": {
"BotToken": "SEU_TOKEN_DO_BOT_AQUI",
"StorageChatId": "SEU_CHAT_ID_AQUI"
},
"JwtSettings": {
"SecretKey": "SuaChaveSecretaDePeloMenos32CaracteresParaSeguranca"
}
}# Clonar o repositório
git clone <repo-url>
cd telegram-storage
# Executar com docker-compose
docker-compose up -d
# Verificar logs
docker-compose logs -f telegram-storagecd TelegramStorage
# Restaurar pacotes
dotnet restore
# Executar migrations
dotnet ef database update
# Executar aplicação
dotnet run| Método | Endpoint | Descrição | Body |
|---|---|---|---|
POST |
/api/auth/register |
Registrar novo usuário | { "username": "user", "email": "user@email.com", "password": "123456" } |
POST |
/api/auth/login |
Login (retorna JWT) | { "email": "user@email.com", "password": "123456" } |
| Método | Endpoint | Descrição | Headers |
|---|---|---|---|
POST |
/api/files/upload |
Upload de arquivo | Authorization: Bearer <token> |
GET |
/api/files |
Listar arquivos do usuário | Authorization: Bearer <token> |
GET |
/api/files/{id} |
Obter informações do arquivo | Authorization: Bearer <token> |
GET |
/api/files/{id}/download |
Download do arquivo | Authorization: Bearer <token> |
DELETE |
/api/files/{id} |
Deletar arquivo | Authorization: Bearer <token> |
curl -X POST http://localhost:8080/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"username": "joao",
"email": "joao@email.com",
"password": "123456"
}'curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "joao@email.com",
"password": "123456"
}'curl -X POST http://localhost:8080/api/files/upload \
-H "Authorization: Bearer <seu-jwt-token>" \
-F "file=@/caminho/para/arquivo.pdf"curl -X GET http://localhost:8080/api/files \
-H "Authorization: Bearer <seu-jwt-token>"TelegramStorage/
├── Controllers/ # Controladores da API
│ ├── AuthController.cs
│ └── FilesController.cs
├── Services/ # Lógica de negócio
│ ├── AuthService.cs
│ ├── TelegramService.cs
│ └── FileService.cs
├── Models/ # Entidades do banco
│ ├── User.cs
│ └── FileRecord.cs
├── DTOs/ # Data Transfer Objects
│ ├── LoginDto.cs
│ ├── RegisterDto.cs
│ └── FileResponseDto.cs
├── Data/ # Contexto do EF Core
│ └── TelegramStorageContext.cs
├── Configuration/ # Classes de configuração
│ ├── JwtSettings.cs
│ └── TelegramSettings.cs
├── Middlewares/ # Middlewares customizados
│ └── ExceptionMiddleware.cs
└── Infrastructure/ # Repositórios e serviços
- JWT Authentication com chaves seguras
- Validação de tipos de arquivo permitidos
- Middleware de tratamento de exceções
- Logs detalhados para auditoria
- Sanitização de dados de entrada
| Tecnologia | Versão | Propósito |
|---|---|---|
| .NET | 8.0 | Framework web |
| Entity Framework Core | 8.0 | ORM para PostgreSQL |
| PostgreSQL | 15 | Banco de dados |
| Telegram.Bot | 19.0 | API do Telegram |
| JWT Bearer | 8.0 | Autenticação |
| BCrypt.Net | 4.0 | Hash de senhas |
| Docker | - | Containerização |
- Tipos permitidos: Configurável via
AllowedContentTypes - Armazenamento: Dependente da disponibilidade do Telegram (ilimitado ?)
- Backup: Arquivos ficam no chat/canal do Telegram
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -am 'Add nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto está sob a licença AGPL-3.0. Veja o arquivo LICENSE para mais detalhes.
Para dúvidas ou problemas:
- Abra uma issue
- Entre em contato via email
- Consulte a documentação da API quando o projeto estiver rodando