checkpoint before checking out feature/account-managed-gateway

This commit is contained in:
Rocky
2026-08-19 15:53:08 +08:00
parent 25cfbfa4e6
commit 1737106560
51 changed files with 1837 additions and 52 deletions
@@ -21,12 +21,14 @@ data class AppleSignInRequest(
val identityToken: String,
val authorizationCode: String,
val nonce: String,
val displayName: String? = null,
val deviceCheckToken: String? = null,
val appAttest: AppAttestRequest? = null,
) {
override fun toString(): String =
"AppleSignInRequest(identityToken=[REDACTED], authorizationCode=[REDACTED], " +
"nonce=[REDACTED], deviceCheckToken=[REDACTED], appAttest=[REDACTED])"
"nonce=[REDACTED], displayName=[REDACTED], deviceCheckToken=[REDACTED], " +
"appAttest=[REDACTED])"
}
@Serializable
@@ -73,6 +75,7 @@ class AuthRoutes(
identityToken = request.identityToken,
authorizationCode = request.authorizationCode,
nonce = request.nonce,
displayName = request.displayName,
integrityEvidence = IntegrityEvidence(
deviceCheckToken = request.deviceCheckToken,
appAttest = request.appAttest?.let {
@@ -34,7 +34,7 @@ data class SessionTokens(
}
fun interface AccountProvisioner {
suspend fun provision(accountId: UUID, deviceCheckToken: String?)
suspend fun provision(accountId: UUID, deviceCheckToken: String?, displayName: String?)
}
class SessionService(
@@ -46,7 +46,7 @@ class SessionService(
private val fieldEncryptor: FieldEncryptor,
private val identityFingerprint: IdentityFingerprint,
private val sessionConfig: SessionConfig,
private val accountProvisioner: AccountProvisioner = AccountProvisioner { _, _ -> },
private val accountProvisioner: AccountProvisioner = AccountProvisioner { _, _, _ -> },
private val tokenGenerator: SecureTokenGenerator = Sha256SecureTokenGenerator(),
private val clock: Clock = Clock.systemUTC(),
) {
@@ -55,6 +55,7 @@ class SessionService(
authorizationCode: String,
nonce: String,
integrityEvidence: IntegrityEvidence,
displayName: String? = null,
): SessionTokens {
requireValue(identityToken, "identityToken", MAX_IDENTITY_TOKEN_LENGTH)
requireValue(authorizationCode, "authorizationCode", MAX_AUTHORIZATION_CODE_LENGTH)
@@ -90,6 +91,7 @@ class SessionService(
accountProvisioner.provision(
account.id,
verifiedIntegrity.deviceCheckTokenForTrial.takeUnless { account.antiAbuseRestricted },
displayName,
)
return createSession(account.id, now)
}