From 9acad2abf68b64d3ca70b5263a72dfe3d5ff0081 Mon Sep 17 00:00:00 2001 From: Aditya Wasan Date: Wed, 13 Nov 2019 00:55:56 +0530 Subject: Convert java files to kotlin (#570) * Break SshKeyGen into multiple files * Use tinted material button * Convert PasswordStore to kotlin * Remove SshKeyGen * Remove explicit imports and other tweaks Signed-off-by: Aditya Wasan --- .../com/zeapo/pwdstore/sshkeygen/SshKeygenTask.kt | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 app/src/main/java/com/zeapo/pwdstore/sshkeygen/SshKeygenTask.kt (limited to 'app/src/main/java/com/zeapo/pwdstore/sshkeygen/SshKeygenTask.kt') diff --git a/app/src/main/java/com/zeapo/pwdstore/sshkeygen/SshKeygenTask.kt b/app/src/main/java/com/zeapo/pwdstore/sshkeygen/SshKeygenTask.kt new file mode 100644 index 00000000..194d1023 --- /dev/null +++ b/app/src/main/java/com/zeapo/pwdstore/sshkeygen/SshKeygenTask.kt @@ -0,0 +1,77 @@ +/* + * Copyright © 2014-2019 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ +package com.zeapo.pwdstore.sshkeygen + +import android.app.ProgressDialog +import android.os.AsyncTask +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.DialogFragment +import androidx.preference.PreferenceManager +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.jcraft.jsch.JSch +import com.jcraft.jsch.KeyPair +import com.zeapo.pwdstore.R +import java.io.File +import java.io.FileOutputStream +import java.lang.ref.WeakReference + +class KeyGenerateTask(activity: AppCompatActivity) : AsyncTask() { + private var pd: ProgressDialog? = null + private val weakReference = WeakReference(activity) + override fun onPreExecute() { + super.onPreExecute() + pd = ProgressDialog.show(weakReference.get(), "", "Generating keys") + } + + override fun doInBackground(vararg strings: String?): Exception? { + val length = strings[0]?.toInt() + val passphrase = strings[1] + val comment = strings[2] + val jsch = JSch() + try { + val kp = length?.let { KeyPair.genKeyPair(jsch, KeyPair.RSA, it) } + var file = File(weakReference.get()!!.filesDir.toString() + "/.ssh_key") + var out = FileOutputStream(file, false) + if (passphrase?.isNotEmpty()!!) { + kp?.writePrivateKey(out, passphrase.toByteArray()) + } else { + kp?.writePrivateKey(out) + } + file = File(weakReference.get()!!.filesDir.toString() + "/.ssh_key.pub") + out = FileOutputStream(file, false) + kp?.writePublicKey(out, comment) + return null + } catch (e: Exception) { + e.printStackTrace() + return e + } + } + + override fun onPostExecute(e: Exception?) { + super.onPostExecute(e) + val activity = weakReference.get() + if (activity is AppCompatActivity) { + pd!!.dismiss() + if (e == null) { + Toast.makeText(activity, "SSH-key generated", Toast.LENGTH_LONG).show() + val df: DialogFragment = ShowSshKeyFragment() + df.show(activity.supportFragmentManager, "public_key") + val prefs = PreferenceManager.getDefaultSharedPreferences(weakReference.get()) + val editor = prefs.edit() + editor.putBoolean("use_generated_key", true) + editor.apply() + } else { + MaterialAlertDialogBuilder(weakReference.get()) + .setTitle(activity.getString(R.string.error_generate_ssh_key)) + .setMessage(activity.getString(R.string.ssh_key_error_dialog_text) + e.message) + .setPositiveButton(activity.getString(R.string.dialog_ok), null) + .show() + } + } else { + // TODO: When activity is destroyed + } + } +} -- cgit v1.2.3