Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c5e70bb
NFC-50 Add custom URI scheme intent filter for web-eid-mobile:// in A…
SanderKondratjevNortal Jul 24, 2025
e5ca4f6
NFC-50 Handle web-eid-mobile intent and skip file parsing in MainActi…
SanderKondratjevNortal Jul 24, 2025
d74149b
NFC-50 Add WebEID navigation route to Constant.kt and Route.kt
SanderKondratjevNortal Jul 24, 2025
28503c4
NFC-50 Start app from WebEID screen if launched via web-eid-mobile URI
SanderKondratjevNortal Jul 24, 2025
fbf9152
NFC-50 Add WebEidFragment using consistent fragment structure
SanderKondratjevNortal Jul 25, 2025
8858f49
NFC-50 Add WebEidFragment to navigation graph in RIADigiDocAppScreen
SanderKondratjevNortal Jul 25, 2025
680bf6d
NFC-50 Add minimal implementation of WebEidScreen component
SanderKondratjevNortal Jul 25, 2025
6359f9d
NFC-50 Add minimal implementation of WebEidViewModel component
SanderKondratjevNortal Jul 25, 2025
2b8f571
NFC-50 Display parsed Web EID auth payload in WebEidScreen after URI …
SanderKondratjevNortal Jul 25, 2025
6bbbb34
NFC-50 Add unit tests for WebEidViewModel handleAuth() with base64 an…
SanderKondratjevNortal Jul 28, 2025
9b44dfe
NFC-50 Log auth payload parsing errors in handleAuth(); retain navCon…
SanderKondratjevNortal Jul 28, 2025
14f6908
NFC-50 Retain navController in WebEidScreen for future use
SanderKondratjevNortal Jul 28, 2025
56b2b42
Implement certificate and signing logic (#305)
SanderKondratjevNortal Feb 6, 2026
4f805c7
Fix Web eID signing flow: CAN handling, certificate checks, and conse…
SanderKondratjevNortal Feb 16, 2026
d04d0cd
NFC-126 UX improvements
SanderKondratjevNortal Mar 2, 2026
cb87916
NFC-118 Switch request/response JSON fields to camelCase
SanderKondratjevNortal Mar 4, 2026
616a9da
NFC-115 Implement minimal multiple signing certification solution
SanderKondratjevNortal Mar 24, 2026
06377f8
NFC-135 Update EU fund text
SanderKondratjevNortal Mar 25, 2026
93b8519
NFC-137 Add AppLinks intent
aarmam Mar 18, 2026
2505337
NFC-137 Remove redundant packageName storage
aarmam Mar 19, 2026
845816b
NFC-137 Filter external file URIs by content/file scheme
aarmam Mar 19, 2026
7ca54bc
NFC-150 Update Web eID card mismatch error wording
SanderKondratjevNortal Apr 1, 2026
466d50e
NFC-150 Fix test from last task
SanderKondratjevNortal Apr 1, 2026
ce25caa
NFC-150 Update text
SanderKondratjevNortal Apr 15, 2026
0bb4e8e
NFC-150 Update text
SanderKondratjevNortal Apr 15, 2026
9a0997d
NFC-155 Change app link host riadigidoc.ee -> id.eesti.ee
aarmam Apr 10, 2026
4a7a42a
NFC-157 Make signing certificates optional for authentication
SanderKondratjevNortal Apr 28, 2026
547ac08
Code fixes
martenrebane Jun 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ android {
signingConfig = signingConfigs.getByName("debug")
matchingFallbacks.add("debug")
manifestPlaceholders["usesCleartextTraffic"] = "true"
buildConfigField("String", "APP_LINKS_HOST", "\"id-test.eesti.ee\"")
isMinifyEnabled = false
isShrinkResources = false
proguardFiles(
Expand All @@ -121,6 +122,7 @@ android {
isMinifyEnabled = true
isShrinkResources = true
manifestPlaceholders["usesCleartextTraffic"] = "false"
buildConfigField("String", "APP_LINKS_HOST", "\"id.eesti.ee\"")
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
Expand Down Expand Up @@ -214,6 +216,7 @@ dependencies {
implementation(project(":utils-lib"))
implementation(project(":commons-lib"))
implementation(project(":id-card-lib"))
implementation(project(":web-eid-lib"))

androidTestImplementation(project(":commons-lib:test-files"))
}
Original file line number Diff line number Diff line change
Expand Up @@ -614,4 +614,81 @@ class DataStoreTest {

assertFalse(result)
}

@Test
fun dataStore_getTemporaryCanNumber_defaultEmpty() {
val result = dataStore.getTemporaryCanNumber()

assertEquals("", result)
}

@Test
fun dataStore_setTemporaryCanNumber_success() {
dataStore.setTemporaryCanNumber("123456")

val result = dataStore.getTemporaryCanNumber()

assertEquals("123456", result)
}

@Test
fun dataStore_clearTemporaryCanNumber_success() {
dataStore.setTemporaryCanNumber("123456")
dataStore.clearTemporaryCanNumber()

val result = dataStore.getTemporaryCanNumber()

assertEquals("", result)
}

@Test
fun dataStore_getWebEidRememberMe_defaultTrue() {
val result = dataStore.getWebEidRememberMe()

assertTrue(result)
}

@Test
fun dataStore_setWebEidRememberMe_successWithFalse() {
dataStore.setWebEidRememberMe(false)

val result = dataStore.getWebEidRememberMe()

assertFalse(result)
}

@Test
fun dataStore_setWebEidRememberMe_successWithTrue() {
dataStore.setWebEidRememberMe(true)

val result = dataStore.getWebEidRememberMe()

assertTrue(result)
}

@Test
fun dataStore_isWebEidSessionActive_defaultFalse() {
val result = dataStore.isWebEidSessionActive()

assertFalse(result)
}

@Test
fun dataStore_setWebEidSessionActive_successWithTrue() {
dataStore.setWebEidSessionActive(true)

val result = dataStore.isWebEidSessionActive()

assertTrue(result)
}

@Test
fun dataStore_setWebEidSessionActive_successWithFalse() {
dataStore.setWebEidSessionActive(true)
dataStore.setWebEidSessionActive(false)

val result = dataStore.isWebEidSessionActive()

assertFalse(result)
}
}
140 changes: 140 additions & 0 deletions app/src/androidTest/kotlin/ee/ria/DigiDoc/utils/WebEidUriUtilTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
/*
* Copyright 2017 - 2026 Riigi Infosüsteemi Amet
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/

@file:Suppress("PackageName")

package ee.ria.DigiDoc.utils

import android.net.Uri
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Test

class WebEidUriUtilTest {
@Test
fun isWebEidUri_customScheme_auth() {
assertTrue(WebEidUriUtil.isWebEidUri(Uri.parse("web-eid-mobile://auth")))
}

@Test
fun isWebEidUri_customScheme_cert() {
assertTrue(WebEidUriUtil.isWebEidUri(Uri.parse("web-eid-mobile://cert")))
}

@Test
fun isWebEidUri_customScheme_sign() {
assertTrue(WebEidUriUtil.isWebEidUri(Uri.parse("web-eid-mobile://sign")))
}

@Test
fun isWebEidUri_appLinks_auth() {
assertTrue(WebEidUriUtil.isWebEidUri(Uri.parse("https://id-test.eesti.ee/auth")))
}

@Test
fun isWebEidUri_appLinks_cert() {
assertTrue(WebEidUriUtil.isWebEidUri(Uri.parse("https://id-test.eesti.ee/cert")))
}

@Test
fun isWebEidUri_appLinks_sign() {
assertTrue(WebEidUriUtil.isWebEidUri(Uri.parse("https://id-test.eesti.ee/sign")))
}

@Test
fun isWebEidUri_appLinks_unknownOperation() {
assertFalse(WebEidUriUtil.isWebEidUri(Uri.parse("https://id-test.eesti.ee/unknown")))
}

@Test
fun isWebEidUri_wrongHost() {
assertFalse(WebEidUriUtil.isWebEidUri(Uri.parse("https://evil.com/auth")))
}

@Test
fun isWebEidUri_contentScheme() {
assertFalse(WebEidUriUtil.isWebEidUri(Uri.parse("content://some/path")))
}

@Test
fun isWebEidUri_fileScheme() {
assertFalse(WebEidUriUtil.isWebEidUri(Uri.parse("file:///some/path")))
}

@Test
fun isWebEidUri_customScheme_unknownOperation() {
assertFalse(WebEidUriUtil.isWebEidUri(Uri.parse("web-eid-mobile://unknown")))
}

@Test
fun getOperation_customScheme_auth() {
assertEquals(WebEidOperation.AUTH, WebEidUriUtil.getOperation(Uri.parse("web-eid-mobile://auth#dGVzdA")))
}

@Test
fun getOperation_customScheme_cert() {
assertEquals(WebEidOperation.CERT, WebEidUriUtil.getOperation(Uri.parse("web-eid-mobile://cert#dGVzdA")))
}

@Test
fun getOperation_customScheme_sign() {
assertEquals(WebEidOperation.SIGN, WebEidUriUtil.getOperation(Uri.parse("web-eid-mobile://sign#dGVzdA")))
}

@Test
fun getOperation_appLinks_auth() {
assertEquals(
WebEidOperation.AUTH,
WebEidUriUtil.getOperation(Uri.parse("https://id-test.eesti.ee/auth#dGVzdA")),
)
}

@Test
fun getOperation_appLinks_cert() {
assertEquals(
WebEidOperation.CERT,
WebEidUriUtil.getOperation(Uri.parse("https://id-test.eesti.ee/cert#dGVzdA")),
)
}

@Test
fun getOperation_appLinks_sign() {
assertEquals(
WebEidOperation.SIGN,
WebEidUriUtil.getOperation(Uri.parse("https://id-test.eesti.ee/sign#dGVzdA")),
)
}

@Test
fun getOperation_unknownOperation_returnsNull() {
assertNull(WebEidUriUtil.getOperation(Uri.parse("web-eid-mobile://unknown")))
}

@Test
fun getOperation_appLinks_unknownOperation_returnsNull() {
assertNull(WebEidUriUtil.getOperation(Uri.parse("https://id-test.eesti.ee/unknown")))
}

@Test
fun getOperation_unrelatedUri_returnsNull() {
assertNull(WebEidUriUtil.getOperation(Uri.parse("https://example.com/auth")))
}
}
Loading
Loading