1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#[macro_export]
macro_rules! get_user_from_token {
($jar:ident, $db:expr) => {{
if let Some(token) = $jar.get("__Secure-shrimpcamp-token") {
match $db
.get_user_by_token(&tritools::encoding::hash(
token.to_string().replace("__Secure-shrimpcamp-token=", ""),
))
.await
{
Ok(mut ua) => {
if ua
.permissions
.contains(&autter_core::model::UserPermission::Banned)
{
// check expiration
let now = tritools::time::unix_epoch_timestamp() as usize;
let expired = ua.ban_expire <= now;
if expired && ua.ban_expire != 0 {
ua.permissions.remove(
ua.permissions
.iter()
.position(|x| *x == autter_core::model::UserPermission::Banned)
.unwrap(),
);
$db.update_user_permissions(&ua.id, ua.permissions.clone())
.await
.expect("failed to auto unban user");
Some(ua)
} else {
// banned
let mut banned_user = autter_core::model::User::banned();
banned_user.ban_reason = ua.ban_reason;
banned_user.ban_expire = ua.ban_expire;
Some(banned_user)
}
} else {
Some(ua)
}
}
Err(_) => None,
}
} else {
None
}
}};
}
#[macro_export]
macro_rules! permissions_list {
($data:expr, $membership:ident, $lid:expr) => {{
let role_id = if let OrganizationRole::Custom(rid) = $membership.role {
rid
} else {
0
};
match $data.get_permissions_list_by_id(&$lid).await {
Ok(permissions_list) => {
if !permissions_list.roles.contains(&role_id)
&& $membership.role != OrganizationRole::Owner
{
false
} else {
true
}
}
Err(_) => $membership.role == OrganizationRole::Owner,
}
}};
}