Downgrade kotlinx serialization
This commit is contained in:
parent
71b7a94fd5
commit
ade0f62568
7
.idea/kotlinc.xml
generated
7
.idea/kotlinc.xml
generated
@ -1,5 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="Kotlin2JvmCompilerArguments">
|
||||||
|
<option name="jvmTarget" value="1.8" />
|
||||||
|
</component>
|
||||||
|
<component name="KotlinCommonCompilerArguments">
|
||||||
|
<option name="apiVersion" value="1.9" />
|
||||||
|
<option name="languageVersion" value="1.9" />
|
||||||
|
</component>
|
||||||
<component name="KotlinJpsPluginSettings">
|
<component name="KotlinJpsPluginSettings">
|
||||||
<option name="version" value="1.9.0" />
|
<option name="version" value="1.9.0" />
|
||||||
</component>
|
</component>
|
||||||
|
@ -41,7 +41,7 @@ android {
|
|||||||
compose = true
|
compose = true
|
||||||
}
|
}
|
||||||
composeOptions {
|
composeOptions {
|
||||||
kotlinCompilerExtensionVersion = "1.5.1"
|
kotlinCompilerExtensionVersion = "1.5.2"
|
||||||
}
|
}
|
||||||
packaging {
|
packaging {
|
||||||
resources {
|
resources {
|
||||||
|
@ -0,0 +1,50 @@
|
|||||||
|
package com.shielddagger.auth.oidc_debugger.oidc
|
||||||
|
|
||||||
|
import com.android.volley.AuthFailureError
|
||||||
|
import com.android.volley.Response
|
||||||
|
import com.android.volley.toolbox.JsonObjectRequest
|
||||||
|
import org.json.JSONObject
|
||||||
|
import java.io.UnsupportedEncodingException
|
||||||
|
import java.net.URLEncoder
|
||||||
|
|
||||||
|
class JsonFormRequest(
|
||||||
|
method: Int,
|
||||||
|
url: String?,
|
||||||
|
private var params: MutableMap<String, String>,
|
||||||
|
listener: Response.Listener<JSONObject>?,
|
||||||
|
errorListener: Response.ErrorListener?
|
||||||
|
) : JsonObjectRequest(method, url, null, listener, errorListener) {
|
||||||
|
|
||||||
|
override fun getBodyContentType(): String {
|
||||||
|
return "application/x-www-form-urlencoded; charset=UTF-8"
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun encodeParameters(params: MutableMap<String, String>, paramsEncoding: String): ByteArray {
|
||||||
|
val encodedParams = StringBuilder()
|
||||||
|
try {
|
||||||
|
for ((key, value) in params) {
|
||||||
|
String.format(
|
||||||
|
"Request#getParams() or Request#getPostParams() returned a map "
|
||||||
|
+ "containing a null key or value: (%s, %s). All keys "
|
||||||
|
+ "and values must be non-null.",
|
||||||
|
key, value
|
||||||
|
)
|
||||||
|
encodedParams.append(URLEncoder.encode(key, paramsEncoding))
|
||||||
|
encodedParams.append('=')
|
||||||
|
encodedParams.append(URLEncoder.encode(value, paramsEncoding))
|
||||||
|
encodedParams.append('&')
|
||||||
|
}
|
||||||
|
return encodedParams.toString().toByteArray(charset(paramsEncoding))
|
||||||
|
} catch (uee: UnsupportedEncodingException) {
|
||||||
|
throw RuntimeException("Encoding not supported: $paramsEncoding", uee)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Throws(AuthFailureError::class)
|
||||||
|
override fun getBody(): ByteArray? {
|
||||||
|
if (params.isNotEmpty()) {
|
||||||
|
return encodeParameters(params, paramsEncoding)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,10 @@
|
|||||||
package com.shielddagger.auth.oidc_debugger.oidc
|
package com.shielddagger.auth.oidc_debugger.oidc
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import java.io.Serializable
|
import com.android.volley.Request
|
||||||
|
import com.android.volley.Response
|
||||||
|
import com.android.volley.toolbox.JsonObjectRequest
|
||||||
|
import org.json.JSONObject
|
||||||
import java.util.ArrayList
|
import java.util.ArrayList
|
||||||
import kotlin.io.encoding.Base64
|
import kotlin.io.encoding.Base64
|
||||||
import kotlin.io.encoding.ExperimentalEncodingApi
|
import kotlin.io.encoding.ExperimentalEncodingApi
|
||||||
@ -35,7 +38,7 @@ enum class OIDCPromptTypes(private val type:String){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class OIDCAuthState(private val type: String, message: String, success: Boolean) {
|
enum class OIDCAuthState(private val type: String, val message: String, val success: Boolean) {
|
||||||
CODE_OK("code_ok", "Authorization Code OK", true),
|
CODE_OK("code_ok", "Authorization Code OK", true),
|
||||||
CODE_FAIL("code_fail","Authorization Code FAIL", false),
|
CODE_FAIL("code_fail","Authorization Code FAIL", false),
|
||||||
TOKEN_OK("token_ok", "Token OK", true),
|
TOKEN_OK("token_ok", "Token OK", true),
|
||||||
@ -65,6 +68,52 @@ enum class OIDCAuthState(private val type: String, message: String, success: Boo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class OIDCTokenErrorResponse(private val type: String, val message: String){
|
||||||
|
INVALID_REQUEST("invalid_request", "Invalid Token Request"),
|
||||||
|
INVALID_CLIENT("invalid_client", "Invalid Client"),
|
||||||
|
INVALID_GRANT("invalid_grant", "Invalid Grant"),
|
||||||
|
UNAUTHORIZED_CLIENT("unauthorized_client", "Unauthorized Client"),
|
||||||
|
UNAUTHORIZED_GRANT_TYPE("unsupported_grant_type", "Unauthorized Grant Type"),
|
||||||
|
INVALID_SCOPE("invalid_scope", "Invalid Scope");
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return this.type
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun fromString(type: String): OIDCTokenErrorResponse {
|
||||||
|
val map = OIDCTokenErrorResponse.entries.associateBy(OIDCTokenErrorResponse::type)
|
||||||
|
return map[type]!!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class OIDCTokenType(private val type: String) {
|
||||||
|
BEARER("bearer"),
|
||||||
|
MAC("mac");
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return this.type
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun fromString(type: String): OIDCTokenType {
|
||||||
|
val map = OIDCTokenType.entries.associateBy(OIDCTokenType::type)
|
||||||
|
return map[type]!!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class TokenResponse(
|
||||||
|
val error: OIDCTokenErrorResponse? = null,
|
||||||
|
val accessToken: String? = null,
|
||||||
|
val tokenType: OIDCTokenType? = null,
|
||||||
|
val expiresIn: Int? = null,
|
||||||
|
val refreshToken: String? = null,
|
||||||
|
val scope: List<String>? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
@kotlinx.serialization.Serializable
|
||||||
class OIDCCore(
|
class OIDCCore(
|
||||||
private val responseType: List<OIDCResponseType>,
|
private val responseType: List<OIDCResponseType>,
|
||||||
val scope: List<String>,
|
val scope: List<String>,
|
||||||
@ -76,7 +125,6 @@ class OIDCCore(
|
|||||||
val clientSecret: String = "",
|
val clientSecret: String = "",
|
||||||
private val clientAuth: ClientAuthType = ClientAuthType.BASIC
|
private val clientAuth: ClientAuthType = ClientAuthType.BASIC
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private var nonce:String = ""
|
private var nonce:String = ""
|
||||||
private var state:String = ""
|
private var state:String = ""
|
||||||
|
|
||||||
@ -136,4 +184,50 @@ class OIDCCore(
|
|||||||
|
|
||||||
return stateList
|
return stateList
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getTokenFromCode(returnUri: Uri,
|
||||||
|
responseHandler: Response.Listener<JSONObject> = Response.Listener {},
|
||||||
|
errorHandler: Response.ErrorListener = Response.ErrorListener {}): JsonFormRequest {
|
||||||
|
if (!responseType.contains(OIDCResponseType.CODE)){
|
||||||
|
throw RuntimeException("Can't get token from code for a client not requesting a code response type")
|
||||||
|
}
|
||||||
|
if (returnUri.getQueryParameter("code") == null){
|
||||||
|
throw RuntimeException("Getting token from code impossible - no code in return URL")
|
||||||
|
}
|
||||||
|
|
||||||
|
val data = mutableMapOf<String,String>()
|
||||||
|
data["grant_type"] = "authorization_code"
|
||||||
|
data["code"] = returnUri.getQueryParameter("code")!!
|
||||||
|
data["client_id"] = clientId
|
||||||
|
data["client_secret"] = clientSecret
|
||||||
|
data["redirect_uri"] = redirectUri
|
||||||
|
|
||||||
|
return JsonFormRequest(
|
||||||
|
Request.Method.POST,
|
||||||
|
tokenUri,
|
||||||
|
data,
|
||||||
|
responseHandler,
|
||||||
|
errorHandler
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun validateTokenResponse(response: JSONObject): TokenResponse{
|
||||||
|
if (response.has("error")) {
|
||||||
|
return TokenResponse(
|
||||||
|
OIDCTokenErrorResponse.fromString(response.getString("error"))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return TokenResponse(
|
||||||
|
accessToken = response.getString("access_token"),
|
||||||
|
tokenType = OIDCTokenType.fromString(response.getString("token_type")),
|
||||||
|
expiresIn = if (response.has("expires_in")) response.getInt("expires_in") else null,
|
||||||
|
refreshToken = if (response.has("refresh_token")) response.getString("refresh_token") else null,
|
||||||
|
scope = if (response.has("scope")) response.getString("scope").split(" ") else null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getUserinfo(accessToken: String?): JsonObjectRequest? {
|
||||||
|
return null
|
||||||
|
}
|
||||||
}
|
}
|
@ -5,7 +5,7 @@ coreKtx = "1.15.0"
|
|||||||
junit = "4.13.2"
|
junit = "4.13.2"
|
||||||
junitVersion = "1.2.1"
|
junitVersion = "1.2.1"
|
||||||
espressoCore = "3.6.1"
|
espressoCore = "3.6.1"
|
||||||
kotlinxSerializationJson = "1.8.0"
|
kotlinxSerializationJson = "1.6.0"
|
||||||
lifecycleRuntimeKtx = "2.8.7"
|
lifecycleRuntimeKtx = "2.8.7"
|
||||||
activityCompose = "1.9.3"
|
activityCompose = "1.9.3"
|
||||||
composeBom = "2024.12.01"
|
composeBom = "2024.12.01"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user