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

Side by Side Diff: appengine/chromium_cq_status/handlers/post.py

Issue 2111713004: Teach CQ status app to check login status of users. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Review and tests. Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import json 5 import json
6 import logging 6 import logging
7 import traceback 7 import traceback
8 8
9 from google.appengine.api import users 9 from google.appengine.api import users
10 import webapp2 10 import webapp2
(...skipping 19 matching lines...) Expand all
30 for item in fields: 30 for item in fields:
31 if item in AUTO_TAGGED_FIELDS: 31 if item in AUTO_TAGGED_FIELDS:
32 tags.append('%s=%s' % (item, fields[item])) 32 tags.append('%s=%s' % (item, fields[item]))
33 record = Record(id=key) 33 record = Record(id=key)
34 record.tags = list(set(tags)) 34 record.tags = list(set(tags))
35 record.fields = fields 35 record.fields = fields
36 record.put() 36 record.put()
37 37
38 class Post(webapp2.RequestHandler): 38 class Post(webapp2.RequestHandler):
39 def get(self): 39 def get(self):
40 if not utils.is_valid_user(): 40 if not utils.has_permission('write'):
41 self.redirect(users.create_login_url('/')) 41 self.redirect(users.create_login_url('/'))
42 return 42 return
43 43
44 try: 44 try:
45 update_record(**parse_request(self.request, { 45 update_record(**parse_request(self.request, {
46 'key': parse_record_key, 46 'key': parse_record_key,
47 'tags': parse_strings, 47 'tags': parse_strings,
48 'fields': parse_fields, 48 'fields': parse_fields,
49 })) 49 }))
50 except ValueError as e: 50 except ValueError as e:
51 logging.warning(traceback.format_exc()) 51 logging.warning(traceback.format_exc())
52 self.response.write(e) 52 self.response.write(e)
53 53
54 def post(self): 54 def post(self):
55 if not utils.is_valid_user() and not self._is_cq_bot(): 55 if not utils.has_permission('write') and not self._is_cq_bot():
56 self.response.set_status(403) 56 self.response.set_status(403)
57 return 57 return
58 58
59 try: 59 try:
60 packets = map(json.loads, self.request.get_all('p')) 60 packets = map(json.loads, self.request.get_all('p'))
61 for packet in packets: 61 for packet in packets:
62 if not isinstance(packet, dict): # pragma: no cover 62 if not isinstance(packet, dict): # pragma: no cover
63 raise ValueError('JSON dictionary expected.') 63 raise ValueError('JSON dictionary expected.')
64 except ValueError as e: # pragma: no cover 64 except ValueError as e: # pragma: no cover
65 logging.warning(traceback.format_exc()) 65 logging.warning(traceback.format_exc())
66 self.response.write('Invalid packet: %s' % e) 66 self.response.write('Invalid packet: %s' % e)
67 return 67 return
68 68
69 try: 69 try:
70 for packet in packets: 70 for packet in packets:
71 update_record(**utils.filter_dict(packet, ('key', 'tags', 'fields'))) 71 update_record(**utils.filter_dict(packet, ('key', 'tags', 'fields')))
72 except ValueError as e: 72 except ValueError as e:
73 logging.warning(traceback.format_exc()) 73 logging.warning(traceback.format_exc())
74 self.response.write(e) 74 self.response.write(e)
75 75
76 def _is_cq_bot(self): 76 def _is_cq_bot(self):
77 password = self.request.get('password') 77 password = self.request.get('password')
78 if not password: 78 if not password:
79 return False 79 return False
80 sha1 = utils.password_sha1(password) 80 sha1 = utils.password_sha1(password)
81 return sha1 == Password.get_by_id(CQ_BOT_PASSWORD_KEY).sha1 81 return sha1 == Password.get_by_id(CQ_BOT_PASSWORD_KEY).sha1
OLDNEW
« no previous file with comments | « appengine/chromium_cq_status/handlers/patch_summary.py ('k') | appengine/chromium_cq_status/handlers/query.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698