Add user authentication with password hashing - Integrated Argon2 for password hashing and verification - Added bcrypt and thiserror dependencies - Updated database schema with admin and ban flags - Implemented user account creation and login logic - Enhanced error handling for database operations ``` |
||
---|---|---|
migrations | ||
src | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
config.toml | ||
db.sqlite | ||
db.sqlite-journal | ||
README.md |
SRC (Simple Rust Chat)
Simple Rust Chat è una chat Client/Server TCP
La chat è basata molto sull'idea di una chat IRC (inizialmente il progetto aveva come scopo la creazione di un server IRC da utilizzare con dei clienti IRC come Halloy o mIRC)
Linguaggio
Ho utilizzato Rust come linguaggio per questo programma per la sua velocità e leggerezza che permette di farlo runnare anche su sistemi con componenti poco potenti. Anche il client è scritto in Rust per compatibilità tra librerie utilizzate nel client e nel server. Permette anche di essere dockerizzato come immagine il server che permette di scalare il server utilizzando Kubernets o altri sistemi di scalability.
Librerie
Le librerie utilizzate in particolare sono Tokio, un framework per applicazioni async e che offre anche connessioni Socket. Per la gestione del database viene usato SQLx, una libreria che offre una connessione standard per vari tipi di DBMS. serde: Per serializzazione/deserializzazione strutturata dei pacchetti log + env_logger: Per logging strutturato
Funzioni
Funzioni Fondamentali:
- Chattare con altri utenti in canali per topic
- Chattare con una persona sola (DMs)
- Inviare i file tra utenti
- Possibilità di amministrare la chat con comandi di /kick o /ban
- Usa un Db SQLite per tenere le informazioni degli utenti registrati
- È possibile registarsi usando /register password che viene salvata usando SHA-256 e usare dal prossimo login il comando /login
Funzionalità opzionali che si potrebbero aggiungere:
- Lista utenti online per canale
- Cronologia messaggi
- Sistema di ruoli più granulare
- Notifiche di menzione (@user)
Protocolli e Sicurezza
Il server utilizza TCP/IP come protocollo per la trasmissione dei dati in rete. I pacchetti sono composti da un pacchetto prestabilito
/*
Specifications of the packet
32 bytes - Command name
512 bytes - Command argument
if command is empty then it is a message
*/
La chat è sicura usando x25519-dalek e AES-128 per criptare i messaggi e i dati dei file che vengono inviati. Lo scambio di chiavi viene effettuato con Diffie Hellman
Il Db è SQLite che permette di usarlo da un singolo file senza nessun problema. Per lo sviluppo sono utilizzate le mitigations cosi da aggiornare il db anche con versione vecchie del server
sequenceDiagram
participant C as Client
participant S as Server
participant DB as SQLite DB
C->>S: Connessione TCP
S->>C: Challenge DH
C->>S: Risposta DH
Note over C,S: Generazione chiavi AES-128
alt Registrazione
C->>S: /register [password]
Note over S: Hash SHA-256
S->>DB: Salva utente + hash
S->>C: Conferma registrazione
else Login
C->>S: /login [password]
S->>DB: Verifica hash
S->>C: Conferma login
end
rect rgb(200, 220, 255)
Note over C,S: Comunicazione crittografata
C->>S: Messaggi/Comandi (AES-128)
S->>C: Risposte/Broadcast (AES-128)
end