All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.supertokens.sdk.recipes.totp.TotpRecipe.kt Maven / Gradle / Ivy

The newest version!
package com.supertokens.sdk.recipes.totp

import com.supertokens.sdk.SuperTokensClient
import com.supertokens.sdk.recipes.BuildRecipe
import com.supertokens.sdk.recipes.Recipe
import com.supertokens.sdk.recipes.RecipeBuilder
import com.supertokens.sdk.recipes.RecipeConfig
import com.supertokens.sdk.recipes.totp.usecases.CreateTotpDeviceResult
import com.supertokens.sdk.recipes.totp.usecases.CreateTotpDeviceUseCase
import com.supertokens.sdk.recipes.totp.usecases.GetTotpDevicesUseCase
import com.supertokens.sdk.recipes.totp.usecases.RemoveTotpDeviceUseCase
import com.supertokens.sdk.recipes.totp.usecases.VerifyTotpDeviceUseCase
import com.supertokens.sdk.recipes.totp.usecases.VerifyTotpUseCase

class TotpConfig : RecipeConfig

class TotpRecipe(
    private val superTokens: SuperTokensClient,
    private val config: TotpConfig,
) : Recipe {

  private val getTotpDevicesUseCase by lazy {
    GetTotpDevicesUseCase(
        client = superTokens.apiClient,
    )
  }

  private val createDeviceUseCase by lazy {
    CreateTotpDeviceUseCase(
        client = superTokens.apiClient,
    )
  }

  private val removeDeviceUseCase by lazy {
    RemoveTotpDeviceUseCase(
        client = superTokens.apiClient,
    )
  }

  private val verifyDeviceUseCase by lazy {
    VerifyTotpDeviceUseCase(
        client = superTokens.apiClient,
    )
  }

  private val verifyUseCase by lazy {
    VerifyTotpUseCase(
        client = superTokens.apiClient,
    )
  }

  suspend fun getDevices() = getTotpDevicesUseCase.getTotpDevices()

  suspend fun createDevice(name: String): CreateTotpDeviceResult =
      createDeviceUseCase.createDevice(name = name)

  suspend fun removeDevice(name: String) = removeDeviceUseCase.removeDevice(name = name)

  suspend fun verifyDevice(name: String, totp: String) =
      verifyDeviceUseCase.verifyDevice(deviceName = name, totp = totp)

  suspend fun verify(totp: String) = verifyUseCase.verifyCode(totp = totp)
}

object Totp : RecipeBuilder() {

  override fun install(configure: TotpConfig.() -> Unit): BuildRecipe {
    val config = TotpConfig().apply(configure)

    return { TotpRecipe(it, config) }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy