diff --git a/src/main/scala/de/tobias/playpad/server/account/Account.scala b/src/main/scala/de/tobias/playpad/server/account/Account.scala index 410d6704b5324c06c20e06c23e8085219e79ee5e..0172127788aa331366b0e52f3bbdd35e6fcbb134 100644 --- a/src/main/scala/de/tobias/playpad/server/account/Account.scala +++ b/src/main/scala/de/tobias/playpad/server/account/Account.scala @@ -1,6 +1,6 @@ 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 + } } + + diff --git a/src/main/scala/de/tobias/playpad/server/account/Session.scala b/src/main/scala/de/tobias/playpad/server/account/Session.scala index e3cbb653b4414f174403754dae1b6d29fbc15d06..80b46d20ce307c1101d7dfd5188b115631752282 100644 --- a/src/main/scala/de/tobias/playpad/server/account/Session.scala +++ b/src/main/scala/de/tobias/playpad/server/account/Session.scala @@ -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 + } } diff --git a/src/main/scala/de/tobias/playpad/server/server/account/AccountPut.scala b/src/main/scala/de/tobias/playpad/server/server/account/AccountPut.scala index d8e7b635942a587c74e898d0358d52f9d5146e8c..43fa68c03d602f654be461f0bd6fd5e2b7d37f7b 100644 --- a/src/main/scala/de/tobias/playpad/server/server/account/AccountPut.scala +++ b/src/main/scala/de/tobias/playpad/server/server/account/AccountPut.scala @@ -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) - return new Result(Status.OK) - } + 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) diff --git a/src/main/scala/de/tobias/playpad/server/server/account/SessionDelete.scala b/src/main/scala/de/tobias/playpad/server/server/account/SessionDelete.scala index 69fd68d49a84b63b8cc1261551dc0f0c3f78d25b..644e668d2bd38deaaafecfc69b4aee19c3ad1449 100644 --- a/src/main/scala/de/tobias/playpad/server/server/account/SessionDelete.scala +++ b/src/main/scala/de/tobias/playpad/server/server/account/SessionDelete.scala @@ -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) - return new Result(Status.OK, "deleted") - } - } + 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) + } } } diff --git a/src/main/scala/de/tobias/playpad/server/server/account/SessionGet.scala b/src/main/scala/de/tobias/playpad/server/server/account/SessionGet.scala index 9ffe9e4dc490bbd3a925bc9c51acc0ec28007e5e..9382f46226b3b3bc9d661144c444de059ed805ab 100644 --- a/src/main/scala/de/tobias/playpad/server/server/account/SessionGet.scala +++ b/src/main/scala/de/tobias/playpad/server/server/account/SessionGet.scala @@ -15,24 +15,23 @@ 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) - val array = new JsonArray - account.sessions.forEach(session => { - val jsonObj = new JsonObject - jsonObj.addProperty("key", session.key) - jsonObj.addProperty("createDate", session.createDate.getTime) - array.add(jsonObj) - }) - return array - } + account match { + case Some(a) => + if (a.password.equals(password)) { + val array = new JsonArray + a.sessions.forEach(session => { + val jsonObj = new JsonObject + jsonObj.addProperty("key", session.key) + jsonObj.addProperty("createDate", session.createDate.getTime) + array.add(jsonObj) + }) + return array + } + new Result(Status.ERROR, "Password invalid") + case None => + new Result(Status.ERROR, "Account invalid") } - - new Result(Status.ERROR) } - } diff --git a/src/main/scala/de/tobias/playpad/server/server/account/SessionPost.scala b/src/main/scala/de/tobias/playpad/server/server/account/SessionPost.scala index 1a00aab80b8ff94a26090e500be76e505b099bdd..7ae39fc3f926db37c98793e13964bb2a18fc580c 100644 --- a/src/main/scala/de/tobias/playpad/server/server/account/SessionPost.scala +++ b/src/main/scala/de/tobias/playpad/server/server/account/SessionPost.scala @@ -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 randomKey = Session.generateKey() - val session = new Session(account, randomKey) - - account.sessions.add(session) - accountDao.update(account) - return new SessionPostResult(Status.OK, randomKey) - } + val account = Account.getAccount(username, accountDao) + + account match { + case Some(a) => + if (a.password.equals(password)) { + + val randomKey = Session.generateKey() + val session = new Session(a, randomKey) + + 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 { diff --git a/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala b/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala index ffb868475b84401a9e9c99e66ac12a40e9c8b3d2..8cf5aef679674559fa146d7efe1a1659076e3bbc 100644 --- a/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala +++ b/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala @@ -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 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) { - val projectSaver = new ProjectSaver() - return projectSaver.save(project) + val session = Session.getSession(sessionKey, sessionDao) + + session match { + case Some(s) => + val projectLoader = new ProjectLoader() + val projects = projectLoader.load(connection, UUID.fromString(projectId)) + + if (projects.size == 1) { + val project = projects.head + 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") } - new Result(Status.ERROR, "Session invalid") } }