Commit 8a64f00

root <root@tape.intranet.ltsnet.net>
2013-12-17 18:18:16
admin / upload fixes
1 parent 6fc932f
Changed files (4)
static/ffu.js
@@ -4,6 +4,8 @@ if (window.File && window.FileList) {
   form.input_file = $("#fileselect"); 
   form.file_list = $("#filelist"); 
   form.upload_zone.files = new Array();
+  form.upload_btn = $("#upload-btn");
+  form.clear_btn = $("#clear-btn");
   form.submit (function (e) {
     e.preventDefault();
     
@@ -23,17 +25,26 @@ if (window.File && window.FileList) {
         form.upload_zone.innerHTML = "Error " + request.status + " occurred uploading your file.<br \/>";
       }
     };       
-    form.file_list.empty();
-    console.log("emptied");
     request.send(file_data);
+    cleanSlate();
   }); 
 
+  // fresh upload page
+  var cleanSlate = function () {
+    form.file_list.empty();
+    form.input_file.replaceWith ( form.input_file = form.input_file.clone(true) );
+    form.upload_zone.files.length = 0;
+    form.upload_btn.prop('disabled', true);
+    form.clear_btn.prop('disabled', true);
+  }  
   // manage meta-file array
   var handleFiles = function (files) {
     for (var i=0, file; file=files[i]; i++){
       form.upload_zone.files.push (file);
       form.file_list.append ("<li class='list-group-item'>"+file.name+"\t"+file.size+"B "+"</li>");
     }
+    form.upload_btn.prop('disabled', false);
+    form.clear_btn.prop('disabled', false);
   } // end handleFiles
 
   // watch for changes in form-input-file element
@@ -47,6 +58,10 @@ if (window.File && window.FileList) {
     form.input_file.click();
   });
 
+  form.clear_btn.click (function(e) {
+    cleanSlate();
+  });
+
 } // end upload jquery functions
 
 $(document).on ('dragstart dragenter dragover', function (e) {
templates/admin.html
@@ -6,6 +6,14 @@
 
 {% block content %}
 <div class="container">
-  Admin'y things here
+  <div class="row">
+    <div class="col-xs-12">
+      <ul id="filelist" class="list-group">
+      {% for item in items %}
+        <li><a href="#">{{item}}</a></li>
+      {% end %}
+      </ul>
+    </div>
+  </div>
 </div><!-- /.container -->
 {% end %}
templates/index.html
@@ -15,8 +15,8 @@
         </div>
       </div>
       <div class="col-md-4 col-sm-4 bot-padding">
-        <button class="btn btn-lg btn-default btn-block" type="submit">Upload</button>
-        <button class="btn btn-lg btn-default btn-block" type="reset">Clear</button>
+        <button id="upload-btn" class="btn btn-lg btn-default btn-block" type="submit" disabled>Upload</button>
+        <button id="clear-btn" class="btn btn-lg btn-default btn-block" type="reset" disabled>Clear</button>
       </div>
     </div>
     <div class="row">
ffu.py
@@ -1,13 +1,16 @@
 import tornado.ioloop
 import tornado.web
-import logging
-import tarfile
-import uuid
-import base64
-from StringIO import StringIO
-import os
-
-from login import login
+#from config import COOKIE_SECRET, STATIC_DIR, TEMPLATE_DIR, AUDIT_DIR
+#from login import login
+#from soccermove import process_file_import
+# Tornado
+WORKING_DIR = os.path.dirname(os.path.abspath(__file__))
+COOKIE_SECRET = "F+ek4AWESWewGryPRbzq5aSHR1uRD0/ItZenLimCkGI="
+STATIC_DIR = os.path.join(WORKING_DIR,"static")
+TEMPLATE_DIR = os.path.join(WORKING_DIR,"templates")
+AUDIT_DIR = os.path.join(WORKING_DIR,"audit")
+
+import time, random, json, os
 
 class BaseHandler(tornado.web.RequestHandler):
   def get_login_url(self):
@@ -32,6 +35,10 @@ class BaseHandler(tornado.web.RequestHandler):
       kwargs['errormsg'] = self.errormsg
     else:
       kwargs['errormsg'] = None
+    if hasattr(self, 'items'):
+      kwargs['items'] = self.items
+    else:
+      kwargs['items'] = []
     kwargs['admin'] = self.get_admin_status()
     super(BaseHandler, self).render(template, **kwargs)
 
@@ -42,16 +49,17 @@ class LoginHandler(BaseHandler):
   def post(self):
     username = self.get_argument("username", "")
     password = self.get_argument("password", "")
-    status, error =  login(username, password)
+    #status, error =  login(username, password)
     status = ((username=="user" or username=="userb") and password=="pass")
     if status:
-      adminstatus = error #Yes, ghetto
+      #adminstatus = error #Yes, ghetto
       adminstatus = (username=="userb")
       self.set_current_user(username)
       self.set_admin_status(adminstatus)
       self.redirect(self.get_argument("next",u"/"))
     else:
-      self.errormsg = error
+      #self.errormsg = error
+      self.errormsg = "error"
       self.render("login.html", errormsg=self.errormsg)
 
   def set_current_user(self, user):
@@ -76,29 +84,43 @@ class UploadHandler(BaseHandler):
   @tornado.web.authenticated
   def get(self):
     self.render("index.html")
-    #username = self.current_user, admin = self.get_admin_status())
   
   @tornado.web.authenticated
   def post(self):
-    form_name = 'fileselect'
-    upload_dir = 'uploads/'
     if self.request.files:
-     
-      # replace with call to actual validation and tar'ing 
-      tar = tarfile.open(upload_dir + str(uuid.uuid4()) + ".tar.gz", "w:gz")
-      fileinfo = self.request.files.itervalues()
-      for f in fileinfo:
-        f_info = tarfile.TarInfo(name=f[0]['filename'])
-        f_info.size = len(f[0]['body'])
-        tar.addfile(f_info, StringIO(f[0]['body']))
-      tar.close()
+      files = []
+      for f in self.request.files.itervalues():
+          files.append((f[0]['filename'], f[0]['body']))
+      #process_file_import(self.current_user, files)
+      self.create_fake_manifest(files)
+
+  def create_fake_manifest(self,files): 
+    transferid = "%f.%05d" % (time.time(), random.randint(0,99999))
+    manifest = {'transferid': transferid,
+                'username'  : self.current_user,
+                'filenames'  : [],
+                'warnings'   : [],
+                'error'     : False}
+    for name,body in files:
+      manifest['filenames'].append(name) 
+      manifest['warnings'].append("xxxx")
+
+    print json.dumps(manifest)
+    
+    f = open(os.path.join(AUDIT_DIR,transferid), 'w')    
+    f.write(json.dumps(manifest))
+    f.close()
 
 class AdminHandler(BaseHandler):
   @tornado.web.authenticated
   def get(self):
     if self.get_admin_status():
-      self.render("admin.html")
-                  #username = self.current_user, admin = self.get_admin_status())
+      self.items = []
+      for filename in os.listdir(AUDIT_DIR):
+        fout = open(os.path.join(AUDIT_DIR,filename), 'rb')
+        self.items.append(json.loads(fout.read()))
+        fout.close()
+      self.render("admin.html", items=self.items)
     else:
       self.redirect(u"/")
 
@@ -110,10 +132,9 @@ handlers = [
 ]  
 
 settings = {
-  # set cookie_secret to hard coded string for production, currently breaks existing cookies on restart
-  "cookie_secret": base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes),
-  "static_path": os.path.join(os.path.dirname(__file__),"static"),
-  "template_path": os.path.join(os.path.dirname(__file__),"templates"),
+  "cookie_secret": COOKIE_SECRET,
+  "static_path": STATIC_DIR,
+  "template_path": TEMPLATE_DIR,
 }
 
 application = tornado.web.Application(handlers, **settings )