app/soc/views/helper/access.py
changeset 543 280a1ac6bcc1
parent 525 1dc62d570eff
child 590 37735d97b541
equal deleted inserted replaced
542:7cc99461b64d 543:280a1ac6bcc1
    36 
    36 
    37 from soc.logic import accounts
    37 from soc.logic import accounts
    38 from soc.logic.models import user as user_logic
    38 from soc.logic.models import user as user_logic
    39 from soc.logic.models import request as request_logic
    39 from soc.logic.models import request as request_logic
    40 from soc.views import helper
    40 from soc.views import helper
    41 from soc.views.simple import requestLogin
    41 from soc.views import out_of_band
    42 
    42 
    43 import soc.views.out_of_band
       
    44 
       
    45 
       
    46 DEF_LOGIN_TMPL = 'soc/login.html'
       
    47 
       
    48 DEF_LOGIN_MSG_FMT = ugettext_lazy(
       
    49   'Please <a href="%(sign_in)s">sign in</a> to continue.')
       
    50 
    43 
    51 DEF_NO_USER_LOGIN_MSG_FMT = ugettext_lazy(
    44 DEF_NO_USER_LOGIN_MSG_FMT = ugettext_lazy(
    52   'Please create <a href="/user/edit">User Profile</a>'
    45   'Please create <a href="/user/edit">User Profile</a>'
    53   ' in order to view this page.')
    46   ' in order to view this page.')
    54 
    47 
    63 
    56 
    64 def allow(request):
    57 def allow(request):
    65   """Never returns an alternate HTTP response
    58   """Never returns an alternate HTTP response
    66 
    59 
    67   Args:
    60   Args:
    68     request: a django HTTP request
    61     request: a Django HTTP request
    69   """
    62   """
    70 
    63 
    71   return
    64   return
    72 
    65 
    73 def deny(request):
    66 def deny(request):
    74   """Returns an alternate HTTP response
    67   """Returns an alternate HTTP response
    75 
    68 
    76   Args:
    69   Args:
    77     request: a django HTTP request
    70     request: a Django HTTP request
    78 
    71 
    79   Returns: a subclass of django.http.HttpResponse which contains the
    72   Returns: a subclass of django.http.HttpResponse which contains the
    80   alternate response that should be returned by the calling view.
    73   alternate response that should be returned by the calling view.
    81   """
    74   """
    82 
    75 
    83   context = helper.responses.getUniversalContext(request)
    76   context = helper.responses.getUniversalContext(request)
    84   context['login_title'] = 'Access denied'
    77   context['title'] = 'Access denied'
    85   context['login_header'] = 'Access denied'
       
    86   context['login_message'] = DEF_PAGE_DENIED_MSG
       
    87 
    78 
    88   denied_response = helper.responses.respond(request, DEF_LOGIN_TMPL, context=context)
    79   raise out_of_band.AccessViolation(DEF_PAGE_DENIED_MSG, context=context)
    89 
    80 
    90   raise soc.views.out_of_band.AccessViolationResponse(denied_response)
       
    91 
    81 
    92 def checkIsLoggedIn(request):
    82 def checkIsLoggedIn(request):
    93   """Returns an alternate HTTP response if Google Account is not logged in.
    83   """Returns an alternate HTTP response if Google Account is not logged in.
    94 
    84 
    95   Args:
    85   Args:
    96     request: A Django HTTP request
    86     request: a Django HTTP request
    97 
    87 
    98    Raises:
    88    Raises:
    99      AccessViolationResponse: If the required authorization is not met.
    89      AccessViolationResponse: If the required authorization is not met.
   100 
    90 
   101   Returns:
    91   Returns:
   105   """
    95   """
   106 
    96 
   107   if users.get_current_user():
    97   if users.get_current_user():
   108     return
    98     return
   109 
    99 
   110   login_response = requestLogin(request, None, DEF_LOGIN_TMPL,
   100   raise out_of_band.LoginRequest()
   111                                 login_message_fmt=DEF_LOGIN_MSG_FMT)
       
   112 
       
   113   raise soc.views.out_of_band.AccessViolationResponse(login_response)
       
   114 
   101 
   115 
   102 
   116 def checkIsUser(request):
   103 def checkIsUser(request):
   117   """Returns an alternate HTTP response if Google Account has no User entity.
   104   """Returns an alternate HTTP response if Google Account has no User entity.
   118 
   105 
   119   Args:
   106   Args:
   120     request: A Django HTTP request
   107     request: a Django HTTP request
   121 
   108 
   122    Raises:
   109    Raises:
   123      AccessViolationResponse: If the required authorization is not met.
   110      AccessViolationResponse: If the required authorization is not met.
   124 
   111 
   125   Returns:
   112   Returns:
   134       {'account': users.get_current_user()}, unique=True)
   121       {'account': users.get_current_user()}, unique=True)
   135 
   122 
   136   if user:
   123   if user:
   137     return
   124     return
   138 
   125 
   139   login_response = requestLogin(request, None, DEF_LOGIN_TMPL,
   126   raise out_of_band.LoginRequest(message_fmt=DEF_NO_USER_LOGIN_MSG_FMT)
   140                                 login_message_fmt=DEF_NO_USER_LOGIN_MSG_FMT)
       
   141 
       
   142   raise soc.views.out_of_band.AccessViolationResponse(login_response)
       
   143 
   127 
   144 
   128 
   145 def checkIsDeveloper(request):
   129 def checkIsDeveloper(request):
   146   """Returns an alternate HTTP response if Google Account is not a Developer.
   130   """Returns an alternate HTTP response if Google Account is not a Developer.
   147 
   131 
   161 
   145 
   162   if accounts.isDeveloper(account=users.get_current_user()):
   146   if accounts.isDeveloper(account=users.get_current_user()):
   163     return None
   147     return None
   164 
   148 
   165   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   149   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   166       'role' : 'a site developer ',
   150       'role': 'a site developer '}
   167       }
       
   168 
   151 
   169   login_response = requestLogin(request, None, DEF_LOGIN_TMPL,
   152   raise out_of_band.LoginRequest(message_fmt=login_message_fmt)
   170                                 login_message_fmt=login_message_fmt)
       
   171 
       
   172   raise soc.views.out_of_band.AccessViolationResponse(login_response)
       
   173 
   153 
   174 
   154 
   175 def checkIsInvited(request, role):
   155 def checkIsInvited(request, role):
   176   """Returns an alternate HTTP response if Google Account has no Host entity
   156   """Returns an alternate HTTP response if Google Account has no Host entity
   177      for the specified program.
   157      for the specified program.
   203 
   183 
   204   if request:
   184   if request:
   205     return
   185     return
   206 
   186 
   207   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   187   login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % {
   208       'role' : 'a host for this program',
   188       'role': 'a host for this program'}
   209       }
       
   210 
   189 
   211   login_response = requestLogin(request, None, DEF_LOGIN_TMPL,
   190   raise out_of_band.LoginRequest(message_fmt=login_message_fmt)
   212                                 login_message_fmt=login_message_fmt)
       
   213 
       
   214   raise soc.views.out_of_band.AccessViolationResponse(login_response)