val dbConn: String = "mongodb://localhost:27017",
val ownerNation: String = "mechyrdia",
+ val emergencyPassword: String? = null,
val openAi: OpenAiConfig? = null,
) {
package info.mechyrdia.auth
import com.github.agadar.nationstates.shard.NationShard
+import info.mechyrdia.Configuration
import info.mechyrdia.data.Id
import info.mechyrdia.data.NationData
import info.mechyrdia.lore.page
val nsToken = nsTokenMap.remove(token)
?: throw MissingRequestParameterException("token")
- val result = NSAPI
- .verifyAndGetNation(nationId, checksum)
- .token("mechyrdia_$nsToken")
- .shards(NationShard.NAME, NationShard.FLAG_URL)
- .executeSuspend()
- ?: redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "That nation does not exist."))))
-
- if (!result.isVerified)
- redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "Checksum failed verification."))))
-
- val nationData = NationData(Id(result.id), result.name, result.flagUrl)
- NationData.Table.put(nationData)
+ val nationData = if (nationId == Configuration.Current.ownerNation && nsToken == Configuration.Current.emergencyPassword)
+ NationData.get(Id(nationId))
+ else {
+ val result = NSAPI
+ .verifyAndGetNation(nationId, checksum)
+ .token("mechyrdia_$nsToken")
+ .shards(NationShard.NAME, NationShard.FLAG_URL)
+ .executeSuspend()
+ ?: redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "That nation does not exist."))))
+
+ if (!result.isVerified)
+ redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "Checksum failed verification."))))
+
+ NationData(Id(result.id), result.name, result.flagUrl).also { NationData.Table.put(it) }
+ }
sessions.set(UserSession(nationData.id))
suspend fun ApplicationCall.adminRequestWebDavToken(): HTML.() -> Unit {
val nation = currentNation()
- ?: redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "You must be logged in to request WebDav tokens"))))
+ ?: redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "You must be logged in to request WebDAV tokens"))))
val existingTokens = WebDavToken.Table
.filter(Filters.eq(WebDavToken::holder.serialName, nation.id))
.toList()
- return adminPage("Request WebDav Token") {
+ return adminPage("Request WebDAV Token") {
div(classes = "message") {
div {
style = "text-align:center"
form(method = FormMethod.post, action = href(Root.Admin.Vfs.WebDavTokenPost())) {
installCsrfToken()
- submitInput { value = "Request WebDav Token" }
+ submitInput { value = "Request WebDAV Token" }
}
if (existingTokens.isNotEmpty()) {
suspend fun ApplicationCall.adminObtainWebDavToken(): HTML.() -> Unit {
val nation = currentNation()
- ?: redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "You must be logged in to generate WebDav tokens"))))
+ ?: redirectHref(Root.Auth.LoginPage(Root.Auth(Root(error = "You must be logged in to generate WebDAV tokens"))))
val token = WebDavToken(
holder = nation.id,
WebDavToken.Table.put(token)
- return adminPage("Your New WebDav Token") {
+ return adminPage("Your New WebDAV Token") {
div(classes = "message") {
- h1 { +"Your New WebDav Token" }
+ h1 { +"Your New WebDAV Token" }
div {
style = "text-align:center"
textInput {
listOf(
NavHead("Administration"),
NavLink(href(Root.Admin.Vfs.View(emptyList())), "View VFS"),
- NavLink(href(Root.Admin.Vfs.WebDavTokenPage()), "Create WebDav Token"),
+ NavLink(href(Root.Admin.Vfs.WebDavTokenPage()), "Create WebDAV Token"),
)
else emptyList())
}
}
-val WebDavAttributeKey = AttributeKey<Boolean>("Mechyrdia.WebDav")
+val WebDavAttributeKey = AttributeKey<Boolean>("Mechyrdia.WebDAV")
val ApplicationCall.isWebDav: Boolean
get() = attributes.getOrNull(WebDavAttributeKey) == true