diff options
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/Application.scala | 11 | ||||
-rw-r--r-- | app/controllers/Auth.scala | 84 |
2 files changed, 89 insertions, 6 deletions
diff --git a/app/controllers/Application.scala b/app/controllers/Application.scala index 12375df..417ebda 100644 --- a/app/controllers/Application.scala +++ b/app/controllers/Application.scala | |||
@@ -2,20 +2,19 @@ package controllers | |||
2 | 2 | ||
3 | import play.api._ | 3 | import play.api._ |
4 | import play.api.mvc._ | 4 | import play.api.mvc._ |
5 | 5 | import models._ | |
6 | 6 | ||
7 | object Application extends Controller { | 7 | object Application extends Controller { |
8 | 8 | ||
9 | def index = Action { | 9 | def index = Authenticate { implicit request => |
10 | Redirect("/ebe").flashing("warning" -> "hey") | 10 | Ok(views.html.pages.ebeHomepage()) |
11 | //Ok(views.html.pages.index("Your new application is ready.")) | ||
12 | } | 11 | } |
13 | 12 | ||
14 | def ebe = Action { implicit request => | 13 | def ebe = Authenticate { implicit request => |
15 | Ok(views.html.pages.ebeHomepage()) | 14 | Ok(views.html.pages.ebeHomepage()) |
16 | } | 15 | } |
17 | 16 | ||
18 | def pepal = Action { implicit request => | 17 | def pepal = Authenticate { implicit request => |
19 | Ok(views.html.pages.pepalHomepage()) | 18 | Ok(views.html.pages.pepalHomepage()) |
20 | } | 19 | } |
21 | 20 | ||
diff --git a/app/controllers/Auth.scala b/app/controllers/Auth.scala new file mode 100644 index 0000000..090259e --- /dev/null +++ b/app/controllers/Auth.scala | |||
@@ -0,0 +1,84 @@ | |||
1 | package controllers | ||
2 | |||
3 | import controllers.Application._ | ||
4 | import play.api._ | ||
5 | import play.api.data._ | ||
6 | import play.api.data.Forms._ | ||
7 | import play.api.mvc._ | ||
8 | |||
9 | import models._ | ||
10 | |||
11 | import play.api.db.slick._ | ||
12 | import play.api.db.slick.Config.driver.simple._ | ||
13 | import play.api.Play.current | ||
14 | |||
15 | import scala.concurrent.Future | ||
16 | |||
17 | |||
18 | case class AuthRequest[A](account: Option[Views.Account] = None, request: Request[A]) extends WrappedRequest(request) | ||
19 | |||
20 | object Authenticate extends ActionBuilder[AuthRequest] { | ||
21 | |||
22 | def invokeBlock[A](request: Request[A], block: (AuthRequest[A]) => Future[Result]) = DB.withSession { implicit session => | ||
23 | val uuid = request.session.get(Security.username) | ||
24 | var account: Option[Views.Account] = None | ||
25 | |||
26 | if (uuid.nonEmpty) { | ||
27 | val resultSet = Views.Accounts.filter(_.userUuid === uuid).run | ||
28 | if (resultSet.nonEmpty) { | ||
29 | account = Some(resultSet.head) | ||
30 | } | ||
31 | } | ||
32 | |||
33 | block(AuthRequest(account, request)) | ||
34 | } | ||
35 | |||
36 | } | ||
37 | |||
38 | |||
39 | case class LoginData(username: String, password: String) | ||
40 | |||
41 | |||
42 | object Auth extends Controller { | ||
43 | |||
44 | val loginForm = Form( | ||
45 | mapping( | ||
46 | "username" -> nonEmptyText, | ||
47 | "password" -> nonEmptyText | ||
48 | )(LoginData.apply)(LoginData.unapply) | ||
49 | verifying("Log in failed.", fields => fields match { | ||
50 | case loginData => checkLoginData(loginData.username, loginData.password) | ||
51 | }) | ||
52 | ) | ||
53 | |||
54 | def checkLoginData(username: String, password: String) = DB.withSession { implicit session => | ||
55 | Tables.Users.filter(u => u.username === username && u.userPassword === password).length.run > 0 | ||
56 | } | ||
57 | |||
58 | |||
59 | def login = Action { implicit request => | ||
60 | Ok(views.html.pages.loginForm(loginForm)) | ||
61 | } | ||
62 | |||
63 | def loginSubmit = DBAction { implicit request => | ||
64 | loginForm.bindFromRequest.fold( | ||
65 | formWithErrors => { | ||
66 | BadRequest(views.html.pages.loginForm(formWithErrors)) | ||
67 | }, | ||
68 | validForm => { | ||
69 | val userUuid: String = Tables.Users.filter(_.username === validForm.username).map(_.uuid).first.run | ||
70 | |||
71 | Redirect(routes.Application.index()) | ||
72 | .withSession(Security.username -> userUuid) | ||
73 | .flashing(("success", "Welcome, valuable user!")) | ||
74 | } | ||
75 | ) | ||
76 | } | ||
77 | |||
78 | def logout = Action { implicit request => | ||
79 | Redirect(routes.Application.index()).withNewSession.flashing( | ||
80 | "success" -> "You are now logged out. Do not go to our competitor's website. Thanks." | ||
81 | ) | ||
82 | } | ||
83 | |||
84 | } | ||