Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d8107a0a7 | ||
|
|
978dd5b5da | ||
|
|
bcaddcbcbb | ||
|
|
5f37fcfe7a | ||
|
|
1ce93d883b |
@@ -235,28 +235,6 @@ dependencies = [
|
||||
"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]]
|
||||
name = "base16ct"
|
||||
version = "0.2.0"
|
||||
@@ -417,7 +395,6 @@ dependencies = [
|
||||
"js-sys",
|
||||
"num-traits",
|
||||
"pure-rust-locales",
|
||||
"serde",
|
||||
"wasm-bindgen",
|
||||
"windows-link",
|
||||
]
|
||||
@@ -527,17 +504,6 @@ version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
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]]
|
||||
name = "core-foundation"
|
||||
version = "0.9.4"
|
||||
@@ -751,12 +717,6 @@ dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deranged"
|
||||
version = "0.5.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.7"
|
||||
@@ -1947,7 +1907,6 @@ checksum = "86886cf6dbf4e614b19c9a1eec9775f021869d7eadde0fc73921a81b90c9b4c9"
|
||||
dependencies = [
|
||||
"memo-map",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2032,13 +1991,11 @@ dependencies = [
|
||||
"aes-gcm 0.11.1",
|
||||
"anyhow",
|
||||
"axum",
|
||||
"axum-extra",
|
||||
"base64 0.23.1",
|
||||
"base64ct",
|
||||
"chrono",
|
||||
"chrono-tz",
|
||||
"futures",
|
||||
"futures-util",
|
||||
"hex",
|
||||
"html-escape",
|
||||
"image",
|
||||
@@ -2131,12 +2088,6 @@ dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-conv"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.47"
|
||||
@@ -2377,12 +2328,6 @@ dependencies = [
|
||||
"zerovec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "powerfmt"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958"
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.21"
|
||||
@@ -2649,7 +2594,6 @@ dependencies = [
|
||||
"base64 0.23.1",
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"http",
|
||||
"http-body",
|
||||
"http-body-util",
|
||||
@@ -2664,19 +2608,15 @@ dependencies = [
|
||||
"rustls",
|
||||
"rustls-pki-types",
|
||||
"rustls-platform-verifier",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tokio-util",
|
||||
"tower",
|
||||
"tower-http 0.6.11",
|
||||
"tower-service",
|
||||
"url",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"wasm-streams",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
@@ -3542,36 +3482,6 @@ dependencies = [
|
||||
"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]]
|
||||
name = "tinystr"
|
||||
version = "0.8.5"
|
||||
@@ -4053,19 +3963,6 @@ dependencies = [
|
||||
"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]]
|
||||
name = "web-push-native"
|
||||
version = "0.5.0"
|
||||
|
||||
@@ -7,30 +7,28 @@ edition = "2024"
|
||||
aes-gcm = "0.11.1"
|
||||
anyhow = "1.0.104"
|
||||
axum = { version = "0.8", features = ["multipart", "ws"] }
|
||||
axum-extra = { version = "0.12.6", features = ["cookie"] }
|
||||
base64 = "0.23.1"
|
||||
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"
|
||||
futures = "0.3.34"
|
||||
futures-util = "0.3.34"
|
||||
hex = "0.4.3"
|
||||
html-escape = "0.3.0"
|
||||
image = { version = "0.25.10", default-features = false, features = ["png", "jpeg", "webp", "gif"] }
|
||||
indexmap = "2.14.2"
|
||||
minidom = "0.19"
|
||||
minijinja = { version = "2", features = ["loader", "json"] }
|
||||
minijinja = { version = "2", features = ["loader"] }
|
||||
percent-encoding = "2.3.2"
|
||||
unicode-normalization = "0.1.26"
|
||||
rand = "0.9"
|
||||
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"
|
||||
serde = { version = "1.0.229", features = ["derive"] }
|
||||
serde_json = { version = "1.0.154", features = ["preserve_order"] }
|
||||
sha1 = "0.11.0"
|
||||
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-xmpp = { version = "6", features = ["insecure-tcp"] }
|
||||
tower-http = { version = "0.7", features = ["fs"] }
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
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
|
||||
templates were replaced by a single Rust server (tokio, axum, tokio-xmpp, sqlx/SQLite,
|
||||
minijinja). Scope: a Conversations-like chat client.
|
||||
templates were replaced by a single Rust server (tokio, axum, tokio-xmpp, sqlx with SQLite
|
||||
or PostgreSQL, minijinja). Scope: a Conversations-like chat client.
|
||||
|
||||
## Features
|
||||
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`,
|
||||
`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
|
||||
`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
|
||||
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
|
||||
promise queue (a content-add could arrive before the remote description was
|
||||
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
|
||||
Movim social features (blogs, communities, stories), SFU conference calls
|
||||
|
||||
@@ -53,3 +53,48 @@ files_recordings = Recordings
|
||||
files_files = Files
|
||||
files_message = Show the message
|
||||
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
|
||||
|
||||
@@ -6,6 +6,9 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
# --- extra.ini
|
||||
msgid "Contact requests"
|
||||
msgstr "Lời mời kết nối"
|
||||
|
||||
msgid "Kick from the room"
|
||||
msgstr "Đuổi khỏi phòng"
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 129 KiB |
|
Before Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
@@ -1,3 +0,0 @@
|
||||
author = Movim Team
|
||||
license = "No License"
|
||||
url = https://movim.eu/
|
||||
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 59 KiB |
@@ -1,3 +0,0 @@
|
||||
author = Hey-Xander
|
||||
license = CreativeCommon BY SA
|
||||
url = http://hey-xander.deviantart.com/
|
||||
|
Before Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 7.7 KiB |