Skip to content

Version 4.0 #799

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 5 commits into
base: master
Choose a base branch
from
Draft
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion Auth/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Newest version: [![](https://img.shields.io/github/release/supabase-community/su

```kotlin
dependencies {
implementation("io.github.jan-tennert.supabase:auth-kt:VERSION")
implementation("io.supabase:auth-kt:VERSION")
}
```

Expand Down
2 changes: 1 addition & 1 deletion Auth/src/androidMain/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
android:exported="false"
tools:node="merge">
<meta-data
android:name="io.github.jan.supabase.auth.SupabaseInitializer"
android:name="io.supabase.auth.SupabaseInitializer"
android:value="androidx.startup" />
</provider>
</application>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import android.content.Intent
import android.net.Uri
import androidx.browser.customtabs.CustomTabsIntent
import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.annotations.SupabaseInternal
import io.github.jan.supabase.auth.user.UserSession
import io.supabase.SupabaseClient
import io.supabase.annotations.SupabaseInternal
import io.supabase.auth.user.UserSession
import kotlinx.coroutines.launch

internal fun openUrl(uri: Uri, action: ExternalAuthAction) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import androidx.browser.customtabs.CustomTabsIntent
import io.github.jan.supabase.auth.providers.ExternalAuthConfig
import io.github.jan.supabase.plugins.CustomSerializationConfig
import io.supabase.auth.providers.ExternalAuthConfig
import io.supabase.plugins.CustomSerializationConfig

/**
* The configuration for [Auth]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.supabase.auth

import io.supabase.annotations.SupabaseInternal
import io.supabase.auth.Auth
import io.supabase.auth.deepLinkOrNull

@SupabaseInternal
internal actual fun Auth.defaultPlatformRedirectUrl(): String? = config.deepLinkOrNull
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
@file:Suppress("RedundantSuspendModifier")
package io.github.jan.supabase.auth

package io.supabase.auth

import android.net.Uri
import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.auth.user.UserSession
import io.supabase.SupabaseClient
import io.supabase.auth.user.UserSession

internal actual suspend fun SupabaseClient.openExternalUrl(url: String) {
openUrl(Uri.parse(url), auth.config.defaultExternalAuthAction)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package io.github.jan.supabase.auth.providers
package io.supabase.auth.providers

import io.supabase.auth.providers.ExternalAuthConfigDefaults

/**
* Configuration for external authentication providers like Google, Twitter, etc.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import android.content.Context
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.startup.Initializer
import io.github.jan.supabase.annotations.SupabaseInternal
import io.github.jan.supabase.logging.d
import io.supabase.annotations.SupabaseInternal
import io.supabase.logging.d
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

Expand Down
2 changes: 1 addition & 1 deletion Auth/src/androidUnitTest/kotlin/platformSettings.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import io.github.jan.supabase.auth.AuthConfig
import io.supabase.auth.AuthConfig

actual fun AuthConfig.platformSettings() {
enableLifecycleCallbacks = false
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.auth.user.UserSession
import io.github.jan.supabase.logging.d
import io.supabase.SupabaseClient
import io.supabase.auth.user.UserSession
import io.supabase.logging.d
import kotlinx.coroutines.launch
import platform.Foundation.NSURL
import platform.Foundation.NSURLComponents
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.supabase.auth

import io.supabase.annotations.SupabaseInternal
import io.supabase.auth.Auth
import io.supabase.auth.deepLinkOrNull

@SupabaseInternal
internal actual fun Auth.defaultPlatformRedirectUrl(): String? = config.deepLinkOrNull
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.auth.providers.openUrl
import io.supabase.SupabaseClient
import io.supabase.auth.providers.openUrl
import platform.Foundation.NSURL

internal actual suspend fun SupabaseClient.openExternalUrl(url: String) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package io.github.jan.supabase.auth.providers
package io.supabase.auth.providers

import io.supabase.auth.providers.ExternalAuthConfigDefaults

/**
* Configuration for external authentication providers like Google, Twitter, etc.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.jan.supabase.auth.providers
package io.supabase.auth.providers

import platform.Foundation.NSURL

Expand Down
7 changes: 7 additions & 0 deletions Auth/src/appleMain/kotlin/io/supabase/auth/setupPlatform.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.supabase.auth

import io.supabase.annotations.SupabaseInternal
import io.supabase.auth.Auth

@SupabaseInternal
actual fun Auth.setupPlatform() = Unit
2 changes: 1 addition & 1 deletion Auth/src/appleTest/kotlin/platformSettings.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import io.github.jan.supabase.auth.AuthConfig
import io.supabase.auth.AuthConfig

actual fun AuthConfig.platformSettings() = Unit
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.annotations.SupabaseInternal
import io.github.jan.supabase.plugins.MainConfig
import io.github.jan.supabase.plugins.MainPlugin
import io.supabase.SupabaseClient
import io.supabase.annotations.SupabaseInternal
import io.supabase.plugins.MainConfig
import io.supabase.plugins.MainPlugin

/**
* Returns the access token used for requests. The token is resolved in the following order:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
package io.github.jan.supabase.auth

import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.auth.admin.AdminApi
import io.github.jan.supabase.auth.exception.AuthRestException
import io.github.jan.supabase.auth.exception.AuthWeakPasswordException
import io.github.jan.supabase.auth.mfa.MfaApi
import io.github.jan.supabase.auth.providers.AuthProvider
import io.github.jan.supabase.auth.providers.ExternalAuthConfigDefaults
import io.github.jan.supabase.auth.providers.Google
import io.github.jan.supabase.auth.providers.OAuthProvider
import io.github.jan.supabase.auth.providers.builtin.Email
import io.github.jan.supabase.auth.providers.builtin.Phone
import io.github.jan.supabase.auth.providers.builtin.SSO
import io.github.jan.supabase.auth.status.SessionSource
import io.github.jan.supabase.auth.status.SessionStatus
import io.github.jan.supabase.auth.user.UserInfo
import io.github.jan.supabase.auth.user.UserSession
import io.github.jan.supabase.auth.user.UserUpdateBuilder
import io.github.jan.supabase.exceptions.HttpRequestException
import io.github.jan.supabase.exceptions.RestException
import io.github.jan.supabase.logging.SupabaseLogger
import io.github.jan.supabase.logging.e
import io.github.jan.supabase.plugins.CustomSerializationPlugin
import io.github.jan.supabase.plugins.MainPlugin
import io.github.jan.supabase.plugins.SupabasePluginProvider
package io.supabase.auth

import io.ktor.client.plugins.HttpRequestTimeoutException
import io.supabase.SupabaseClient
import io.supabase.auth.admin.AdminApi
import io.supabase.auth.exception.AuthRestException
import io.supabase.auth.exception.AuthWeakPasswordException
import io.supabase.auth.mfa.MfaApi
import io.supabase.auth.providers.AuthProvider
import io.supabase.auth.providers.ExternalAuthConfigDefaults
import io.supabase.auth.providers.Google
import io.supabase.auth.providers.OAuthProvider
import io.supabase.auth.providers.builtin.Email
import io.supabase.auth.providers.builtin.Phone
import io.supabase.auth.providers.builtin.SSO
import io.supabase.auth.status.SessionSource
import io.supabase.auth.status.SessionStatus
import io.supabase.auth.user.UserInfo
import io.supabase.auth.user.UserSession
import io.supabase.auth.user.UserUpdateBuilder
import io.supabase.exceptions.HttpRequestException
import io.supabase.exceptions.RestException
import io.supabase.logging.SupabaseLogger
import io.supabase.logging.e
import io.supabase.plugins.CustomSerializationPlugin
import io.supabase.plugins.MainPlugin
import io.supabase.plugins.SupabasePluginProvider
import kotlinx.coroutines.flow.StateFlow
import kotlinx.serialization.json.JsonObject

Expand Down Expand Up @@ -314,7 +314,8 @@ sealed interface Auth : MainPlugin<AuthConfig>, CustomSerializationPlugin {
* @param accessToken The jwt token to import
* @param retrieveUser Whether to retrieve the user profile or not
*/
suspend fun importAuthToken(accessToken: String, refreshToken: String = "", retrieveUser: Boolean = false, autoRefresh: Boolean = if(refreshToken.isNotBlank()) config.alwaysAutoRefresh else false) = importSession(UserSession(accessToken, refreshToken, "", "", 0L, "", if(retrieveUser) tryToGetUser(accessToken) else null), autoRefresh)
suspend fun importAuthToken(accessToken: String, refreshToken: String = "", retrieveUser: Boolean = false, autoRefresh: Boolean = if(refreshToken.isNotBlank()) config.alwaysAutoRefresh else false) = importSession(
UserSession(accessToken, refreshToken, "", "", 0L, "", if (retrieveUser) tryToGetUser(accessToken) else null), autoRefresh)

/**
* Retrieves the latest session from storage and starts auto-refreshing if [autoRefresh] is true or [AuthConfig.alwaysAutoRefresh] as the default parameter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import io.github.jan.supabase.SupabaseClientBuilder
import io.github.jan.supabase.SupabaseSerializer
import io.github.jan.supabase.plugins.CustomSerializationConfig
import io.github.jan.supabase.plugins.MainConfig
import io.supabase.SupabaseClientBuilder
import io.supabase.SupabaseSerializer
import io.supabase.plugins.CustomSerializationConfig
import io.supabase.plugins.MainConfig
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlin.time.Duration
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.github.jan.supabase.auth
package io.supabase.auth

import io.github.jan.supabase.auth.user.UserSession
import io.github.jan.supabase.encodeToJsonElement
import io.github.jan.supabase.logging.d
import io.supabase.auth.user.UserSession
import io.supabase.encodeToJsonElement
import io.supabase.logging.d
import kotlinx.serialization.json.jsonObject

internal fun noDeeplinkError(arg: String): Nothing = error("""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,44 +1,44 @@
package io.github.jan.supabase.auth

import io.github.jan.supabase.SupabaseClient
import io.github.jan.supabase.annotations.SupabaseExperimental
import io.github.jan.supabase.annotations.SupabaseInternal
import io.github.jan.supabase.auth.admin.AdminApi
import io.github.jan.supabase.auth.admin.AdminApiImpl
import io.github.jan.supabase.auth.exception.AuthRestException
import io.github.jan.supabase.auth.exception.AuthSessionMissingException
import io.github.jan.supabase.auth.exception.AuthWeakPasswordException
import io.github.jan.supabase.auth.mfa.MfaApi
import io.github.jan.supabase.auth.mfa.MfaApiImpl
import io.github.jan.supabase.auth.providers.AuthProvider
import io.github.jan.supabase.auth.providers.ExternalAuthConfigDefaults
import io.github.jan.supabase.auth.providers.OAuthProvider
import io.github.jan.supabase.auth.providers.builtin.OTP
import io.github.jan.supabase.auth.providers.builtin.SSO
import io.github.jan.supabase.auth.status.RefreshFailureCause
import io.github.jan.supabase.auth.status.SessionSource
import io.github.jan.supabase.auth.status.SessionStatus
import io.github.jan.supabase.auth.user.UserInfo
import io.github.jan.supabase.auth.user.UserSession
import io.github.jan.supabase.auth.user.UserUpdateBuilder
import io.github.jan.supabase.bodyOrNull
import io.github.jan.supabase.exceptions.BadRequestRestException
import io.github.jan.supabase.exceptions.RestException
import io.github.jan.supabase.exceptions.UnauthorizedRestException
import io.github.jan.supabase.exceptions.UnknownRestException
import io.github.jan.supabase.logging.d
import io.github.jan.supabase.logging.e
import io.github.jan.supabase.logging.i
import io.github.jan.supabase.putJsonObject
import io.github.jan.supabase.safeBody
import io.github.jan.supabase.supabaseJson
package io.supabase.auth

import io.ktor.client.call.body
import io.ktor.client.request.parameter
import io.ktor.client.statement.HttpResponse
import io.ktor.client.statement.bodyAsText
import io.ktor.client.statement.request
import io.ktor.http.HttpMethod
import io.ktor.http.HttpStatusCode
import io.supabase.SupabaseClient
import io.supabase.annotations.SupabaseExperimental
import io.supabase.annotations.SupabaseInternal
import io.supabase.auth.admin.AdminApi
import io.supabase.auth.admin.AdminApiImpl
import io.supabase.auth.exception.AuthRestException
import io.supabase.auth.exception.AuthSessionMissingException
import io.supabase.auth.exception.AuthWeakPasswordException
import io.supabase.auth.mfa.MfaApi
import io.supabase.auth.mfa.MfaApiImpl
import io.supabase.auth.providers.AuthProvider
import io.supabase.auth.providers.ExternalAuthConfigDefaults
import io.supabase.auth.providers.OAuthProvider
import io.supabase.auth.providers.builtin.OTP
import io.supabase.auth.providers.builtin.SSO
import io.supabase.auth.status.RefreshFailureCause
import io.supabase.auth.status.SessionSource
import io.supabase.auth.status.SessionStatus
import io.supabase.auth.user.UserInfo
import io.supabase.auth.user.UserSession
import io.supabase.auth.user.UserUpdateBuilder
import io.supabase.bodyOrNull
import io.supabase.exceptions.BadRequestRestException
import io.supabase.exceptions.RestException
import io.supabase.exceptions.UnauthorizedRestException
import io.supabase.exceptions.UnknownRestException
import io.supabase.logging.d
import io.supabase.logging.e
import io.supabase.logging.i
import io.supabase.putJsonObject
import io.supabase.safeBody
import io.supabase.supabaseJson
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
Expand Down Expand Up @@ -522,8 +522,12 @@ internal class AuthImpl(

private fun checkErrorCodes(error: GoTrueErrorResponse, response: HttpResponse): RestException? {
return when (error.error) {
AuthWeakPasswordException.CODE -> AuthWeakPasswordException(error.description, response.status.value, error.weakPassword?.reasons ?: emptyList())
AuthSessionMissingException.CODE -> {
AuthWeakPasswordException.Companion.CODE -> AuthWeakPasswordException(
error.description,
response.status.value,
error.weakPassword?.reasons ?: emptyList()
)
AuthSessionMissingException.Companion.CODE -> {
authScope.launch {
Auth.logger.e { "Received session not found api error. Clearing session..." }
clearSession()
Expand Down
Loading
Loading