Compare commits

..
5 Commits
Author SHA1 Message Date
nnduc 0d8107a0a7 clean up and bug fixes 2026-11-07 15:29:40 +07:00
nnduc 978dd5b5da notes to self (ui) 2026-11-05 21:41:38 +07:00
nnduc bcaddcbcbb notes to self (ui) 2026-10-29 13:31:09 +07:00
nnduc 5f37fcfe7a notes to self 2026-10-29 13:17:40 +07:00
nnduc 1ce93d883b omemo keyring 2026-10-27 23:49:59 +07:00
387 changed files with 1513 additions and 6092 deletions
Generated
-103
View File
@@ -235,28 +235,6 @@ dependencies = [
"tracing", "tracing",
] ]
[[package]]
name = "axum-extra"
version = "0.12.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be44683b41ccb9ab2d23a5230015c9c3c55be97a25e4428366de8873103f7970"
dependencies = [
"axum",
"axum-core",
"bytes",
"cookie",
"futures-core",
"futures-util",
"http",
"http-body",
"http-body-util",
"mime",
"pin-project-lite",
"tower-layer",
"tower-service",
"tracing",
]
[[package]] [[package]]
name = "base16ct" name = "base16ct"
version = "0.2.0" version = "0.2.0"
@@ -417,7 +395,6 @@ dependencies = [
"js-sys", "js-sys",
"num-traits", "num-traits",
"pure-rust-locales", "pure-rust-locales",
"serde",
"wasm-bindgen", "wasm-bindgen",
"windows-link", "windows-link",
] ]
@@ -527,17 +504,6 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b"
[[package]]
name = "cookie"
version = "0.18.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a373e3602691c3cdea496d2f0ee5935151e6168fe87739483c463db1b2f2f87"
dependencies = [
"percent-encoding",
"time",
"version_check",
]
[[package]] [[package]]
name = "core-foundation" name = "core-foundation"
version = "0.9.4" version = "0.9.4"
@@ -751,12 +717,6 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "deranged"
version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
[[package]] [[package]]
name = "digest" name = "digest"
version = "0.10.7" version = "0.10.7"
@@ -1947,7 +1907,6 @@ checksum = "86886cf6dbf4e614b19c9a1eec9775f021869d7eadde0fc73921a81b90c9b4c9"
dependencies = [ dependencies = [
"memo-map", "memo-map",
"serde", "serde",
"serde_json",
] ]
[[package]] [[package]]
@@ -2032,13 +1991,11 @@ dependencies = [
"aes-gcm 0.11.1", "aes-gcm 0.11.1",
"anyhow", "anyhow",
"axum", "axum",
"axum-extra",
"base64 0.23.1", "base64 0.23.1",
"base64ct", "base64ct",
"chrono", "chrono",
"chrono-tz", "chrono-tz",
"futures", "futures",
"futures-util",
"hex", "hex",
"html-escape", "html-escape",
"image", "image",
@@ -2131,12 +2088,6 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "num-conv"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
[[package]] [[package]]
name = "num-integer" name = "num-integer"
version = "0.1.47" version = "0.1.47"
@@ -2377,12 +2328,6 @@ dependencies = [
"zerovec", "zerovec",
] ]
[[package]]
name = "powerfmt"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958"
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.21" version = "0.2.21"
@@ -2649,7 +2594,6 @@ dependencies = [
"base64 0.23.1", "base64 0.23.1",
"bytes", "bytes",
"futures-core", "futures-core",
"futures-util",
"http", "http",
"http-body", "http-body",
"http-body-util", "http-body-util",
@@ -2664,19 +2608,15 @@ dependencies = [
"rustls", "rustls",
"rustls-pki-types", "rustls-pki-types",
"rustls-platform-verifier", "rustls-platform-verifier",
"serde",
"serde_json",
"sync_wrapper", "sync_wrapper",
"tokio", "tokio",
"tokio-rustls", "tokio-rustls",
"tokio-util",
"tower", "tower",
"tower-http 0.6.11", "tower-http 0.6.11",
"tower-service", "tower-service",
"url", "url",
"wasm-bindgen", "wasm-bindgen",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"wasm-streams",
"web-sys", "web-sys",
] ]
@@ -3542,36 +3482,6 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "time"
version = "0.3.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134"
dependencies = [
"deranged",
"num-conv",
"powerfmt",
"serde_core",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
[[package]]
name = "time-macros"
version = "0.2.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
dependencies = [
"num-conv",
"time-core",
]
[[package]] [[package]]
name = "tinystr" name = "tinystr"
version = "0.8.5" version = "0.8.5"
@@ -4053,19 +3963,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "wasm-streams"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb"
dependencies = [
"futures-util",
"js-sys",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
]
[[package]] [[package]]
name = "web-push-native" name = "web-push-native"
version = "0.5.0" version = "0.5.0"
+4 -6
View File
@@ -7,30 +7,28 @@ edition = "2024"
aes-gcm = "0.11.1" aes-gcm = "0.11.1"
anyhow = "1.0.104" anyhow = "1.0.104"
axum = { version = "0.8", features = ["multipart", "ws"] } axum = { version = "0.8", features = ["multipart", "ws"] }
axum-extra = { version = "0.12.6", features = ["cookie"] }
base64 = "0.23.1" base64 = "0.23.1"
base64ct = "1.8.3" base64ct = "1.8.3"
chrono = { version = "0.4.45", features = ["serde", "unstable-locales"] } chrono = { version = "0.4.45", features = ["unstable-locales"] }
chrono-tz = "0.10.4" chrono-tz = "0.10.4"
futures = "0.3.34" futures = "0.3.34"
futures-util = "0.3.34"
hex = "0.4.3" hex = "0.4.3"
html-escape = "0.3.0" html-escape = "0.3.0"
image = { version = "0.25.10", default-features = false, features = ["png", "jpeg", "webp", "gif"] } image = { version = "0.25.10", default-features = false, features = ["png", "jpeg", "webp", "gif"] }
indexmap = "2.14.2" indexmap = "2.14.2"
minidom = "0.19" minidom = "0.19"
minijinja = { version = "2", features = ["loader", "json"] } minijinja = { version = "2", features = ["loader"] }
percent-encoding = "2.3.2" percent-encoding = "2.3.2"
unicode-normalization = "0.1.26" unicode-normalization = "0.1.26"
rand = "0.9" rand = "0.9"
regex = "1.13.1" regex = "1.13.1"
reqwest = { version = "0.13.5", default-features = false, features = ["rustls", "stream", "json"] } reqwest = { version = "0.13.5", default-features = false, features = ["rustls"] }
sasl = "0.5" sasl = "0.5"
serde = { version = "1.0.229", features = ["derive"] } serde = { version = "1.0.229", features = ["derive"] }
serde_json = { version = "1.0.154", features = ["preserve_order"] } serde_json = { version = "1.0.154", features = ["preserve_order"] }
sha1 = "0.11.0" sha1 = "0.11.0"
sha2 = "0.11.1" sha2 = "0.11.1"
sqlx = { version = "0.9", features = ["runtime-tokio", "sqlite", "chrono"] } sqlx = { version = "0.9", features = ["runtime-tokio", "sqlite", "postgres", "chrono"] }
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
tokio-xmpp = { version = "6", features = ["insecure-tcp"] } tokio-xmpp = { version = "6", features = ["insecure-tcp"] }
tower-http = { version = "0.7", features = ["fs"] } tower-http = { version = "0.7", features = ["fs"] }
+22 -3
View File
@@ -2,8 +2,8 @@
A rewrite of the [Movim](https://movim.eu) XMPP web client backend in Rust, keeping A rewrite of the [Movim](https://movim.eu) XMPP web client backend in Rust, keeping
Movim's frontend (CSS/JS/theme, in `frontend/`). The PHP daemon, widgets and Movim's frontend (CSS/JS/theme, in `frontend/`). The PHP daemon, widgets and
templates were replaced by a single Rust server (tokio, axum, tokio-xmpp, sqlx/SQLite, templates were replaced by a single Rust server (tokio, axum, tokio-xmpp, sqlx with SQLite
minijinja). Scope: a Conversations-like chat client. or PostgreSQL, minijinja). Scope: a Conversations-like chat client.
## Features ## Features
1:1 chat, group chats (MUC, bookmarks, invitations, moderation, configuration), 1:1 chat, group chats (MUC, bookmarks, invitations, moderation, configuration),
@@ -35,8 +35,22 @@ XMPP server's archive expiry),
dev only: `MOVIM_XMPP_PLAINTEXT=host:port`, `MOVIM_ALLOW_PRIVATE_URLS=1`, dev only: `MOVIM_XMPP_PLAINTEXT=host:port`, `MOVIM_ALLOW_PRIVATE_URLS=1`,
`MOVIM_DEBUG_XMPP=1`. `MOVIM_DEBUG_XMPP=1`.
## Database
SQLite by default (`data/movim.sqlite`). For PostgreSQL, set
`MOVIM_DATABASE_URL=postgres://user:password@host/database`; the tables are
created at startup. To move an existing SQLite database, stop Movim, create an
empty PostgreSQL database and run:
movim migrate-to-postgres postgres://user:password@host/database [--from sqlite:///path/movim.sqlite]
Without `--from` it copies the SQLite database Movim would use (`MOVIM_DATABASE_URL`
or the one in `MOVIM_DATA_DIR`). Everything is copied in one transaction, ids
included, and the command refuses a database that already has data. The SQLite
file is left untouched.
## Tests ## Tests
`cargo test` runs the unit tests. `tests/e2e/` holds end-to-end scripts that `cargo test` runs the unit tests (`MOVIM_TEST_POSTGRES_URL=postgres://…` also
runs them against PostgreSQL, in throwaway databases). `tests/e2e/` holds end-to-end scripts that
drive the server (and the real frontend in headless Chromium) against a local drive the server (and the real frontend in headless Chromium) against a local
Prosody; see `tests/e2e/README.md`. Prosody; see `tests/e2e/README.md`.
@@ -47,6 +61,11 @@ Prosody; see `tests/e2e/README.md`.
- `scripts/movim_jingles.js`: the signaling of each call session runs through a - `scripts/movim_jingles.js`: the signaling of each call session runs through a
promise queue (a content-add could arrive before the remote description was promise queue (a content-add could arrive before the remote description was
applied, early ICE candidates were dropped). applied, early ICE candidates were dropped).
- `widgets/Config/config.js`, `widgets/Account/account.js`: removed the blog
configuration and gateways calls (not implemented here).
- Widgets of the social features, the admin pages, AdHoc, SendTo, RoomsExplore
and the sticker packs are not shipped. Their strings still in use moved to
`locales/extra.ini`.
## Not implemented ## Not implemented
Movim social features (blogs, communities, stories), SFU conference calls Movim social features (blogs, communities, stories), SFU conference calls
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+45
View File
@@ -53,3 +53,48 @@ files_recordings = Recordings
files_files = Files files_files = Files
files_message = Show the message files_message = Show the message
files_empty = Nothing shared yet files_empty = Nothing shared yet
; Upstream strings still in use, their widgets are not part of this edition
[apps]
install = Movim App
install_text = Install Movim on your device
[clients]
title_full = Clients information
[communitydata]
sub = %s subscribers
[delete]
text = You are going to remove one of your contacts, please confirm your action
title = Are you sure?
[edit]
alias = Alias
group = Group
[emojisconfig]
title = Emojis
[general]
about = About Me
email = Email
name = Name
nickname = Nickname
website = Website
[information]
description = Description
[last]
title = Last seen
[publish]
preview = Preview
[subscription]
nil = You are not subscribed to anyone
[contactrequests]
title = Contact requests
+3
View File
@@ -6,6 +6,9 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
# --- extra.ini # --- extra.ini
msgid "Contact requests"
msgstr "Lời mời kết nối"
msgid "Kick from the room" msgid "Kick from the room"
msgstr "Đuổi khỏi phòng" msgstr "Đuổi khỏi phòng"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

-3
View File
@@ -1,3 +0,0 @@
author = Movim Team
license = "No License"
url = https://movim.eu/
Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

-3
View File
@@ -1,3 +0,0 @@
author = Hey-Xander
license = CreativeCommon BY SA
url = http://hey-xander.deviantart.com/
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Some files were not shown because too many files have changed in this diff Show More