Added Upload feature. Database will be uploaded to Hetzner Server. Database already encrypted with AES256. Database will be deleted from the app after uploading database.

This commit is contained in:
oxidiert
2025-08-08 12:01:30 +02:00
parent 2cf9faed38
commit fbe548c8d8
7 changed files with 139 additions and 22 deletions

View File

@ -0,0 +1,88 @@
package com.dano.test1
import android.content.Context
import android.util.Log
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.*
import java.io.File
import java.io.IOException
import kotlin.system.exitProcess
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.asRequestBody
object DatabaseUploader {
private const val DB_NAME = "questionnaire_database"
private const val ENCRYPTED_FILE_NAME = "exported_encrypted_database.db"
private const val SERVER_UPLOAD_URL = "http://49.13.157.44/upload.php"
private val client = OkHttpClient()
fun uploadEncryptedDatabase(context: Context) {
CoroutineScope(Dispatchers.IO).launch {
try {
Log.d("UPLOAD", "Upload gestartet")
val dbFile = context.getDatabasePath(DB_NAME)
Log.d("UPLOAD", "Pfad zur DB: ${dbFile.absolutePath}, existiert: ${dbFile.exists()}")
if (!dbFile.exists()) {
Log.e("UPLOAD", "Datenbankdatei existiert nicht.")
return@launch
}
val exportFile = File(context.cacheDir, ENCRYPTED_FILE_NAME)
dbFile.copyTo(exportFile, overwrite = true)
Log.d("UPLOAD", "Datei kopiert: ${exportFile.absolutePath}")
uploadFile(context, exportFile, dbFile)
} catch (e: Exception) {
Log.e("UPLOAD", "Fehler beim Hochladen der DB", e)
}
}
}
private fun uploadFile(context: Context, file: File, originalDbFile: File) {
val requestBody = MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart(
"file", file.name,
file.asRequestBody("application/octet-stream".toMediaTypeOrNull())
)
.build()
val request = Request.Builder()
.url(SERVER_UPLOAD_URL)
.post(requestBody)
.build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
Log.e("UPLOAD", "Upload fehlgeschlagen: ${e.message}")
}
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
Log.d("UPLOAD", "Upload erfolgreich: ${response.message}")
// Lokale DB-Datei löschen
if (originalDbFile.delete()) {
Log.d("UPLOAD", "Lokale Datenbank erfolgreich gelöscht.")
// App schließen
Log.d("UPLOAD", "App wird beendet.")
exitProcess(0)
} else {
Log.e("UPLOAD", "Löschen der lokalen Datenbank fehlgeschlagen.")
}
} else {
Log.e("UPLOAD", "Upload fehlgeschlagen: ${response.code} ${response.message}")
}
}
})
}
}