Example #1
0
        def post(self):
            user = self.current_user
            if user["user_class"] < 1:
                return

            problem = self.get_argument("problem",None)
            if not problem:
                self.write(fx.gen_result("1","Missing data"))
                return

            cursor  = db.problems.find({"problem":{"$in":[problem]},"end":{"$lt":now()}})
            print list(cursor)
            n = None
            #n = cursor.count()
            if n:
                self.write(fx.gen_result("2","Problem is used",list(cursor)))
                return

            result = db.problems.find_one({"name":problem})['archive']
            result = not result
            db.problems.update({"name":problem},{"$set":{"archive":result}})
            if result:
                self.write(fx.gen_result("0","Problem added to archive"))
            else:
                self.write(fx.gen_result("0","Problem removed from archive"))
Example #2
0
	def add_gesture(self,name,training_data):
		if(self.get_gesture(name)):
			return fx.gen_result(1,"Gesture already exists")

		data = dict(
			name = name,
			training_data = training_data,
			trained = False
			)
		data["class"] = self.db.gestures.find().count()+1
		self.db.gestures.insert(data)
		return fx.gen_result(0,"Gesture added")
Example #3
0
        def post(self):
            if self.current_user['user_class'] < 1:
                self.write(fx.gen_result("1","Non authorized"))
                return
            problem = self.get_argument("problem",None)
            testcase  = self.get_argument("testcase",None)
            testcase = int(testcase)-1
            value = self.get_argument("value",None)
            if not problem  or not value:
                self.write(fx.gen_result("1","Missing data"))
                return

            query = db.problems.update({'name':problem},{'$set':{'testcases.'+str(testcase): value}
                })

            self.write(fx.gen_result("0","Ok"))
Example #4
0
 def signup(self):
     if self.user_exists():
         return fx.gen_result("1","User exists")
     user = dict(
         name = self.name,
         password = fx.hash(self.password),
         email = self.email,
         user_class = self.user_class
         )
     db.users.insert(user)
     curr_dir = "data/users"+"/"+self.email+"/"
     try:
         os.mkdir(curr_dir)
     except OSError:
         pass
     return fx.gen_result("0","Signup Ok. Now you can <a href='#' onclick=\"show_box('login-box'); return false;\"> login.</a>")
Example #5
0
        def post(self):
            if self.current_user['user_class'] == 0:
                self.redirect("/home")
                return

            type = self.get_argument("type",None)
            if not type:
                self.write(fx.gen_result("1","No type specified"))
                return


            if type == "submission":
                submission = self.get_argument("submission",None)
                if not submission:
                    self.write(fx.gen_result("2","No submission specified"))
                    return
                db.submissions.update({"id":int(submission)},{"$set":{"status":"pending"}})
Example #6
0
        def get(self):
            if self.current_user['user_class'] < 1:
                self.write(fx.gen_result("1","Non authorized"))
                return

            problem = self.get_argument("problem",None)
            if not problem:
                self.write(fx.gen_result("2","No problem"))
                return

            problem = db.problems.find_one({"name":problem})
            if not problem:
                self.write(fx.gen_result("3","DB Error"))
                return

            result = fx.gen_result("0","Ok",problem['testcases'])
            self.write(result)
Example #7
0
    def authenticate(self):
        user = dict(
            email = str(self.email),
            password = fx.hash(self.password)
            )
        user = db.users.find_one(user)
        
        if not(user):
            return fx.gen_result("1","Failed")

        self.name = user["name"]
        self.email = user["email"]
        self.user_class = user["user_class"]
        data = dict(
            name = self.name,
            email = self.email,
            user_class = self.user_class 
            )
        return fx.gen_result("0", "Login ok",data)
Example #8
0
 def add(self):
     problem_data = dict(
         name = self.name,
         author = self.author,
         testcases = self.testcases,
         timelimit = self.timelimit,
         memorylimit = self.memorylimit,
         archive = self.archive
         )
     db.problems.insert(problem_data)
     return fx.gen_result("0","Problem added")
Example #9
0
 def add(self):
     contest_data = dict(
         name = self.name,
         start = int(self.start),
         end = int(self.end),
         author = self.author,
         problems = self.problems,
         enrolled = []
         )
     db.contests.insert(contest_data)
     return fx.gen_result("0","Contest added")
Example #10
0
        def post(self):
            user = self.current_user
            if user["user_class"] < 1:
                return
            data = urllib.unquote(self.request.body).decode('utf8').split('&')
            name = self.get_argument('name',None)
            start_date = self.get_argument("start_date",None)
            start_time = self.get_argument("start_time",None)
            end_date = self.get_argument("end_date",None)
            end_time = self.get_argument("end_time",None)
            if not start_date or not start_time or not end_date or not end_time or not name:
                self.write(fx.gen_result("1","Missing data"))
                return

            #get problems
            problems = []
            for item in data:
                this = item.split('=')
                if this[0] == "problems":
                    problems.append(this[1])

            start = start_date+" "+start_time
            start = datetime.datetime.strptime(start,"%d-%m-%Y %H:%M:%S").strftime("%s")
            end = end_date+" "+end_time
            end = datetime.datetime.strptime(end,"%d-%m-%Y %H:%M:%S").strftime("%s")
            
            contest_data = dict(
                author = self.current_user,
                name = name,
                start = start,
                end = end,
                problems = problems,
                )
            contest = models.Contest(**contest_data)
            if contest.exists():
                self.write(fx.gen_result("1","Contests exists"))
                return

            result = contest.add()
            self.write(result)
Example #11
0
        def post(self):
            user = self.current_user
            if user["user_class"] < 1:
                return

            required = ["name","memorylimit","timelimit","testcases"]
            problem_data = dict(
                name = self.get_argument('name',None),
                memorylimit = self.get_argument('memorylimit',None),
                timelimit = self.get_argument('timelimit',None),
                author = self.current_user
                )
            try:
                problem_data['testcases'] = self.request.files['testcases'][0]["body"]
            except:
                pass

            for field in required:
                if not problem_data[field]:
                    self.write(fx.gen_result("1","Missing data"))
                    return

            problem = models.Problem(**problem_data)
            if problem.exists():
                self.write(fx.gen_result("2","Problem exists"))
                return

            problem.set_dir()

            if problem_data['testcases']:
                result = problem.prepare_testcases()

                if result['status'] != "0":
                    self.write(fx.gen_result(**result))
                    return

            result = problem.add()
            self.write(result)
Example #12
0
        def get(self):
            problem = self.get_argument("problem",None)
            if not problem:
                self.write(fx.gen_result("1","Problem not found"))
                return

            n = db.problems.find_one({"name":problem,"archive":True})
            if not n:
                self.write(fx.gen_result("2","Problem not archived"))
                return


            file_name = 'file.ext'
            buf_size = 4096
            self.set_header('Content-Type', 'application/zip')
            self.set_header('Content-Disposition', 'attachment; filename=' + problem+".zip")
            with open("data/problems/"+problem+"/testcases.zip", 'r') as f:
                while True:
                    data = f.read(buf_size)
                    if not data:
                        break
                    self.write(data)
            self.finish()
Example #13
0
        def put(self):
            pprint(self.request.body)
            submission = dict()
            try:
                data = json.loads(self.request.body)
            except:
                self.write(fx.gen_result("1","Wrong request"))
                return

            fields = ["email","contest","language","source","problem"]

            if not set(fields).issubset(data):
                self.write(fx.gen_result("2","Missing data"))
                return

            submission['user'] = {'email':data['email'], 'user_class':0, 'name':data['email']}
            n = db.users.find({"email":submission['user']['email']}).count()
            if n == 0:
                self.write(fx.gen_result("3","No user"))
                return

            filename = data['problem']

            submission['contest'] = data['contest']
            submission['problem'] = filename
            submission['lang'] = data['language']
            n = db.contests.find({"problems":submission['problem'],"name":submission['contest']}).count()
            if n == 0:
                self.write(fx.gen_result("5","No such problem"))
                return

            if not (submission['lang'] in ["pas","c","cpp"]):
                self.write(fx.gen_result("6","Wrong language"))
                return

            submission['time'] = now()
            submission['id'] = int(fx.get_submission_id())
            submission['body'] = data['source']
 

            submission_obj = models.Submission(**submission)
            result = submission_obj.validate()
            if not result:
                self.write(fx.gen_result("7","Security alert"))
                return
            result = submission_obj.add()
            print "\n"
            pprint(submission)
            f = open("data/users/"+submission["user"]['email']+"/"+str(int(submission["id"]))+"."+submission["lang"],"w")
            f.write(submission['body'])
            f.close()
            self.write(fx.gen_result(**result))
Example #14
0
        def get(self):
            id = self.get_argument("id",None)
            if not id:
                submissions = db.submissions.find({"user.email":self.current_user['email']}).sort("time",-1)
                self.write(dumps(list(submissions)))
                return

            submission = db.submissions.find_one({"id":int(id)})

            if not submission:
                self.write(fx.gen_result("1","Error"))
                return

            field = "result"
            type = self.get_argument("type",None)
            if self.current_user['user_class'] == 1 and not type:
                field = "data"

            if self.request.headers.get('Referer').split("/")[-2] == "archive":
            	field = "data"

            if not submission[field]:
            	field = "result"
            self.write(fx.gen_result("0","Success",submission[field]))
Example #15
0
 def post(self):
     email = self.get_argument("email",None)
     password = self.get_argument("password",None)
     if not email or not password:
         self.finish(fx.gen_result("1","Missing data"))
         return
     user_data = dict(
         email = email,
         password = password,
         )
     user = models.User(**user_data)
     result = json.loads(user.authenticate())
     if(result['status'] != '0'):
         self.write(json.dumps(result))
         return
     self.set_secure_cookie("user", tornado.escape.json_encode(result["data"]))
     self.write(json.dumps(result))
Example #16
0
 def post(self):
     #print self.request.body
     name = self.get_argument("name",None)
     email = self.get_argument("email",None)
     password = self.get_argument("password",None)
     if not name or not email or not password:
         self.finish(fx.gen_result("1","Missing data"))
         return
     user_data = dict(
         name = name,
         email = email,
         password = password
         )
     user = models.User(**user_data)
     result = user.signup()  
     print result
     self.write(result)
Example #17
0
        def post(self):
            curr_time = now()
            last = db.submission.find_one({"user":self.current_user}).sort("_id",-1)
            if last and now()-int(last["time"]) < 60:
                self.write(fx.gen_result("6","Wait"))
                return
        	try:
                source = self.request.files['source']
            except:
                self.write(fx.gen_result("2","No source"))
                return
            contest = self.get_argument("contest",None)

                
            filename = source[0]['filename'].split('.')
            problem = filename[0]
            if len(filename) < 2:
                lang = "exe"
            else:
                lang = filename[1]
            body = source[0]['body']
            print problem
            if not (lang in ["pas","c","cpp"]):
                self.write(fx.gen_result("4","Wrong language"))
                return

            if contest:
                n = db.contests.find({"problems":problem,"name":contest}).count()
            else:
                n = db.problems.find({"name":problem,"archive":True}).count()
            if n == 0:
                self.write(fx.gen_result("5","No such problem"))
                return

            time = now()
            if contest:
                n = db.contests.find({
                "start" : { "$lte": time },
                "end" : { "$gte" : time }
                }).count()

                if n == 0:
                    self.write(fx.gen_result("5","Too late"))
                    return

            submission_data = dict(
                user = self.current_user,
                problem = problem,
                time = time,
                contest = contest,
                lang = lang,
                id = fx.get_submission_id(),
                body = body
                )
            submission = models.Submission(**submission_data)
            result = submission.validate()
            if not result:
                self.write(fx.gen_result("1","Security alert"))
                return

            result = submission.add()
            os.umask(0)
            f = open("data/users/"+self.current_user["email"]+"/"+str(int(submission_data["id"]))+"."+submission_data["lang"],"w")
            f.write(body)
            f.close()
            self.write(fx.gen_result(**result))
            
        @tornado.web.authenticated
        def get(self):
            id = self.get_argument("id",None)
            if not id:
                submissions = db.submissions.find({"user.email":self.current_user['email']}).sort("time",-1)
                self.write(dumps(list(submissions)))
                return

            submission = db.submissions.find_one({"id":int(id)})

            if not submission:
                self.write(fx.gen_result("1","Error"))
                return

            field = "result"
            type = self.get_argument("type",None)
            if self.current_user['user_class'] == 1 and not type:
                field = "data"

            if self.request.headers.get('Referer').split("/")[-2] == "archive":
            	field = "data"

            if not submission[field]:
            	field = "result"
            self.write(fx.gen_result("0","Success",submission[field]))
Example #18
0
        def post(self):
            curr_time = now()
            last = db.submissions.find_one({"user":self.current_user},sort=[("time", pymongo.DESCENDING)])
            if last and curr_time-int(last["time"]) < 20:
                self.write(fx.gen_result("6","Wait for 20 seconds"))
                return
            try:
                source = self.request.files['source']
                if len(source[0]['body']) > 1024*1024:
                    self.write(fx.gen_result("6","File too big"))
                    return
            except:
                self.write(fx.gen_result("2","No source"))
                return
            contest = self.get_argument("contest",None)

                
            filename = source[0]['filename'].split('.')
            problem = filename[0]
            if len(filename) < 2:
                lang = "exe"
            else:
                lang = filename[1]
            body = source[0]['body']
            print problem
            if not (lang in ["pas","c","cpp"]):
                self.write(fx.gen_result("4","Wrong language"))
                return

            if contest:
                n = db.contests.find({"problems":problem,"name":contest}).count()
            else:
                n = db.problems.find({"name":problem,"archive":True}).count()
            if n == 0:
                self.write(fx.gen_result("4","No such problem"))
                return

            time = now()
            if contest:
                n = db.contests.find({
                "start" : { "$lte": time },
                "end" : { "$gte" : time }
                }).count()

                if n == 0:
                    self.write(fx.gen_result("5","Too late"))
                    return

            submission_data = dict(
                user = self.current_user,
                problem = problem,
                time = time,
                contest = contest,
                lang = lang,
                id = fx.get_submission_id(),
                body = body
                )
            submission = models.Submission(**submission_data)
            result = submission.validate()
            if not result:
                self.write(fx.gen_result("1","Security alert"))
                return

            result = submission.add()
            os.umask(0)
            f = open("data/users/"+self.current_user["email"]+"/"+str(int(submission_data["id"]))+"."+submission_data["lang"],"w")
            f.write(body)
            f.close()
            self.write(fx.gen_result(**result))