Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import org.publicvalue.multiplatform.oidc.OpenIdConnectClient
import org.publicvalue.multiplatform.oidc.flows.CodeAuthFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionFlow
import kotlin.experimental.ExperimentalObjCRefinement
import kotlin.native.HiddenFromObjC

@OptIn(ExperimentalObjCRefinement::class)
interface CodeAuthFlowFactory {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package org.publicvalue.multiplatform.oidc.appsupport

import io.ktor.http.Url
import org.publicvalue.multiplatform.oidc.OpenIdConnectClient
import org.publicvalue.multiplatform.oidc.OpenIdConnectException
import org.publicvalue.multiplatform.oidc.flows.CodeAuthFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionFlow
import org.publicvalue.multiplatform.oidc.preferences.Preferences
import org.publicvalue.multiplatform.oidc.types.AuthCodeRequest
import org.publicvalue.multiplatform.oidc.types.EndSessionRequest
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.contract

expect class PlatformCodeAuthFlow: CodeAuthFlow, EndSessionFlow {
override suspend fun startLoginFlow(request: AuthCodeRequest)
Expand All @@ -18,26 +15,6 @@ expect class PlatformCodeAuthFlow: CodeAuthFlow, EndSessionFlow {
override val preferences: Preferences
}

@OptIn(ExperimentalContracts::class)
internal fun <T> getErrorResult(responseUri: Url?): Result<T>? {
contract { returns(null) implies (responseUri != null) }
if (responseUri != null) {
if (responseUri.parameters.contains("error")) {
// error
return Result.failure(
OpenIdConnectException.AuthenticationFailure(
message = responseUri.parameters.get(
"error"
) ?: ""
)
)
}
} else {
return Result.failure(OpenIdConnectException.AuthenticationFailure(message = "No Uri in callback from browser (was ${responseUri})."))
}
return null
}

internal fun throwAuthenticationIfCancelled(result: WebAuthenticationFlowResult) {
if (result is WebAuthenticationFlowResult.Cancelled) {
throw OpenIdConnectException.AuthenticationCancelled()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package org.publicvalue.multiplatform.oidc.appsupport

import kotlinx.coroutines.CancellableContinuation
import org.publicvalue.multiplatform.oidc.OpenIdConnectClient
import org.publicvalue.multiplatform.oidc.OpenIdConnectException
import org.publicvalue.multiplatform.oidc.flows.CodeAuthFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionResponse
import org.publicvalue.multiplatform.oidc.preferences.Preferences
import org.publicvalue.multiplatform.oidc.types.AuthCodeRequest
import org.publicvalue.multiplatform.oidc.types.EndSessionRequest
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package org.publicvalue.multiplatform.oidc.appsupport

import io.ktor.http.*
import io.ktor.http.Url
import io.ktor.http.toURI
import org.publicvalue.multiplatform.oidc.ExperimentalOpenIdConnect
import org.publicvalue.multiplatform.oidc.OpenIdConnectClient
import org.publicvalue.multiplatform.oidc.OpenIdConnectException
import org.publicvalue.multiplatform.oidc.flows.CodeAuthFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionResponse
import org.publicvalue.multiplatform.oidc.preferences.Preferences
import org.publicvalue.multiplatform.oidc.types.AuthCodeRequest
import org.publicvalue.multiplatform.oidc.types.EndSessionRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import org.publicvalue.multiplatform.oidc.ExperimentalOpenIdConnect
import org.publicvalue.multiplatform.oidc.OpenIdConnectClient
import org.publicvalue.multiplatform.oidc.flows.CodeAuthFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionFlow
import org.publicvalue.multiplatform.oidc.flows.EndSessionResponse
import org.publicvalue.multiplatform.oidc.preferences.Preferences
import org.publicvalue.multiplatform.oidc.types.AuthCodeRequest
import org.publicvalue.multiplatform.oidc.types.EndSessionRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ sealed class OpenIdConnectException(

data class InvalidUrl(val url: String?, override val cause: Throwable? = null): OpenIdConnectException(message = "Invalid URL: $url", cause = cause)
data class AuthenticationFailure(override val message: String, override val cause: Throwable? = null): OpenIdConnectException(message = "Authentication failed. $message", cause = cause)
data class AuthenticationCancelled(override val message: String = "Authentication cancelled"): OpenIdConnectException(message = "Authentication cancelled", cause = null)
data class AuthenticationCancelled(override val message: String = "Authentication cancelled"): OpenIdConnectException(message = message, cause = null)
data class UnsuccessfulTokenRequest(
override val message: String,
val statusCode: HttpStatusCode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import kotlin.experimental.ExperimentalObjCName
import kotlin.native.ObjCName

typealias AuthCodeResponse = Result<AuthCodeResult>
typealias EndSessionResponse = Result<Unit>

/**
* Result of an Auth Code Request
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import io.ktor.http.URLBuilder
import io.ktor.http.Url
import org.publicvalue.multiplatform.oidc.OpenIdConnectClient
import org.publicvalue.multiplatform.oidc.OpenIdConnectException
import org.publicvalue.multiplatform.oidc.getError
import org.publicvalue.multiplatform.oidc.preferences.Preferences
import org.publicvalue.multiplatform.oidc.preferences.clearOidcPreferences
import org.publicvalue.multiplatform.oidc.preferences.getAuthRequest
Expand Down Expand Up @@ -61,6 +60,7 @@ interface CodeAuthFlow {
* Should return the Authorization Code.
*/
@Throws(CancellationException::class, OpenIdConnectException::class)
@Suppress("unused")
suspend fun getAuthorizationCode(request: AuthCodeRequest): AuthCodeResponse {
return try {
preferences.setAuthRequest(request)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@ suspend fun Preferences.clearOidcPreferences() {
}

inline fun <reified T> Json.decodeFromStringOrNull(string: String): T? {
try {
return Json.decodeFromString<T>(string)
return try {
Json.decodeFromString<T>(string)
} catch (e: Exception) {
when (e) {
is SerializationException, is IllegalArgumentException -> {
return null
null
}
else -> throw e
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import kotlin.time.ExperimentalTime
@OptIn(ExperimentalObjCName::class, ExperimentalTime::class)
@Serializable
@ObjCName(swiftName = "AccessTokenResponse", name = "AccessTokenResponse", exact = true)
data class AccessTokenResponse constructor(
data class AccessTokenResponse (
/**
* **Required**
*
Expand Down
3 changes: 1 addition & 2 deletions sample-app/android-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ kotlin {
sourceSets {
val androidMain by getting {
dependencies {
implementation(projects.shared)

implementation(projects.sampleApp.shared)
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion sample-app/desktop-app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ kotlin {
val jvmMain by getting {
dependencies {
implementation(compose.desktop.currentOs)
implementation(projects.shared)
implementation(projects.sampleApp.shared)
}
}
}
Expand Down
13 changes: 0 additions & 13 deletions sample-app/gradle.properties

This file was deleted.

Loading