Skip to content

Commit 5ff5050

Browse files
committed
KTOR-8180 Provide control over tokens to user code for the client Auth
1 parent fd69095 commit 5ff5050

File tree

12 files changed

+1092
-45
lines changed

12 files changed

+1092
-45
lines changed

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,4 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
4949
- Module-specific API dumps: `./gradlew :module-name:apiDump`
5050
- Platform-specific dumps: `./gradlew jvmApiDump` or `./gradlew klibApiDump`
5151
- API changes must be intentional and well-documented
52-
- Breaking changes are only allowed in major version releases
52+
- Breaking changes are only allowed in major version releases

ktor-client/ktor-client-plugins/ktor-client-auth/api/ktor-client-auth.api

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public final class io/ktor/client/plugins/auth/providers/BasicAuthConfig {
4141
public final fun setRealm (Ljava/lang/String;)V
4242
public final fun setSendWithoutRequest (Z)V
4343
public final fun setUsername (Ljava/lang/String;)V
44+
public final fun tokenStorage (Lio/ktor/client/plugins/auth/providers/TokenStorage;)V
4445
}
4546

4647
public final class io/ktor/client/plugins/auth/providers/BasicAuthCredentials {
@@ -52,10 +53,10 @@ public final class io/ktor/client/plugins/auth/providers/BasicAuthCredentials {
5253
public final class io/ktor/client/plugins/auth/providers/BasicAuthProvider : io/ktor/client/plugins/auth/AuthProvider {
5354
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
5455
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V
55-
public fun <init> (Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V
56-
public synthetic fun <init> (Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
56+
public fun <init> (Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lio/ktor/client/plugins/auth/providers/TokenStorage;)V
57+
public synthetic fun <init> (Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lio/ktor/client/plugins/auth/providers/TokenStorage;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
5758
public fun addRequestHeaders (Lio/ktor/client/request/HttpRequestBuilder;Lio/ktor/http/auth/HttpAuthHeader;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
58-
public final fun clearToken ()V
59+
public final fun clearToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5960
public fun getSendWithoutRequest ()Z
6061
public fun isApplicable (Lio/ktor/http/auth/HttpAuthHeader;)Z
6162
public fun refreshToken (Lio/ktor/client/statement/HttpResponse;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -68,18 +69,21 @@ public final class io/ktor/client/plugins/auth/providers/BasicAuthProviderKt {
6869

6970
public final class io/ktor/client/plugins/auth/providers/BearerAuthConfig {
7071
public fun <init> ()V
72+
public final fun getCacheTokens ()Z
7173
public final fun getRealm ()Ljava/lang/String;
7274
public final fun loadTokens (Lkotlin/jvm/functions/Function1;)V
7375
public final fun refreshTokens (Lkotlin/jvm/functions/Function2;)V
7476
public final fun sendWithoutRequest (Lkotlin/jvm/functions/Function1;)V
77+
public final fun setCacheTokens (Z)V
7578
public final fun setRealm (Ljava/lang/String;)V
79+
public final fun tokenStorage (Lio/ktor/client/plugins/auth/providers/TokenStorage;)V
7680
}
7781

7882
public final class io/ktor/client/plugins/auth/providers/BearerAuthProvider : io/ktor/client/plugins/auth/AuthProvider {
79-
public fun <init> (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V
80-
public synthetic fun <init> (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
83+
public fun <init> (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ZLio/ktor/client/plugins/auth/providers/TokenStorage;)V
84+
public synthetic fun <init> (Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ZLio/ktor/client/plugins/auth/providers/TokenStorage;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
8185
public fun addRequestHeaders (Lio/ktor/client/request/HttpRequestBuilder;Lio/ktor/http/auth/HttpAuthHeader;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
82-
public final fun clearToken ()V
86+
public final fun clearToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
8387
public fun getSendWithoutRequest ()Z
8488
public fun isApplicable (Lio/ktor/http/auth/HttpAuthHeader;)Z
8589
public fun refreshToken (Lio/ktor/client/statement/HttpResponse;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -96,6 +100,18 @@ public final class io/ktor/client/plugins/auth/providers/BearerTokens {
96100
public final fun getRefreshToken ()Ljava/lang/String;
97101
}
98102

103+
public final class io/ktor/client/plugins/auth/providers/CachingTokenStorage : io/ktor/client/plugins/auth/providers/DefaultTokenStorage {
104+
public fun <init> (Lkotlin/jvm/functions/Function1;)V
105+
public fun clearToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
106+
public fun getCurrentToken ()Ljava/lang/Object;
107+
public fun loadToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
108+
public fun updateToken (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
109+
}
110+
111+
public abstract interface class io/ktor/client/plugins/auth/providers/DefaultTokenStorage : io/ktor/client/plugins/auth/providers/TokenStorage {
112+
public abstract fun getCurrentToken ()Ljava/lang/Object;
113+
}
114+
99115
public final class io/ktor/client/plugins/auth/providers/DigestAuthConfig {
100116
public fun <init> ()V
101117
public final fun credentials (Lkotlin/jvm/functions/Function1;)V
@@ -121,7 +137,7 @@ public final class io/ktor/client/plugins/auth/providers/DigestAuthProvider : io
121137
public fun <init> (Lkotlin/jvm/functions/Function1;Ljava/lang/String;Ljava/lang/String;)V
122138
public synthetic fun <init> (Lkotlin/jvm/functions/Function1;Ljava/lang/String;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
123139
public fun addRequestHeaders (Lio/ktor/client/request/HttpRequestBuilder;Lio/ktor/http/auth/HttpAuthHeader;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
124-
public final fun clearToken ()V
140+
public final fun clearToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
125141
public final fun getAlgorithmName ()Ljava/lang/String;
126142
public final fun getRealm ()Ljava/lang/String;
127143
public fun getSendWithoutRequest ()Z
@@ -134,6 +150,13 @@ public final class io/ktor/client/plugins/auth/providers/DigestAuthProviderKt {
134150
public static final fun digest (Lio/ktor/client/plugins/auth/AuthConfig;Lkotlin/jvm/functions/Function1;)V
135151
}
136152

153+
public final class io/ktor/client/plugins/auth/providers/NonCachingTokenStorage : io/ktor/client/plugins/auth/providers/TokenStorage {
154+
public fun <init> (Lkotlin/jvm/functions/Function1;)V
155+
public fun clearToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
156+
public fun loadToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
157+
public fun updateToken (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
158+
}
159+
137160
public final class io/ktor/client/plugins/auth/providers/RefreshTokensParams {
138161
public fun <init> (Lio/ktor/client/HttpClient;Lio/ktor/client/statement/HttpResponse;Lio/ktor/client/plugins/auth/providers/BearerTokens;)V
139162
public final fun getClient ()Lio/ktor/client/HttpClient;
@@ -142,3 +165,21 @@ public final class io/ktor/client/plugins/auth/providers/RefreshTokensParams {
142165
public final fun markAsRefreshTokenRequest (Lio/ktor/client/request/HttpRequestBuilder;)V
143166
}
144167

168+
public abstract interface class io/ktor/client/plugins/auth/providers/TokenStorage {
169+
public abstract fun clearToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
170+
public abstract fun loadToken (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
171+
public abstract fun updateToken (Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
172+
}
173+
174+
public final class io/ktor/client/plugins/auth/providers/TokenStorageFactory {
175+
public static final field INSTANCE Lio/ktor/client/plugins/auth/providers/TokenStorageFactory;
176+
public final fun getTokenStorageAttributeKey ()Lio/ktor/util/AttributeKey;
177+
public final fun nonCaching (Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/auth/providers/TokenStorage;
178+
public final fun withCache (Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/auth/providers/DefaultTokenStorage;
179+
}
180+
181+
public final class io/ktor/client/plugins/auth/providers/TokenStorageKt {
182+
public static final fun getTokenStorage (Lio/ktor/client/HttpClient;Ljava/lang/String;)Lio/ktor/client/plugins/auth/providers/TokenStorage;
183+
public static final fun registerTokenStorage (Lio/ktor/client/HttpClient;Ljava/lang/String;Lio/ktor/client/plugins/auth/providers/TokenStorage;)V
184+
}
185+

0 commit comments

Comments
 (0)