All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.europa.ec.eudi.openid4vp.internal.DID.kt Maven / Gradle / Ivy

There is a newer version: 0.5.0
Show newest version
/*
 * Copyright (c) 2023 European Commission
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package eu.europa.ec.eudi.openid4vp.internal

import java.net.URI

@JvmInline
internal value class AbsoluteDIDUrl private constructor(val uri: URI) {

    override fun toString(): String = uri.toString()

    companion object {

        fun parse(s: String): Result = runCatching {
            fun isNotDID() = DID.parse(s).getOrNull() == null
            if (DID_URL_SYNTAX.matches(s) && isNotDID())
                AbsoluteDIDUrl(URI.create(s))
            else error("Not a valid DID URL: $s")
        }
    }
}

@JvmInline
internal value class DID private constructor(val uri: URI) {

    override fun toString(): String = uri.toString()

    companion object {
        fun parse(s: String): Result = runCatching {
            if (DID_SYNTAX.matches(s)) DID(URI.create(s))
            else error("Not a DID")
        }
    }
}

private val DID_URL_SYNTAX = (
    "^did:[a-z0-9]+:(([A-Z.a-z0-9]|-|_|%[0-9A-Fa-f][0-9A-Fa-f])*:)" +
        "*([A-Z.a-z0-9]|-|_|%[0-9A-Fa-f][0-9A-Fa-f])+(/(([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|([!$&'()*+,;=])|:|@)*)" +
        "*(\\?(((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|([!$&'()*+,;=])|:|@)|/|\\?)*))" +
        "?(#(((([-A-Z._a-z0-9]|~)|%[0-9A-Fa-f][0-9A-Fa-f]|([!$&'()*+,;=])|:|@)|/|\\?)*))?$"
    ).toRegex()
private val DID_SYNTAX =
    "^did:[a-z0-9]+:(([A-Z.a-z0-9]|-|_|%[0-9A-Fa-f][0-9A-Fa-f])*:)*([A-Z.a-z0-9]|-|_|%[0-9A-Fa-f][0-9A-Fa-f])+$".toRegex()




© 2015 - 2024 Weber Informatics LLC | Privacy Policy