Compare commits

..
18 changed files with 212 additions and 137 deletions
+1 -1
View File
@@ -57,7 +57,7 @@ jobs:
env: env:
TEST_DB: REFERENCE TEST_DB: REFERENCE
run: | run: |
cargo run --bin revolt-delta & cargo build --bin revolt-delta && (cargo run --bin revolt-delta &)
- name: Wait for API to go up - name: Wait for API to go up
if: github.event_name != 'pull_request' && github.ref_name == 'master' if: github.event_name != 'pull_request' && github.ref_name == 'master'
Generated
+9 -9
View File
@@ -3580,7 +3580,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-bonfire" name = "revolt-bonfire"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-std", "async-std",
"async-tungstenite", "async-tungstenite",
@@ -3600,7 +3600,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-config" name = "revolt-config"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-std", "async-std",
"cached", "cached",
@@ -3612,7 +3612,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-database" name = "revolt-database"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-lock", "async-lock",
"async-recursion", "async-recursion",
@@ -3657,7 +3657,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-delta" name = "revolt-delta"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-channel", "async-channel",
"async-std", "async-std",
@@ -3703,7 +3703,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-models" name = "revolt-models"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"iso8601-timestamp 0.2.11", "iso8601-timestamp 0.2.11",
@@ -3719,7 +3719,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-permissions" name = "revolt-permissions"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-std", "async-std",
"async-trait", "async-trait",
@@ -3734,7 +3734,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-presence" name = "revolt-presence"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-std", "async-std",
"log", "log",
@@ -3745,7 +3745,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-quark" name = "revolt-quark"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"async-lock", "async-lock",
"async-recursion", "async-recursion",
@@ -3798,7 +3798,7 @@ dependencies = [
[[package]] [[package]]
name = "revolt-result" name = "revolt-result"
version = "0.6.12" version = "0.6.13"
dependencies = [ dependencies = [
"revolt_okapi", "revolt_okapi",
"revolt_rocket_okapi", "revolt_rocket_okapi",
+2 -2
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-bonfire" name = "revolt-bonfire"
version = "0.6.12" version = "0.6.13"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
edition = "2021" edition = "2021"
@@ -37,4 +37,4 @@ revolt-presence = { path = "../core/presence", features = ["redis-is-patched"] }
sentry = "0.31.5" sentry = "0.31.5"
# redis # redis
fred = { version = "8.0.1", features = ["subscriber-client"] } fred = { version = "8.0.1", features = ["subscriber-client"] }
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-config" name = "revolt-config"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <me@insrt.uk>"] authors = ["Paul Makles <me@insrt.uk>"]
+6 -6
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-database" name = "revolt-database"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <me@insrt.uk>"] authors = ["Paul Makles <me@insrt.uk>"]
@@ -23,11 +23,11 @@ default = ["mongodb", "async-std-runtime", "tasks"]
[dependencies] [dependencies]
# Core # Core
revolt-config = { version = "0.6.12", path = "../config" } revolt-config = { version = "0.6.13", path = "../config" }
revolt-result = { version = "0.6.12", path = "../result" } revolt-result = { version = "0.6.13", path = "../result" }
revolt-models = { version = "0.6.12", path = "../models" } revolt-models = { version = "0.6.13", path = "../models" }
revolt-presence = { version = "0.6.12", path = "../presence" } revolt-presence = { version = "0.6.13", path = "../presence" }
revolt-permissions = { version = "0.6.12", path = "../permissions", features = [ revolt-permissions = { version = "0.6.13", path = "../permissions", features = [
"serde", "serde",
"bson", "bson",
] } ] }
@@ -0,0 +1,28 @@
[
{
"_object_type": "User",
"_id": "__ID:0__",
"username": "Owner",
"discriminator": "0001"
},
{
"_object_type": "User",
"_id": "__ID:1__",
"username": "Member",
"discriminator": "0001"
},
{
"_object_type": "User",
"_id": "__ID:2__",
"username": "Member",
"discriminator": "0002"
},
{
"_object_type": "Channel",
"_id": "__ID:3__",
"channel_type": "Group",
"name": "My Group",
"owner": "__ID:0__",
"recipients": ["__ID:0__", "__ID:1__"]
}
]
@@ -695,6 +695,32 @@ mod tests {
use crate::{fixture, util::permissions::DatabasePermissionQuery}; use crate::{fixture, util::permissions::DatabasePermissionQuery};
#[async_std::test]
async fn permissions_group_channel() {
database_test!(|db| async move {
fixture!(db, "group_with_members",
owner user 0
member1 user 1
member2 user 2
channel channel 3);
let mut query = DatabasePermissionQuery::new(&db, &owner).channel(&channel);
assert!(calculate_channel_permissions(&mut query)
.await
.has_channel_permission(ChannelPermission::SendMessage));
let mut query = DatabasePermissionQuery::new(&db, &member1).channel(&channel);
assert!(calculate_channel_permissions(&mut query)
.await
.has_channel_permission(ChannelPermission::SendMessage));
let mut query = DatabasePermissionQuery::new(&db, &member2).channel(&channel);
assert!(!calculate_channel_permissions(&mut query)
.await
.has_channel_permission(ChannelPermission::SendMessage));
});
}
#[async_std::test] #[async_std::test]
async fn permissions_text_channel() { async fn permissions_text_channel() {
database_test!(|db| async move { database_test!(|db| async move {
+2 -2
View File
@@ -2,7 +2,7 @@ use std::borrow::Cow;
use revolt_permissions::{ use revolt_permissions::{
calculate_user_permissions, ChannelType, Override, PermissionQuery, PermissionValue, calculate_user_permissions, ChannelType, Override, PermissionQuery, PermissionValue,
RelationshipStatus, RelationshipStatus, DEFAULT_PERMISSION_DIRECT_MESSAGE,
}; };
use crate::{Channel, Database, Member, Server, User}; use crate::{Channel, Database, Member, Server, User};
@@ -209,7 +209,7 @@ impl PermissionQuery for DatabasePermissionQuery<'_> {
match channel { match channel {
Cow::Borrowed(Channel::Group { permissions, .. }) Cow::Borrowed(Channel::Group { permissions, .. })
| Cow::Owned(Channel::Group { permissions, .. }) => Override { | Cow::Owned(Channel::Group { permissions, .. }) => Override {
allow: permissions.unwrap_or_default() as u64, allow: permissions.unwrap_or(*DEFAULT_PERMISSION_DIRECT_MESSAGE as i64) as u64,
deny: 0, deny: 0,
}, },
Cow::Borrowed(Channel::TextChannel { Cow::Borrowed(Channel::TextChannel {
+3 -3
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-models" name = "revolt-models"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <me@insrt.uk>"] authors = ["Paul Makles <me@insrt.uk>"]
@@ -18,8 +18,8 @@ default = ["serde", "partials"]
[dependencies] [dependencies]
# Core # Core
revolt-config = { version = "0.6.12", path = "../config" } revolt-config = { version = "0.6.13", path = "../config" }
revolt-permissions = { version = "0.6.12", path = "../permissions" } revolt-permissions = { version = "0.6.13", path = "../permissions" }
# Utility # Utility
regex = "1" regex = "1"
+2 -2
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-permissions" name = "revolt-permissions"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <me@insrt.uk>"] authors = ["Paul Makles <me@insrt.uk>"]
@@ -21,7 +21,7 @@ async-std = { version = "1.8.0", features = ["attributes"] }
[dependencies] [dependencies]
# Core # Core
revolt-result = { version = "0.6.5", path = "../result" } revolt-result = { version = "0.6.13", path = "../result" }
# Utility # Utility
auto_ops = "0.3.0" auto_ops = "0.3.0"
+1 -1
View File
@@ -111,7 +111,7 @@ pub async fn calculate_channel_permissions<P: PermissionQuery>(query: &mut P) ->
query.set_server_from_channel().await; query.set_server_from_channel().await;
if query.are_we_server_owner().await { if query.are_we_server_owner().await {
return ChannelPermission::GrantAllSafe.into(); ChannelPermission::GrantAllSafe.into()
} else if query.are_we_a_member().await { } else if query.are_we_a_member().await {
let mut permissions = calculate_server_permissions(query).await; let mut permissions = calculate_server_permissions(query).await;
permissions.apply(query.get_default_channel_permissions().await); permissions.apply(query.get_default_channel_permissions().await);
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-presence" name = "revolt-presence"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <me@insrt.uk>"] authors = ["Paul Makles <me@insrt.uk>"]
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-result" name = "revolt-result"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <me@insrt.uk>"] authors = ["Paul Makles <me@insrt.uk>"]
+1 -1
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "revolt-delta" name = "revolt-delta"
version = "0.6.12" version = "0.6.13"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
authors = ["Paul Makles <paulmakles@gmail.com>"] authors = ["Paul Makles <paulmakles@gmail.com>"]
edition = "2018" edition = "2018"
@@ -65,13 +65,8 @@ pub async fn message_send(
// Disallow mentions for new users (TRUST-0: <12 hours age) in public servers // Disallow mentions for new users (TRUST-0: <12 hours age) in public servers
let allow_mentions = if let Some(server) = query.server_ref() { let allow_mentions = if let Some(server) = query.server_ref() {
if server.discoverable { if server.discoverable {
if (Utc::now() - ulid::Ulid::from_string(&user.id).unwrap().datetime()) (Utc::now() - ulid::Ulid::from_string(&user.id).unwrap().datetime())
< Duration::hours(12) >= Duration::hours(12)
{
false
} else {
true
}
} else { } else {
true true
} }
+100 -100
View File
@@ -1,100 +1,100 @@
[package] [package]
name = "revolt-quark" name = "revolt-quark"
version = "0.6.12" version = "0.6.13"
edition = "2021" edition = "2021"
license = "AGPL-3.0-or-later" license = "AGPL-3.0-or-later"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features] [features]
mongo = ["mongodb"] mongo = ["mongodb"]
rocket_impl = [ rocket_impl = [
"rocket", "rocket",
"rocket_empty", "rocket_empty",
"rocket_cors", "rocket_cors",
"lru", "lru",
"dashmap", "dashmap",
"authifier/database-mongodb", "authifier/database-mongodb",
"authifier/rocket_impl", "authifier/rocket_impl",
"authifier/okapi_impl", "authifier/okapi_impl",
] ]
test = ["async-std", "mongo", "mongodb/async-std-runtime", "rocket_impl"] test = ["async-std", "mongo", "mongodb/async-std-runtime", "rocket_impl"]
default = ["test"] default = ["test"]
[dependencies] [dependencies]
# Serialisation # Serialisation
revolt_optional_struct = "0.2.0" revolt_optional_struct = "0.2.0"
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
validator = { version = "0.16", features = ["derive"] } validator = { version = "0.16", features = ["derive"] }
iso8601-timestamp = { version = "0.1.8", features = ["schema", "bson"] } iso8601-timestamp = { version = "0.1.8", features = ["schema", "bson"] }
# Formats # Formats
bincode = "1.3.3" bincode = "1.3.3"
serde_json = "1.0.78" serde_json = "1.0.78"
bson = { version = "2.1.0", features = ["chrono-0_4"] } bson = { version = "2.1.0", features = ["chrono-0_4"] }
# Spec Generation # Spec Generation
schemars = "0.8.8" schemars = "0.8.8"
revolt_okapi = "0.9.1" revolt_okapi = "0.9.1"
revolt_rocket_okapi = { version = "0.9.1", features = ["swagger"] } revolt_rocket_okapi = { version = "0.9.1", features = ["swagger"] }
# Databases # Databases
redis-kiss = { version = "0.1.4" } redis-kiss = { version = "0.1.4" }
mongodb = { optional = true, version = "2.1.0", default-features = false } mongodb = { optional = true, version = "2.1.0", default-features = false }
# Async # Async
futures = "0.3.19" futures = "0.3.19"
deadqueue = "0.2.1" deadqueue = "0.2.1"
async-trait = "0.1.51" async-trait = "0.1.51"
async-recursion = "1.0.0" async-recursion = "1.0.0"
async-std = { version = "1.8.0", features = ["attributes"], optional = true } async-std = { version = "1.8.0", features = ["attributes"], optional = true }
# Logging # Logging
log = "0.4.14" log = "0.4.14"
pretty_env_logger = "0.4.0" pretty_env_logger = "0.4.0"
# Util # Util
rand = "0.8.5" rand = "0.8.5"
ulid = "0.5.0" ulid = "0.5.0"
regex = "1.5.5" regex = "1.5.5"
nanoid = "0.4.0" nanoid = "0.4.0"
linkify = "0.8.1" linkify = "0.8.1"
dotenv = "0.15.0" dotenv = "0.15.0"
indexmap = "1.9.1" indexmap = "1.9.1"
decancer = "1.6.2" decancer = "1.6.2"
impl_ops = "0.1.1" impl_ops = "0.1.1"
num_enum = "0.5.6" num_enum = "0.5.6"
reqwest = "0.11.10" reqwest = "0.11.10"
bitfield = "0.13.2" bitfield = "0.13.2"
once_cell = "1.17.1" once_cell = "1.17.1"
async-lock = "2.6.0" async-lock = "2.6.0"
lru = { version = "0.7.6", optional = true } lru = { version = "0.7.6", optional = true }
dashmap = { version = "5.2.0", optional = true } dashmap = { version = "5.2.0", optional = true }
# Web Push # Web Push
base64 = "0.13.0" base64 = "0.13.0"
web-push = "0.7.2" web-push = "0.7.2"
# Implementations # Implementations
rocket_http = { optional = true, version = "0.5.0-rc.2" } rocket_http = { optional = true, version = "0.5.0-rc.2" }
rocket = { optional = true, version = "0.5.0-rc.2", default-features = false, features = [ rocket = { optional = true, version = "0.5.0-rc.2", default-features = false, features = [
"json", "json",
] } ] }
rocket_empty = { version = "0.1.1", optional = true, features = ["schema"] } rocket_empty = { version = "0.1.1", optional = true, features = ["schema"] }
rocket_cors = { optional = true, git = "https://github.com/lawliet89/rocket_cors", rev = "c17e8145baa4790319fdb6a473e465b960f55e7c" } rocket_cors = { optional = true, git = "https://github.com/lawliet89/rocket_cors", rev = "c17e8145baa4790319fdb6a473e465b960f55e7c" }
# Authifier # Authifier
authifier = { version = "1.0.8", features = ["async-std-runtime"] } authifier = { version = "1.0.8", features = ["async-std-runtime"] }
# Sentry # Sentry
sentry = "0.31.5" sentry = "0.31.5"
# Core # Core
revolt-result = { path = "../core/result", features = ["serde", "schemas"] } revolt-result = { path = "../core/result", features = ["serde", "schemas"] }
revolt-presence = { path = "../core/presence", features = ["redis-is-patched"] } revolt-presence = { path = "../core/presence", features = ["redis-is-patched"] }
revolt-database = { path = "../core/database" } revolt-database = { path = "../core/database" }
revolt-models = { path = "../core/models" } revolt-models = { path = "../core/models" }
+12
View File
@@ -5,3 +5,15 @@ publish:
cargo publish --package revolt-models cargo publish --package revolt-models
cargo publish --package revolt-presence cargo publish --package revolt-presence
cargo publish --package revolt-database cargo publish --package revolt-database
patch:
cargo release version patch --execute
minor:
cargo release version minor --execute
major:
cargo release version major --execute
release:
scripts/try-tag-and-release.sh
+14
View File
@@ -0,0 +1,14 @@
#!/bin/bash
date=$(date +'%Y%m%d')
incr=1
while [ $(git tag -l "$date-$incr") ]; do
incr=$((incr+1))
done
tag=$date-$incr
echo About to tag and push $tag in 3 seconds...
sleep 3s
git tag $tag
git push --atomic origin $(git rev-parse --abbrev-ref HEAD) $tag