Skip to content

Commit 7664ae6

Browse files
committed
Surface the user guest flag in the admin API
1 parent 4a476fc commit 7664ae6

10 files changed

+79
-17
lines changed

crates/data-model/src/users.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ pub struct User {
2121
pub locked_at: Option<DateTime<Utc>>,
2222
pub deactivated_at: Option<DateTime<Utc>>,
2323
pub can_request_admin: bool,
24+
pub is_guest: bool,
2425
}
2526

2627
impl User {
@@ -43,6 +44,7 @@ impl User {
4344
locked_at: None,
4445
deactivated_at: None,
4546
can_request_admin: false,
47+
is_guest: false,
4648
}]
4749
}
4850
}

crates/handlers/src/admin/model.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ pub struct User {
5252

5353
/// Whether the user can request admin privileges.
5454
admin: bool,
55+
56+
/// Whether the user was a guest before migrating to MAS,
57+
legacy_guest: bool,
5558
}
5659

5760
impl User {
@@ -65,6 +68,7 @@ impl User {
6568
locked_at: None,
6669
deactivated_at: None,
6770
admin: false,
71+
legacy_guest: false,
6872
},
6973
Self {
7074
id: Ulid::from_bytes([0x02; 16]),
@@ -73,6 +77,7 @@ impl User {
7377
locked_at: None,
7478
deactivated_at: None,
7579
admin: true,
80+
legacy_guest: false,
7681
},
7782
Self {
7883
id: Ulid::from_bytes([0x03; 16]),
@@ -81,6 +86,7 @@ impl User {
8186
locked_at: Some(DateTime::default()),
8287
deactivated_at: None,
8388
admin: false,
89+
legacy_guest: true,
8490
},
8591
]
8692
}
@@ -95,6 +101,7 @@ impl From<mas_data_model::User> for User {
95101
locked_at: user.locked_at,
96102
deactivated_at: user.deactivated_at,
97103
admin: user.can_request_admin,
104+
legacy_guest: user.is_guest,
98105
}
99106
}
100107
}

crates/handlers/src/rate_limit.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ mod tests {
328328
locked_at: None,
329329
deactivated_at: None,
330330
can_request_admin: false,
331+
is_guest: true,
331332
};
332333

333334
let bob = User {
@@ -338,6 +339,7 @@ mod tests {
338339
locked_at: None,
339340
deactivated_at: None,
340341
can_request_admin: false,
342+
is_guest: true,
341343
};
342344

343345
// Three times the same IP address should be allowed
Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/storage-pg/src/iden.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ pub enum Users {
3939
LockedAt,
4040
DeactivatedAt,
4141
CanRequestAdmin,
42+
IsGuest,
4243
}
4344

4445
#[derive(sea_query::Iden)]

crates/storage-pg/src/user/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ mod priv_ {
7373
pub(super) locked_at: Option<DateTime<Utc>>,
7474
pub(super) deactivated_at: Option<DateTime<Utc>>,
7575
pub(super) can_request_admin: bool,
76+
pub(super) is_guest: bool,
7677
}
7778
}
7879

@@ -89,6 +90,7 @@ impl From<UserLookup> for User {
8990
locked_at: value.locked_at,
9091
deactivated_at: value.deactivated_at,
9192
can_request_admin: value.can_request_admin,
93+
is_guest: value.is_guest,
9294
}
9395
}
9496
}
@@ -140,6 +142,7 @@ impl UserRepository for PgUserRepository<'_> {
140142
, locked_at
141143
, deactivated_at
142144
, can_request_admin
145+
, is_guest
143146
FROM users
144147
WHERE user_id = $1
145148
"#,
@@ -176,6 +179,7 @@ impl UserRepository for PgUserRepository<'_> {
176179
, locked_at
177180
, deactivated_at
178181
, can_request_admin
182+
, is_guest
179183
FROM users
180184
WHERE LOWER(username) = LOWER($1)
181185
"#,
@@ -249,6 +253,7 @@ impl UserRepository for PgUserRepository<'_> {
249253
locked_at: None,
250254
deactivated_at: None,
251255
can_request_admin: false,
256+
is_guest: false,
252257
})
253258
}
254259

@@ -487,6 +492,10 @@ impl UserRepository for PgUserRepository<'_> {
487492
Expr::col((Users::Table, Users::CanRequestAdmin)),
488493
UserLookupIden::CanRequestAdmin,
489494
)
495+
.expr_as(
496+
Expr::col((Users::Table, Users::IsGuest)),
497+
UserLookupIden::IsGuest,
498+
)
490499
.from(Users::Table)
491500
.apply_filter(filter)
492501
.generate_pagination((Users::Table, Users::UserId), pagination)

crates/storage-pg/src/user/session.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ struct SessionLookup {
6161
user_locked_at: Option<DateTime<Utc>>,
6262
user_deactivated_at: Option<DateTime<Utc>>,
6363
user_can_request_admin: bool,
64+
user_is_guest: bool,
6465
}
6566

6667
impl TryFrom<SessionLookup> for BrowserSession {
@@ -76,6 +77,7 @@ impl TryFrom<SessionLookup> for BrowserSession {
7677
locked_at: value.user_locked_at,
7778
deactivated_at: value.user_deactivated_at,
7879
can_request_admin: value.user_can_request_admin,
80+
is_guest: value.user_is_guest,
7981
};
8082

8183
Ok(BrowserSession {
@@ -201,6 +203,7 @@ impl BrowserSessionRepository for PgBrowserSessionRepository<'_> {
201203
, u.locked_at AS "user_locked_at"
202204
, u.deactivated_at AS "user_deactivated_at"
203205
, u.can_request_admin AS "user_can_request_admin"
206+
, u.is_guest AS "user_is_guest"
204207
FROM user_sessions s
205208
INNER JOIN users u
206209
USING (user_id)
@@ -391,6 +394,10 @@ impl BrowserSessionRepository for PgBrowserSessionRepository<'_> {
391394
Expr::col((Users::Table, Users::CanRequestAdmin)),
392395
SessionLookupIden::UserCanRequestAdmin,
393396
)
397+
.expr_as(
398+
Expr::col((Users::Table, Users::IsGuest)),
399+
SessionLookupIden::UserIsGuest,
400+
)
394401
.from(UserSessions::Table)
395402
.inner_join(
396403
Users::Table,

docs/api/spec.json

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -903,7 +903,8 @@
903903
"created_at": "1970-01-01T00:00:00Z",
904904
"locked_at": null,
905905
"deactivated_at": null,
906-
"admin": false
906+
"admin": false,
907+
"legacy_guest": false
907908
},
908909
"links": {
909910
"self": "/api/admin/v1/users/01040G2081040G2081040G2081"
@@ -917,7 +918,8 @@
917918
"created_at": "1970-01-01T00:00:00Z",
918919
"locked_at": null,
919920
"deactivated_at": null,
920-
"admin": true
921+
"admin": true,
922+
"legacy_guest": false
921923
},
922924
"links": {
923925
"self": "/api/admin/v1/users/02081040G2081040G2081040G2"
@@ -931,7 +933,8 @@
931933
"created_at": "1970-01-01T00:00:00Z",
932934
"locked_at": "1970-01-01T00:00:00Z",
933935
"deactivated_at": null,
934-
"admin": false
936+
"admin": false,
937+
"legacy_guest": true
935938
},
936939
"links": {
937940
"self": "/api/admin/v1/users/030C1G60R30C1G60R30C1G60R3"
@@ -983,7 +986,8 @@
983986
"created_at": "1970-01-01T00:00:00Z",
984987
"locked_at": null,
985988
"deactivated_at": null,
986-
"admin": false
989+
"admin": false,
990+
"legacy_guest": false
987991
},
988992
"links": {
989993
"self": "/api/admin/v1/users/01040G2081040G2081040G2081"
@@ -1069,7 +1073,8 @@
10691073
"created_at": "1970-01-01T00:00:00Z",
10701074
"locked_at": null,
10711075
"deactivated_at": null,
1072-
"admin": false
1076+
"admin": false,
1077+
"legacy_guest": false
10731078
},
10741079
"links": {
10751080
"self": "/api/admin/v1/users/01040G2081040G2081040G2081"
@@ -1226,7 +1231,8 @@
12261231
"created_at": "1970-01-01T00:00:00Z",
12271232
"locked_at": null,
12281233
"deactivated_at": null,
1229-
"admin": false
1234+
"admin": false,
1235+
"legacy_guest": false
12301236
},
12311237
"links": {
12321238
"self": "/api/admin/v1/users/01040G2081040G2081040G2081"
@@ -1306,7 +1312,8 @@
13061312
"created_at": "1970-01-01T00:00:00Z",
13071313
"locked_at": null,
13081314
"deactivated_at": null,
1309-
"admin": true
1315+
"admin": true,
1316+
"legacy_guest": false
13101317
},
13111318
"links": {
13121319
"self": "/api/admin/v1/users/02081040G2081040G2081040G2"
@@ -1385,7 +1392,8 @@
13851392
"created_at": "1970-01-01T00:00:00Z",
13861393
"locked_at": "1970-01-01T00:00:00Z",
13871394
"deactivated_at": null,
1388-
"admin": false
1395+
"admin": false,
1396+
"legacy_guest": true
13891397
},
13901398
"links": {
13911399
"self": "/api/admin/v1/users/030C1G60R30C1G60R30C1G60R3"
@@ -1455,7 +1463,8 @@
14551463
"created_at": "1970-01-01T00:00:00Z",
14561464
"locked_at": null,
14571465
"deactivated_at": null,
1458-
"admin": false
1466+
"admin": false,
1467+
"legacy_guest": false
14591468
},
14601469
"links": {
14611470
"self": "/api/admin/v1/users/01040G2081040G2081040G2081"
@@ -1525,7 +1534,8 @@
15251534
"created_at": "1970-01-01T00:00:00Z",
15261535
"locked_at": "1970-01-01T00:00:00Z",
15271536
"deactivated_at": null,
1528-
"admin": false
1537+
"admin": false,
1538+
"legacy_guest": true
15291539
},
15301540
"links": {
15311541
"self": "/api/admin/v1/users/030C1G60R30C1G60R30C1G60R3"
@@ -1595,7 +1605,8 @@
15951605
"created_at": "1970-01-01T00:00:00Z",
15961606
"locked_at": null,
15971607
"deactivated_at": null,
1598-
"admin": false
1608+
"admin": false,
1609+
"legacy_guest": false
15991610
},
16001611
"links": {
16011612
"self": "/api/admin/v1/users/01040G2081040G2081040G2081"
@@ -3842,6 +3853,7 @@
38423853
"required": [
38433854
"admin",
38443855
"created_at",
3856+
"legacy_guest",
38453857
"username"
38463858
],
38473859
"properties": {
@@ -3869,6 +3881,10 @@
38693881
"admin": {
38703882
"description": "Whether the user can request admin privileges.",
38713883
"type": "boolean"
3884+
},
3885+
"legacy_guest": {
3886+
"description": "Whether the user was a guest before migrating to MAS,",
3887+
"type": "boolean"
38723888
}
38733889
}
38743890
},

0 commit comments

Comments
 (0)