From c4214ad2dc143492c98cf4a14a7a62efc237a70c Mon Sep 17 00:00:00 2001 From: Heiko Schaefer Date: Thu, 6 Jul 2023 19:37:12 +0200 Subject: [PATCH] Implement Root, Roots --- .../kotlin/org/pgpainless/wot/network/Root.kt | 12 +++++ .../org/pgpainless/wot/network/Roots.kt | 48 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt create mode 100644 wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt diff --git a/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt new file mode 100644 index 00000000..b00924a6 --- /dev/null +++ b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Root.kt @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2023 Heiko Schaefer +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.wot.network + +data class Root(val fingerprint: Fingerprint, val amount: Int) { + + constructor(fingerprint: Fingerprint) : this(fingerprint, 120) + + override fun toString() = "$fingerprint [$amount]" +} \ No newline at end of file diff --git a/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt new file mode 100644 index 00000000..7a2c3547 --- /dev/null +++ b/wot-dijkstra/src/main/kotlin/org/pgpainless/wot/network/Roots.kt @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2023 Heiko Schaefer +// +// SPDX-License-Identifier: Apache-2.0 + +package org.pgpainless.wot.network + +/** + * A set of `Root`s (that can be used as the basis for authentication lookups). + */ +class Roots { + + // Map for efficient lookup by Fingerprint + private val roots: Map + + constructor(roots: List) { + this.roots = roots.associateBy { it.fingerprint } + } + + constructor() : this(listOf()) + + /** + * Returns the specified root. + */ + fun get(fpr: Fingerprint): Root? = roots[fpr] + + /** + * Check if `fpr` is contained in this set of roots. + */ + fun isRoot(fpr: Fingerprint) = roots.containsKey(fpr) + + /** + * The set of fingerprints of all roots. + */ + fun fingerprints() = roots.keys + + /** + * A collection of all roots. + */ + fun roots() = roots.values + + /** + * The number of roots + */ + fun size() = roots.size + + override fun toString() = roots.keys.sorted().joinToString(", ") + +}