app/soc/views/helper/access.py
changeset 889 5f3136a5eb4c
parent 888 a75ae24f04cb
child 890 b3bf833c4580
equal deleted inserted replaced
888:a75ae24f04cb 889:5f3136a5eb4c
   181     return
   181     return
   182 
   182 
   183   raise out_of_band.LoginRequest(message_fmt=DEF_NO_USER_LOGIN_MSG_FMT)
   183   raise out_of_band.LoginRequest(message_fmt=DEF_NO_USER_LOGIN_MSG_FMT)
   184 
   184 
   185 
   185 
   186 def checkAgreesToSiteToS(request):
   186 def checkAgreesToSiteToS(request, args, kwargs):
   187   """Raises an alternate HTTP response if User has not agreed to site-wide ToS.
   187   """Raises an alternate HTTP response if User has not agreed to site-wide ToS.
   188 
   188 
   189   Args:
   189   Args:
   190     request: a Django HTTP request
   190     request: a Django HTTP request
   191 
   191 
   193     AccessViolationResponse:
   193     AccessViolationResponse:
   194     * if User has not agreed to the site-wide ToS, or
   194     * if User has not agreed to the site-wide ToS, or
   195     * if no User exists for the logged-in Google Account, or
   195     * if no User exists for the logged-in Google Account, or
   196     * if no Google Account is logged in at all
   196     * if no Google Account is logged in at all
   197   """
   197   """
   198   checkIsUser(request)
   198   checkIsUser(request, args, kwargs)
   199 
   199 
   200   user = user_logic.getForFields({'account': users.get_current_user()},
   200   user = user_logic.getForFields({'account': users.get_current_user()},
   201                                  unique=True)
   201                                  unique=True)
   202   
   202   
   203   if user_logic.agreesToSiteToS(user):
   203   if user_logic.agreesToSiteToS(user):
   221     AccessViolationResponse:
   221     AccessViolationResponse:
   222     * if User is not a Developer, or
   222     * if User is not a Developer, or
   223     * if no User exists for the logged-in Google Account, or
   223     * if no User exists for the logged-in Google Account, or
   224     * if no Google Account is logged in at all
   224     * if no Google Account is logged in at all
   225   """
   225   """
       
   226   # Developers need to bypass the ToS check to avoid "chicken-and-egg" problem
   226   checkIsUser(request, args, kwargs)
   227   checkIsUser(request, args, kwargs)
   227 
   228 
   228   if accounts.isDeveloper(account=users.get_current_user()):
   229   if accounts.isDeveloper(account=users.get_current_user()):
   229     return
   230     return
   230 
   231 
   255     checkIsInvited(request, args, kwargs)
   256     checkIsInvited(request, args, kwargs)
   256     return
   257     return
   257   except out_of_band.Error:
   258   except out_of_band.Error:
   258     pass
   259     pass
   259 
   260 
   260   checkIsUser(request, args, kwargs)
   261   checkAgreesToSiteToS(request, args, kwargs)
   261 
   262 
   262   user = user_logic.getForFields({'account': users.get_current_user()},
   263   user = user_logic.getForFields({'account': users.get_current_user()},
   263                                  unique=True)
   264                                  unique=True)
   264 
   265 
   265   host = host_logic.getForFields({'user': user}, unique=True)
   266   host = host_logic.getForFields({'user': user}, unique=True)
   294     checkIsDeveloper(request, args, kwargs)
   295     checkIsDeveloper(request, args, kwargs)
   295     return
   296     return
   296   except out_of_band.Error:
   297   except out_of_band.Error:
   297     pass
   298     pass
   298 
   299 
   299   checkIsUser(request, args, kwargs)
   300   checkAgreesToSiteToS(request, args, kwargs)
   300 
   301 
   301   # TODO(srabbelier) implement this
   302   # TODO(srabbelier) implement this
   302 
   303 
   303   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   304   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   304       'role': 'a Club Admin for this Club'}
   305       'role': 'a Club Admin for this Club'}
   327     checkIsDeveloper(request, args, kwargs)
   328     checkIsDeveloper(request, args, kwargs)
   328     return
   329     return
   329   except out_of_band.Error:
   330   except out_of_band.Error:
   330     pass
   331     pass
   331 
   332 
   332   checkIsUser(request, args, kwargs)
   333   checkAgreesToSiteToS(request, args, kwargs)
   333 
   334 
   334   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   335   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   335       'role': 'a Program Administrator for this Program'}
   336       'role': 'a Program Administrator for this Program'}
   336 
   337 
   337   splitpath = request.path.split('/')
   338   splitpath = request.path.split('/')
   389       checkIsDeveloper(request, args, kwargs)
   390       checkIsDeveloper(request, args, kwargs)
   390       return
   391       return
   391     except out_of_band.Error:
   392     except out_of_band.Error:
   392       pass
   393       pass
   393 
   394 
   394     checkIsUser(request, args, kwargs)
   395     checkAgreesToSiteToS(request, args, kwargs)
   395 
   396 
   396     user = user_logic.getForCurrentAccount()
   397     user = user_logic.getForCurrentAccount()
   397 
   398 
   398     properties = {
   399     properties = {
   399         'applicant': user,
   400         'applicant': user,
   432     checkIsDeveloper(request, args, kwargs)
   433     checkIsDeveloper(request, args, kwargs)
   433     return
   434     return
   434   except out_of_band.Error:
   435   except out_of_band.Error:
   435     pass
   436     pass
   436 
   437 
   437   checkIsUser(request, args, kwargs)
   438   checkAgreesToSiteToS(request, args, kwargs)
   438 
   439 
   439   # Mine the url for params
   440   # Mine the url for params
   440   try:
   441   try:
   441     callback, args, kwargs = urlresolvers.resolve(request.path)
   442     callback, args, kwargs = urlresolvers.resolve(request.path)
   442   except Exception:
   443   except Exception:
   477       checkIsDeveloper(request, args, kwargs)
   478       checkIsDeveloper(request, args, kwargs)
   478       return
   479       return
   479     except out_of_band.Error:
   480     except out_of_band.Error:
   480       pass
   481       pass
   481 
   482 
   482     checkIsUser(request, args, kwargs)
   483     checkAgreesToSiteToS(request, args, kwargs)
   483 
   484 
   484     properties = dicts.filter(kwargs, ['link_id'])
   485     properties = dicts.filter(kwargs, ['link_id'])
   485 
   486 
   486     application = app_logic.logic.getForFields(properties, unique=True)
   487     application = app_logic.logic.getForFields(properties, unique=True)
   487     
   488