@@ -15,13 +15,13 @@ import io.ktor.server.application.ApplicationCallPipeline
15
15
import io.ktor.server.application.BaseRouteScopedPlugin
16
16
import io.ktor.server.application.call
17
17
import io.ktor.server.application.install
18
+ import io.ktor.server.application.plugin
18
19
import io.ktor.server.auth.Authentication
19
20
import io.ktor.server.auth.AuthenticationContext
20
21
import io.ktor.server.auth.AuthenticationProvider
21
22
import io.ktor.server.auth.authenticate
22
23
import io.ktor.server.auth.jwt.jwt
23
24
import io.ktor.server.auth.principal
24
- import io.ktor.server.html.respondHtml
25
25
import io.ktor.server.plugins.forwardedheaders.XForwardedHeaders
26
26
import io.ktor.server.plugins.statuspages.StatusPages
27
27
import io.ktor.server.response.respond
@@ -31,11 +31,15 @@ import io.ktor.server.routing.application
31
31
import io.ktor.server.routing.get
32
32
import io.ktor.server.routing.routing
33
33
import io.ktor.util.AttributeKey
34
+ import kotlinx.coroutines.Dispatchers
35
+ import kotlinx.coroutines.launch
34
36
import org.modelix.authorization.permissions.PermissionEvaluator
35
37
import org.modelix.authorization.permissions.PermissionInstanceReference
36
38
import org.modelix.authorization.permissions.PermissionParser
37
39
import org.modelix.authorization.permissions.PermissionParts
38
40
import org.modelix.authorization.permissions.SchemaInstance
41
+ import org.modelix.authorization.permissions.recordKnownRoles
42
+ import org.modelix.authorization.permissions.recordKnownUser
39
43
import java.nio.charset.StandardCharsets
40
44
import java.util.Base64
41
45
import java.util.Collections
@@ -85,7 +89,18 @@ object ModelixAuthorization : BaseRouteScopedPlugin<IModelixAuthorizationConfig,
85
89
}
86
90
validate {
87
91
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 )
89
104
} catch (e: Exception ) {
90
105
LOG .warn(e) { " Failed to read JWT token" }
91
106
null
@@ -146,11 +161,6 @@ object ModelixAuthorization : BaseRouteScopedPlugin<IModelixAuthorizationConfig,
146
161
)
147
162
}
148
163
}
149
- get(" permissions" ) {
150
- call.respondHtml {
151
- buildPermissionPage(call.getPermissionEvaluator())
152
- }
153
- }
154
164
}
155
165
if (config.permissionManagementEnabled) {
156
166
installPermissionManagementHandlers()
0 commit comments