Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2281)

Unified Diff: appengine/monorail/framework/servlet_helpers.py

Issue 1868553004: Open Source Monorail (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/monorail/framework/servlet.py ('k') | appengine/monorail/framework/sorting.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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))
« no previous file with comments | « appengine/monorail/framework/servlet.py ('k') | appengine/monorail/framework/sorting.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698