diff --git a/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/deploy/IDeploy.scala b/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/deploy/IDeploy.scala index 178bb59..e95809a 100644 --- a/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/deploy/IDeploy.scala +++ b/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/deploy/IDeploy.scala @@ -3,7 +3,7 @@ package cz.kamenitxan.jakon.core.deploy import cz.kamenitxan.jakon.core.deploy.entity.Server trait IDeploy { + def deploy(server: Server): Unit - //def getDeploySettings: Map[String, String] } diff --git a/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/service/UserService.scala b/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/service/UserService.scala index 8e27d4d..618e4d9 100644 --- a/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/service/UserService.scala +++ b/modules/backend/src/main/scala/cz/kamenitxan/jakon/core/service/UserService.scala @@ -17,6 +17,8 @@ import scala.util.Random object UserService { implicit val cls: Class[JakonUser] = classOf[JakonUser] + // language=SQL + val SQL_FIND_USER = "SELECT * FROM JakonUser WHERE email = ?" // language=SQL val SQL_FIND_USER_BY_USERNAME = "SELECT * FROM JakonUser WHERE username = ?" @@ -27,7 +29,7 @@ object UserService { } def getByEmail(email: String)(implicit conn: Connection): JakonUser = { - val stmt = conn.prepareStatement(Authentication.SQL_FIND_USER) + val stmt = conn.prepareStatement(SQL_FIND_USER) stmt.setString(1, email) DBHelper.selectSingleDeep(stmt) } diff --git a/modules/backend/src/main/scala/cz/kamenitxan/jakon/utils/security/oauth/OauthProvider.scala b/modules/backend/src/main/scala/cz/kamenitxan/jakon/utils/security/oauth/OauthProvider.scala index f94eda6..d65f33f 100644 --- a/modules/backend/src/main/scala/cz/kamenitxan/jakon/utils/security/oauth/OauthProvider.scala +++ b/modules/backend/src/main/scala/cz/kamenitxan/jakon/utils/security/oauth/OauthProvider.scala @@ -1,12 +1,11 @@ package cz.kamenitxan.jakon.utils.security.oauth import java.sql.Connection - import cz.kamenitxan.jakon.core.database.DBHelper import cz.kamenitxan.jakon.core.model.{AclRule, JakonUser} +import cz.kamenitxan.jakon.core.service.UserService import cz.kamenitxan.jakon.logging.Logger import cz.kamenitxan.jakon.utils.PageContext -import cz.kamenitxan.jakon.webui.controller.impl.Authentication.{SQL_FIND_ACL, SQL_FIND_USER} import cz.kamenitxan.jakon.webui.entity.{Message, MessageSeverity} import spark.Request @@ -21,20 +20,11 @@ trait OauthProvider { def handleAuthResponse(req: Request)(implicit conn: Connection): Boolean def logIn(req: Request, email: String)(implicit conn: Connection): Boolean = { - val stmt = conn.prepareStatement(SQL_FIND_USER) - stmt.setString(1, email) - - val result = DBHelper.selectSingle(stmt, classOf[JakonUser]) - if (result.entity == null) { + val user = UserService.getByEmail(email) + if (user == null) { PageContext.getInstance().messages += new Message(MessageSeverity.ERROR, "WRONG_EMAIL_OR_PASSWORD") false } else { - val user = result.entity - val stmt = conn.prepareStatement(SQL_FIND_ACL) - stmt.setInt(1, result.foreignIds.getOrElse("acl_id", null).ids.head) - val aclResult = DBHelper.selectSingle(stmt, classOf[AclRule]) - user.acl = aclResult.entity - Logger.info("User " + user.username + " logged in") req.session(true).attribute("user", user) true diff --git a/modules/backend/src/main/scala/cz/kamenitxan/jakon/validation/EntityValidator.scala b/modules/backend/src/main/scala/cz/kamenitxan/jakon/validation/EntityValidator.scala index e3898de..3fe3813 100644 --- a/modules/backend/src/main/scala/cz/kamenitxan/jakon/validation/EntityValidator.scala +++ b/modules/backend/src/main/scala/cz/kamenitxan/jakon/validation/EntityValidator.scala @@ -33,7 +33,6 @@ object EntityValidator { val errors = validatedData.map(data => { val constructor: Constructor[_] = data._1.getDeclaringClass.getDeclaredConstructors.head val parameterIndex = constructor.getParameters.zipWithIndex.find(pi => { - //Logger.warn(s"${pi._1.getName} - ${data._1.getName} : ${pi._1.getName == data._1.getName}") pi._1.getName == data._1.getName }).map(_._2) if (parameterIndex.isEmpty) { diff --git a/modules/backend/src/main/scala/cz/kamenitxan/jakon/webui/controller/impl/Authentication.scala b/modules/backend/src/main/scala/cz/kamenitxan/jakon/webui/controller/impl/Authentication.scala index 01e8aa8..d4e4483 100644 --- a/modules/backend/src/main/scala/cz/kamenitxan/jakon/webui/controller/impl/Authentication.scala +++ b/modules/backend/src/main/scala/cz/kamenitxan/jakon/webui/controller/impl/Authentication.scala @@ -3,6 +3,7 @@ package cz.kamenitxan.jakon.webui.controller.impl import cz.kamenitxan.jakon.core.configuration.{DeployMode, Settings} import cz.kamenitxan.jakon.core.database.DBHelper import cz.kamenitxan.jakon.core.model.{AclRule, JakonUser} +import cz.kamenitxan.jakon.core.service.UserService import cz.kamenitxan.jakon.logging.Logger import cz.kamenitxan.jakon.utils.security.oauth.{Facebook, Google} import cz.kamenitxan.jakon.utils.{PageContext, Utils} @@ -19,8 +20,7 @@ import scala.language.postfixOps */ object Authentication { - // language=SQL - val SQL_FIND_USER = "SELECT * FROM JakonUser WHERE email = ?" + // language=SQL val SQL_FIND_ACL = "SELECT * FROM AclRule WHERE id = ?" @@ -41,27 +41,17 @@ object Authentication { if (email != null && password != null) { implicit val conn: Connection = DBHelper.getConnection try { - // TODO: Use UserService - val stmt = conn.prepareStatement(SQL_FIND_USER) - stmt.setString(1, email) - - val result = DBHelper.selectSingle(stmt, classOf[JakonUser]) - if (result.entity == null) { + val user = UserService.getByEmail(email) + if (user == null) { Logger.info("User " + email + " not found when logging in") PageContext.getInstance().messages += new Message(MessageSeverity.ERROR, "WRONG_EMAIL_OR_PASSWORD") return new Context(null, "login") } - val user = result.entity if (!user.enabled) { PageContext.getInstance().messages += new Message(MessageSeverity.ERROR, "USER_NOT_ENABLED") Logger.debug("User " + user.username + " is not enabled") } else if (checkPassword(password, user.password)) { - val stmt = conn.prepareStatement(SQL_FIND_ACL) - stmt.setInt(1, result.foreignIds.getOrElse("acl_id", null).ids.head) - val aclResult = DBHelper.selectSingle(stmt, classOf[AclRule]) - user.acl = aclResult.entity - if (Settings.getDeployMode == DeployMode.PRODUCTION && user.acl.masterAdmin && password == "admin") { PageContext.getInstance().addMessage(MessageSeverity.WARNING, "DEFAULT_ADMIN_PASSWORD") req.session().attribute(PageContext.MESSAGES_KEY, PageContext.getInstance().messages)