diff -r 3b9c52170f46 -r 4f1bb54ddae5 app/soc/logic/helper/access.py --- a/app/soc/logic/helper/access.py Sun Oct 12 08:46:05 2008 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -#!/usr/bin/python2.5 -# -# Copyright 2008 the Melange authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Access control helper. - -The functions in this module can be used to check access control -related requirements. When the specified required conditions are not -met, an exception is raised. This exception contains a views that -either prompts for authentication, or informs the user that they -do not meet the required criteria. -""" - -__authors__ = [ - '"Todd Larsen" ', - '"Sverre Rabbelier" ', - '"Pawel Solyga" ', - ] - - -from google.appengine.api import users -from django.utils.translation import ugettext_lazy - -import soc.logic.host -import soc.logic.out_of_band - -from soc.views.simple import requestLogin -from soc.logic.site import id_user - - -DEF_LOGIN_TMPL = 'soc/login.html' - -DEF_LOGIN_MSG_FMT = ugettext_lazy( - 'Please sign in to continue.') - -DEF_NO_USER_LOGIN_MSG_FMT = ugettext_lazy( - 'Please create User Profile' - ' in order to view this page.') - -DEF_DEV_LOGOUT_LOGIN_MSG_FMT = ( - 'Please sign out' - ' and sign in' - ' again as %(role)s to view this page.') - - -def checkIsLoggedIn(request): - """Returns an alternate HTTP response if Google Account is not logged in. - - Args: - request: A Django HTTP request - - Raises: - AccessViolationResponse: If the required authorization is not met. - - Returns: - None if the user is logged in, or a subclass of - django.http.HttpResponse which contains the alternate response - that should be returned by the calling view. - """ - - if users.get_current_user(): - return - - login_request = requestLogin(request, DEF_LOGIN_TMPL, - login_message_fmt=DEF_LOGIN_MSG_FMT) - - raise soc.logic.out_of_band.AccessViolationResponse(login_request) - - -def checkIsUser(request): - """Returns an alternate HTTP response if Google Account has no User entity. - - Args: - request: A Django HTTP request - - Raises: - AccessViolationResponse: If the required authorization is not met. - - Returns: - None if User exists for id, or a subclass of - django.http.HttpResponse which contains the alternate response - should be returned by the calling view. - """ - - checkIsLoggedIn(request) - - id = users.get_current_user() - user = soc.logic.user_logic.getFromFields(email=id) - - if user: - return - - login_request = requestLogin(request, DEF_LOGIN_TMPL, - login_message_fmt=DEF_NO_USER_LOGIN_MSG_FMT) - - raise soc.logic.out_of_band.AccessViolationResponse(login_request) - - -def checkIsDeveloper(request): - """Returns an alternate HTTP response if Google Account is not a Developer. - - Args: - request: A Django HTTP request - - Raises: - AccessViolationResponse: If the required authorization is not met. - - Returns: - None if id is logged in and logged-in user is a Developer, or a - subclass of django.http.HttpResponse which contains the alternate - response should be returned by the calling view. - """ - - checkIsUser(request) - - id = users.get_current_user() - - if id_user.isIdDeveloper(id=id): - return None - - login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % { - 'role' : 'a site developer ', - } - - login_request = requestLogin(request, DEF_LOGIN_TMPL, - login_message_fmt=login_message_fmt) - - raise soc.logic.out_of_band.AccessViolationResponse(login_request) - - -def checkIsHost(request, program): - """Returns an alternate HTTP response if Google Account has no Host entity for the specified program. - - Args: - request: A Django HTTP request - - Raises: - AccessViolationResponse: If the required authorization is not met. - - Returns: - None if Host exists for the specified program, or a subclass of - django.http.HttpResponse which contains the alternate response - should be returned by the calling view. - """ - - checkIsUser(request) - - id = users.get_current_user() - host = soc.logic.host.getHostFromProgram(id, program) - - if host: - return - - login_message_fmt = DEF_DEV_LOGOUT_LOGIN_MSG_FMT % { - 'role' : 'a host for this program', - } - - login_request = requestLogin(request, DEF_LOGIN_TMPL, - login_message_fmt=login_message_fmt) - - raise soc.logic.out_of_band.AccessViolationResponse(login_request)