Skip to content

Commit

Permalink
Remove QRGen in favor of zxing (#209)
Browse files Browse the repository at this point in the history
  • Loading branch information
dzarras authored Sep 6, 2024
1 parent dc31e67 commit a13556c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 23 deletions.
5 changes: 1 addition & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ plugins {

repositories {
mavenCentral()
maven {
url = uri("https://jitpack.io")
}
maven {
url = uri("https://repo.danubetech.com/repository/maven-public")
}
Expand Down Expand Up @@ -59,7 +56,7 @@ dependencies {
implementation(libs.bootstrap) {
because("For inclusion in HTML templates")
}
implementation(libs.qrgen) {
implementation(libs.zxing) {
because("To generate a QR Code for Credentials Offer URI")
}
implementation(libs.did.common) {
Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ bouncyCastle = "1.78.1"
dependencyCheck = "10.0.3"
sonarqube = "5.0.0.4638"
bootstrap = "5.3.3"
qrgen = "3.0.1"
jacoco = "0.8.11"
didCommon = "1.13.0"
multiformat = "1.1.0"
Expand All @@ -25,6 +24,7 @@ keycloak = "25.0.1"
waltid = "0.3.1"
uri-kmp = "0.0.18"
authlete-cbor = "1.18"
zxing = "3.5.3"

[libraries]
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
Expand All @@ -38,14 +38,14 @@ nimbus-oauth2 = { module = "com.nimbusds:oauth2-oidc-sdk", version.ref = "nimbus
eudi-sdjwt = { module = "eu.europa.ec.eudi:eudi-lib-jvm-sdjwt-kt", version.ref = "eudiSdJwt" }
bouncy-castle = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bouncyCastle" }
bootstrap = { module = "org.webjars:bootstrap", version.ref = "bootstrap" }
qrgen = { module = "com.github.kenglxn.QRGen:javase", version.ref = "qrgen" }
did-common = { module = "decentralized-identity:did-common-java", version.ref = "didCommon" }
multiformat = { module = "org.erwinkok.multiformat:multiformat", version.ref = "multiformat" }
result-monad = { module = "org.erwinkok.result:result-monad", version.ref = "resultMonad" }
keycloak-admin-client = { module = "org.keycloak:keycloak-admin-client", version.ref = "keycloak" }
waltid-mdoc-credentials = { module = "id.walt:waltid-mdoc-credentials-jvm", version.ref = "waltid" }
uri-kmp = { module = "com.eygraber:uri-kmp", version.ref = "uri-kmp" }
authlete-cbor = { module = "com.authlete:cbor", version.ref = "authlete-cbor" }
zxing = { module = "com.google.zxing:javase", version.ref = "zxing" }

[plugins]
foojay-resolver-convention = { id = "org.gradle.toolchains.foojay-resolver-convention", version.ref = "foojay" }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@
package eu.europa.ec.eudi.pidissuer.adapter.out.qr

import arrow.core.raise.result
import com.google.zxing.BarcodeFormat
import com.google.zxing.EncodeHintType
import com.google.zxing.client.j2se.MatrixToImageConfig
import com.google.zxing.client.j2se.MatrixToImageWriter
import com.google.zxing.qrcode.QRCodeWriter
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
import eu.europa.ec.eudi.pidissuer.port.out.qr.Dimensions
import eu.europa.ec.eudi.pidissuer.port.out.qr.Format
import eu.europa.ec.eudi.pidissuer.port.out.qr.GenerateQqCode
import net.glxn.qrgen.core.image.ImageType
import net.glxn.qrgen.javase.QRCode
import org.apache.commons.io.output.ByteArrayOutputStream
import java.net.URI

/**
Expand All @@ -31,20 +35,20 @@ class DefaultGenerateQrCode : GenerateQqCode {

override fun invoke(content: URI, format: Format, dimensions: Dimensions): Result<ByteArray> =
result {
val imageType =
when (format) {
Format.JPG -> ImageType.JPG
Format.GIF -> ImageType.GIF
Format.PNG -> ImageType.PNG
Format.BMP -> ImageType.BMP
}

QRCode.from(content.toString())
.to(imageType)
.withSize(dimensions.width.value.toInt(), dimensions.height.value.toInt())
.withCharset(Charsets.UTF_8.name())
.withErrorCorrection(ErrorCorrectionLevel.H)
.stream()
.toByteArray()
val writer = QRCodeWriter()
val matrix = writer.encode(
content.toString(),
BarcodeFormat.QR_CODE,
dimensions.width.value.toInt(),
dimensions.height.value.toInt(),
mapOf(
EncodeHintType.CHARACTER_SET to Charsets.UTF_8.name(),
EncodeHintType.ERROR_CORRECTION to ErrorCorrectionLevel.H,
),
)
ByteArrayOutputStream().use {
MatrixToImageWriter.writeToStream(matrix, format.name, it, MatrixToImageConfig())
it.toByteArray()
}
}
}

0 comments on commit a13556c

Please sign in to comment.