@@ -15,13 +15,13 @@ import io.ktor.server.application.ApplicationCallPipeline
1515import io.ktor.server.application.BaseRouteScopedPlugin
1616import io.ktor.server.application.call
1717import io.ktor.server.application.install
18+ import io.ktor.server.application.plugin
1819import io.ktor.server.auth.Authentication
1920import io.ktor.server.auth.AuthenticationContext
2021import io.ktor.server.auth.AuthenticationProvider
2122import io.ktor.server.auth.authenticate
2223import io.ktor.server.auth.jwt.jwt
2324import io.ktor.server.auth.principal
24- import io.ktor.server.html.respondHtml
2525import io.ktor.server.plugins.forwardedheaders.XForwardedHeaders
2626import io.ktor.server.plugins.statuspages.StatusPages
2727import io.ktor.server.response.respond
@@ -31,11 +31,15 @@ import io.ktor.server.routing.application
3131import io.ktor.server.routing.get
3232import io.ktor.server.routing.routing
3333import io.ktor.util.AttributeKey
34+ import kotlinx.coroutines.Dispatchers
35+ import kotlinx.coroutines.launch
3436import org.modelix.authorization.permissions.PermissionEvaluator
3537import org.modelix.authorization.permissions.PermissionInstanceReference
3638import org.modelix.authorization.permissions.PermissionParser
3739import org.modelix.authorization.permissions.PermissionParts
3840import org.modelix.authorization.permissions.SchemaInstance
41+ import org.modelix.authorization.permissions.recordKnownRoles
42+ import org.modelix.authorization.permissions.recordKnownUser
3943import java.nio.charset.StandardCharsets
4044import java.util.Base64
4145import java.util.Collections
@@ -85,7 +89,18 @@ object ModelixAuthorization : BaseRouteScopedPlugin<IModelixAuthorizationConfig,
8589 }
8690 validate {
8791 try {
88- jwtFromHeaders()?.let (::AccessTokenPrincipal )
92+ val authPlugin = application.plugin(ModelixAuthorization )
93+ val authConfig = authPlugin.config
94+ jwtFromHeaders()
95+ ?.let { authConfig.nullIfInvalid(it) }
96+ ?.also { jwt ->
97+ application.launch(Dispatchers .IO ) {
98+ val accessControlPersistence = authConfig.accessControlPersistence
99+ accessControlPersistence.recordKnownUser(authConfig.jwtUtil.extractUserId(jwt))
100+ accessControlPersistence.recordKnownRoles(authConfig.jwtUtil.extractUserRoles(jwt))
101+ }
102+ }
103+ ?.let (::AccessTokenPrincipal )
89104 } catch (e: Exception ) {
90105 LOG .warn(e) { " Failed to read JWT token" }
91106 null
@@ -146,11 +161,6 @@ object ModelixAuthorization : BaseRouteScopedPlugin<IModelixAuthorizationConfig,
146161 )
147162 }
148163 }
149- get(" permissions" ) {
150- call.respondHtml {
151- buildPermissionPage(call.getPermissionEvaluator())
152- }
153- }
154164 }
155165 if (config.permissionManagementEnabled) {
156166 installPermissionManagementHandlers()
0 commit comments