QR-Codes can now be displayed after scanning.
- 2FA also supported
This commit is contained in:
@@ -1,48 +1,97 @@
|
||||
package com.github.mondei1.offpass
|
||||
|
||||
import android.animation.ObjectAnimator
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.res.ColorStateList
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.Color
|
||||
import android.graphics.ColorFilter
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.text.Editable
|
||||
import android.print.PrintAttributes
|
||||
import android.print.PrintJob
|
||||
import android.print.PrintManager
|
||||
import android.util.Base64
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.view.animation.LinearInterpolator
|
||||
import android.webkit.WebResourceRequest
|
||||
import android.webkit.WebView
|
||||
import android.webkit.WebViewClient
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.isVisible
|
||||
import com.google.zxing.BarcodeFormat
|
||||
import com.google.zxing.integration.android.IntentIntegrator
|
||||
import com.google.zxing.integration.android.IntentResult
|
||||
import com.journeyapps.barcodescanner.BarcodeEncoder
|
||||
import dev.turingcomplete.kotlinonetimepassword.GoogleAuthenticator
|
||||
import kotlinx.android.synthetic.main.activity_create.*
|
||||
import kotlinx.coroutines.*
|
||||
import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.util.*
|
||||
|
||||
class CreateActivity : AppCompatActivity() {
|
||||
private var fragment_title: TextInput? = null
|
||||
private var fragment_username: TextInput? = null
|
||||
private var schema: QRSchema? = null
|
||||
private var qrCodeBitmap: Bitmap? = null
|
||||
|
||||
private var fa_coroutine: Job? = null
|
||||
private var mWebView: WebView? = null
|
||||
private var printJob: PrintJob? = null
|
||||
|
||||
fun doPrint() {
|
||||
val webView = WebView(this)
|
||||
webView.webViewClient = object : WebViewClient() {
|
||||
override fun shouldOverrideUrlLoading(view: WebView, requesst: WebResourceRequest) = false
|
||||
|
||||
override fun onPageFinished(view: WebView?, url: String?) {
|
||||
Log.i("Create Activity", "Template page finished loading")
|
||||
createWebPrintJob(webView)
|
||||
mWebView = null
|
||||
}
|
||||
}
|
||||
|
||||
var htmlDocument = String(this.resources.openRawResource(
|
||||
this.resources.getIdentifier("print", "raw", this.packageName)
|
||||
).readBytes()).replace("\n", "")
|
||||
|
||||
// Prepare html document
|
||||
var byteArrayOutputStream = ByteArrayOutputStream()
|
||||
this.qrCodeBitmap?.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)
|
||||
htmlDocument = htmlDocument.replace("\$DATE", Date().time.toString())
|
||||
.replace("\$HINT", "Not configurable yet!")
|
||||
.replace("\$QRCODE", Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.NO_WRAP))
|
||||
|
||||
Log.i("Create Activity", htmlDocument)
|
||||
webView.loadDataWithBaseURL("file:///android_asset/", htmlDocument, "text/HTML", "UTF-8", null)
|
||||
|
||||
mWebView = webView
|
||||
}
|
||||
|
||||
fun createWebPrintJob(webView: WebView) {
|
||||
(this.getSystemService(Context.PRINT_SERVICE) as? PrintManager)?.let { printManager ->
|
||||
val jobName = "Offpass Document"
|
||||
val printAdapter = webView.createPrintDocumentAdapter(jobName)
|
||||
|
||||
printManager.print(
|
||||
jobName,
|
||||
printAdapter,
|
||||
PrintAttributes.Builder().build()
|
||||
).also { printJob ->
|
||||
this.printJob = printJob
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
//this.schema = QRSchema(this)
|
||||
//this.schema!!.decrypted_raw = "%JtuB4O9M42%Gitea|Nicolas|542superGoOD_pW&|klier.nicolas@protonmail.com|\$ul|(\$vb)\$O4|()What's your favorite series%Rick and morty|(2fa)otpauth://totp/OffPass%20Test?secret=d34gfkki5dkd5knifysrpgndd5xb2c7eddwki7ya4pvoisfa5c3ko5pv&issuer=Nicolas%20Klier"
|
||||
//this.schema!!.parse(this)
|
||||
this.schema = QRSchema(this)
|
||||
this.schema!!.decrypted_raw = "%JtuB4O9M42%Gitea|Nicolas|542superGoOD_pW&|klier.nicolas@protonmail.com|\$ul|(\$vb)\$O4|()What's your favorite series%Rick and morty|(2fa)otpauth://totp/OffPass%20Test?secret=d34gfkki5dkd5knifysrpgndd5xb2c7eddwki7ya4pvoisfa5c3ko5pv&issuer=Nicolas%20Klier"
|
||||
this.schema!!.parse(this)
|
||||
|
||||
//this.schema!!.build(arrayOf("website_url", "2fa", "What's your favorite series"), "123")
|
||||
//this.schema!!.decrypt(this.schema!!.raw, "123")
|
||||
this.schema!!.build(arrayOf("website_url", "2fa", "What's your favorite series"), "123")
|
||||
this.schema!!.decrypt(this.schema!!.raw, "123")
|
||||
|
||||
setSupportActionBar(findViewById(R.id.toolbar))
|
||||
|
||||
@@ -51,6 +100,20 @@ class CreateActivity : AppCompatActivity() {
|
||||
Log.i("CREATE", "Back got clicked!")
|
||||
finish()
|
||||
}
|
||||
print_button.setOnClickListener {
|
||||
// Set up printing
|
||||
this.schema = QRSchema(this)
|
||||
this.schema!!.title = title_input.text.toString()
|
||||
this.schema!!.username = username_input.text.toString()
|
||||
this.schema!!.password = password_input.text.toString()
|
||||
this.schema!!.email = email_input.text.toString()
|
||||
this.schema!!.website_url = url_input.text.toString()
|
||||
this.schema!!.build(arrayOf(), "123")
|
||||
|
||||
val barcodeEncoder: BarcodeEncoder = BarcodeEncoder()
|
||||
this.qrCodeBitmap = barcodeEncoder.encodeBitmap(this.schema!!.raw, BarcodeFormat.QR_CODE, 400, 400)
|
||||
doPrint()
|
||||
}
|
||||
|
||||
fa_input.isFocusable = false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user