commonMain.net.folivo.trixnity.clientserverapi.client.AuthenticationApiClient.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of trixnity-clientserverapi-client Show documentation
Show all versions of trixnity-clientserverapi-client Show documentation
Multiplatform Kotlin SDK for matrix-protocol
package net.folivo.trixnity.clientserverapi.client
import net.folivo.trixnity.clientserverapi.model.authentication.*
import net.folivo.trixnity.core.model.UserId
interface AuthenticationApiClient {
/**
* @see [WhoAmI]
*/
suspend fun whoAmI(asUserId: UserId? = null): Result
/**
* @see [IsRegistrationTokenValid]
*/
suspend fun isRegistrationTokenValid(
token: String
): Result
/**
* @see [IsUsernameAvailable]
*/
suspend fun isUsernameAvailable(
username: String
): Result
/**
* @see [GetEmailRequestTokenForPassword]
*/
suspend fun getEmailRequestTokenForPassword(
request: GetEmailRequestTokenForPassword.Request
): Result
/**
* @see [GetEmailRequestTokenForRegistration]
*/
suspend fun getEmailRequestTokenForRegistration(
request: GetEmailRequestTokenForRegistration.Request
): Result
/**
* @see [GetMsisdnRequestTokenForPassword]
*/
suspend fun getMsisdnRequestTokenForPassword(
request: GetMsisdnRequestTokenForPassword.Request
): Result
/**
* @see [GetMsisdnRequestTokenForRegistration]
*/
suspend fun getMsisdnRequestTokenForRegistration(
request: GetMsisdnRequestTokenForRegistration.Request
): Result
/**
* @see [Register]
*/
suspend fun register(
username: String? = null,
password: String? = null,
accountType: AccountType? = null,
deviceId: String? = null,
initialDeviceDisplayName: String? = null,
inhibitLogin: Boolean? = null,
isAppservice: Boolean = false // TODO why is the spec so inconsistent?
): Result>
/**
* @see [SSORedirect]
*/
suspend fun ssoRedirect(
redirectUrl: String,
): Result
/**
* @see [SSORedirectTo]
*/
suspend fun ssoRedirect(
redirectUrl: String,
idpId: String,
): Result
/**
* @see [GetLoginTypes]
*/
suspend fun getLoginTypes(): Result>
/**
* @see [Login]
*/
@Deprecated("use login with separated password and token")
suspend fun login(
identifier: IdentifierType? = null,
passwordOrToken: String,
type: LoginType = LoginType.Password,
deviceId: String? = null,
initialDeviceDisplayName: String? = null
): Result
/**
* @see [Login]
*/
suspend fun login(
identifier: IdentifierType? = null,
password: String? = null,
token: String? = null,
type: LoginType = LoginType.Password,
deviceId: String? = null,
initialDeviceDisplayName: String? = null
): Result
/**
* @see [Logout]
*/
suspend fun logout(asUserId: UserId? = null): Result
/**
* @see [LogoutAll]
*/
suspend fun logoutAll(asUserId: UserId? = null): Result
/**
* @see [DeactivateAccount]
*/
suspend fun deactivateAccount(
identityServer: String? = null,
erase: Boolean? = null,
asUserId: UserId? = null
): Result>
/**
* @see [ChangePassword]
*/
suspend fun changePassword(
newPassword: String,
logoutDevices: Boolean = false
): Result>
/**
* @see [GetThirdPartyIdentifiers]
*/
suspend fun getThirdPartyIdentifiers(
asUserId: UserId? = null,
): Result>
/**
* @see [AddThirdPartyIdentifiers]
*/
suspend fun addThirdPartyIdentifiers(
clientSecret: String,
sessionId: String,
asUserId: UserId? = null,
): Result>
/**
* @see [BindThirdPartyIdentifiers]
*/
suspend fun bindThirdPartyIdentifiers(
clientSecret: String,
sessionId: String,
idAccessToken: String,
idServer: String,
asUserId: UserId? = null,
): Result
/**
* @see [DeleteThirdPartyIdentifiers]
*/
suspend fun deleteThirdPartyIdentifiers(
address: String,
idServer: String? = null,
medium: ThirdPartyIdentifier.Medium,
asUserId: UserId? = null,
): Result
/**
* @see [UnbindThirdPartyIdentifiers]
*/
suspend fun unbindThirdPartyIdentifiers(
address: String,
idServer: String? = null,
medium: ThirdPartyIdentifier.Medium,
asUserId: UserId? = null,
): Result
/**
* @see [GetOIDCRequestToken]
*/
suspend fun getOIDCRequestToken(userId: UserId, asUserId: UserId? = null): Result
/**
* @see [Refresh]
*/
suspend fun refresh(
refreshToken: String? = null,
): Result
/**
* @see [GetToken]
*/
suspend fun getToken(
asUserId: UserId? = null
): Result>
}
class AuthenticationApiClientImpl(
private val httpClient: MatrixClientServerApiHttpClient
) : AuthenticationApiClient {
override suspend fun whoAmI(asUserId: UserId?): Result =
httpClient.request(WhoAmI(asUserId))
override suspend fun isRegistrationTokenValid(
token: String
): Result =
httpClient.request(IsRegistrationTokenValid(token)).map { it.valid }
override suspend fun isUsernameAvailable(
username: String
): Result =
httpClient.request(IsUsernameAvailable(username))
override suspend fun getEmailRequestTokenForPassword(
request: GetEmailRequestTokenForPassword.Request
): Result =
httpClient.request(GetEmailRequestTokenForPassword, request)
override suspend fun getEmailRequestTokenForRegistration(
request: GetEmailRequestTokenForRegistration.Request
): Result =
httpClient.request(GetEmailRequestTokenForRegistration, request)
override suspend fun getMsisdnRequestTokenForPassword(
request: GetMsisdnRequestTokenForPassword.Request
): Result =
httpClient.request(GetMsisdnRequestTokenForPassword, request)
override suspend fun getMsisdnRequestTokenForRegistration(
request: GetMsisdnRequestTokenForRegistration.Request
): Result =
httpClient.request(GetMsisdnRequestTokenForRegistration, request)
override suspend fun register(
username: String?,
password: String?,
accountType: AccountType?,
deviceId: String?,
initialDeviceDisplayName: String?,
inhibitLogin: Boolean?,
isAppservice: Boolean // TODO why is the spec so inconsistent?
): Result> =
httpClient.uiaRequest(
Register(accountType),
Register.Request(
username = username,
password = password,
deviceId = deviceId,
initialDeviceDisplayName = initialDeviceDisplayName,
inhibitLogin = inhibitLogin,
type = if (isAppservice) "m.login.application_service" else null
)
)
override suspend fun ssoRedirect(redirectUrl: String) = httpClient.request(SSORedirect(redirectUrl))
override suspend fun ssoRedirect(redirectUrl: String, idpId: String) =
httpClient.request(SSORedirectTo(idpId, redirectUrl))
override suspend fun getLoginTypes(): Result> =
httpClient.request(GetLoginTypes).mapCatching { it.flows }
@Deprecated("use login with separated password and token")
override suspend fun login(
identifier: IdentifierType?,
passwordOrToken: String,
type: LoginType,
deviceId: String?,
initialDeviceDisplayName: String?
): Result =
httpClient.request(
Login, Login.Request(
type = type.name,
identifier = identifier,
password = if (type is LoginType.Password) passwordOrToken else null,
token = if (type is LoginType.Token) passwordOrToken else null,
deviceId = deviceId,
initialDeviceDisplayName = initialDeviceDisplayName
)
)
override suspend fun login(
identifier: IdentifierType?,
password: String?,
token: String?,
type: LoginType,
deviceId: String?,
initialDeviceDisplayName: String?
): Result =
httpClient.request(
Login, Login.Request(
type = type.name,
identifier = identifier,
password = password,
token = token,
deviceId = deviceId,
initialDeviceDisplayName = initialDeviceDisplayName
)
)
override suspend fun logout(asUserId: UserId?): Result =
httpClient.request(Logout(asUserId))
override suspend fun logoutAll(asUserId: UserId?): Result =
httpClient.request(LogoutAll(asUserId))
override suspend fun deactivateAccount(
identityServer: String?,
erase: Boolean?,
asUserId: UserId?
): Result> =
httpClient.uiaRequest(DeactivateAccount(asUserId), DeactivateAccount.Request(identityServer, erase))
override suspend fun changePassword(
newPassword: String,
logoutDevices: Boolean
): Result> =
httpClient.uiaRequest(ChangePassword, ChangePassword.Request(newPassword, logoutDevices))
override suspend fun getThirdPartyIdentifiers(
asUserId: UserId?,
): Result> =
httpClient.request(GetThirdPartyIdentifiers(asUserId)).map { it.thirdPartyIdentifiers }
override suspend fun addThirdPartyIdentifiers(
clientSecret: String,
sessionId: String,
asUserId: UserId?,
): Result> =
httpClient.uiaRequest(
AddThirdPartyIdentifiers(asUserId),
AddThirdPartyIdentifiers.Request(clientSecret = clientSecret, sessionId = sessionId)
)
override suspend fun bindThirdPartyIdentifiers(
clientSecret: String,
sessionId: String,
idAccessToken: String,
idServer: String,
asUserId: UserId?,
): Result =
httpClient.request(
BindThirdPartyIdentifiers(asUserId),
BindThirdPartyIdentifiers.Request(
clientSecret = clientSecret,
sessionId = sessionId,
idAccessToken = idAccessToken,
idServer = idServer
)
)
override suspend fun deleteThirdPartyIdentifiers(
address: String,
idServer: String?,
medium: ThirdPartyIdentifier.Medium,
asUserId: UserId?,
): Result =
httpClient.request(
DeleteThirdPartyIdentifiers(asUserId),
DeleteThirdPartyIdentifiers.Request(
address = address,
idServer = idServer,
medium = medium
)
)
override suspend fun unbindThirdPartyIdentifiers(
address: String,
idServer: String?,
medium: ThirdPartyIdentifier.Medium,
asUserId: UserId?,
): Result =
httpClient.request(
UnbindThirdPartyIdentifiers(asUserId),
UnbindThirdPartyIdentifiers.Request(
address = address,
idServer = idServer,
medium = medium
)
)
override suspend fun getOIDCRequestToken(userId: UserId, asUserId: UserId?): Result =
httpClient.request(GetOIDCRequestToken(userId, asUserId))
override suspend fun refresh(refreshToken: String?): Result =
httpClient.request(Refresh, Refresh.Request(refreshToken))
override suspend fun getToken(asUserId: UserId?): Result> =
httpClient.uiaRequest(GetToken(asUserId))
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy