ctf-server
old server for hosting capture-the-flag
git clone https://9o.is/git/ctf-server.git
UserSnip.scala
(2463B)
1 package com.jcabrra
2 package snippet
3
4 import model._
5 import comet._
6
7 import net.liftweb._
8 import common._
9 import http._, js._, JsCmds._
10 import SHtml._
11 import util._, Helpers._
12 import mapper._
13 import net.liftmodules.extras._
14 import xml._
15
16 object UserSnip extends SnippetHelper {
17 def nickName(ns: NodeSeq): NodeSeq =
18 User.currentUser.map {
19 user =>
20 Text(user.nickName.get)
21 } openOr NodeSeq.Empty
22 }
23
24 object Players {
25 def render = {
26 ".player" #> User.findAll.map {
27 user =>
28 ".player_img [src]" #> user.image &
29 ".player_name *" #> (user.firstName + " " + user.lastName) &
30 ".player_nickname *" #> {
31 Text(user.nickName.get+" - ") ++
32 <span class='text-success'>{user.howManyToWin()+" flags to win"}</span>
33 } &
34 ".captured_flags *" #> user.capturedFlags.map {
35 flag =>
36 <div>
37 <div>{"Captured the flag from "+flag.challenge.obj.map(_.name).openOr("")}</div>
38 <div>{"Unlocked "+ flag.unlocks.map(_.name).mkString(", ")}</div>
39 </div>
40 }
41 }
42 }
43 }
44
45 object UserLogin {
46 def render = {
47 var email: String = ""
48 var pwd: String = ""
49
50 def process(): JsCmd = {
51 val user = User.find(By(User.email, email))
52 user map {
53 user =>
54 if(user.password.match_?(pwd)) {
55 User.logUserIn(user)
56 S.redirectTo("/")
57 }
58 }
59 S.error("Credentials are invalid.")
60 }
61
62 "@email" #> text(email, email = _) &
63 "@password" #> password(pwd, pwd = _) &
64 "type=submit" #> ajaxSubmit("Login", process)
65 }
66 } //
67
68 object UserSignup extends BaseCurrentUserScreen {
69 addFields(() => userVar.signupScreenFields)
70
71 def finish() {
72 val user = userVar.get
73 user.save
74 User.logUserIn(user)
75 BroadcastServer ! BroadcastUserJoined(user, Util.ipAddress)
76 S.notice("Thanks for signing up!")
77 }
78 }
79
80 object UserSettings extends BaseCurrentUserScreen {
81 addFields(() => userVar.settingsScreenFields)
82
83 def finish() {
84 userVar.is.save
85 S.notice("Profile settings saved")
86 }
87 }
88
89 object PasswordScreen extends BaseCurrentUserScreen {
90 addFields(() => userVar.passwordScreenFields)
91
92 def finish() {
93 val user = userVar.get
94 user.save
95 S.notice("New password saved")
96 }
97 }
98
99 sealed trait BaseCurrentUserScreen extends BaseScreen {
100 object userVar extends ScreenVar(User.currentUser openOr User.createInstance)
101 }