Allen Eubank
01/29/2021, 4:48 PM/** Application.main() */
val db: SqlDelightDatabase by inject()
val orgDb: OrgDb by inject()
install(Authentication) {
basic(name = "orgtoken") {
validate { credentials ->
if (credentials.name.isEmpty() or credentials.name.isEmpty()) return@validate null
val org = db.organizationQueries.selectByHttpAuthUsername(credentials.name)
.executeAsOneOrNull() ?: return@validate null
val orgQueries = orgDb.instance(org) ?: return@validate null
val activeToken = orgQueries.tokenQueries.validToken(credentials.password).executeAsOne()
if (activeToken) {
return@validate OrganizationPrincipal(org)
} else {
return@validate null
}
}
}
}
/** OrgAuth.kt */
fun Application.orgAuth() {
val db: SqlDelightDatabase by inject()
val orgDb: OrgDb by inject()
install(Authentication) {
basic(name = "orgtoken") {
validate { credentials ->
if (credentials.name.isEmpty() or credentials.name.isEmpty()) return@validate null
val org = db.organizationQueries.selectByHttpAuthUsername(credentials.name)
.executeAsOneOrNull() ?: return@validate null
val orgQueries = orgDb.instance(org) ?: return@validate null
val activeToken = orgQueries.tokenQueries.validToken(credentials.password).executeAsOne()
if (activeToken) {
return@validate OrganizationPrincipal(org)
} else {
return@validate null
}
}
}
}
}
Then, you can just call orgAuth
to install the feature.