Fetch remote selfoss configuration
Fetch from /api/about the selfoss configuration to determine if we're using a public access instanceIf both authentication and public mode are enabled in the configuration and we're logging in without authentication, then we're using public access.
This commit is contained in:
parent
90532cf501
commit
d0f649bb27
@ -128,7 +128,7 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
|||||||
|
|
||||||
private fun goToMain() {
|
private fun goToMain() {
|
||||||
CoroutineScope(Dispatchers.Main).launch {
|
CoroutineScope(Dispatchers.Main).launch {
|
||||||
repository.updateApiVersion()
|
repository.updateApiInformation()
|
||||||
ACRA.errorReporter.putCustomData("SELFOSS_API_VERSION", appSettingsService.getApiVersion().toString())
|
ACRA.errorReporter.putCustomData("SELFOSS_API_VERSION", appSettingsService.getApiVersion().toString())
|
||||||
}
|
}
|
||||||
val intent = Intent(this, HomeActivity::class.java)
|
val intent = Intent(this, HomeActivity::class.java)
|
||||||
|
@ -49,7 +49,7 @@ class RepositoryTest {
|
|||||||
repository = Repository(api, appSettingsService, isConnectionAvailable, db)
|
repository = Repository(api, appSettingsService, isConnectionAvailable, db)
|
||||||
|
|
||||||
runBlocking {
|
runBlocking {
|
||||||
repository.updateApiVersion()
|
repository.updateApiInformation()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,9 +61,9 @@ class RepositoryTest {
|
|||||||
every { appSettingsService.isItemCachingEnabled() } returns false
|
every { appSettingsService.isItemCachingEnabled() } returns false
|
||||||
every { appSettingsService.isUpdateSourcesEnabled() } returns false
|
every { appSettingsService.isUpdateSourcesEnabled() } returns false
|
||||||
|
|
||||||
coEvery { api.version() } returns StatusAndData(
|
coEvery { api.apiInformation() } returns StatusAndData(
|
||||||
success = true,
|
success = true,
|
||||||
data = SelfossModel.ApiVersion("2.19-ba1e8e3", "4.0.0")
|
data = SelfossModel.ApiInformation("2.19-ba1e8e3", "4.0.0")
|
||||||
)
|
)
|
||||||
coEvery { api.stats() } returns StatusAndData(
|
coEvery { api.stats() } returns StatusAndData(
|
||||||
success = true,
|
success = true,
|
||||||
@ -81,7 +81,7 @@ class RepositoryTest {
|
|||||||
fun instantiate_repository() {
|
fun instantiate_repository() {
|
||||||
initializeRepository()
|
initializeRepository()
|
||||||
|
|
||||||
coVerify(exactly = 1) { api.version() }
|
coVerify(exactly = 1) { api.apiInformation() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -90,7 +90,7 @@ class RepositoryTest {
|
|||||||
|
|
||||||
initializeRepository(MutableStateFlow(false))
|
initializeRepository(MutableStateFlow(false))
|
||||||
|
|
||||||
coVerify(exactly = 0) { api.version() }
|
coVerify(exactly = 0) { api.apiInformation() }
|
||||||
coVerify(exactly = 0) { api.stats() }
|
coVerify(exactly = 0) { api.stats() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ class RepositoryTest {
|
|||||||
@Test
|
@Test
|
||||||
fun get_api_1_date_with_api_4_version_stored() {
|
fun get_api_1_date_with_api_4_version_stored() {
|
||||||
every { appSettingsService.getApiVersion() } returns 4
|
every { appSettingsService.getApiVersion() } returns 4
|
||||||
coEvery { api.version() } returns StatusAndData(success = false, null)
|
coEvery { api.apiInformation() } returns StatusAndData(success = false, null)
|
||||||
val itemParameters = FakeItemParameters()
|
val itemParameters = FakeItemParameters()
|
||||||
itemParameters.datetime = "2021-04-23 11:45:32"
|
itemParameters.datetime = "2021-04-23 11:45:32"
|
||||||
coEvery { api.getItems(any(), any(), any(), any(), any(), any(), any()) } returns
|
coEvery { api.getItems(any(), any(), any(), any(), any(), any(), any()) } returns
|
||||||
|
@ -35,9 +35,10 @@ class SelfossModel {
|
|||||||
)
|
)
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class ApiVersion(
|
data class ApiInformation(
|
||||||
val version: String?,
|
val version: String?,
|
||||||
val apiversion: String?
|
val apiversion: String?,
|
||||||
|
val configuration: ApiConfiguration?
|
||||||
) {
|
) {
|
||||||
fun getApiMajorVersion(): Int {
|
fun getApiMajorVersion(): Int {
|
||||||
var versionNumber = 0
|
var versionNumber = 0
|
||||||
@ -46,6 +47,20 @@ class SelfossModel {
|
|||||||
}
|
}
|
||||||
return versionNumber
|
return versionNumber
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getApiConfiguration() = configuration ?: ApiConfiguration(null, null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlinx.serialization.Serializable
|
||||||
|
data class ApiConfiguration(
|
||||||
|
@Serializable(with = BooleanSerializer::class)
|
||||||
|
val publicMode: Boolean?,
|
||||||
|
@Serializable(with = BooleanSerializer::class)
|
||||||
|
val authEnabled: Boolean?
|
||||||
|
) {
|
||||||
|
fun isAuthEnabled() = authEnabled ?: true
|
||||||
|
|
||||||
|
fun isPublicModeEnabled() = publicMode ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
|
@ -439,13 +439,20 @@ class Repository(
|
|||||||
api.refreshLoginInformation()
|
api.refreshLoginInformation()
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun updateApiVersion() {
|
suspend fun updateApiInformation() {
|
||||||
val apiMajorVersion = appSettingsService.getApiVersion()
|
val apiMajorVersion = appSettingsService.getApiVersion()
|
||||||
|
|
||||||
if (isNetworkAvailable()) {
|
if (isNetworkAvailable()) {
|
||||||
val fetchedVersion = api.version()
|
val fetchedInformation = api.apiInformation()
|
||||||
if (fetchedVersion.success && fetchedVersion.data != null && fetchedVersion.data.getApiMajorVersion() != apiMajorVersion) {
|
if (fetchedInformation.success && fetchedInformation.data != null) {
|
||||||
appSettingsService.updateApiVersion(fetchedVersion.data.getApiMajorVersion())
|
if (fetchedInformation.data.getApiMajorVersion() != apiMajorVersion) {
|
||||||
|
appSettingsService.updateApiVersion(fetchedInformation.data.getApiMajorVersion())
|
||||||
|
}
|
||||||
|
if (appSettingsService.getUserName().isEmpty()
|
||||||
|
&& fetchedInformation.data.getApiConfiguration().isAuthEnabled()
|
||||||
|
&& fetchedInformation.data.getApiConfiguration().isPublicModeEnabled()) {
|
||||||
|
appSettingsService.updatePublicAccess(true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,7 +191,7 @@ class SelfossApi(private val appSettingsService: AppSettingsService) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
suspend fun version(): StatusAndData<SelfossModel.ApiVersion> =
|
suspend fun apiInformation(): StatusAndData<SelfossModel.ApiInformation> =
|
||||||
bodyOrFailure(client.tryToGet(url("/api/about")))
|
bodyOrFailure(client.tryToGet(url("/api/about")))
|
||||||
|
|
||||||
suspend fun markAsRead(id: String): SuccessResponse =
|
suspend fun markAsRead(id: String): SuccessResponse =
|
||||||
|
@ -7,6 +7,7 @@ class AppSettingsService {
|
|||||||
|
|
||||||
// Api related
|
// Api related
|
||||||
private var _apiVersion: Int = -1
|
private var _apiVersion: Int = -1
|
||||||
|
private var _publicAccess: Boolean? = null
|
||||||
private var _baseUrl: String = ""
|
private var _baseUrl: String = ""
|
||||||
private var _userName: String = ""
|
private var _userName: String = ""
|
||||||
private var _password: String = ""
|
private var _password: String = ""
|
||||||
@ -48,10 +49,32 @@ class AppSettingsService {
|
|||||||
return _apiVersion
|
return _apiVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun updateApiVersion(apiMajorVersion: Int) {
|
||||||
|
settings.putInt(API_VERSION_MAJOR, apiMajorVersion)
|
||||||
|
refreshApiVersion()
|
||||||
|
}
|
||||||
|
|
||||||
private fun refreshApiVersion() {
|
private fun refreshApiVersion() {
|
||||||
_apiVersion = settings.getInt(API_VERSION_MAJOR, -1)
|
_apiVersion = settings.getInt(API_VERSION_MAJOR, -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getPublicAccess(): Boolean {
|
||||||
|
if (_publicAccess == null) {
|
||||||
|
refreshPublicAccess()
|
||||||
|
}
|
||||||
|
return _publicAccess!!
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updatePublicAccess(publicAccess: Boolean) {
|
||||||
|
settings.putBoolean(API_PUBLIC_ACCESS, publicAccess)
|
||||||
|
refreshPublicAccess()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun refreshPublicAccess() {
|
||||||
|
_publicAccess = settings.getBoolean(API_PUBLIC_ACCESS, false)
|
||||||
|
}
|
||||||
|
|
||||||
fun getBaseUrl(): String {
|
fun getBaseUrl(): String {
|
||||||
if (_baseUrl.isEmpty()) {
|
if (_baseUrl.isEmpty()) {
|
||||||
refreshBaseUrl()
|
refreshBaseUrl()
|
||||||
@ -333,6 +356,7 @@ class AppSettingsService {
|
|||||||
refreshUsername()
|
refreshUsername()
|
||||||
refreshBaseUrl()
|
refreshBaseUrl()
|
||||||
refreshApiVersion()
|
refreshApiVersion()
|
||||||
|
refreshPublicAccess()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshUserSettings() {
|
fun refreshUserSettings() {
|
||||||
@ -376,11 +400,6 @@ class AppSettingsService {
|
|||||||
refreshApiSettings()
|
refreshApiSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateApiVersion(apiMajorVersion: Int) {
|
|
||||||
settings.putInt(API_VERSION_MAJOR, apiMajorVersion)
|
|
||||||
refreshApiVersion()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun clearAll() {
|
fun clearAll() {
|
||||||
settings.clear()
|
settings.clear()
|
||||||
refreshApiSettings()
|
refreshApiSettings()
|
||||||
@ -409,6 +428,8 @@ class AppSettingsService {
|
|||||||
|
|
||||||
const val API_VERSION_MAJOR = "apiVersionMajor"
|
const val API_VERSION_MAJOR = "apiVersionMajor"
|
||||||
|
|
||||||
|
const val API_PUBLIC_ACCESS = "apiPublicAccess"
|
||||||
|
|
||||||
const val API_ITEMS_NUMBER = "prefer_api_items_number"
|
const val API_ITEMS_NUMBER = "prefer_api_items_number"
|
||||||
|
|
||||||
const val API_TIMEOUT = "api_timeout"
|
const val API_TIMEOUT = "api_timeout"
|
||||||
|
Loading…
Reference in New Issue
Block a user