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)) |