Skip to content

Commit 93b37be

Browse files
committed
chore: fix all linting errors
1 parent 09797fc commit 93b37be

File tree

278 files changed

+1994
-1439
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

278 files changed

+1994
-1439
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ kotlin_gen
99
/version.txt
1010
/node_modules
1111
**/.ideaconfig
12-
**/.mpsconfig
12+
**/.mpsconfig

.idea/copyright/Modelix.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/copyright/profiles_settings.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

authorization/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ publishing {
3434
from(components["kotlin"])
3535
}
3636
}
37-
}
37+
}

authorization/src/main/kotlin/org/modelix/authorization/AccessTokenPrincipal.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
package org.modelix.authorization
1515

1616
import com.auth0.jwt.interfaces.DecodedJWT
17-
import io.ktor.server.auth.*
17+
import io.ktor.server.auth.Principal
1818

1919
class AccessTokenPrincipal(val jwt: DecodedJWT) : Principal {
2020
fun getUserName(): String? = jwt.getClaim("email")?.asString()
2121
?: jwt.getClaim("preferred_username")?.asString()
22-
}
22+
}

authorization/src/main/kotlin/org/modelix/authorization/EPermissionType.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ package org.modelix.authorization
1515

1616
enum class EPermissionType(vararg val includedTypes: EPermissionType) {
1717
READ,
18-
WRITE(READ);
18+
WRITE(READ),
19+
;
1920

2021
fun includes(type: EPermissionType): Boolean = type == this || includedTypes.any { it.includes(type) }
21-
}
22+
}

authorization/src/main/kotlin/org/modelix/authorization/KeycloakUtils.kt

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,17 @@ object KeycloakUtils {
4141

4242
val authzClient: AuthzClient by lazy {
4343
require(isEnabled()) { "Keycloak is not enabled" }
44-
patchUrls(AuthzClient.create(Configuration(
45-
BASE_URL,
46-
REALM,
47-
CLIENT_ID,
48-
mapOf("secret" to CLIENT_SECRET),
49-
null
50-
)))
44+
patchUrls(
45+
AuthzClient.create(
46+
Configuration(
47+
BASE_URL,
48+
REALM,
49+
CLIENT_ID,
50+
mapOf("secret" to CLIENT_SECRET),
51+
null,
52+
),
53+
),
54+
)
5155
}
5256

5357
val jwkProvider: JwkProvider by lazy {
@@ -112,11 +116,15 @@ object KeycloakUtils {
112116
}
113117

114118
private fun createAccessToken(identityToken: DecodedJWT, permissions: List<Pair<String, List<String>>>): DecodedJWT {
115-
return JWT.decode(authzClient.authorization(identityToken.token).authorize(AuthorizationRequest().also {
116-
for (permission in permissions) {
117-
it.addPermission(permission.first, permission.second)
118-
}
119-
}).token)
119+
return JWT.decode(
120+
authzClient.authorization(identityToken.token).authorize(
121+
AuthorizationRequest().also {
122+
for (permission in permissions) {
123+
it.addPermission(permission.first, permission.second)
124+
}
125+
},
126+
).token,
127+
)
120128
}
121129

122130
@Synchronized
@@ -153,18 +161,18 @@ object KeycloakUtils {
153161
val requests = permissions.map {
154162
PermissionRequest(
155163
ensureResourcesExists(it.first, null).id,
156-
*it.second.map { it.name }.toTypedArray()
164+
*it.second.map { it.name }.toTypedArray(),
157165
)
158166
}
159167
val ticketResponse = authzClient.protection().permission().create(requests)
160-
val authResponse = authzClient.authorization(/* service account */).authorize(AuthorizationRequest(ticketResponse.ticket))
168+
val authResponse = authzClient.authorization().authorize(AuthorizationRequest(ticketResponse.ticket))
161169
return JWT.decode(authResponse.token)
162170
}
163171

164172
@Synchronized
165173
fun ensureResourcesExists(
166174
resourceSpec: KeycloakResource,
167-
owner: DecodedJWT? = null
175+
owner: DecodedJWT? = null,
168176
): ResourceRepresentation {
169177
return existingResources.get(resourceSpec.name) {
170178
var resource = authzClient.protection().resource().findByNameAnyOwner(resourceSpec.name)
@@ -181,15 +189,14 @@ object KeycloakUtils {
181189
if (resourceSpec.type.createByUser) {
182190
attributes = mapOf(
183191
"created-by" to listOfNotNull(owner?.subject, owner?.getClaim("email")?.asString()),
184-
"creation-timestamp" to listOf(Instant.now().epochSecond.toString())
192+
"creation-timestamp" to listOf(Instant.now().epochSecond.toString()),
185193
)
186194
}
187195
}
188196
resource = protection.resource().create(resource)
189197
permissionCache.invalidateAll()
190198
return@get resource
191199
}
192-
193200
}
194201
}
195202

@@ -217,9 +224,7 @@ fun EPermissionType.toKeycloakScope(): KeycloakScope = when (this) {
217224
EPermissionType.WRITE -> KeycloakScope.WRITE
218225
}
219226

220-
data class KeycloakResource(val name: String, val type: KeycloakResourceType) {
221-
222-
}
227+
data class KeycloakResource(val name: String, val type: KeycloakResourceType)
223228

224229
data class KeycloakResourceType(val name: String, val scopes: Set<KeycloakScope>, val createByUser: Boolean = false) {
225230
fun createInstance(resourceName: String) = KeycloakResource(this.name + "/" + resourceName, this)
@@ -246,7 +251,7 @@ private fun ProtectedResource.findByNameAnyOwner(name: String): ResourceRepresen
246251
true,
247252
true,
248253
null,
249-
null
254+
null,
250255
)
251256
return resources.firstOrNull()
252-
}
257+
}

authorization/src/main/kotlin/org/modelix/authorization/KtorAuthUtils.kt

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,33 @@ package org.modelix.authorization
1616
import com.auth0.jwt.JWT
1717
import com.auth0.jwt.algorithms.Algorithm
1818
import com.auth0.jwt.interfaces.DecodedJWT
19-
import io.ktor.client.*
20-
import io.ktor.client.engine.cio.*
21-
import io.ktor.http.*
22-
import io.ktor.http.auth.*
23-
import io.ktor.server.application.*
24-
import io.ktor.server.auth.*
25-
import io.ktor.server.auth.jwt.*
26-
import io.ktor.server.plugins.forwardedheaders.*
27-
import io.ktor.server.plugins.statuspages.*
28-
import io.ktor.server.request.*
29-
import io.ktor.server.response.*
30-
import io.ktor.server.routing.*
31-
import io.ktor.util.*
32-
import io.ktor.util.pipeline.*
19+
import io.ktor.client.HttpClient
20+
import io.ktor.client.engine.cio.CIO
21+
import io.ktor.http.HttpStatusCode
22+
import io.ktor.http.auth.AuthScheme
23+
import io.ktor.http.auth.HttpAuthHeader
24+
import io.ktor.server.application.Application
25+
import io.ktor.server.application.ApplicationCall
26+
import io.ktor.server.application.ApplicationCallPipeline
27+
import io.ktor.server.application.call
28+
import io.ktor.server.application.install
29+
import io.ktor.server.auth.Authentication
30+
import io.ktor.server.auth.AuthenticationContext
31+
import io.ktor.server.auth.AuthenticationProvider
32+
import io.ktor.server.auth.authenticate
33+
import io.ktor.server.auth.jwt.jwt
34+
import io.ktor.server.auth.parseAuthorizationHeader
35+
import io.ktor.server.auth.principal
36+
import io.ktor.server.plugins.forwardedheaders.XForwardedHeaders
37+
import io.ktor.server.plugins.statuspages.StatusPages
38+
import io.ktor.server.request.header
39+
import io.ktor.server.response.respond
40+
import io.ktor.server.response.respondText
41+
import io.ktor.server.routing.Route
42+
import io.ktor.server.routing.get
43+
import io.ktor.server.routing.routing
44+
import io.ktor.util.AttributeKey
45+
import io.ktor.util.pipeline.PipelineContext
3346
import java.security.interfaces.RSAPublicKey
3447

3548
private const val jwtAuth = "jwtAuth"
@@ -65,7 +78,7 @@ fun Application.installAuthentication(unitTestMode: Boolean = false) {
6578
if (token != null) {
6679
return@validate token.nullIfInvalid()?.let { AccessTokenPrincipal(it) }
6780
}
68-
} catch (e : Exception) {
81+
} catch (e: Exception) {
6982
}
7083
null
7184
}
@@ -77,11 +90,11 @@ fun Application.installAuthentication(unitTestMode: Boolean = false) {
7790
when (cause) {
7891
is NoPermissionException -> call.respondText(
7992
text = cause.message ?: "",
80-
status = HttpStatusCode.Forbidden
93+
status = HttpStatusCode.Forbidden,
8194
)
8295
is NotLoggedInException -> call.respondText(
8396
text = cause.message ?: "",
84-
status = HttpStatusCode.Unauthorized
97+
status = HttpStatusCode.Unauthorized,
8598
)
8699
else -> {
87100
val text = """
@@ -108,37 +121,39 @@ fun Application.installAuthentication(unitTestMode: Boolean = false) {
108121
} catch (e: Exception) {
109122
e.message
110123
}
111-
call.respondText("""
124+
call.respondText(
125+
"""
112126
|Token: ${jwt.token}
113127
|
114128
|Validation result: $validationError
115129
|
116130
|$claims
117-
|""".trimMargin())
131+
|
132+
""".trimMargin(),
133+
)
118134
}
119135
}
120136
}
121137
}
122-
123138
}
124139

125-
fun Route.requiresPermission(resource: KeycloakResource, permissionType: EPermissionType, body: Route.()->Unit) {
140+
fun Route.requiresPermission(resource: KeycloakResource, permissionType: EPermissionType, body: Route.() -> Unit) {
126141
requiresPermission(resource, permissionType.toKeycloakScope(), body)
127142
}
128143

129-
fun Route.requiresRead(resource: KeycloakResource, body: Route.()->Unit) {
144+
fun Route.requiresRead(resource: KeycloakResource, body: Route.() -> Unit) {
130145
requiresPermission(resource, KeycloakScope.READ, body)
131146
}
132147

133-
fun Route.requiresWrite(resource: KeycloakResource, body: Route.()->Unit) {
148+
fun Route.requiresWrite(resource: KeycloakResource, body: Route.() -> Unit) {
134149
requiresPermission(resource, KeycloakScope.WRITE, body)
135150
}
136151

137-
fun Route.requiresDelete(resource: KeycloakResource, body: Route.()->Unit) {
152+
fun Route.requiresDelete(resource: KeycloakResource, body: Route.() -> Unit) {
138153
requiresPermission(resource, KeycloakScope.DELETE, body)
139154
}
140155

141-
fun Route.requiresPermission(resource: KeycloakResource, scope: KeycloakScope, body: Route.()->Unit) {
156+
fun Route.requiresPermission(resource: KeycloakResource, scope: KeycloakScope, body: Route.() -> Unit) {
142157
authenticate(jwtAuth) {
143158
intercept(ApplicationCallPipeline.Call) {
144159
call.checkPermission(resource, scope)
@@ -147,7 +162,7 @@ fun Route.requiresPermission(resource: KeycloakResource, scope: KeycloakScope, b
147162
}
148163
}
149164

150-
fun Route.requiresLogin(body: Route.()->Unit) {
165+
fun Route.requiresLogin(body: Route.() -> Unit) {
151166
authenticate(jwtAuth) {
152167
body()
153168
}
@@ -215,7 +230,7 @@ fun DecodedJWT.nullIfInvalid(): DecodedJWT? {
215230
}
216231

217232
private var cachedServiceAccountToken: DecodedJWT? = null
218-
val serviceAccountTokenProvider: ()->String = {
233+
val serviceAccountTokenProvider: () -> String = {
219234
var token: DecodedJWT? = cachedServiceAccountToken?.nullIfInvalid()
220235
if (token == null) {
221236
token = KeycloakUtils.getServiceAccountToken()

authorization/src/main/kotlin/org/modelix/authorization/NoPermissionException.kt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@
1313
*/
1414
package org.modelix.authorization
1515

16-
class NoPermissionException(val user: AccessTokenPrincipal?, val resourceId: String?, val scope: String?, message: String)
17-
: RuntimeException(message) {
16+
class NoPermissionException(val user: AccessTokenPrincipal?, val resourceId: String?, val scope: String?, message: String) :
17+
RuntimeException(message) {
1818

19-
constructor(message: String)
20-
: this(null, null, null, message)
21-
constructor(user: AccessTokenPrincipal, permissionId: String, type: String)
22-
: this(user, permissionId, type, "${user.getUserName()} has no $type permission on '$permissionId'")
23-
24-
}
19+
constructor(message: String) :
20+
this(null, null, null, message)
21+
constructor(user: AccessTokenPrincipal, permissionId: String, type: String) :
22+
this(user, permissionId, type, "${user.getUserName()} has no $type permission on '$permissionId'")
23+
}

authorization/src/main/kotlin/org/modelix/authorization/NotLoggedInException.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,4 @@
1313
*/
1414
package org.modelix.authorization
1515

16-
class NotLoggedInException : RuntimeException("No valid JWT token found in the request headers") {
17-
}
16+
class NotLoggedInException : RuntimeException("No valid JWT token found in the request headers")

0 commit comments

Comments
 (0)