| Index: appengine/monorail/framework/servlet_helpers.py
|
| diff --git a/appengine/monorail/framework/servlet_helpers.py b/appengine/monorail/framework/servlet_helpers.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..be79be390eba1f93c7d1e621b4ad394998178263
|
| --- /dev/null
|
| +++ b/appengine/monorail/framework/servlet_helpers.py
|
| @@ -0,0 +1,114 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is govered by a BSD-style
|
| +# license that can be found in the LICENSE file or at
|
| +# https://developers.google.com/open-source/licenses/bsd
|
| +
|
| +"""Helper functions used by the Monorail servlet base class."""
|
| +
|
| +import datetime
|
| +import logging
|
| +import time
|
| +
|
| +from framework import permissions
|
| +from framework import template_helpers
|
| +
|
| +
|
| +_WEEKDAY = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
|
| + 'Saturday', 'Sunday']
|
| +
|
| +
|
| +def GetBannerTime(timestamp):
|
| + """Converts a timestamp into EZT-ready data so it can appear in the banner.
|
| +
|
| + Args:
|
| + timestamp: timestamp expressed in the following format:
|
| + [year,month,day,hour,minute,second]
|
| + e.g. [2009,3,20,21,45,50] represents March 20 2009 9:45:50 PM
|
| +
|
| + Returns:
|
| + EZT-ready data used to display the time inside the banner message.
|
| + """
|
| + if timestamp is None:
|
| + return None
|
| +
|
| + # Get the weekday and 'hour:min AM/PM' to display the timestamp
|
| + # to users with javascript disabled
|
| + ts = datetime.datetime(*[int(t) for t in timestamp])
|
| + weekday = _WEEKDAY[ts.weekday()]
|
| + hour_min = datetime.datetime.strftime(ts, '%I:%M%p')
|
| +
|
| + # Convert the timestamp to milliseconds since the epoch to display
|
| + # the timestamp to users with javascript
|
| + ts_ms = time.mktime(ts.timetuple()) * 1000
|
| +
|
| + return template_helpers.EZTItem(
|
| + ts=ts_ms, year=ts.year, month=ts.month, day=ts.day, hour=ts.hour,
|
| + minute=ts.minute, second=ts.second, weekday=weekday, hour_min=hour_min)
|
| +
|
| +
|
| +def AssertBasePermissionForUser(user, user_view):
|
| + """Verify user permissions and state.
|
| +
|
| + Args:
|
| + user: user_pb2.User protocol buffer for the user
|
| + user_view: framework.views.UserView for the user
|
| + """
|
| + if permissions.IsBanned(user, user_view):
|
| + raise permissions.BannedUserException(
|
| + 'You have been banned from using this site')
|
| +
|
| +
|
| +def AssertBasePermission(mr):
|
| + """Make sure that the logged in user can view the requested page.
|
| +
|
| + Args:
|
| + mr: common information parsed from the HTTP request.
|
| +
|
| + Returns:
|
| + Nothing
|
| +
|
| + Raises:
|
| + BannedUserException: If the user is banned.
|
| + PermissionException: If the user does not have permisssion to view.
|
| + """
|
| + AssertBasePermissionForUser(mr.auth.user_pb, mr.auth.user_view)
|
| +
|
| + if mr.project_name and not CheckPerm(mr, permissions.VIEW):
|
| + logging.info('your perms are %r', mr.perms)
|
| + raise permissions.PermissionException(
|
| + 'User is not allowed to view this project')
|
| +
|
| +
|
| +def CheckPerm(mr, perm, art=None, granted_perms=None):
|
| + """Convenience method that makes permission checks easier.
|
| +
|
| + Args:
|
| + mr: common information parsed from the HTTP request.
|
| + perm: A permission constant, defined in module framework.permissions
|
| + art: Optional artifact pb
|
| + granted_perms: optional set of perms granted specifically in that artifact.
|
| +
|
| + Returns:
|
| + A boolean, whether the request can be satisfied, given the permission.
|
| + """
|
| + return mr.perms.CanUsePerm(
|
| + perm, mr.auth.effective_ids, mr.project,
|
| + permissions.GetRestrictions(art), granted_perms=granted_perms)
|
| +
|
| +
|
| +def CheckPermForProject(mr, perm, project, art=None):
|
| + """Convenience method that makes permission checks for projects easier.
|
| +
|
| + Args:
|
| + mr: common information parsed from the HTTP request.
|
| + perm: A permission constant, defined in module framework.permissions
|
| + project: The project to enforce permissions for.
|
| + art: Optional artifact pb
|
| +
|
| + Returns:
|
| + A boolean, whether the request can be satisfied, given the permission.
|
| + """
|
| + perms = permissions.GetPermissions(
|
| + mr.auth.user_pb, mr.auth.effective_ids, project)
|
| + return perms.CanUsePerm(
|
| + perm, mr.auth.effective_ids, project, permissions.GetRestrictions(art))
|
|
|