Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/oidf 33 #15

Merged
merged 10 commits into from
Jul 19, 2024
33 changes: 33 additions & 0 deletions modules/openapi/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Open API specs

The Open API specs of OpenID Federation.

## Entity Statement

An Entity Statement contains the information needed for the Entity that is the subject of the Entity Statement to
participate in federation(s). An Entity Statement is a signed JWT. The subject of the JWT is the Entity itself. The
issuer of the JWT is the party that issued the Entity Statement. All Entities in a federation publish an Entity Statement
about themselves called an Entity Configuration. Superior Entities in a federation publish Entity Statements about their
Immediate Subordinate Entities called Subordinate Statements.

### Profiles

The Open API generator will generate models, infrastructures and apis by default. To make
it generate models only uncomment `profiles=models-only` from gradle.properties or pass the profile in the comment line.

### Run Open API generator

Generate models, infrastructures and apis:
```shell
gradle clean openApiGenerate
```

Generate only models:
```shell
gradle clean openApiGenerate -Pprofile=model-only
```

Generate the jar file:
```shell
gradle clean build
```
82 changes: 82 additions & 0 deletions modules/openapi/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
plugins {
kotlin("jvm") version "2.0.0"
id("org.openapi.generator") version "7.7.0"
id("maven-publish")
}

group = "com.sphereon.oid.fed"
version = "0.1.0-SNAPSHOT"

project.extra.set("openApiPackage", "com.sphereon.oid.fed.openapi")

val profiles = project.properties["profiles"]?.toString()?.split(",") ?: emptyList()
val isModelsOnlyProfile = profiles.contains("models-only")
val ktorVersion = "2.3.11"

repositories {
mavenCentral()
}

dependencies {
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-content-negotiation:$ktorVersion")
implementation("io.ktor:ktor-serialization-kotlinx-json:$ktorVersion")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.0")
}

openApiGenerate {
val openApiPackage: String by project
generatorName.set("kotlin")
packageName.set("com.sphereon.oid.fed.openapi")
apiPackage.set("$openApiPackage.api")
modelPackage.set("$openApiPackage.models")
inputSpec.set("$projectDir/src/main/kotlin/com/sphereon/oid/fed/openapi/openapi.yaml")
library.set("multiplatform")
outputDir.set("$projectDir/build/generated")
configOptions.set(
mapOf(
"dateLibrary" to "string"
)
)

if (isModelsOnlyProfile) {
globalProperties.set(
configOptions.get().plus(
mapOf(
"models" to ""
)
)
)
}
}


publishing {
publications {
create<MavenPublication>("mavenKotlin") {
from(components["kotlin"])
}
}
}

tasks.compileKotlin {
dependsOn(tasks.openApiGenerate)
}

tasks.jar {
dependsOn(tasks.compileKotlin)
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
archiveBaseName.set(project.name)
from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
from("$projectDir/build/classes/kotlin/main")
}

kotlin {
sourceSets.main {
kotlin.srcDirs(
"$projectDir/build/generated/src/commonMain/kotlin"
)
}
jvmToolchain(21)
}
2 changes: 2 additions & 0 deletions modules/openapi/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
kotlin.code.style=official
#profiles=models-only
4 changes: 4 additions & 0 deletions modules/openapi/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}
rootProject.name = "openapi"
Loading
Loading