pyc-website
main website for pyc inc.
git clone https://9o.is/git/pyc-website.git
Site.scala
(4287B)
1 package inc.pyc
2 package config
3
4 import model.{User, Atm}
5 import model.EmailResetToken._
6 import net.liftweb._
7 import common._
8 import util._
9 import http.{S, OkResponse, RedirectResponse, RequestVar, Templates}
10 import sitemap._
11 import sitemap.Loc._
12 import net.liftmodules.mongoauth.Locs
13
14 object MenuGroups {
15 val SettingsGroup = LocGroup("settings")
16 val TopBarGroup = LocGroup("topbar")
17 val SiteMapGroup = LocGroup("sitemap")
18 val FooterGroup = LocGroup("footer")
19 }
20
21 /*
22 * Wrapper for Menu locations
23 */
24 case class MenuLoc(menu: Menu) {
25 lazy val url: String = S.contextPath+menu.loc.calcDefaultHref
26 lazy val fullUrl: String = S.hostAndPath+menu.loc.calcDefaultHref
27 }
28
29 /*
30 * Various emails used here and there
31 */
32 object Emails {
33 val idVerification = "idverification@"+Site.domain
34 val atmBusiness = "atmbusiness@"+Site.domain
35 val technical = "technical@"+Site.domain
36 val press = "press@"+Site.domain
37 }
38
39 object Site extends Locs {
40 import MenuGroups._
41
42 val domain = "pycbitcoin.com"
43 def host = if(Props.devMode || Props.testMode) "127.0.0.1" else domain
44
45 // Regular links
46 val home = MenuLoc(Menu.i("Bitcoin ATM Services") / "index")
47 val findAtm = MenuLoc(Menu.i("Find An ATM") / "find" >> TopBarGroup)
48 val hostAtm = MenuLoc(Menu.i("Host An ATM") / "host" >> TopBarGroup)
49
50 val team = MenuLoc(Menu.i("Team") / "about" / "team" >> SiteMapGroup)
51 val press = MenuLoc(Menu.i("Press") / "about" / "press" >> RedirectPress >> SiteMapGroup)
52 val contact = MenuLoc(Menu.i("Contact") / "about" / "contact" >> SiteMapGroup)
53
54 val aboutMenus = Menu.i("About") / "about" >> TopBarGroup submenus(
55 team.menu,
56 press.menu,
57 contact.menu)
58
59 val faqs = MenuLoc(Menu.i("FAQs") / "faqs" >> SiteMapGroup >> FooterGroup)
60
61
62 // Regular Links for Users
63 val register = MenuLoc(Menu.i("Register") / "register" >> RequireNotLoggedIn >> SiteMapGroup)
64 val login = MenuLoc(Menu.i("Login") / "login" >> RequireNotLoggedIn >> SiteMapGroup)
65 val forgotPassword = MenuLoc(Menu.i("Password Recovery") / "help" / "password" >> RequireNotLoggedIn)
66
67
68 // extra public links
69 val tos = MenuLoc(Menu.i("Terms of Service") / "help" / "tos" >> RequireNotLoggedIn >> FooterGroup)
70 val privacy = MenuLoc(Menu.i("Privacy") / "help" / "privacy" >> RequireNotLoggedIn >> FooterGroup)
71
72
73 // requires token links
74 val loginToken = MenuLoc(buildLoginTokenMenu)
75 val logout = MenuLoc(buildLogoutMenu)
76 val emailResetToken = MenuLoc(buildEmailResetTokenMenu)
77
78
79 // Settings Links
80 val settings = MenuLoc(Menu.i("Settings") / "settings" >> SettingsGroup >> RequireLoggedIn)
81 val password = MenuLoc(Menu.i("Password") / "settings" / "password" >> SettingsGroup >> RequireLoggedIn)
82 val purchaseLimit = MenuLoc(Menu.i("Purchase Limit") / "settings" / "purchase_limit" >> SettingsGroup >> RequireLoggedIn)
83
84
85 // Settings for Admins
86 val verifyID = MenuLoc(Menu.i("Verify ID") / "settings" / "admin" / "verify" >> SettingsGroup >> HasRole("admin"))
87
88 // Settings for ATM Owners
89 val viewPurchaseLimits = MenuLoc(Menu.i("View Purchase Limits") / "settings" / "view" / "purchase_limits"
90 >> SettingsGroup >> HasRole("atm_owner"))
91
92
93 // ATM pages
94 private val atmProfileParamMenu = Menu.param[Atm](
95 "Bitcoin ATM", "Bitcoin ATM Information", Atm.findByName _, _.name.get) / "atm"
96 lazy val atmProfileLoc = atmProfileParamMenu.toLoc
97
98 private def menus = List(
99 home.menu,
100 findAtm.menu,
101 hostAtm.menu,
102 aboutMenus,
103 faqs.menu,
104 login.menu,
105 register.menu,
106 tos.menu,
107 privacy.menu,
108 loginToken.menu,
109 logout.menu,
110 forgotPassword.menu,
111 settings.menu,
112 password.menu,
113 purchaseLimit.menu,
114 verifyID.menu,
115 viewPurchaseLimits.menu,
116 emailResetToken.menu,
117 atmProfileParamMenu,
118 Menu.i("Error") / "error" >> Hidden,
119 Menu.i("404") / "404" >> Hidden,
120 Menu.i("Status") / "ping" >> Hidden >> CalcStateless(() => true ) >> EarlyResponse(() => Full(OkResponse())),
121 Menu.i("Throw") / "throw" >> EarlyResponse(() => throw new Exception("This is only a test."))
122 )
123
124 /*
125 * Return a SiteMap needed for Lift
126 */
127 def siteMap: SiteMap = SiteMap(menus:_*)
128
129 private def RedirectPress = EarlyResponse(() => Full(RedirectResponse("http://press."+domain)))
130 }