diff --git a/serve.py b/serve.py index 029f542..730f63b 100755 --- a/serve.py +++ b/serve.py @@ -26,11 +26,11 @@ class WebApplication(tornado.web.Application): (r'/login', LoginHandler), (r'/logout', LogoutHandler), (r'/test', TestHandler), - (r'/review', ReviewHandler), # FIXME - # (r'/admin', AdminHandler), # FIXME + (r'/review', ReviewHandler), # FIXME + (r'/admin', AdminHandler), # (r'/change_password', ChangePasswordHandler), - (r'/static/(.+)', FileHandler), - (r'/', RootHandler), + (r'/static/(.+)', FileHandler), # FIXME + (r'/', RootHandler), # TODO multiple tests ] settings = { @@ -177,7 +177,7 @@ class ReviewHandler(BaseHandler): try: f = open(path.expanduser(fname)) except FileNotFoundError: - logging.error('Cannot find "{}" for review.'.format(fname)) + logging.error(f'Cannot find "{fname}" for review.') except Exception as e: raise e else: @@ -211,72 +211,62 @@ class GiveupHandler(BaseHandler): class RootHandler(BaseHandler): @tornado.web.authenticated def get(self): - # if self.current_user == '0': - # self.redirect('/admin') - # else: - # self.redirect('/test') - # self.write("Hello, world") - self.redirect('/test') - + if self.current_user == '0': + self.redirect('/admin') + else: + self.redirect('/test') # ============================================================================ -# Admin +# Admin FIXME # ============================================================================ class AdminHandler(BaseHandler): + + @tornado.web.authenticated def get(self): if self.current_user != '0': self.redirect('/') self.render('admin.html') -# # ============================================================================ -# # Admin webservice -# # ============================================================================ -# class AdminWebService(object): -# exposed = True -# _cp_config = { -# 'auth.require': [name_is('0')] -# } -# def __init__(self, app): -# self.app = app + @tornado.web.authenticated + def post(self): + print('admin post') + if self.current_user != '0': + self.redirect('/') -# @cherrypy.tools.accept(media='application/json') # FIXME -# def GET(self): -# data = { -# 'students': self.app.get_students_state(), -# 'test': self.app.testfactory -# } -# return json.dumps(data, default=str) + cmd = self.get_body_argument('cmd', None) + value = self.get_body_argument('value', None) -# @cherrypy.tools.accept(media='application/json') # FIXME -# def POST(self, **args): -# if args['cmd'] == 'allow': -# if args['value'] == 'true': -# return self.app.allow_student(args['name']) -# else: -# return self.app.deny_student(args['name']) + if cmd == 'get_students': + data = { + 'students': self.testapp.get_students_state(), + 'test': self.testapp.testfactory + } + self.write(json.dumps(data, default=str)) + + elif cmd == 'allow': + self.write(self.testapp.allow_student(value)) -# elif args['cmd'] == 'reset': -# return self.app.reset_password(args['name']) + elif cmd == 'deny': + self.write(self.testapp.deny_student(value)) + + elif cmd == 'reset_password': + self.write(self.testapp.reset_password(value)) + + elif cmd == 'insert_student': + value = json.loads(value) + self.write(self.testapp.insert_new_student(uid=value['number'], name=value['name'])) + + else: + logging.error(f'Unknown command in post: "{cmd}"') -# elif args['cmd'] == 'insert': -# return self.app.insert_new_student(uid=args['number'], name=args['name']) -# else: -# print(args) # FIXME # # ============================================================================ # # Student webservice # # ============================================================================ # class StudentWebService(object): -# exposed = True -# _cp_config = { -# 'auth.require': [] -# } - -# def __init__(self, app): -# self.app = app # @cherrypy.tools.accept(media='application/json') # FIXME # def POST(self, **args): @@ -285,13 +275,6 @@ class AdminHandler(BaseHandler): # v = json.loads(args['value']) # self.app.set_student_focus(uid=args['number'], value=v) -# ============================================================================ -# Webserver root -# ============================================================================ -# class Root(object): -# def __init__(self, app): -# self.app = app - # ------------------------------------------------------------------------- diff --git a/static/js/admin.js b/static/js/admin.js index 0219c7f..3c7f8ea 100644 --- a/static/js/admin.js +++ b/static/js/admin.js @@ -16,8 +16,8 @@ $(document).ready(function() { var number = $("#reset_number").val(); $.ajax({ type: "POST", - url: "/adminwebservice", - data: {"cmd": "reset", "name": number} + url: "/admin", + data: {"cmd": "reset_password", "value": number} }); } ); @@ -25,11 +25,13 @@ $(document).ready(function() { function () { $.ajax({ type: "POST", - url: "/adminwebservice", + url: "/admin", data: { - "cmd": "insert", - "number": $("#novo_numero").val(), - "name": $("#novo_nome").val() + "cmd": "insert_student", + "value": JSON.stringify({ + "number": $("#novo_numero").val(), + "name": $("#novo_nome").val() + }) } }); } @@ -39,15 +41,27 @@ $(document).ready(function() { // ---------------------------------------------------------------------- // checkbox handler to allow/deny students individually function autorizeStudent(e) { - $.ajax({ - type: "POST", - url: "/adminwebservice", - data: {"cmd": "allow", "name": this.name, "value": this.checked} - }); - if (this.checked) + // $.ajax({ + // type: "POST", + // url: "/admin", + // data: {"cmd": "allow", "name": this.name, "value": this.checked} + // }); + if (this.checked) { $(this).parent().parent().addClass("active"); - else + $.ajax({ + type: "POST", + url: "/admin", + data: {"cmd": "allow", "value": this.name} + }); + } + else { $(this).parent().parent().removeClass("active"); + $.ajax({ + type: "POST", + url: "/admin", + data: {"cmd": "deny", "value": this.name} + }); + } } // ---------------------------------------------------------------------- @@ -81,13 +95,13 @@ $(document).ready(function() { function generate_grade_bar(grade) { var barcolor; if (grade < 10) { - barcolor = 'progress-bar-danger'; + barcolor = 'bg-danger'; } else if (grade < 15) { - barcolor = 'progress-bar-warning'; + barcolor = 'bg-warning'; } else { - barcolor = 'progress-bar-success'; + barcolor = 'bg-success'; } var bar = '
' + grade + '
'; @@ -133,13 +147,11 @@ $(document).ready(function() { // ---------------------------------------------------------------------- function populate() { $.ajax({ - url: "/adminwebservice", + type: "POST", + url: "/admin", + data: {"cmd": "get_students", "value": ""}, dataType: "json", success: function(data) { - // show clock on upper left corner - var t = new Date(); - $('#currenttime').html(t.getHours() + (t.getMinutes() < 10 ? ':0' : ':') + t.getMinutes()); - // fill jumbotron data $("#title").html(data['test']['title']); $("#ref").html(data['test']['ref']); diff --git a/templates/admin.html b/templates/admin.html new file mode 100644 index 0000000..b3496ff --- /dev/null +++ b/templates/admin.html @@ -0,0 +1,170 @@ + + + + Admin + + + + + + + + + + + + + + + + + +
+ +
+

+ Ref:
+ Enunciado:
+ Database:
+ Testes entregues: +
+ + +
+
+ +
+
+ + + + + + + + + + + + + + +
NúmeroNomeInícioEstado
+
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + +
Perm.NúmeroNomeNota
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + -- libgit2 0.21.2