Skip to content

Commit

Permalink
REL-4407 - KSM Java SDK v16.6.4 (#581)
Browse files Browse the repository at this point in the history
- KSM-501 - Switched to non srtict JSON parser (KSM-501 - Java SDK: Switched to non srtict JSON parser and bumping deps versions #579)
- KSM-506 - Adding support for Privacy screen in the passkey field type
- Upgraded dependencies to latest versions
- Upgraded to gradle-8.6
  • Loading branch information
maksimu authored Apr 12, 2024
1 parent bc7a96d commit a3c5fa9
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 18 deletions.
5 changes: 5 additions & 0 deletions sdk/java/core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ For more information see our official documentation page https://docs.keeper.io/

# Change Log

## 16.6.4
- KSM-501 - Switched to non-strict JSON parser
- KSM-506 - Adding support for Privacy screen in the passkey field type
- Upgraded some dependencies to latest versions and gradle to gradle-8.6

## 16.6.3
- KSM-486 - Fix security provider not supporting AES/CBC/PKCS7Padding
- KSM-473 - Make Notation function public
Expand Down
18 changes: 9 additions & 9 deletions sdk/java/core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ import java.util.*
group = "com.keepersecurity.secrets-manager"

// During publishing, If version ends with '-SNAPSHOT' then it will be published to Maven snapshot repository
version = "16.6.3"
version = "16.6.4"

plugins {
`java-library`
kotlin("jvm") version "1.9.20"
kotlin("plugin.serialization") version "1.9.20"
kotlin("jvm") version "1.9.23"
kotlin("plugin.serialization") version "1.9.23"
`maven-publish`
signing
id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
Expand Down Expand Up @@ -42,18 +42,18 @@ repositories {

dependencies {
// Align versions of all Kotlin components
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.20"))
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.9.23"))

// Use the Kotlin JDK 8 standard library.
api("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.20")
api("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.23")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.23")

// Use the Kotlin test library.
testImplementation("org.jetbrains.kotlin:kotlin-test:1.9.20")
testImplementation("org.jetbrains.kotlin:kotlin-test:1.9.23")

// Use the Kotlin JUnit integration.
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:1.9.20")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:1.9.23")

testImplementation("org.bouncycastle:bc-fips:1.0.2.4")
// testImplementation("org.bouncycastle:bcprov-jdk15on:1.70")
Expand Down
2 changes: 1 addition & 1 deletion sdk/java/core/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
Expand Up @@ -593,8 +593,9 @@ data class Passkey @JvmOverloads constructor(
data class Passkeys @JvmOverloads constructor(
override val label: String? = null,
var required: Boolean? = null,
var privacyScreen: Boolean? = null,
val value: MutableList<Passkey>) : KeeperRecordField() {
constructor(value: Passkey): this(null, null, mutableListOf(value))
constructor(value: Passkey): this(null, null, null, mutableListOf(value))
}

@Serializable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import java.util.*
import java.util.concurrent.*
import javax.net.ssl.*

const val KEEPER_CLIENT_VERSION = "mj16.6.3"
const val KEEPER_CLIENT_VERSION = "mj16.6.4"

const val KEY_HOSTNAME = "hostname" // base url for the Secrets Manager service
const val KEY_SERVER_PUBIC_KEY_ID = "serverPublicKeyId"
Expand Down Expand Up @@ -800,21 +800,23 @@ private fun decryptRecord(record: SecretsManagerResponseRecord, recordKey: ByteA

// When SDK is behind/ahead of record/field type definitions then
// strict mapping between JSON attributes and object properties
// will fail on any unknown field/key so just skip the record with proper error message
// will fail on any unknown field/key - currently just log the error
// and continue without the field - nb! field will be lost on save
var recordData: KeeperRecordData? = null
try {
val recordData = Json.decodeFromString<KeeperRecordData>(bytesToString(decryptedRecord))
return KeeperRecord(recordKey, record.recordUid, null, null, record.innerFolderUid, recordData, record.revision, files)
recordData = Json.decodeFromString<KeeperRecordData>(bytesToString(decryptedRecord))
} catch (e: Exception) {
// New/missing field: Polymorphic serializer was not found for class discriminator 'UNKNOWN'...
// New/missing field property (field def updated): Encountered unknown key 'UNKNOWN'.
// Avoid 'ignoreUnknownKeys = true' to prevent erasing new properties on save/update
println("Skipped record ${record.recordUid}\n"+
println("Record ${record.recordUid} has unexpected data properties (ignored).\n"+
" Error parsing record type - KSM SDK is behind/ahead of record/field type definitions." +
" Please upgrade to latest version. If you need assistance please email [email protected]")
println(e.message)
//println(e.message)
recordData = nonStrictJson.decodeFromString<KeeperRecordData>(bytesToString(decryptedRecord))
}

return null
return if (recordData != null) KeeperRecord(recordKey, record.recordUid, null, null, record.innerFolderUid, recordData, record.revision, files) else null
}

@ExperimentalSerializationApi
Expand Down

0 comments on commit a3c5fa9

Please sign in to comment.