Skip to content

Commit f634c80

Browse files
committed
Merge branch 'dev' into release/1.4-alpha
2 parents a7897d2 + 9c0f015 commit f634c80

File tree

8 files changed

+43
-35
lines changed

8 files changed

+43
-35
lines changed

proto

src/enterprise/handlers/openid_login.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::{
1616
http::AppState,
1717
proto::{
1818
core_request, core_response, AuthCallbackRequest, AuthCallbackResponse, AuthInfoRequest,
19+
DeviceInfo,
1920
},
2021
};
2122

@@ -49,6 +50,7 @@ impl AuthInfo {
4950
#[instrument(level = "debug", skip(state))]
5051
async fn auth_info(
5152
State(state): State<AppState>,
53+
device_info: DeviceInfo,
5254
private_cookies: PrivateCookieJar,
5355
) -> Result<(PrivateCookieJar, Json<AuthInfo>), ApiError> {
5456
debug!("Getting auth info for OAuth2/OpenID login");
@@ -59,7 +61,7 @@ async fn auth_info(
5961

6062
let rx = state
6163
.grpc_server
62-
.send(Some(core_request::Payload::AuthInfo(request)), None)?;
64+
.send(core_request::Payload::AuthInfo(request), device_info)?;
6365
let payload = get_core_response(rx).await?;
6466
if let core_response::Payload::AuthInfo(response) = payload {
6567
debug!("Received auth info {response:?}");
@@ -105,6 +107,7 @@ struct CallbackResponseData {
105107
#[instrument(level = "debug", skip(state))]
106108
async fn auth_callback(
107109
State(state): State<AppState>,
110+
device_info: DeviceInfo,
108111
mut private_cookies: PrivateCookieJar,
109112
Json(payload): Json<AuthenticationResponse>,
110113
) -> Result<(PrivateCookieJar, Json<CallbackResponseData>), ApiError> {
@@ -135,7 +138,7 @@ async fn auth_callback(
135138

136139
let rx = state
137140
.grpc_server
138-
.send(Some(core_request::Payload::AuthCallback(request)), None)?;
141+
.send(core_request::Payload::AuthCallback(request), device_info)?;
139142
let payload = get_core_response(rx).await?;
140143
if let core_response::Payload::AuthCallback(AuthCallbackResponse { url, token }) = payload {
141144
debug!("Received auth callback response {url:?} {token:?}");

src/grpc.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ impl ProxyServer {
4444
#[instrument(name = "send_grpc_message", level = "debug", skip(self))]
4545
pub(crate) fn send(
4646
&self,
47-
payload: Option<core_request::Payload>,
48-
device_info: Option<DeviceInfo>,
47+
payload: core_request::Payload,
48+
device_info: DeviceInfo,
4949
) -> Result<oneshot::Receiver<core_response::Payload>, ApiError> {
5050
if let Some(client_tx) = self.clients.lock().unwrap().values().next() {
5151
let id = self.current_id.fetch_add(1, Ordering::Relaxed);
5252
let res = CoreRequest {
5353
id,
54-
device_info,
55-
payload,
54+
device_info: Some(device_info),
55+
payload: Some(payload),
5656
};
5757
if let Err(err) = client_tx.send(Ok(res)) {
5858
error!("Failed to send CoreRequest: {err}");

src/handlers/desktop_client_mfa.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ pub(crate) fn router() -> Router<AppState> {
1919
#[instrument(level = "debug", skip(state))]
2020
async fn start_client_mfa(
2121
State(state): State<AppState>,
22-
device_info: Option<DeviceInfo>,
22+
device_info: DeviceInfo,
2323
Json(req): Json<ClientMfaStartRequest>,
2424
) -> Result<Json<ClientMfaStartResponse>, ApiError> {
2525
info!("Starting desktop client authorization {req:?}");
2626
let rx = state.grpc_server.send(
27-
Some(core_request::Payload::ClientMfaStart(req.clone())),
27+
core_request::Payload::ClientMfaStart(req.clone()),
2828
device_info,
2929
)?;
3030
let payload = get_core_response(rx).await?;
@@ -41,14 +41,13 @@ async fn start_client_mfa(
4141
#[instrument(level = "debug", skip(state))]
4242
async fn finish_client_mfa(
4343
State(state): State<AppState>,
44-
device_info: Option<DeviceInfo>,
44+
device_info: DeviceInfo,
4545
Json(req): Json<ClientMfaFinishRequest>,
4646
) -> Result<Json<ClientMfaFinishResponse>, ApiError> {
4747
info!("Finishing desktop client authorization");
48-
let rx = state.grpc_server.send(
49-
Some(core_request::Payload::ClientMfaFinish(req)),
50-
device_info,
51-
)?;
48+
let rx = state
49+
.grpc_server
50+
.send(core_request::Payload::ClientMfaFinish(req), device_info)?;
5251
let payload = get_core_response(rx).await?;
5352
if let core_response::Payload::ClientMfaFinish(response) = payload {
5453
info!("Finished desktop client authorization");

src/handlers/enrollment.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub(crate) fn router() -> Router<AppState> {
2323
#[instrument(level = "debug", skip(state))]
2424
async fn start_enrollment_process(
2525
State(state): State<AppState>,
26+
device_info: DeviceInfo,
2627
mut private_cookies: PrivateCookieJar,
2728
Json(req): Json<EnrollmentStartRequest>,
2829
) -> Result<(PrivateCookieJar, Json<EnrollmentStartResponse>), ApiError> {
@@ -40,7 +41,7 @@ async fn start_enrollment_process(
4041
debug!("Sending the enrollment process request to core service.");
4142
let rx = state
4243
.grpc_server
43-
.send(Some(core_request::Payload::EnrollmentStart(req)), None)?;
44+
.send(core_request::Payload::EnrollmentStart(req), device_info)?;
4445
let payload = get_core_response(rx).await?;
4546
debug!("Receving payload from the core service. Try to set private cookie for starting enrollment process.");
4647
if let core_response::Payload::EnrollmentStart(response) = payload {
@@ -62,7 +63,7 @@ async fn start_enrollment_process(
6263
#[instrument(level = "debug", skip(state))]
6364
async fn activate_user(
6465
State(state): State<AppState>,
65-
device_info: Option<DeviceInfo>,
66+
device_info: DeviceInfo,
6667
mut private_cookies: PrivateCookieJar,
6768
Json(mut req): Json<ActivateUserRequest>,
6869
) -> Result<PrivateCookieJar, ApiError> {
@@ -78,7 +79,7 @@ async fn activate_user(
7879
debug!("Sending the activate user request to core service.");
7980
let rx = state
8081
.grpc_server
81-
.send(Some(core_request::Payload::ActivateUser(req)), device_info)?;
82+
.send(core_request::Payload::ActivateUser(req), device_info)?;
8283
let payload = get_core_response(rx).await?;
8384
debug!("Receving payload from the core service. Trying to remove private cookie...");
8485
if let core_response::Payload::Empty(()) = payload {
@@ -97,7 +98,7 @@ async fn activate_user(
9798
#[instrument(level = "debug", skip(state))]
9899
async fn create_device(
99100
State(state): State<AppState>,
100-
device_info: Option<DeviceInfo>,
101+
device_info: DeviceInfo,
101102
private_cookies: PrivateCookieJar,
102103
Json(mut req): Json<NewDevice>,
103104
) -> Result<Json<DeviceConfigResponse>, ApiError> {
@@ -111,7 +112,7 @@ async fn create_device(
111112

112113
let rx = state
113114
.grpc_server
114-
.send(Some(core_request::Payload::NewDevice(req)), device_info)?;
115+
.send(core_request::Payload::NewDevice(req), device_info)?;
115116
let payload = get_core_response(rx).await?;
116117
if let core_response::Payload::DeviceConfig(response) = payload {
117118
info!("Added new device {name} {pubkey}");
@@ -125,6 +126,7 @@ async fn create_device(
125126
#[instrument(level = "debug", skip(state))]
126127
async fn get_network_info(
127128
State(state): State<AppState>,
129+
device_info: DeviceInfo,
128130
private_cookies: PrivateCookieJar,
129131
Json(mut req): Json<ExistingDevice>,
130132
) -> Result<Json<DeviceConfigResponse>, ApiError> {
@@ -138,7 +140,7 @@ async fn get_network_info(
138140

139141
let rx = state
140142
.grpc_server
141-
.send(Some(core_request::Payload::ExistingDevice(req)), None)?;
143+
.send(core_request::Payload::ExistingDevice(req), device_info)?;
142144
let payload = get_core_response(rx).await?;
143145
if let core_response::Payload::DeviceConfig(response) = payload {
144146
info!("Got network info for device {pubkey}");

src/handlers/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl<S> FromRequestParts<S> for DeviceInfo
2222
where
2323
S: Send + Sync,
2424
{
25-
type Rejection = ();
25+
type Rejection = ApiError;
2626

2727
async fn from_request_parts(parts: &mut Parts, state: &S) -> Result<Self, Self::Rejection> {
2828
let forwarded_for_ip = LeftmostXForwardedFor::from_request_parts(parts, state)
@@ -36,7 +36,10 @@ where
3636
.map(|v| v.to_string())
3737
.ok();
3838

39-
let ip_address = forwarded_for_ip.or(insecure_ip).map(|v| v.to_string()).ok();
39+
let ip_address = forwarded_for_ip
40+
.or(insecure_ip)
41+
.map(|v| v.to_string())
42+
.map_err(|_| ApiError::Unexpected("Missing client IP".to_string()))?;
4043

4144
Ok(DeviceInfo {
4245
ip_address,

src/handlers/password_reset.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ pub(crate) fn router() -> Router<AppState> {
2222
#[instrument(level = "debug", skip(state))]
2323
async fn request_password_reset(
2424
State(state): State<AppState>,
25-
device_info: Option<DeviceInfo>,
25+
device_info: DeviceInfo,
2626
Json(req): Json<PasswordResetInitializeRequest>,
2727
) -> Result<(), ApiError> {
2828
info!("Starting password reset request for {}", req.email);
2929

3030
let rx = state.grpc_server.send(
31-
Some(core_request::Payload::PasswordResetInit(req.clone())),
31+
core_request::Payload::PasswordResetInit(req.clone()),
3232
device_info,
3333
)?;
3434
let payload = get_core_response(rx).await?;
@@ -44,7 +44,7 @@ async fn request_password_reset(
4444
#[instrument(level = "debug", skip(state))]
4545
async fn start_password_reset(
4646
State(state): State<AppState>,
47-
device_info: Option<DeviceInfo>,
47+
device_info: DeviceInfo,
4848
mut private_cookies: PrivateCookieJar,
4949
Json(req): Json<PasswordResetStartRequest>,
5050
) -> Result<(PrivateCookieJar, Json<PasswordResetStartResponse>), ApiError> {
@@ -58,10 +58,9 @@ async fn start_password_reset(
5858

5959
let token = req.clone().token.clone();
6060

61-
let rx = state.grpc_server.send(
62-
Some(core_request::Payload::PasswordResetStart(req)),
63-
device_info,
64-
)?;
61+
let rx = state
62+
.grpc_server
63+
.send(core_request::Payload::PasswordResetStart(req), device_info)?;
6564
let payload = get_core_response(rx).await?;
6665
if let core_response::Payload::PasswordResetStart(response) = payload {
6766
// set session cookie
@@ -79,7 +78,7 @@ async fn start_password_reset(
7978
#[instrument(level = "debug", skip(state))]
8079
async fn reset_password(
8180
State(state): State<AppState>,
82-
device_info: Option<DeviceInfo>,
81+
device_info: DeviceInfo,
8382
mut private_cookies: PrivateCookieJar,
8483
Json(mut req): Json<PasswordResetRequest>,
8584
) -> Result<PrivateCookieJar, ApiError> {
@@ -92,7 +91,7 @@ async fn reset_password(
9291

9392
let rx = state
9493
.grpc_server
95-
.send(Some(core_request::Payload::PasswordReset(req)), device_info)?;
94+
.send(core_request::Payload::PasswordReset(req), device_info)?;
9695
let payload = get_core_response(rx).await?;
9796
if let core_response::Payload::Empty(()) = payload {
9897
if let Some(cookie) = private_cookies.get(PASSWORD_RESET_COOKIE_NAME) {

src/handlers/polling.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ use crate::{
44
error::ApiError,
55
handlers::get_core_response,
66
http::AppState,
7-
proto::{core_request, core_response, InstanceInfoRequest, InstanceInfoResponse},
7+
proto::{core_request, core_response, DeviceInfo, InstanceInfoRequest, InstanceInfoResponse},
88
};
99

1010
#[instrument(level = "debug", skip(state))]
1111
pub(crate) async fn info(
1212
State(state): State<AppState>,
13+
device_info: DeviceInfo,
1314
Json(req): Json<InstanceInfoRequest>,
1415
) -> Result<Json<InstanceInfoResponse>, ApiError> {
1516
debug!("Retrieving info for polling request");
16-
let rx = state
17-
.grpc_server
18-
.send(Some(core_request::Payload::InstanceInfo(req.clone())), None)?;
17+
let rx = state.grpc_server.send(
18+
core_request::Payload::InstanceInfo(req.clone()),
19+
device_info,
20+
)?;
1921
let payload = get_core_response(rx).await?;
2022

2123
if let core_response::Payload::InstanceInfo(response) = payload {

0 commit comments

Comments
 (0)