1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
/*
* Copyright © 2014-2020 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<String?, Void?, Exception?>() {
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
}
}
}
|