mirror of
https://github.com/bitwarden/android.git
synced 2025-12-11 04:39:19 -06:00
[PM-20192] Migrate CiphersService to network module (#5052)
This commit is contained in:
parent
83de8b888d
commit
2d416eade5
@ -1,10 +1,10 @@
|
||||
package com.x8bit.bitwarden.data.vault.datasource.network.di
|
||||
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.bitwarden.network.service.CiphersServiceImpl
|
||||
import com.bitwarden.network.service.FolderService
|
||||
import com.bitwarden.network.service.FolderServiceImpl
|
||||
import com.x8bit.bitwarden.data.platform.datasource.network.retrofit.Retrofits
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersServiceImpl
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.DownloadService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.DownloadServiceImpl
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SendsService
|
||||
|
||||
@ -9,6 +9,8 @@ import com.bitwarden.network.model.AttachmentJsonResponse
|
||||
import com.bitwarden.network.model.CreateCipherInOrganizationJsonRequest
|
||||
import com.bitwarden.network.model.ShareCipherJsonRequest
|
||||
import com.bitwarden.network.model.UpdateCipherCollectionsJsonRequest
|
||||
import com.bitwarden.network.model.UpdateCipherResponseJson
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.bitwarden.vault.AttachmentView
|
||||
import com.bitwarden.vault.Cipher
|
||||
import com.bitwarden.vault.CipherView
|
||||
@ -16,8 +18,6 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
||||
import com.x8bit.bitwarden.data.platform.error.NoActiveUserException
|
||||
import com.x8bit.bitwarden.data.platform.manager.ReviewPromptManager
|
||||
import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateCipherResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
import com.x8bit.bitwarden.data.vault.manager.model.DownloadResult
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.CreateAttachmentResult
|
||||
|
||||
@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.vault.manager.di
|
||||
|
||||
import android.content.Context
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
||||
import com.x8bit.bitwarden.data.auth.datasource.sdk.AuthSdkSource
|
||||
import com.x8bit.bitwarden.data.auth.manager.TrustedDeviceManager
|
||||
@ -10,7 +11,6 @@ import com.x8bit.bitwarden.data.platform.manager.AppStateManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.ReviewPromptManager
|
||||
import com.x8bit.bitwarden.data.platform.repository.SettingsRepository
|
||||
import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.DownloadService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
import com.x8bit.bitwarden.data.vault.manager.CipherManager
|
||||
|
||||
@ -18,6 +18,7 @@ import com.bitwarden.exporters.ExportFormat
|
||||
import com.bitwarden.fido.Fido2CredentialAutofillView
|
||||
import com.bitwarden.network.model.SyncResponseJson
|
||||
import com.bitwarden.network.model.UpdateFolderResponseJson
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.bitwarden.network.service.FolderService
|
||||
import com.bitwarden.network.util.isNoConnectionError
|
||||
import com.bitwarden.sdk.Fido2CredentialStore
|
||||
@ -52,7 +53,6 @@ import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.CreateFileSendResponse
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.CreateSendJsonResponse
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateSendResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SendsService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SyncService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.x8bit.bitwarden.data.vault.repository.di
|
||||
|
||||
import com.bitwarden.data.manager.DispatcherManager
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.bitwarden.network.service.FolderService
|
||||
import com.x8bit.bitwarden.data.auth.datasource.disk.AuthDiskSource
|
||||
import com.x8bit.bitwarden.data.auth.manager.UserLogoutManager
|
||||
@ -9,7 +10,6 @@ import com.x8bit.bitwarden.data.platform.manager.DatabaseSchemeManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.PushManager
|
||||
import com.x8bit.bitwarden.data.platform.manager.ReviewPromptManager
|
||||
import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SendsService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SyncService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
|
||||
@ -9,11 +9,13 @@ import com.bitwarden.network.model.CreateCipherInOrganizationJsonRequest
|
||||
import com.bitwarden.network.model.ShareCipherJsonRequest
|
||||
import com.bitwarden.network.model.SyncResponseJson
|
||||
import com.bitwarden.network.model.UpdateCipherCollectionsJsonRequest
|
||||
import com.bitwarden.network.model.UpdateCipherResponseJson
|
||||
import com.bitwarden.network.model.createMockAttachment
|
||||
import com.bitwarden.network.model.createMockAttachmentJsonResponse
|
||||
import com.bitwarden.network.model.createMockAttachmentResponse
|
||||
import com.bitwarden.network.model.createMockCipher
|
||||
import com.bitwarden.network.model.createMockCipherJsonRequest
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.bitwarden.vault.Attachment
|
||||
import com.bitwarden.vault.AttachmentView
|
||||
import com.bitwarden.vault.Cipher
|
||||
@ -24,8 +26,6 @@ import com.x8bit.bitwarden.data.auth.datasource.disk.util.FakeAuthDiskSource
|
||||
import com.x8bit.bitwarden.data.platform.error.NoActiveUserException
|
||||
import com.x8bit.bitwarden.data.platform.manager.ReviewPromptManager
|
||||
import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateCipherResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockAttachmentView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
|
||||
|
||||
@ -31,6 +31,7 @@ import com.bitwarden.network.model.createMockProfile
|
||||
import com.bitwarden.network.model.createMockSend
|
||||
import com.bitwarden.network.model.createMockSendJsonRequest
|
||||
import com.bitwarden.network.model.createMockSyncResponse
|
||||
import com.bitwarden.network.service.CiphersService
|
||||
import com.bitwarden.network.service.FolderService
|
||||
import com.bitwarden.sdk.Fido2CredentialStore
|
||||
import com.bitwarden.send.SendType
|
||||
@ -63,7 +64,6 @@ import com.x8bit.bitwarden.data.vault.datasource.disk.VaultDiskSource
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.CreateFileSendResponse
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.CreateSendJsonResponse
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateSendResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.CiphersService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SendsService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.service.SyncService
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.VaultSdkSource
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package com.bitwarden.network.model
|
||||
|
||||
/**
|
||||
* Information about a cipher attachment to share.
|
||||
*
|
||||
* @property id The attachment's ID.
|
||||
* @property key The attachment's encrypted key value.
|
||||
* @property fileName The attachment's encrypted file name.
|
||||
*/
|
||||
data class AttachmentInfo(
|
||||
val id: String,
|
||||
val key: String,
|
||||
val fileName: String?,
|
||||
)
|
||||
@ -1,4 +1,4 @@
|
||||
package com.x8bit.bitwarden.data.vault.datasource.network.model
|
||||
package com.bitwarden.network.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@ -1,6 +1,5 @@
|
||||
package com.x8bit.bitwarden.data.vault.datasource.network.model
|
||||
package com.bitwarden.network.model
|
||||
|
||||
import com.bitwarden.network.model.SyncResponseJson
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
package com.x8bit.bitwarden.data.vault.datasource.network.service
|
||||
package com.bitwarden.network.service
|
||||
|
||||
import com.bitwarden.network.model.AttachmentInfo
|
||||
import com.bitwarden.network.model.AttachmentJsonRequest
|
||||
import com.bitwarden.network.model.AttachmentJsonResponse
|
||||
import com.bitwarden.network.model.CipherJsonRequest
|
||||
import com.bitwarden.network.model.CreateCipherInOrganizationJsonRequest
|
||||
import com.bitwarden.network.model.ImportCiphersJsonRequest
|
||||
import com.bitwarden.network.model.ImportCiphersResponseJson
|
||||
import com.bitwarden.network.model.ShareCipherJsonRequest
|
||||
import com.bitwarden.network.model.SyncResponseJson
|
||||
import com.bitwarden.network.model.UpdateCipherCollectionsJsonRequest
|
||||
import com.bitwarden.vault.Attachment
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.ImportCiphersResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateCipherResponseJson
|
||||
import com.bitwarden.network.model.UpdateCipherResponseJson
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
@ -67,7 +67,7 @@ interface CiphersService {
|
||||
*/
|
||||
suspend fun shareAttachment(
|
||||
cipherId: String,
|
||||
attachment: Attachment,
|
||||
attachment: AttachmentInfo,
|
||||
organizationId: String,
|
||||
encryptedFile: File,
|
||||
): Result<Unit>
|
||||
@ -1,25 +1,24 @@
|
||||
package com.x8bit.bitwarden.data.vault.datasource.network.service
|
||||
package com.bitwarden.network.service
|
||||
|
||||
import androidx.core.net.toUri
|
||||
import com.bitwarden.core.data.util.asFailure
|
||||
import com.bitwarden.network.api.AzureApi
|
||||
import com.bitwarden.network.api.CiphersApi
|
||||
import com.bitwarden.network.model.AttachmentInfo
|
||||
import com.bitwarden.network.model.AttachmentJsonRequest
|
||||
import com.bitwarden.network.model.AttachmentJsonResponse
|
||||
import com.bitwarden.network.model.CipherJsonRequest
|
||||
import com.bitwarden.network.model.CreateCipherInOrganizationJsonRequest
|
||||
import com.bitwarden.network.model.FileUploadType
|
||||
import com.bitwarden.network.model.ImportCiphersJsonRequest
|
||||
import com.bitwarden.network.model.ImportCiphersResponseJson
|
||||
import com.bitwarden.network.model.ShareCipherJsonRequest
|
||||
import com.bitwarden.network.model.SyncResponseJson
|
||||
import com.bitwarden.network.model.UpdateCipherCollectionsJsonRequest
|
||||
import com.bitwarden.network.model.UpdateCipherResponseJson
|
||||
import com.bitwarden.network.model.toBitwardenError
|
||||
import com.bitwarden.network.util.NetworkErrorCode
|
||||
import com.bitwarden.network.util.parseErrorBodyOrNull
|
||||
import com.bitwarden.network.util.toResult
|
||||
import com.bitwarden.vault.Attachment
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.ImportCiphersResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateCipherResponseJson
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.MultipartBody
|
||||
@ -127,18 +126,14 @@ class CiphersServiceImpl(
|
||||
|
||||
override suspend fun shareAttachment(
|
||||
cipherId: String,
|
||||
attachment: Attachment,
|
||||
attachment: AttachmentInfo,
|
||||
organizationId: String,
|
||||
encryptedFile: File,
|
||||
): Result<Unit> {
|
||||
val attachmentId = attachment.id
|
||||
?: return IllegalStateException("Attachment must have ID").asFailure()
|
||||
val attachmentKey = attachment.key
|
||||
?: return IllegalStateException("Attachment must have Key").asFailure()
|
||||
return ciphersApi
|
||||
.shareAttachment(
|
||||
cipherId = cipherId,
|
||||
attachmentId = attachmentId,
|
||||
attachmentId = attachment.id,
|
||||
organizationId = organizationId,
|
||||
body = this
|
||||
.createMultipartBodyBuilder(
|
||||
@ -148,7 +143,7 @@ class CiphersServiceImpl(
|
||||
.addPart(
|
||||
part = MultipartBody.Part.createFormData(
|
||||
name = "key",
|
||||
value = attachmentKey,
|
||||
value = attachment.key,
|
||||
),
|
||||
)
|
||||
.build(),
|
||||
@ -0,0 +1,10 @@
|
||||
package com.bitwarden.network.model
|
||||
|
||||
/**
|
||||
* Creates a mock [AttachmentInfo] with the given [number].
|
||||
*/
|
||||
fun createMockAttachmentInfo(number: Int = 1): AttachmentInfo = AttachmentInfo(
|
||||
id = "mockId-$number",
|
||||
key = "mockKey-$number",
|
||||
fileName = "mockFileName-$number",
|
||||
)
|
||||
@ -1,4 +1,4 @@
|
||||
package com.x8bit.bitwarden.data.vault.datasource.network.service
|
||||
package com.bitwarden.network.service
|
||||
|
||||
import android.net.Uri
|
||||
import com.bitwarden.network.api.AzureApi
|
||||
@ -8,17 +8,17 @@ import com.bitwarden.network.model.AttachmentJsonResponse
|
||||
import com.bitwarden.network.model.CreateCipherInOrganizationJsonRequest
|
||||
import com.bitwarden.network.model.FileUploadType
|
||||
import com.bitwarden.network.model.ImportCiphersJsonRequest
|
||||
import com.bitwarden.network.model.ImportCiphersResponseJson
|
||||
import com.bitwarden.network.model.ShareCipherJsonRequest
|
||||
import com.bitwarden.network.model.UpdateCipherCollectionsJsonRequest
|
||||
import com.bitwarden.network.model.UpdateCipherResponseJson
|
||||
import com.bitwarden.network.model.createMockAttachment
|
||||
import com.bitwarden.network.model.createMockAttachmentInfo
|
||||
import com.bitwarden.network.model.createMockAttachmentJsonRequest
|
||||
import com.bitwarden.network.model.createMockAttachmentJsonResponse
|
||||
import com.bitwarden.network.model.createMockAttachmentResponse
|
||||
import com.bitwarden.network.model.createMockCipher
|
||||
import com.bitwarden.network.model.createMockCipherJsonRequest
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.ImportCiphersResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.network.model.UpdateCipherResponseJson
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkAttachment
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkStatic
|
||||
@ -216,46 +216,12 @@ class CiphersServiceTest : BaseServiceTest() {
|
||||
assertEquals(Unit, result.getOrThrow())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `shareAttachment without attachment ID should return an error`() = runTest {
|
||||
val cipherId = "cipherId"
|
||||
val organizationId = "organizationId"
|
||||
val attachment = createMockSdkAttachment(number = 1).copy(id = null)
|
||||
val encryptedFile = File.createTempFile("mockFile", "temp")
|
||||
|
||||
val result = ciphersService.shareAttachment(
|
||||
cipherId = cipherId,
|
||||
attachment = attachment,
|
||||
organizationId = organizationId,
|
||||
encryptedFile = encryptedFile,
|
||||
)
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `shareAttachment without attachment key should return an error`() = runTest {
|
||||
val cipherId = "cipherId"
|
||||
val organizationId = "organizationId"
|
||||
val attachment = createMockSdkAttachment(number = 1, key = null)
|
||||
val encryptedFile = File.createTempFile("mockFile", "temp")
|
||||
|
||||
val result = ciphersService.shareAttachment(
|
||||
cipherId = cipherId,
|
||||
attachment = attachment,
|
||||
organizationId = organizationId,
|
||||
encryptedFile = encryptedFile,
|
||||
)
|
||||
|
||||
assertTrue(result.isFailure)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `shareAttachment should execute the share attachment API`() = runTest {
|
||||
server.enqueue(MockResponse().setResponseCode(200))
|
||||
val cipherId = "cipherId"
|
||||
val organizationId = "organizationId"
|
||||
val attachment = createMockSdkAttachment(number = 1)
|
||||
val attachment = createMockAttachmentInfo(number = 1)
|
||||
val encryptedFile = File.createTempFile("mockFile", "temp")
|
||||
|
||||
val result = ciphersService.shareAttachment(
|
||||
Loading…
x
Reference in New Issue
Block a user