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 }