mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2026-05-26 20:49:55 +00:00
refactor: Remove UiaaStatus enum
This commit is contained in:
+10
-14
@@ -57,14 +57,6 @@ struct UiaaSession {
|
|||||||
identity: Identity,
|
identity: Identity,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum UiaaStatus {
|
|
||||||
/// The UIAA session succeeded and the request should be completed as
|
|
||||||
/// normal.
|
|
||||||
Success(Identity),
|
|
||||||
/// More UIAA stages need to be completed, or the current stage failed.
|
|
||||||
Retry(UiaaInfo),
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Information about the authenticated user's identity.
|
/// Information about the authenticated user's identity.
|
||||||
///
|
///
|
||||||
/// A field of this struct will only be Some if the user completed
|
/// A field of this struct will only be Some if the user completed
|
||||||
@@ -159,8 +151,8 @@ impl Service {
|
|||||||
};
|
};
|
||||||
|
|
||||||
match self.continue_session(auth, &session).await? {
|
match self.continue_session(auth, &session).await? {
|
||||||
| UiaaStatus::Retry(info) => Err(Error::Uiaa(info)),
|
| Ok(identity) => Ok(identity),
|
||||||
| UiaaStatus::Success(identity) => Ok(identity),
|
| Err(info) => Err(Error::Uiaa(info)),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -210,7 +202,11 @@ impl Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Proceed with UIAA authentication given a client's authorization data.
|
/// Proceed with UIAA authentication given a client's authorization data.
|
||||||
async fn continue_session(&self, auth: &AuthData, session: &str) -> Result<UiaaStatus> {
|
async fn continue_session(
|
||||||
|
&self,
|
||||||
|
auth: &AuthData,
|
||||||
|
session: &str,
|
||||||
|
) -> Result<Result<Identity, UiaaInfo>> {
|
||||||
// Hold this lock for the entire function to make sure that, if try_auth()
|
// Hold this lock for the entire function to make sure that, if try_auth()
|
||||||
// is called concurrently with the same session, only one call will succeed
|
// is called concurrently with the same session, only one call will succeed
|
||||||
let mut uiaa_sessions = self.uiaa_sessions.lock().await;
|
let mut uiaa_sessions = self.uiaa_sessions.lock().await;
|
||||||
@@ -227,7 +223,7 @@ impl Service {
|
|||||||
|
|
||||||
// Return early to tell the client that no, authentication did not succeed while
|
// Return early to tell the client that no, authentication did not succeed while
|
||||||
// it wasn't looking.
|
// it wasn't looking.
|
||||||
return Ok(UiaaStatus::Retry(session.get().info.clone()));
|
return Ok(Err(session.get().info.clone()));
|
||||||
}
|
}
|
||||||
|
|
||||||
let completed = 'completed: {
|
let completed = 'completed: {
|
||||||
@@ -280,10 +276,10 @@ impl Service {
|
|||||||
// This session is complete, remove it and return success
|
// This session is complete, remove it and return success
|
||||||
let (_, UiaaSession { identity, .. }) = session.remove_entry();
|
let (_, UiaaSession { identity, .. }) = session.remove_entry();
|
||||||
|
|
||||||
Ok(UiaaStatus::Success(identity))
|
Ok(Ok(identity))
|
||||||
} else {
|
} else {
|
||||||
// The client needs to try again, return the updated session
|
// The client needs to try again, return the updated session
|
||||||
Ok(UiaaStatus::Retry(session.get().info.clone()))
|
Ok(Err(session.get().info.clone()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user