Source code for ferris.core.auth

from google.appengine.api import users
import logging


[docs]def require_user(controller): """ Requires that a user is logged in """ if not controller.user: return (False, "You must be logged in") return True
[docs]def require_admin(controller): """ Requires that a user is logged in and that the user is and administrator on the App Engine Application """ if not users.is_current_user_admin(): return (False, "You must be an administrator") return True
[docs]def predicate_chain(predicate, chain): """ Returns the result of chain if predicate returns True, otherwise returns True. """ def inner(*args, **kwargs): predicate_curried = predicate(*args, **kwargs) def inner_inner(controller): if predicate_curried(controller): return chain(controller) return True return inner_inner return inner
[docs]def prefix_predicate(prefix): prefix = prefix if isinstance(prefix, (list, tuple)) else (prefix,) def inner(controller): if controller.route.prefix in prefix: return True return False return inner
[docs]def action_predicate(action): action = action if isinstance(action, (list, tuple)) else (action,) def inner(controller): if controller.route.action in action: return True return False return inner
[docs]def route_predicate(route): route = route if isinstance(route, (list, tuple)) else (route,) def inner(controller): if controller.route.name in route: return True return False return inner
require_user_for_prefix = predicate_chain(prefix_predicate, require_user) require_admin_for_prefix = predicate_chain(prefix_predicate, require_admin) require_user_for_action = predicate_chain(action_predicate, require_user) require_admin_for_action = predicate_chain(action_predicate, require_admin) require_user_for_route = predicate_chain(route_predicate, require_user) require_admin_for_route = predicate_chain(route_predicate, require_admin)