Manage OTP

This commit is contained in:
J-Jamet
2021-06-14 21:57:04 +02:00
parent 022777888c
commit c6ceb25ee8
4 changed files with 39 additions and 31 deletions

View File

@@ -516,7 +516,11 @@ class EntryEditActivity : LockingActivity(),
* Set up OTP (HOTP or TOTP) and add it as extra field * Set up OTP (HOTP or TOTP) and add it as extra field
*/ */
private fun setupOtp() { private fun setupOtp() {
// TODO Fragment entryEditFragment?.setupOtp() mEntryEditViewModel.setupOtp()
}
override fun onOtpCreated(otpElement: OtpElement) {
mEntryEditViewModel.createOtp(otpElement)
} }
/** /**
@@ -632,10 +636,6 @@ class EntryEditActivity : LockingActivity(),
return super.onOptionsItemSelected(item) return super.onOptionsItemSelected(item)
} }
override fun onOtpCreated(otpElement: OtpElement) {
// TODO fragment entryEditFragment?.onOtpCreated(otpElement)
}
// Launch the date picker // Launch the date picker
private fun selectDate(dateInstant: DateInstant) { private fun selectDate(dateInstant: DateInstant) {
val dateTime = DateTime(dateInstant.date) val dateTime = DateTime(dateInstant.date)

View File

@@ -41,14 +41,13 @@ import com.kunzisoft.keepass.model.AttachmentState
import com.kunzisoft.keepass.model.EntryAttachmentState import com.kunzisoft.keepass.model.EntryAttachmentState
import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.EntryInfo
import com.kunzisoft.keepass.model.StreamDirection import com.kunzisoft.keepass.model.StreamDirection
import com.kunzisoft.keepass.otp.OtpElement
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.view.TemplateView import com.kunzisoft.keepass.view.TemplateView
import com.kunzisoft.keepass.view.collapse import com.kunzisoft.keepass.view.collapse
import com.kunzisoft.keepass.view.expand import com.kunzisoft.keepass.view.expand
import com.kunzisoft.keepass.viewmodels.EntryEditViewModel import com.kunzisoft.keepass.viewmodels.EntryEditViewModel
class EntryEditFragment: DatabaseFragment(), SetOTPDialogFragment.CreateOtpListener { class EntryEditFragment: DatabaseFragment() {
private var iconColor: Int = 0 private var iconColor: Int = 0
@@ -178,6 +177,18 @@ class EntryEditFragment: DatabaseFragment(), SetOTPDialogFragment.CreateOtpListe
} }
} }
mEntryEditViewModel.requestSetupOtp.observe(viewLifecycleOwner) {
// Retrieve the current otpElement if exists
// and open the dialog to set up the OTP
SetOTPDialogFragment.build(templateView.getEntryInfo().otpModel)
.show(parentFragmentManager, "addOTPDialog")
}
mEntryEditViewModel.onOtpCreated.observe(viewLifecycleOwner) {
// Update the otp field with otpauth:// url
templateView.putOtpElement(it)
}
mEntryEditViewModel.onBuildNewAttachment.observe(viewLifecycleOwner) { mEntryEditViewModel.onBuildNewAttachment.observe(viewLifecycleOwner) {
val attachmentToUploadUri = it.attachmentToUploadUri val attachmentToUploadUri = it.attachmentToUploadUri
val fileName = it.fileName val fileName = it.fileName
@@ -283,30 +294,6 @@ class EntryEditFragment: DatabaseFragment(), SetOTPDialogFragment.CreateOtpListe
return false return false
} }
/* -------------
* OTP
* -------------
*/
fun setupOtp() {
// Retrieve the current otpElement if exists
// and open the dialog to set up the OTP
/*
SetOTPDialogFragment.build(mEntryInfo.otpModel)
.show(parentFragmentManager, "addOTPDialog")
TODO OTP
*/
}
override fun onOtpCreated(otpElement: OtpElement) {
// Update the otp field with otpauth:// url
/*
TODO OTP
val otpField = OtpEntryFields.buildOtpField(otpElement, mEntryInfo.title, mEntryInfo.username)
putCustomField(Field(otpField.name, otpField.protectedValue))
*/
}
/* ------------- /* -------------
* Attachments * Attachments
* ------------- * -------------

View File

@@ -20,6 +20,7 @@ import com.kunzisoft.keepass.database.element.icon.IconImage
import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.database.element.security.ProtectedString
import com.kunzisoft.keepass.database.element.template.* import com.kunzisoft.keepass.database.element.template.*
import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.EntryInfo
import com.kunzisoft.keepass.otp.OtpElement
import com.kunzisoft.keepass.otp.OtpEntryFields import com.kunzisoft.keepass.otp.OtpEntryFields
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import org.joda.time.DateTime import org.joda.time.DateTime
@@ -578,6 +579,12 @@ class TemplateView @JvmOverloads constructor(context: Context,
retrieveCustomFieldsFromView() retrieveCustomFieldsFromView()
} }
fun putOtpElement(otpElement: OtpElement) {
val otpField = OtpEntryFields.buildOtpField(otpElement,
mEntryInfo?.title, mEntryInfo?.username)
putCustomField(Field(otpField.name, otpField.protectedValue))
}
override fun onRestoreInstanceState(state: Parcelable?) { override fun onRestoreInstanceState(state: Parcelable?) {
//begin boilerplate code so parent classes can restore state //begin boilerplate code so parent classes can restore state
if (state !is SavedState) { if (state !is SavedState) {

View File

@@ -14,6 +14,7 @@ import com.kunzisoft.keepass.model.AttachmentState
import com.kunzisoft.keepass.model.EntryAttachmentState import com.kunzisoft.keepass.model.EntryAttachmentState
import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.model.EntryInfo
import com.kunzisoft.keepass.model.StreamDirection import com.kunzisoft.keepass.model.StreamDirection
import com.kunzisoft.keepass.otp.OtpElement
import com.kunzisoft.keepass.view.TemplateView import com.kunzisoft.keepass.view.TemplateView
@@ -55,6 +56,11 @@ class EntryEditViewModel: ViewModel() {
val onTimeSelected : LiveData<TemplateView.Time> get() = _onTimeSelected val onTimeSelected : LiveData<TemplateView.Time> get() = _onTimeSelected
private val _onTimeSelected = SingleLiveEvent<TemplateView.Time>() private val _onTimeSelected = SingleLiveEvent<TemplateView.Time>()
val requestSetupOtp : LiveData<Void?> get() = _requestSetupOtp
private val _requestSetupOtp = SingleLiveEvent<Void?>()
val onOtpCreated : LiveData<OtpElement> get() = _onOtpCreated
private val _onOtpCreated = SingleLiveEvent<OtpElement>()
private val mTempAttachments = mutableListOf<EntryAttachmentState>() private val mTempAttachments = mutableListOf<EntryAttachmentState>()
val onBuildNewAttachment : LiveData<AttachmentBuild> get() = _onBuildNewAttachment val onBuildNewAttachment : LiveData<AttachmentBuild> get() = _onBuildNewAttachment
private val _onBuildNewAttachment = SingleLiveEvent<AttachmentBuild>() private val _onBuildNewAttachment = SingleLiveEvent<AttachmentBuild>()
@@ -176,6 +182,14 @@ class EntryEditViewModel: ViewModel() {
_onTimeSelected.value = TemplateView.Time(hours, minutes) _onTimeSelected.value = TemplateView.Time(hours, minutes)
} }
fun setupOtp() {
_requestSetupOtp.call()
}
fun createOtp(otpElement: OtpElement) {
_onOtpCreated.value = otpElement
}
fun buildNewAttachment(attachmentToUploadUri: Uri, fileName: String) { fun buildNewAttachment(attachmentToUploadUri: Uri, fileName: String) {
_onBuildNewAttachment.value = AttachmentBuild(attachmentToUploadUri, fileName) _onBuildNewAttachment.value = AttachmentBuild(attachmentToUploadUri, fileName)
} }