diff --git a/app.yaml b/app.yaml
index 785d976..76c1433 100644
--- a/app.yaml
+++ b/app.yaml
@@ -1,5 +1,5 @@
application: fxc-log-service
-version: 1
+version: 2
runtime: python
api_version: 1
@@ -8,5 +8,21 @@ handlers:
- url: /static
static_dir: static
+- url: /list
+ login: required
+ script: upload.py
+
+- url: /show/.*
+ login: required
+ script: upload.py
+
+- url: /delete/*
+ login: required
+ script: upload.py
+
+- url: /bulk-action
+ login: required
+ script: upload.py
+
- url: /.*
script: upload.py
diff --git a/config.yaml b/config.yaml
deleted file mode 100644
index 8812218..0000000
--- a/config.yaml
+++ /dev/null
@@ -1 +0,0 @@
-authorized_user: your_account@gmail.com
diff --git a/settings.py b/settings.py
index 5b93073..33625b2 100644
--- a/settings.py
+++ b/settings.py
@@ -1 +1 @@
-ALLOWED_USERS = ('test@example.com', 'somebodyelse@me.com' )
\ No newline at end of file
+ALLOWED_USERS = ('test@example.com', 'somebodyelse@me.com' )
diff --git a/static/test.html b/static/test.html
index 0961144..e50bf45 100644
--- a/static/test.html
+++ b/static/test.html
@@ -5,6 +5,7 @@
username:
uid:
filename:
+ version:
file:
diff --git a/templates/denied.html b/templates/denied.html
new file mode 100644
index 0000000..fa55af6
--- /dev/null
+++ b/templates/denied.html
@@ -0,0 +1,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/dump.html b/templates/dump.html
new file mode 100644
index 0000000..b37aae6
--- /dev/null
+++ b/templates/dump.html
@@ -0,0 +1,11 @@
+
+
+ {{item}}
+ {% endfor %}
+
+
+
+
\ No newline at end of file
diff --git a/templates/list.html b/templates/list.html
index dfeb8e6..98db96c 100644
--- a/templates/list.html
+++ b/templates/list.html
@@ -1,14 +1,57 @@
+
+
+
+
\ No newline at end of file
diff --git a/upload.py b/upload.py
index 871b31a..456cfd3 100644
--- a/upload.py
+++ b/upload.py
@@ -13,6 +13,7 @@ class Content(db.Model):
filename = db.StringProperty()
contents = db.BlobProperty()
date = db.DateTimeProperty(auto_now_add=True)
+ version = db.StringProperty()
class UploadPage(webapp.RequestHandler):
def post(self):
@@ -20,6 +21,7 @@ def post(self):
username=self.request.get("username"),
uid =self.request.get("uid"),
filename=self.request.get("filename"),
+ version =self.request.get("version"),
contents=db.Blob(self.request.get("file"))
)
item.put()
@@ -32,8 +34,13 @@ def get(self):
self.redirect(users.create_login_url(self.request.uri))
return
- if user.email().lower() not in settings.ALLOWED_USERS:
- self.response.out.write("Permission Denied")
+ if user.email().lower() not in settings.ALLOWED_USERS and not users.is_current_user_admin():
+ template_data = {
+ 'nickname' : user.nickname(),
+ 'logout_url' : users.create_logout_url("/list"),
+ }
+ path = os.path.join(os.path.dirname(__file__), 'templates/denied.html')
+ self.response.out.write(template.render(path, template_data ))
return
template_data = {
@@ -54,16 +61,39 @@ def get(self, key):
class ShowPage(webapp.RequestHandler):
def get(self, key):
item = Content.get(key)
- self.response.headers['Content-Type'] = 'text/plain'
- #evaluate the extension, txt and log should be text, otherwise octet-stream
- #self.response.headers['Content-Type'] = 'application/octet-stream'
+ if item.filename[-4:] in (".log", ".txt"):
+ self.response.headers['Content-Type'] = 'text/plain'
+ else:
+ self.response.headers['Content-Type'] = 'application/octet-stream'
+ self.response.headers['Content-Disposition'] = 'attachment; filename="%s"' % (item.filename)
self.response.out.write(item.contents)
+
+class BulkAction(webapp.RequestHandler):
+ def post(self):
+ action = self.request.get("action")
+ deleted = []
+ if action == "Bulk Delete":
+ keys = self.request.get("bulk-items", allow_multiple=True)
+ for key in keys:
+ item = Content.get(key)
+ deleted.append("User %s, uid %s uploaded on %s: %s with internal key %s" % (item.username, item.uid, item.date, item.filename, key));
+ Content.delete(item)
+
+ template_data = {
+ 'text' : 'Deleted',
+ 'items' : deleted
+ }
+ path = os.path.join(os.path.dirname(__file__), 'templates/dump.html')
+ self.response.out.write(template.render(path, template_data ))
+ else:
+ self.redirect('/list', False)
application = webapp.WSGIApplication([
('/list', ListPage),
('/show/(.*)', ShowPage),
('/delete/(.*)', DeletePage),
- ('/upload', UploadPage)
+ ('/upload', UploadPage),
+ ('/bulk-action.*', BulkAction)
], debug=True)
def main():