Implement Root, Roots

This commit is contained in:
Heiko Schaefer 2023-07-06 19:37:12 +02:00
parent 34e5a96fce
commit c2b9017b5d
No known key found for this signature in database
GPG Key ID: 4A849A1904CCBD7D
2 changed files with 60 additions and 0 deletions

View File

@ -0,0 +1,12 @@
// SPDX-FileCopyrightText: 2023 Heiko Schaefer <heiko@schaefer.name>
//
// 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]"
}

View File

@ -0,0 +1,48 @@
// SPDX-FileCopyrightText: 2023 Heiko Schaefer <heiko@schaefer.name>
//
// 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<Fingerprint, Root>
constructor(roots: List<Root>) {
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(", ")
}