# FMPUser

interface FMPUser

Представляет пользователя FMP. FMP поддерживает многопользовательский режим. Для параллельной работы нескольких пользователей требуется создание объектов FMP для каждого пользователя.

#### Since

21.04.01

#### Samples

ru.fsight.fmp.doc.sample.userCreate

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPResult
    import ru.fsight.fmp.FMPUser
    import ru.fsight.fmp.exception.NetworkIOException
    import ru.fsight.fmp.exception.NoCredentialsException
    import ru.fsight.fmp.exception.ServerException
    import ru.fsight.fmp.exception.UnauthorizedException
    fun main() {
       //sampleStart
       /*
     * Пример аутентификации по паролю.
     */
    // Выполняем попытку аутентификации по паролю.
    val authPassword: FMPResult<Boolean> = user.auth()

    if (authPassword.result) {
    	// Успешная аутентификация по паролю.
    } else {
    	// Ошибка аутентификации.
    	when (authPassword.exception) {
    		is UnauthorizedException -> { /* Неверный пароль. */ }
    		is NetworkIOException -> { /* Ошибка подключения к серверу. */ }
    		is ServerException -> { /* Ошибка на сервере. */ }
    		else -> { /* Иная ошибка. */ }
    	}
    }
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPResult
    import ru.fsight.fmp.FMPUser
    import ru.fsight.fmp.exception.NetworkIOException
    import ru.fsight.fmp.exception.NoCredentialsException
    import ru.fsight.fmp.exception.ServerException
    import ru.fsight.fmp.exception.UnauthorizedException
    fun main() {
       //sampleStart
       /*
     * Пример аутентификации по токену.
     */
    // Для начала требуется хотя бы раз успешно аутентифицироваться по паролю.

    // Выполняем попытку аутентификации по токену.
    val authToken: FMPResult<Boolean> = user.auth()

    if (authToken.result) {
    	// Успешная аутентификация по токену.
    } else {
    	// Ошибка использования токенов.
    	when (authToken.exception) {
    		is UnauthorizedException -> { /* Устаревший токен. */ }
    		is NoCredentialsException -> { /* Токена нет, т.е. не было входа по паролю. */ }
    		is NetworkIOException -> { /* Ошибка подключения к серверу. */ }
    		is ServerException -> { /* Ошибка на сервере. */ }
    		else -> { /* Иная ошибка. */ }
    	}
    }
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPResult
    import ru.fsight.fmp.FMPUser
    import ru.fsight.fmp.exception.NetworkIOException
    import ru.fsight.fmp.exception.NoCredentialsException
    import ru.fsight.fmp.exception.ServerException
    import ru.fsight.fmp.exception.UnauthorizedException
    fun main() {
       //sampleStart
       /*
     * Пример отмены аутентификации (удаления токенов).
     */
    val revoke: Boolean =
    	user.revoke().result // Отменить аутентификацию пользователя. Это также удаляет все его токены, но не трогает данные.
       //sampleEnd
    }

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPResult
    import ru.fsight.fmp.FMPUser
    import ru.fsight.fmp.exception.NetworkIOException
    import ru.fsight.fmp.exception.NoCredentialsException
    import ru.fsight.fmp.exception.ServerException
    import ru.fsight.fmp.exception.UnauthorizedException
    fun main() {
       //sampleStart
       /*
     * Аутентификация со сменой пароля.
     */
    val change: FMPResult<Boolean> =
    	user.changePassword("old", "new") // Провести попытку аутентификации со сменой пароля.
    val isChanged: Boolean = change.result // Если true, то пользователь аутентифицирован и пароль изменён.
    val error: Exception? = change.exception // Если возникла ошибка, тут будет содержимое ошибки.
       //sampleEnd
    }

ru.fsight.fmp.doc.sample.userMultiple

    import ru.fsight.fmp.FMP
    import ru.fsight.fmp.FMPResult
    import ru.fsight.fmp.FMPUser
    import ru.fsight.fmp.exception.NetworkIOException
    import ru.fsight.fmp.exception.NoCredentialsException
    import ru.fsight.fmp.exception.ServerException
    import ru.fsight.fmp.exception.UnauthorizedException
    fun main() {
       //sampleStart
       /*
     * Пример параллельной работы нескольких пользователей.
     */
    val builder: FMP.Builder =
    	FMP.Builder()
    		.api(FMP.API.V2)
    		.address("https://example.com")
    		.environment("env1")
    		.project("proj1")
    		.deviceID("test")
    		.storage("/path/to/storage")

    // Создаём FMP для первого пользователя.
    val user1 = builder.username("user1").build()

    // Создаём FMP для второго пользователя.
    val user2 = builder.username("user2").build()

    /* Пользователя user1 и user2 могут выполнять работу одновременно. */
       //sampleEnd
    }

## Properties

cache
Link copied to clipboard
abstract val cache: String

Путь к папке кэша пользователя.

storage
Link copied to clipboard
abstract val storage: String

Путь к папке с файлами пользователя.

token
Link copied to clipboard
abstract val token: String

Токен пользователя.

username
Link copied to clipboard
abstract val username: String

Имя пользователя.

## Functions

auth
Link copied to clipboard
abstract fun auth(): FMPResult<Boolean>

Выполнить попытку аутентификации на сервере по токену.

abstract fun auth(password: String): FMPResult<Boolean>

Выполнить попытку аутентификации на сервере по паролю.

changePassword
Link copied to clipboard
abstract fun changePassword(old: String, new: String): FMPResult<Boolean>

Попытаться изменить пароль пользователя. Смена пароля выполняет auth, поэтому не обязательно выполнять аутентификацию до или после смены пароля.

downloadResources
Link copied to clipboard
abstract fun downloadResources(): FMPResult<Boolean>

Загрузить схему ресурсов вручную. Ресурсы необходимы перед использованием FMPQuery.download и FMPResource.download, но обычно делается автоматически после аутентификации. Вручную может потребоваться обновление, если структура данных на сервере поменялась во время работы приложения.

getResources
Link copied to clipboard
abstract fun getResources(): FMPResult<List<FMPResource>>

Получить список доступных пользователю ресурсов. Для получения метаданных ресурса используется FMPResource.getMeta.

getTokenExpiration
Link copied to clipboard
abstract fun getTokenExpiration(): FMPResult<Long>

Получить время окончания жизни Refresh токена пользователя.

revoke
Link copied to clipboard
abstract fun revoke(): FMPResult<Boolean>

Отменить аутентификацию пользователя. Удаляет все токены пользователя, но не изменяет данные пользователя.

wipe
Link copied to clipboard
abstract fun wipe(): FMPResult<Boolean>

Удалить все данные пользователя. Удаляются только данные из внутренней директории пользователя, которая содержит в себе cache и storage. Также удаляются все данные фреймворка пользователя, включая аутентификацию.

wipeCache
Link copied to clipboard
abstract fun wipeCache(): FMPResult<Boolean>

Удалить кэш пользователя. Удаляются только данные по пути cache.

wipeStorage
Link copied to clipboard
abstract fun wipeStorage(): FMPResult<Boolean>

Удалить файлы пользователя. Удаляются только данные по пути storage.