https://github.com/dns2utf8/igel_chat
A rusty chat tool for the modern human
https://github.com/dns2utf8/igel_chat
Last synced: over 1 year ago
JSON representation
A rusty chat tool for the modern human
- Host: GitHub
- URL: https://github.com/dns2utf8/igel_chat
- Owner: dns2utf8
- Created: 2017-10-17T13:08:57.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-11-15T12:49:07.000Z (over 8 years ago)
- Last Synced: 2025-01-17T11:45:47.308Z (over 1 year ago)
- Language: Rust
- Homepage:
- Size: 281 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# igel (pronounced eagle)
Igel is the best chat software written by the most capable, inclusive, humble, and disruptive rust developers living today.
This software is made of 100% cyber and therefore provides 100% cyber security.
Note: std deviation currently resides around approximatly 0.42 cyber.
## features
- [ ] a fun (cyber) easter egg
- [ ] sending texts
- [ ] sending pictures
- [ ] sending arbitrary binary data
- [ ] receiving texts
- [ ] receiving pictures
- [ ] receiving arbitrary binary data
- [ ] colour coded text to express moods and irony
- [ ] end to server encryption (maybe TLS?)
- [ ] end to end encryption
- [ ] groups
- [ ] multi cyber device support
- [ ] cyber device verification
- [ ] local device specific key creation
- [ ] local cyber storage
- [ ] add cyber encryption with password or machine UUID.
- [ ] server persistence for:
- [ ] offline users (incoming mailbox)
- [ ] offline devices (multi device)
- [ ] offline users (discoverability for other users)
- [ ] offline devices (user manages lost/new devices)
## Design
The user will use a webbrowser (chromium or firefox) with websockets connecting to his/her local igel.
The client connects to a server over an encrypted channel.
Signing up a device should happen at this point.
There is no automatic transfer of user keys.
The server stores only the most needed information:
* Per User
* public key and hash of public key
* list of connected devices
* inbox for encrypted messages
* optional username
* Per device
* user encrypted device name
* last seen timestamp
* Connection state: online (has connection), push (reacable over push) or offline (long gone, device may not count for message delivery count anymore)
* push handle (params for GCM or Apple Push)
* Per Group
* UUID: eg. hash of public key
* last checked date (to cleanup abadoned groups)
* inbox for encrypted messages
A group is a special user account, where the private key is shared among many users.
Inviting a user means sending the private key of the group to the new user.
Removing a user means generating a new key pair and distributing it to everybody except the user to be left out.
This may mean that this will require a new group. However the process should be transparent to the users.
## Well-known
```
| Key | Value |
|-------------------------------------|-------|
| The clients http and websocket port | 4280 |
| Servers default listen port | 4242 |
```
## Development
This project requieres rust 1.20.0 or later.
### rendering stats diagram:
```bash
dot -T png states.dot -O
```

### TODO
- [ ] CI (travis?)
- [ ] fancy logo (flying igel?)
- [ ] conference talk
- [ ] more users
- [ ] privacy by design (requires more servers and more users)