data class MySession(val name: String) val accounts = HashMap() fun main(args: Array) { val server = embeddedServer(Netty, 8080) { install(FreeMarker) { templateLoader = ClassTemplateLoader(this::class.java.classLoader, "templates") } install(Sessions) { cookie("SESSION") } routing { route("/register") { get { if (call.sessions.get() != null) { call.respondRedirect("/") } call.respond(FreeMarkerContent("register.ftl", null)) } post { if (call.sessions.get() != null) { call.respondRedirect("/") } val post = context.receiveParameters() if (post["login"].isNullOrEmpty() || post["password"].isNullOrEmpty()) { call.respond(FreeMarkerContent("register.ftl", mapOf("error" to "Login or password cannot be empty!"))) } val login = post["login"].toString() val password = post["password"].toString() if (accounts[login] != null) { call.respond(FreeMarkerContent("register.ftl", mapOf("error" to "User with that name already exists!"))) } accounts[login] = password call.sessions.set("SESSION", MySession(login)) call.respondRedirect("/") } } route("/login") { get { if (call.sessions.get() != null) { call.respondRedirect("/") } call.respond(FreeMarkerContent("login.ftl", null)) } post { if (call.sessions.get() != null) { call.respondRedirect("/") } val post = context.receiveParameters() if (post["login"].isNullOrEmpty() || post["password"].isNullOrEmpty()) { call.respond(FreeMarkerContent("login.ftl", mapOf("error" to "Login or password cannot be empty!"))) } val login = post["login"].toString() val password = post["password"].toString() if (accounts[login] == null) { call.respond(FreeMarkerContent("login.ftl", mapOf("error" to "User with that name does not exist!"))) } if (accounts[login] != password) { call.respond(FreeMarkerContent("login.ftl", mapOf("error" to "Wrong password!"))) } call.sessions.set("SESSION", MySession(login)) call.respondRedirect("/") } } get("/logout") { val session = call.sessions.get() if (session != null) { call.sessions.set("SESSION", null) } call.respondRedirect("/login") } get("/") { val session = call.sessions.get() if (session == null) { call.respondRedirect("/login") } call.respond(FreeMarkerContent("index.ftl", mapOf("user" to session!!.name))) } } }.start(true) }