Skip to content
Snippets Groups Projects
Commit 63260946 authored by Tobias Ullerich's avatar Tobias Ullerich
Browse files

Extracted account and sesison query from route handler into extra methods

parent 06d1ce8d
No related branches found
No related tags found
No related merge requests found
package de.tobias.playpad.server.account
import com.j256.ormlite.dao.ForeignCollection
import com.j256.ormlite.dao.{Dao, ForeignCollection}
import com.j256.ormlite.field.{DatabaseField, ForeignCollectionField}
import com.j256.ormlite.table.DatabaseTable
......@@ -36,4 +36,17 @@ import com.j256.ormlite.table.DatabaseTable
val state = Seq(id)
state.map(_.hashCode()).foldLeft(0)((a, b) => 31 * a + b)
}
}
object Account {
def getAccount(username: String, accountDao: Dao[Account, Int]): Option[Account] = {
val accountList = accountDao.queryForEq("username", username)
if (accountList.size() == 1) {
return Some(accountList.get(0))
}
None
}
}
......@@ -2,6 +2,7 @@ package de.tobias.playpad.server.account
import java.sql.Date
import com.j256.ormlite.dao.Dao
import com.j256.ormlite.field.DatabaseField
import com.j256.ormlite.table.DatabaseTable
......@@ -49,4 +50,12 @@ object Session {
val alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
def generateKey(): String = (1 to length).map(_ => alpha(Random.nextInt.abs % alpha.length())).mkString
def getSession(sessionKey: String, sessionDao: Dao[Session, Int]): Option[Session] = {
val sessionList = sessionDao.queryForEq("key", sessionKey)
if (sessionList.size() == 1) {
return Some(sessionList.get(0))
}
None
}
}
......@@ -19,15 +19,17 @@ class AccountPut(accountDao: Dao[Account, Int]) extends Route {
val oldPassword = request.queryMap().get("old_password").value
val newPassword = request.queryMap().get("new_password").value
val accounts = accountDao.queryForEq("username", username)
if (accounts.size() == 1) {
val account = accounts.get(0)
if (account.password.equals(oldPassword)) {
account.password = newPassword
accountDao.update(account)
val account = Account.getAccount(username, accountDao)
account match {
case Some(a) =>
if (a.password.equals(oldPassword)) {
a.password = newPassword
accountDao.update(a)
return new Result(Status.OK)
}
new Result(Status.ERROR, "Password invalid")
case None =>
new Result(Status.ERROR, "Account invalid")
}
} catch {
case e: SQLException => return new Result(Status.ERROR)
......
......@@ -15,18 +15,20 @@ class SessionDelete(accountDao: Dao[Account, Int]) extends Route {
val password = request.queryParams("password")
val key = request.queryParams("key")
// check account
val accounts = accountDao.queryForEq("username", username)
if (accounts.size() == 1) {
val account = accounts.get(0)
if (account.password.equals(password)) {
account.sessions.removeIf(s => s.key.equals(key))
accountDao.update(account)
val account = Account.getAccount(username, accountDao)
account match {
case Some(a) =>
if (a.password.equals(password)) {
a.sessions.removeIf(s => s.key.equals(key))
accountDao.update(a)
return new Result(Status.OK, "deleted")
}
}
new Result(Status.ERROR, "Password invalid")
case None =>
new Result(Status.ERROR, "Account invalid")
new Result(Status.ERROR)
}
}
}
......@@ -15,14 +15,13 @@ class SessionGet(accountDao: Dao[Account, Int]) extends Route {
val username = request.queryParams("username")
val password = request.queryParams("password")
// check account
val accounts = accountDao.queryForEq("username", username)
if (accounts.size() == 1) {
val account = accounts.get(0)
if (account.password.equals(password)) {
val account = Account.getAccount(username, accountDao)
account match {
case Some(a) =>
if (a.password.equals(password)) {
val array = new JsonArray
account.sessions.forEach(session => {
a.sessions.forEach(session => {
val jsonObj = new JsonObject
jsonObj.addProperty("key", session.key)
jsonObj.addProperty("createDate", session.createDate.getTime)
......@@ -30,9 +29,9 @@ class SessionGet(accountDao: Dao[Account, Int]) extends Route {
})
return array
}
new Result(Status.ERROR, "Password invalid")
case None =>
new Result(Status.ERROR, "Account invalid")
}
new Result(Status.ERROR)
}
}
......@@ -14,22 +14,23 @@ class SessionPost(accountDao: Dao[Account, Int]) extends Route {
val username = request.queryParams("username")
val password = request.queryParams("password")
// check account
val accounts = accountDao.queryForEq("username", username)
if (accounts.size() == 1) {
val account = accounts.get(0)
if (account.password.equals(password)) {
val account = Account.getAccount(username, accountDao)
account match {
case Some(a) =>
if (a.password.equals(password)) {
val randomKey = Session.generateKey()
val session = new Session(account, randomKey)
val session = new Session(a, randomKey)
account.sessions.add(session)
accountDao.update(account)
a.sessions.add(session)
accountDao.update(a)
return new SessionPostResult(Status.OK, randomKey)
}
new Result(Status.ERROR, "Password invalid")
case None =>
new Result(Status.ERROR, "Account invalid")
}
new Result(Status.ERROR)
}
private class SessionPostResult {
......
......@@ -5,7 +5,7 @@ import java.util.UUID
import com.j256.ormlite.dao.Dao
import de.tobias.playpad.server.account.Session
import de.tobias.playpad.server.project.loader.ProjectLoader
import de.tobias.playpad.server.project.loader.sql.ProjectLoader
import de.tobias.playpad.server.project.saver.json.ProjectSaver
import de.tobias.playpad.server.server.{Result, Status}
import spark.{Request, Response, Route}
......@@ -19,21 +19,24 @@ class ProjectGet(connection: Connection, sessionDao: Dao[Session, Int]) extends
val sessionKey = request.queryParams("session")
val projectId = request.queryParams("project")
val sessions = sessionDao.queryForEq("key", sessionKey)
if (sessions.size() == 1) {
val session = Session.getSession(sessionKey, sessionDao)
session match {
case Some(s) =>
val projectLoader = new ProjectLoader()
val projects = projectLoader.load(connection, UUID.fromString(projectId))
val session = sessions.get(0)
if (projects.size == 1) {
val project = projects.head
if (project.accountId == session.getAccount.id) {
if (project.accountId == s.getAccount.id) {
val projectSaver = new ProjectSaver()
return projectSaver.save(project)
}
}
}
new Result(Status.ERROR, "Project invalid")
case None =>
new Result(Status.ERROR, "Session invalid")
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment