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 = '
';
@@ -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úmero |
+ Nome |
+
+ Início |
+
+ Estado |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Perm. |
+ Número |
+ Nome |
+
+ Nota |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--
libgit2 0.21.2