Skip to content

Commit 544798f

Browse files
committed
Use ktfmt for formatting code
1 parent 88f1091 commit 544798f

Some content is hidden

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

44 files changed

+3224
-2582
lines changed

.editorconfig

+93
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
# This .editorconfig section approximates ktfmt's formatting rules. You can include it in an
2+
# existing .editorconfig file or use it standalone by copying it to <project root>/.editorconfig
3+
# and making sure your editor is set to read settings from .editorconfig files.
4+
#
5+
# It includes editor-specific config options for IntelliJ IDEA.
6+
#
7+
# If any option is wrong, PR are welcome
8+
9+
[{*.kt,*.kts}]
10+
indent_style = space
11+
insert_final_newline = true
12+
max_line_length = 100
13+
indent_size = 4
14+
ij_continuation_indent_size = 4
15+
ij_java_names_count_to_use_import_on_demand = 9999
16+
ij_kotlin_align_in_columns_case_branch = false
17+
ij_kotlin_align_multiline_binary_operation = false
18+
ij_kotlin_align_multiline_extends_list = false
19+
ij_kotlin_align_multiline_method_parentheses = false
20+
ij_kotlin_align_multiline_parameters = true
21+
ij_kotlin_align_multiline_parameters_in_calls = false
22+
ij_kotlin_allow_trailing_comma = true
23+
ij_kotlin_allow_trailing_comma_on_call_site = true
24+
ij_kotlin_assignment_wrap = normal
25+
ij_kotlin_blank_lines_after_class_header = 0
26+
ij_kotlin_blank_lines_around_block_when_branches = 0
27+
ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1
28+
ij_kotlin_block_comment_at_first_column = true
29+
ij_kotlin_call_parameters_new_line_after_left_paren = true
30+
ij_kotlin_call_parameters_right_paren_on_new_line = false
31+
ij_kotlin_call_parameters_wrap = on_every_item
32+
ij_kotlin_catch_on_new_line = false
33+
ij_kotlin_class_annotation_wrap = split_into_lines
34+
ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL
35+
ij_kotlin_continuation_indent_for_chained_calls = true
36+
ij_kotlin_continuation_indent_for_expression_bodies = true
37+
ij_kotlin_continuation_indent_in_argument_lists = true
38+
ij_kotlin_continuation_indent_in_elvis = false
39+
ij_kotlin_continuation_indent_in_if_conditions = false
40+
ij_kotlin_continuation_indent_in_parameter_lists = false
41+
ij_kotlin_continuation_indent_in_supertype_lists = false
42+
ij_kotlin_else_on_new_line = false
43+
ij_kotlin_enum_constants_wrap = off
44+
ij_kotlin_extends_list_wrap = normal
45+
ij_kotlin_field_annotation_wrap = split_into_lines
46+
ij_kotlin_finally_on_new_line = false
47+
ij_kotlin_if_rparen_on_new_line = false
48+
ij_kotlin_import_nested_classes = false
49+
ij_kotlin_insert_whitespaces_in_simple_one_line_method = true
50+
ij_kotlin_keep_blank_lines_before_right_brace = 2
51+
ij_kotlin_keep_blank_lines_in_code = 2
52+
ij_kotlin_keep_blank_lines_in_declarations = 2
53+
ij_kotlin_keep_first_column_comment = true
54+
ij_kotlin_keep_indents_on_empty_lines = false
55+
ij_kotlin_keep_line_breaks = true
56+
ij_kotlin_lbrace_on_next_line = false
57+
ij_kotlin_line_comment_add_space = false
58+
ij_kotlin_line_comment_at_first_column = true
59+
ij_kotlin_method_annotation_wrap = split_into_lines
60+
ij_kotlin_method_call_chain_wrap = normal
61+
ij_kotlin_method_parameters_new_line_after_left_paren = true
62+
ij_kotlin_method_parameters_right_paren_on_new_line = true
63+
ij_kotlin_method_parameters_wrap = on_every_item
64+
ij_kotlin_name_count_to_use_star_import = 9999
65+
ij_kotlin_name_count_to_use_star_import_for_members = 9999
66+
ij_kotlin_parameter_annotation_wrap = off
67+
ij_kotlin_space_after_comma = true
68+
ij_kotlin_space_after_extend_colon = true
69+
ij_kotlin_space_after_type_colon = true
70+
ij_kotlin_space_before_catch_parentheses = true
71+
ij_kotlin_space_before_comma = false
72+
ij_kotlin_space_before_extend_colon = true
73+
ij_kotlin_space_before_for_parentheses = true
74+
ij_kotlin_space_before_if_parentheses = true
75+
ij_kotlin_space_before_lambda_arrow = true
76+
ij_kotlin_space_before_type_colon = false
77+
ij_kotlin_space_before_when_parentheses = true
78+
ij_kotlin_space_before_while_parentheses = true
79+
ij_kotlin_spaces_around_additive_operators = true
80+
ij_kotlin_spaces_around_assignment_operators = true
81+
ij_kotlin_spaces_around_equality_operators = true
82+
ij_kotlin_spaces_around_function_type_arrow = true
83+
ij_kotlin_spaces_around_logical_operators = true
84+
ij_kotlin_spaces_around_multiplicative_operators = true
85+
ij_kotlin_spaces_around_range = false
86+
ij_kotlin_spaces_around_relational_operators = true
87+
ij_kotlin_spaces_around_unary_operator = false
88+
ij_kotlin_spaces_around_when_arrow = true
89+
ij_kotlin_variable_annotation_wrap = off
90+
ij_kotlin_while_on_new_line = false
91+
ij_kotlin_wrap_elvis_expressions = 1
92+
ij_kotlin_wrap_expression_body_functions = 1
93+
ij_kotlin_wrap_first_method_in_call_chain = false

build.gradle.kts

+7-3
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,14 @@ val swaggerUiVersion = "5.1.0"
2525
val kotestVersion = "5.6.2"
2626
val googlePostgresVersion = "1.12.0"
2727
val googleOauthVersion = "1.34.1"
28+
val ktfmtVersion = "0.44"
2829

2930
tasks.withType<Jar> {
3031
manifest.attributes["Main-Class"] = "no.nav.syfo.BootstrapKt"
3132
}
3233

3334
plugins {
34-
id("org.jmailen.kotlinter") version "3.15.0"
35+
id("com.diffplug.spotless") version "6.19.0"
3536
kotlin("jvm") version "1.8.22"
3637
id("com.github.johnrengelman.shadow") version "8.1.1"
3738
id("org.hidetake.swagger.generator") version "2.19.2" apply true
@@ -146,8 +147,11 @@ repositories {
146147
}
147148
}
148149

149-
"check" {
150-
dependsOn("formatKotlin")
150+
spotless {
151+
kotlin { ktfmt(ktfmtVersion).kotlinlangStyle() }
152+
check {
153+
dependsOn("spotlessApply")
154+
}
151155
}
152156
}
153157

src/main/kotlin/no/nav/syfo/Bootstrap.kt

+34-28
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ import io.ktor.client.request.get
2020
import io.ktor.network.sockets.SocketTimeoutException
2121
import io.ktor.serialization.jackson.jackson
2222
import io.prometheus.client.hotspot.DefaultExports
23+
import java.net.URL
24+
import java.util.concurrent.TimeUnit
25+
import kotlin.time.ExperimentalTime
2326
import kotlinx.coroutines.DelicateCoroutinesApi
2427
import kotlinx.coroutines.runBlocking
2528
import no.nav.syfo.application.ApplicationServer
@@ -41,19 +44,17 @@ import org.apache.kafka.clients.producer.KafkaProducer
4144
import org.apache.kafka.common.serialization.StringSerializer
4245
import org.slf4j.Logger
4346
import org.slf4j.LoggerFactory
44-
import java.net.URL
45-
import java.util.concurrent.TimeUnit
46-
import kotlin.time.ExperimentalTime
4747

4848
val log: Logger = LoggerFactory.getLogger("no.nav.syfo.dinesykmeldte-backend")
4949
val sikkerlogg = LoggerFactory.getLogger("securelog")
5050

51-
val objectMapper: ObjectMapper = ObjectMapper().apply {
52-
registerKotlinModule()
53-
registerModule(JavaTimeModule())
54-
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
55-
configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
56-
}
51+
val objectMapper: ObjectMapper =
52+
ObjectMapper().apply {
53+
registerKotlinModule()
54+
registerModule(JavaTimeModule())
55+
configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
56+
configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
57+
}
5758

5859
@ExperimentalTime
5960
@DelicateCoroutinesApi
@@ -75,7 +76,8 @@ fun main() {
7576
HttpResponseValidator {
7677
handleResponseExceptionWithRequest { exception, _ ->
7778
when (exception) {
78-
is SocketTimeoutException -> throw ServiceUnavailableException(exception.message)
79+
is SocketTimeoutException ->
80+
throw ServiceUnavailableException(exception.message)
7981
}
8082
}
8183
}
@@ -87,7 +89,9 @@ fun main() {
8789
}
8890
retryIf(maxRetries) { request, response ->
8991
if (response.status.value.let { it in 500..599 }) {
90-
log.warn("Retrying for status code ${response.status.value}, for url ${request.url}")
92+
log.warn(
93+
"Retrying for status code ${response.status.value}, for url ${request.url}"
94+
)
9195
true
9296
} else {
9397
false
@@ -103,35 +107,37 @@ fun main() {
103107
val httpClient = HttpClient(Apache, config)
104108

105109
val wellKnownTokenX = getWellKnownTokenX(httpClient, env.tokenXWellKnownUrl)
106-
val jwkProviderTokenX = JwkProviderBuilder(URL(wellKnownTokenX.jwks_uri))
107-
.cached(10, 24, TimeUnit.HOURS)
108-
.rateLimited(10, 1, TimeUnit.MINUTES)
109-
.build()
110+
val jwkProviderTokenX =
111+
JwkProviderBuilder(URL(wellKnownTokenX.jwks_uri))
112+
.cached(10, 24, TimeUnit.HOURS)
113+
.rateLimited(10, 1, TimeUnit.MINUTES)
114+
.build()
110115

111116
val nlResponseProducer = NLResponseProducer(createKafkaProducer(env), env.nlResponseTopic)
112117
val narmestelederService = NarmestelederService(NarmestelederDb(database), nlResponseProducer)
113118

114119
val mineSykmeldteService = MineSykmeldteService(MineSykmeldteDb(database))
115120

116-
val applicationEngine = createApplicationEngine(
117-
env,
118-
jwkProviderTokenX,
119-
wellKnownTokenX.issuer,
120-
applicationState,
121-
mineSykmeldteService,
122-
VirksomhetService(VirksomhetDb(database)),
123-
narmestelederService,
124-
)
121+
val applicationEngine =
122+
createApplicationEngine(
123+
env,
124+
jwkProviderTokenX,
125+
wellKnownTokenX.issuer,
126+
applicationState,
127+
mineSykmeldteService,
128+
VirksomhetService(VirksomhetDb(database)),
129+
narmestelederService,
130+
)
125131
ApplicationServer(applicationEngine, applicationState).start()
126132
}
127133

128-
fun getWellKnownTokenX(httpClient: HttpClient, wellKnownUrl: String) =
129-
runBlocking { httpClient.get(wellKnownUrl).body<WellKnownTokenX>() }
134+
fun getWellKnownTokenX(httpClient: HttpClient, wellKnownUrl: String) = runBlocking {
135+
httpClient.get(wellKnownUrl).body<WellKnownTokenX>()
136+
}
130137

131138
fun <T> createKafkaProducer(env: Environment): KafkaProducer<String, T> =
132139
KafkaProducer(
133-
KafkaUtils
134-
.getAivenKafkaConfig()
140+
KafkaUtils.getAivenKafkaConfig()
135141
.toProducerConfig(
136142
"${env.applicationName}-producer",
137143
JacksonKafkaSerializer::class,

src/main/kotlin/no/nav/syfo/Environment.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ data class Environment(
2020
}
2121

2222
fun getEnvVar(varName: String, defaultValue: String? = null) =
23-
System.getenv(varName) ?: defaultValue ?: throw RuntimeException("Missing required variable \"$varName\"")
23+
System.getenv(varName)
24+
?: defaultValue ?: throw RuntimeException("Missing required variable \"$varName\"")

src/main/kotlin/no/nav/syfo/application/ApplicationEngine.kt

+5-7
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@ import io.ktor.server.application.install
1414
import io.ktor.server.auth.authenticate
1515
import io.ktor.server.engine.ApplicationEngine
1616
import io.ktor.server.engine.embeddedServer
17+
import io.ktor.server.http.content.*
1718
import io.ktor.server.netty.Netty
1819
import io.ktor.server.plugins.callid.CallId
1920
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
2021
import io.ktor.server.plugins.cors.routing.CORS
2122
import io.ktor.server.plugins.statuspages.StatusPages
2223
import io.ktor.server.response.respond
2324
import io.ktor.server.routing.routing
25+
import java.util.UUID
26+
import kotlin.time.ExperimentalTime
2427
import no.nav.syfo.Environment
2528
import no.nav.syfo.application.api.registerNaisApi
26-
import no.nav.syfo.application.api.setupSwaggerDocApi
2729
import no.nav.syfo.application.metrics.monitorHttpRequests
2830
import no.nav.syfo.log
2931
import no.nav.syfo.minesykmeldte.MineSykmeldteService
@@ -32,8 +34,6 @@ import no.nav.syfo.narmesteleder.NarmestelederService
3234
import no.nav.syfo.narmesteleder.api.registerNarmestelederApi
3335
import no.nav.syfo.virksomhet.api.VirksomhetService
3436
import no.nav.syfo.virksomhet.api.registerVirksomhetApi
35-
import java.util.UUID
36-
import kotlin.time.ExperimentalTime
3737

3838
@ExperimentalTime
3939
fun createApplicationEngine(
@@ -72,9 +72,7 @@ fun createApplicationEngine(
7272
}
7373
install(CORS) {
7474
allowMethod(HttpMethod.Get)
75-
env.allowedOrigin.forEach {
76-
hosts.add("https://$it")
77-
}
75+
env.allowedOrigin.forEach { hosts.add("https://$it") }
7876
allowHeader("nav_csrf_protection")
7977
allowHeader("Sykmeldt-Fnr")
8078
allowCredentials = true
@@ -84,7 +82,7 @@ fun createApplicationEngine(
8482
routing {
8583
registerNaisApi(applicationState)
8684
if (env.cluster == "dev-gcp") {
87-
setupSwaggerDocApi()
85+
staticResources("/api/v1/docs/", "api") { default("api/index.html") }
8886
}
8987
authenticate("tokenx") {
9088
registerMineSykmeldteApi(mineSykmeldteService)

src/main/kotlin/no/nav/syfo/application/ApplicationServer.kt

+14-7
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@ package no.nav.syfo.application
33
import io.ktor.server.engine.ApplicationEngine
44
import java.util.concurrent.TimeUnit
55

6-
class ApplicationServer(private val applicationServer: ApplicationEngine, private val applicationState: ApplicationState) {
6+
class ApplicationServer(
7+
private val applicationServer: ApplicationEngine,
8+
private val applicationState: ApplicationState
9+
) {
710
init {
8-
Runtime.getRuntime().addShutdownHook(
9-
Thread {
10-
this.applicationState.ready = false
11-
this.applicationServer.stop(TimeUnit.SECONDS.toMillis(10), TimeUnit.SECONDS.toMillis(10))
12-
},
13-
)
11+
Runtime.getRuntime()
12+
.addShutdownHook(
13+
Thread {
14+
this.applicationState.ready = false
15+
this.applicationServer.stop(
16+
TimeUnit.SECONDS.toMillis(10),
17+
TimeUnit.SECONDS.toMillis(10)
18+
)
19+
},
20+
)
1421
}
1522

1623
fun start() {

src/main/kotlin/no/nav/syfo/application/Authentication.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ fun Application.setupAuth(jwkProviderTokenX: JwkProvider, tokenXIssuer: String,
2727
verifier(jwkProviderTokenX, tokenXIssuer)
2828
validate { credentials ->
2929
when {
30-
harDineSykmeldteBackendAudience(credentials, env.dineSykmeldteBackendTokenXClientId) && erNiva4(credentials) -> {
30+
harDineSykmeldteBackendAudience(
31+
credentials,
32+
env.dineSykmeldteBackendTokenXClientId
33+
) && erNiva4(credentials) -> {
3134
val principal = JWTPrincipal(credentials.payload)
3235
BrukerPrincipal(
3336
fnr = finnFnrFraToken(principal),
@@ -49,7 +52,10 @@ fun ApplicationCall.getToken(): String? {
4952
}
5053

5154
fun finnFnrFraToken(principal: JWTPrincipal): String {
52-
return if (principal.payload.getClaim("pid") != null && !principal.payload.getClaim("pid").asString().isNullOrEmpty()) {
55+
return if (
56+
principal.payload.getClaim("pid") != null &&
57+
!principal.payload.getClaim("pid").asString().isNullOrEmpty()
58+
) {
5359
log.debug("Bruker fnr fra pid-claim")
5460
principal.payload.getClaim("pid").asString()
5561
} else {

src/main/kotlin/no/nav/syfo/application/api/NaisRest.kt

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ fun Routing.registerNaisApi(
3131
if (readynessCheck()) {
3232
call.respondText("I'm ready! :)")
3333
} else {
34-
call.respondText("Please wait! I'm not ready :(", status = HttpStatusCode.InternalServerError)
34+
call.respondText(
35+
"Please wait! I'm not ready :(",
36+
status = HttpStatusCode.InternalServerError
37+
)
3538
}
3639
}
3740
get("/prometheus") {

src/main/kotlin/no/nav/syfo/application/api/SwaggerAPI.kt

-16
This file was deleted.

0 commit comments

Comments
 (0)