OxideTalis Messaging Protocol homeserver implementation written in Rust https://otmp.4rs.nl
Find a file
Awiteb e61de9a8b1
All checks were successful
Write changelog / write-changelog (push) Successful in 22s
Update Contributors / Update Contributors (push) Successful in 3s
Rust CI / Rust CI (push) Successful in 4m55s
fix: Handle the websocet in handle_socket itself
I have removed the task spwaning in `handle_socket` function, because Salvo
already spawn `handle_socket` function in a new task when upgrading the
connection to websocket. So, there is no need to spawn a new task in
`handle_socket` function.

refs:
- Salvo task spawning: https://github.com/salvo-rs/salvo/blob/main/crates/extra/src/websocket.rs#L247-L256

Reviewed-on: #34
Reviewed-by: Amjad Alsharafi <me@amjad.alsharafi.dev>
Signed-off-by: Awiteb <a@4rs.nl>
2024-07-28 08:43:20 +03:00
.forgejo fix: Change the way checking if the file changed 2024-07-23 00:18:37 +03:00
.github/workflows feat: Create CI/CD 2024-07-07 20:59:04 +03:00
crates fix: Handle the websocet in handle_socket itself 2024-07-28 08:43:20 +03:00
.dockerignore chore: Initialize the project 2024-06-26 23:05:17 +03:00
.gitignore chore: Initialize the project 2024-06-26 23:05:17 +03:00
Cargo.lock refactor: Update public key column type from String to PublicKey 2024-07-24 01:19:34 +03:00
Cargo.toml chore: Update the copyright 2024-07-23 00:18:37 +03:00
CHANGELOG.md chore(changelog): Update changelog 2024-07-24 08:50:01 +00:00
cliff.toml chore: Add used utility files 2024-06-26 23:02:11 +03:00
CODE_OF_CONDUCT.md chore: Add Code of Conduct 2024-07-23 00:18:38 +03:00
CONTRIBUTING.md chore: Add Code of Conduct 2024-07-23 00:18:38 +03:00
CONTRIBUTORS.md Update CONTRIBUTORS.md 2024-07-23 00:18:38 +03:00
DCO feat: Developer Certificate of Origin 2024-07-23 00:18:36 +03:00
docker-compose.yml chore: Docker improvments 2024-07-23 02:53:26 +03:00
Justfile feat: CI to create CONTRIBUTORS.md file 2024-07-23 00:18:37 +03:00
LICENSE-AGPLv3 chore: Add licenses 2024-06-26 23:03:01 +03:00
LICENSE-MIT chore: Update the copyright 2024-07-23 00:18:37 +03:00
README.md chore: Update README.md 2024-07-23 00:18:38 +03:00
rust-toolchain.toml chore: Add rust files 2024-06-26 23:02:33 +03:00
rustfmt.toml chore: Add rust files 2024-06-26 23:02:33 +03:00
sumi.toml chore: Add used utility files 2024-06-26 23:02:11 +03:00

OTMP Logo

Oxidetalis

An open-source OxideTalis Messaging Protocol (OTMP) homeserver implementation written in Rust.

Forgejo CI Status Forgejo CD Status

agplv3-or-later

Warning

The project is still in very early development and is not ready for any kind of use yet, the protocol is not finalized and the server is not feature complete, also not all protocol features are implemented yet.

About

OTMP is a decentralized, end-to-end encrypted chat protocol designed to prioritize privacy. Unlike existing chat protocols, OTMP operates without a central server. When you send a message, it connects directly to your friend's server, ensuring that your messages are not stored centrally. Only you and your friend can read the messages, even your servers cannot access their content.

Key Features

  • Decentralized: No central server, messages are sent directly to the recipient server by you.
  • End-to-End Encryption: Messages are encrypted on the client and decrypted on the client.
  • Self-Hosted: You can host your own server and have full control over your data.
  • Privacy-Respecting: No tracking, no ads, no data mining, no email/usernames/passwords required.
  • Secure: Messages are encrypted and signed, and the protocol is designed to be secure.
  • Lightweight: Simple protocol, easy to implement, easy to use. No bloat.

Protocol non-goals

  • Group chats
  • Voice/video calls

How to authenticate without usernames and passwords

OTMP uses a different authroization mechanism than most chat protocols. Instead of using usernames and passwords, OTMP uses public/private key pairs to authenticate users. When you create an account, you generate a key pair on your device, and the public key is sent to the server. When you sent a request to the server, you sign the request with shared secret key between you and the server. This way, the server can verify that the request is coming from you and authroize the request.

E2EE, how does it work?

OTMP key pairs are used for more than just authroization, they are also used for end-to-end encryption. When you send a message to a friend, you encrypt the message with shared secret key, the shared secret key is generated by diffie-hellman key exchange using your private key and your friend's public key. This way, only you and your friend can read the message, even the server can't read it.

Running the server

Note

You must update OXIDETALIS_CONFIG in the docker-compose.yml file to point to the correct configuration file. And you must update the configuration file.

To run the server, you need to have docker and docker-compose installed on your system. You can run the server by running the following command:

docker-compose up -d

Contributing

For information on how to contribute to the project, please see the CONTRIBUTING.md file. You can see the list of contributors in the CONTRIBUTORS.md file.

Repository mirrors

Licenses

The project is split into multiple crates, each with its own license: