Skip to content

Commit c722006

Browse files
authored
Fix Login with device (dani-garcia#4878)
Fixed an issue with login with device for the new Bitwrden Beta clients. They seem to not support ISO8601 milli date/time, only micro. Also updated the device display names to match Upstream and added the CLI devices which were missing. Signed-off-by: BlackDex <[email protected]>
1 parent aaab7f9 commit c722006

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

src/api/core/accounts.rs

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::db::DbPool;
2-
use chrono::Utc;
2+
use chrono::{SecondsFormat, Utc};
33
use rocket::serde::json::Json;
44
use serde_json::Value;
55

@@ -1123,7 +1123,7 @@ async fn post_auth_request(
11231123
"requestIpAddress": auth_request.request_ip,
11241124
"key": null,
11251125
"masterPasswordHash": null,
1126-
"creationDate": auth_request.creation_date.and_utc(),
1126+
"creationDate": auth_request.creation_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true),
11271127
"responseDate": null,
11281128
"requestApproved": false,
11291129
"origin": CONFIG.domain_origin(),
@@ -1140,7 +1140,9 @@ async fn get_auth_request(uuid: &str, mut conn: DbConn) -> JsonResult {
11401140
}
11411141
};
11421142

1143-
let response_date_utc = auth_request.response_date.map(|response_date| response_date.and_utc());
1143+
let response_date_utc = auth_request
1144+
.response_date
1145+
.map(|response_date| response_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true));
11441146

11451147
Ok(Json(json!(
11461148
{
@@ -1150,7 +1152,7 @@ async fn get_auth_request(uuid: &str, mut conn: DbConn) -> JsonResult {
11501152
"requestIpAddress": auth_request.request_ip,
11511153
"key": auth_request.enc_key,
11521154
"masterPasswordHash": auth_request.master_password_hash,
1153-
"creationDate": auth_request.creation_date.and_utc(),
1155+
"creationDate": auth_request.creation_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true),
11541156
"responseDate": response_date_utc,
11551157
"requestApproved": auth_request.approved,
11561158
"origin": CONFIG.domain_origin(),
@@ -1195,7 +1197,9 @@ async fn put_auth_request(
11951197
nt.send_auth_response(&auth_request.user_uuid, &auth_request.uuid, data.device_identifier, &mut conn).await;
11961198
}
11971199

1198-
let response_date_utc = auth_request.response_date.map(|response_date| response_date.and_utc());
1200+
let response_date_utc = auth_request
1201+
.response_date
1202+
.map(|response_date| response_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true));
11991203

12001204
Ok(Json(json!(
12011205
{
@@ -1205,7 +1209,7 @@ async fn put_auth_request(
12051209
"requestIpAddress": auth_request.request_ip,
12061210
"key": auth_request.enc_key,
12071211
"masterPasswordHash": auth_request.master_password_hash,
1208-
"creationDate": auth_request.creation_date.and_utc(),
1212+
"creationDate": auth_request.creation_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true),
12091213
"responseDate": response_date_utc,
12101214
"requestApproved": auth_request.approved,
12111215
"origin": CONFIG.domain_origin(),
@@ -1227,7 +1231,9 @@ async fn get_auth_request_response(uuid: &str, code: &str, mut conn: DbConn) ->
12271231
err!("Access code invalid doesn't exist")
12281232
}
12291233

1230-
let response_date_utc = auth_request.response_date.map(|response_date| response_date.and_utc());
1234+
let response_date_utc = auth_request
1235+
.response_date
1236+
.map(|response_date| response_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true));
12311237

12321238
Ok(Json(json!(
12331239
{
@@ -1237,7 +1243,7 @@ async fn get_auth_request_response(uuid: &str, code: &str, mut conn: DbConn) ->
12371243
"requestIpAddress": auth_request.request_ip,
12381244
"key": auth_request.enc_key,
12391245
"masterPasswordHash": auth_request.master_password_hash,
1240-
"creationDate": auth_request.creation_date.and_utc(),
1246+
"creationDate": auth_request.creation_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true),
12411247
"responseDate": response_date_utc,
12421248
"requestApproved": auth_request.approved,
12431249
"origin": CONFIG.domain_origin(),
@@ -1255,7 +1261,7 @@ async fn get_auth_requests(headers: Headers, mut conn: DbConn) -> JsonResult {
12551261
.iter()
12561262
.filter(|request| request.approved.is_none())
12571263
.map(|request| {
1258-
let response_date_utc = request.response_date.map(|response_date| response_date.and_utc());
1264+
let response_date_utc = request.response_date.map(|response_date| response_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true));
12591265

12601266
json!({
12611267
"id": request.uuid,
@@ -1264,7 +1270,7 @@ async fn get_auth_requests(headers: Headers, mut conn: DbConn) -> JsonResult {
12641270
"requestIpAddress": request.request_ip,
12651271
"key": request.enc_key,
12661272
"masterPasswordHash": request.master_password_hash,
1267-
"creationDate": request.creation_date.and_utc(),
1273+
"creationDate": request.creation_date.and_utc().to_rfc3339_opts(SecondsFormat::Micros, true),
12681274
"responseDate": response_date_utc,
12691275
"requestApproved": request.approved,
12701276
"origin": CONFIG.domain_origin(),

src/db/models/device.rs

+20-11
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ db_object! {
1616
pub user_uuid: String,
1717

1818
pub name: String,
19-
pub atype: i32, // https://github.com/bitwarden/server/blob/master/src/Core/Enums/DeviceType.cs
19+
pub atype: i32, // https://github.com/bitwarden/server/blob/dcc199bcce4aa2d5621f6fab80f1b49d8b143418/src/Core/Enums/DeviceType.cs
2020
pub push_uuid: Option<String>,
2121
pub push_token: Option<String>,
2222

@@ -267,6 +267,9 @@ pub enum DeviceType {
267267
SafariExtension = 20,
268268
Sdk = 21,
269269
Server = 22,
270+
WindowsCLI = 23,
271+
MacOsCLI = 24,
272+
LinuxCLI = 25,
270273
}
271274

272275
impl fmt::Display for DeviceType {
@@ -278,23 +281,26 @@ impl fmt::Display for DeviceType {
278281
DeviceType::FirefoxExtension => write!(f, "Firefox Extension"),
279282
DeviceType::OperaExtension => write!(f, "Opera Extension"),
280283
DeviceType::EdgeExtension => write!(f, "Edge Extension"),
281-
DeviceType::WindowsDesktop => write!(f, "Windows Desktop"),
282-
DeviceType::MacOsDesktop => write!(f, "MacOS Desktop"),
283-
DeviceType::LinuxDesktop => write!(f, "Linux Desktop"),
284-
DeviceType::ChromeBrowser => write!(f, "Chrome Browser"),
285-
DeviceType::FirefoxBrowser => write!(f, "Firefox Browser"),
286-
DeviceType::OperaBrowser => write!(f, "Opera Browser"),
287-
DeviceType::EdgeBrowser => write!(f, "Edge Browser"),
284+
DeviceType::WindowsDesktop => write!(f, "Windows"),
285+
DeviceType::MacOsDesktop => write!(f, "macOS"),
286+
DeviceType::LinuxDesktop => write!(f, "Linux"),
287+
DeviceType::ChromeBrowser => write!(f, "Chrome"),
288+
DeviceType::FirefoxBrowser => write!(f, "Firefox"),
289+
DeviceType::OperaBrowser => write!(f, "Opera"),
290+
DeviceType::EdgeBrowser => write!(f, "Edge"),
288291
DeviceType::IEBrowser => write!(f, "Internet Explorer"),
289292
DeviceType::UnknownBrowser => write!(f, "Unknown Browser"),
290-
DeviceType::AndroidAmazon => write!(f, "Android Amazon"),
293+
DeviceType::AndroidAmazon => write!(f, "Android"),
291294
DeviceType::Uwp => write!(f, "UWP"),
292-
DeviceType::SafariBrowser => write!(f, "Safari Browser"),
293-
DeviceType::VivaldiBrowser => write!(f, "Vivaldi Browser"),
295+
DeviceType::SafariBrowser => write!(f, "Safari"),
296+
DeviceType::VivaldiBrowser => write!(f, "Vivaldi"),
294297
DeviceType::VivaldiExtension => write!(f, "Vivaldi Extension"),
295298
DeviceType::SafariExtension => write!(f, "Safari Extension"),
296299
DeviceType::Sdk => write!(f, "SDK"),
297300
DeviceType::Server => write!(f, "Server"),
301+
DeviceType::WindowsCLI => write!(f, "Windows CLI"),
302+
DeviceType::MacOsCLI => write!(f, "macOS CLI"),
303+
DeviceType::LinuxCLI => write!(f, "Linux CLI"),
298304
}
299305
}
300306
}
@@ -325,6 +331,9 @@ impl DeviceType {
325331
20 => DeviceType::SafariExtension,
326332
21 => DeviceType::Sdk,
327333
22 => DeviceType::Server,
334+
23 => DeviceType::WindowsCLI,
335+
24 => DeviceType::MacOsCLI,
336+
25 => DeviceType::LinuxCLI,
328337
_ => DeviceType::UnknownBrowser,
329338
}
330339
}

0 commit comments

Comments
 (0)