@@ -5,7 +5,7 @@ |
from templates import env |
from runner import RunHandler |
from accounts import AccountHandler |
-from problems import ProblemHandler, ProblemListHandler, ProblemTemplateHandler |
+from problems import ProblemHandler, ProblemIDHandler, ProblemListHandler, ProblemTemplateHandler |
|
|
class MainHandler(webapp2.RequestHandler): |
@@ -42,4 +42,5 @@ |
('/problem', ProblemHandler), |
('/problems_list', ProblemListHandler), |
('/problems_template', ProblemTemplateHandler), |
+ ('/problems_id', ProblemIDHandler), |
], debug=True) |
@@ -34,9 +34,8 @@ |
return ndb.Key(Account, hashlib.md5(user_id).hexdigest()) |
|
@staticmethod |
- def from_id(user_id): |
- k = Account.key_from_id(user_id) |
- return k.get() |
+ def retrieve(user_id): |
+ return Account.key_from_id(user_id).get() |
|
@classmethod |
def exists(cls, user_id): |
@@ -208,5 +207,17 @@ |
return p |
|
@classmethod |
- def exists(cls, name, owner_id): |
+ def exists(cls, urlsafe_id): |
+ return len(cls.query(ancestor=ndb.Key(urlsafe=urlsafe_id)).fetch(1)) != 0 |
+ |
+ @classmethod |
+ def exists_by_name(cls, name, owner_id): |
return len(cls.query(ancestor=Problem.build_key_from_name(name, owner_id)).fetch(1)) != 0 |
+ |
+ @staticmethod |
+ def retrieve(urlsafe_id): |
+ return ndb.Key(urlsafe=urlsafe_id).get() |
+ |
+ @staticmethod |
+ def retrieve_by_name(name, owner_id): |
+ return Problem.build_key_from_name(name, owner_id).get() |
@@ -1,3 +1,4 @@ |
+import json |
import webapp2 |
from templates import env |
from models import Problem |
@@ -12,19 +13,23 @@ |
Get a problem by ID, check for permission |
""" |
|
- key = ndb.Key(urlsafe=self.request.get('id')) |
- problem = key.get() |
+ problem_id = self.request.get('id') |
|
- if problem.public: |
- self.response.write(problem.to_json()) |
+ if Problem.exists(problem_id): |
+ problem = Problem.retrieve(problem_id) |
+ if problem.public: |
+ self.response.write(problem.to_json()) |
|
- else: |
- user = users.get_current_user() |
- owner_id = user.user_id() |
- if owner_id == problem.owner_id: |
- self.response.write(problem.to_json()) |
else: |
- self.error(403) |
+ user = users.get_current_user() |
+ if user: |
+ owner_id = user.user_id() |
+ if owner_id == problem.owner_id: |
+ self.response.write(problem.to_json()) |
+ else: |
+ self.error(403) |
+ else: |
+ self.redirect('/') |
|
def post(self): |
""" |
@@ -41,6 +46,29 @@ |
self.error(403) |
|
|
+class ProblemIDHandler(webapp2.RequestHandler): |
+ |
+ def get(self): |
+ """ |
+ Get whether a problem exists_by_name |
+ """ |
+ |
+ name = self.request.get('name') |
+ user = users.get_current_user() |
+ |
+ if user and Problem.exists_by_name(name, user.user_id()): |
+ problem = Problem.retrieve_by_name(name, user.user_id()) |
+ if problem.public or problem.owner_id == user.user_id(): |
+ self.response.write(json.dumps({ |
+ 'id': problem.key.urlsafe() |
+ })) |
+ return |
+ |
+ self.response.write(json.dumps({ |
+ 'id': None |
+ })) |
+ |
+ |
class ProblemListHandler(webapp2.RequestHandler): |
|
def get(self): |