val newUser = currentUser.copy(
showDiscordName = form["showdiscord"] == "yes",
showUserStatus = form["showstatus"] == "yes",
+ logIpAddresses = form["logaddress"] == "yes",
profileName = form["name"]?.takeIf { it.isNotBlank() && it.length <= PROFILE_NAME_MAX_LENGTH } ?: redirect("/me/manage?" + parametersOf("error", "Invalid name - must not be blank, must be at most $PROFILE_NAME_MAX_LENGTH characters").formUrlEncode()),
profileBio = form["bio"]?.takeIf { it.isNotBlank() && it.length <= PROFILE_BIO_MAX_LENGTH } ?: redirect("/me/manage?" + parametersOf("error", "Invalid bio - must not be blank, must be at most $PROFILE_BIO_MAX_LENGTH characters").formUrlEncode())
)
User.put(newUser)
+
+ if (!newUser.logIpAddresses)
+ launch {
+ UserSession.update(
+ UserSession::user eq currentUser.id,
+ setValue(UserSession::clientAddresses, emptyList())
+ )
+ }
+
redirect("/user/${newUser.id}")
}
registeredAt = Instant.now(),
lastActivity = Instant.now(),
showUserStatus = false,
+ logIpAddresses = false,
).also {
User.put(it)
}
registeredAt = Instant.now(),
lastActivity = Instant.now(),
showUserStatus = false,
+ logIpAddresses = false,
)
val userSession = UserSession(
suspend fun UserSession.renewed(clientAddress: String) = copy(
expiration = Instant.now().plus(1, ChronoUnit.HOURS),
- clientAddresses = if (clientAddresses.last() != clientAddress) clientAddresses + clientAddress else clientAddresses
+ clientAddresses = if (User.get(user)?.logIpAddresses != true)
+ emptyList()
+ else if (clientAddresses.lastOrNull() != clientAddress)
+ clientAddresses + clientAddress
+ else
+ clientAddresses
).also { UserSession.put(it) }
suspend fun User.updated() = copy(
val lastActivity: @Contextual Instant,
val showUserStatus: Boolean,
+ val logIpAddresses: Boolean,
+
val status: UserStatus = UserStatus.AVAILABLE,
) : DataDocument<User> {
val discordAvatarUrl: String