diff --git a/src/main/kotlin/com/restapi/AppAccessManager.kt b/src/main/kotlin/com/restapi/AppAccessManager.kt index f59c7d8..f26a1b5 100644 --- a/src/main/kotlin/com/restapi/AppAccessManager.kt +++ b/src/main/kotlin/com/restapi/AppAccessManager.kt @@ -21,7 +21,8 @@ class AppAccessManager : AccessManager { return database.find(EntityModel::class.java) .where() .eq("name", entity) - .findOne()?.actions + .findOne() + ?.actions ?.filter { it.equals(action, ignoreCase = true) } ?.map { "role_${entity}_$it" } ?: emptyList() } diff --git a/src/main/kotlin/com/restapi/Main.kt b/src/main/kotlin/com/restapi/Main.kt index f8d3d72..11ddef4 100644 --- a/src/main/kotlin/com/restapi/Main.kt +++ b/src/main/kotlin/com/restapi/Main.kt @@ -47,6 +47,8 @@ fun main(args: Array) { val updateRole = Role.Standard(Action.UPDATE) val approveOrRejectRole = Role.Standard(Action.APPROVE) + //todo, create roles in keycloak based on entity and actions + //ratelimit based on IP Only RateLimitUtil.keyFunction = { ctx -> ctx.header("X-Forwarded-For")?.split(",")?.get(0) ?: ctx.ip() } Javalin @@ -225,15 +227,11 @@ fun main(args: Array) { private fun getFormDataAsString(formData: Map): String { - val formBodyBuilder = StringBuilder() - for ((key, value) in formData) { - if (formBodyBuilder.isNotEmpty()) { - formBodyBuilder.append("&") - } - formBodyBuilder.append(URLEncoder.encode(key, StandardCharsets.UTF_8)) - formBodyBuilder.append("=") - formBodyBuilder.append(URLEncoder.encode(value, StandardCharsets.UTF_8)) + + return formData.entries.joinToString("&") { + val key = URLEncoder.encode(it.key, StandardCharsets.UTF_8) + val value = URLEncoder.encode(it.value, StandardCharsets.UTF_8) + "$key=$value" } - return formBodyBuilder.toString() }