3 Commits
v2.1 ... v2.1.3

Author SHA1 Message Date
b8b5a2518c Change abort() calls to JSON responses
This makes the responses more consistent. Now, all responses are JSON.
2020-09-05 15:43:36 -05:00
805e545b39 Deduplicate code in keyctl.py and add comments 2020-09-04 19:44:46 -05:00
9a117817f7 Changed random to secrets for cryptographic security 2020-09-04 14:32:53 -07:00
2 changed files with 32 additions and 32 deletions

View File

@ -4,7 +4,7 @@ imgupload.py
Flask application for processing images uploaded through POST requests. Flask application for processing images uploaded through POST requests.
""" """
from flask import Flask, request, jsonify, abort, Response from flask import Flask, request, jsonify, Response
from flask_api import status from flask_api import status
from pathlib import Path from pathlib import Path
import os import os
@ -81,21 +81,21 @@ def upload():
else: # if the extension was invalid else: # if the extension was invalid
print("Uploaded extension is invalid!") print("Uploaded extension is invalid!")
abort(415) return jsonify({'status': 'error', 'error': 'INVALID_EXTENSION'}), status.HTTP_415_UNSUPPORTED_MEDIA_TYPE
else: # if the key was not valid else: # if the key was not valid
print("Key is invalid!") print("Key is invalid!")
print("Request key: {0}".format(request.form["uploadKey"])) print("Request key: {0}".format(request.form["uploadKey"]))
abort(401) return jsonify({'status': 'error', 'error': 'UNAUTHORIZED'}), status.HTTP_401_UNAUTHORIZED
else: # if uploadKey was not found in request body else: # if uploadKey was not found in request body
print("No uploadKey found in request!") print("No uploadKey found in request!")
abort(401) return jsonify({'status': 'error', 'error': 'UNAUTHORIZED'}), status.HTTP_401_UNAUTHORIZED
else: # if the request method wasn't post else: # if the request method wasn't post
print("Request method was not POST!") print("Request method was not POST!")
abort(405) return jsonify({'status': 'error', 'error': 'METHOD_NOT_ALLOWED'}), status.HTTP_405_METHOD_NOT_ALLOWED
if __name__ == "__main__": if __name__ == "__main__":
print("Run with `flask` or a WSGI server!") print("Run with `flask` or a WSGI server!")

View File

@ -8,38 +8,43 @@ Command-line utility for easy management of the uploadkeys file.
from pathlib import Path from pathlib import Path
import argparse import argparse
import logging import logging
import random import secrets
import string import string
def read_keyfile():
with open("uploadkeys", "r") as keyfile: # open uploadkeys
keys = keyfile.readlines() # read all the keys
logging.debug("Read uploadkeys")
keys = [x.strip("\n") for x in keys] # strip newlines from keys
logging.debug("Stripped newlines from keys")
return keys
def genkey(length): def genkey(length):
key = ''.join(random.choice(string.ascii_letters + string.digits) for x in range(length)) key = ''.join(secrets.choice(string.ascii_letters + string.digits) for x in range(length))
return key return key
def savekey(key): def savekey(key):
if not Path("uploadkeys").is_file(): if not Path("uploadkeys").is_file(): # if uploadkeys doesn't exist, log an info message
logging.info("uploadkeys file doesn't exist, it will be created.") logging.info("uploadkeys file doesn't exist, it will be created.")
with open("uploadkeys", "a+") as keyfile: with open("uploadkeys", "a+") as keyfile:
keyfile.write(str(key) + "\n") keyfile.write(str(key) + "\n") # add the key
logging.debug("Saved a key to uploadkeys: {0}".format(key)) logging.debug("Saved a key to uploadkeys: {0}".format(key))
def rmkey(delkey): def rmkey(delkey):
removedkey = False removedkey = False
with open("uploadkeys", "r") as keyfile: allkeys = read_keyfile()
allkeys = keyfile.readlines() if delkey in allkeys: # if the key to remove exists
logging.debug("Loaded all upload keys") allkeys.remove(delkey) # remove the first instance of the key
allkeys = [x.strip("\n") for x in allkeys]
logging.debug("Stripped keys")
if delkey in allkeys:
allkeys.remove(delkey)
removedkey = True removedkey = True
logging.debug("Removed one instance of the key") logging.debug("Removed one instance of the key")
with open("uploadkeys", "w") as keyfile: with open("uploadkeys", "w") as keyfile:
for k in allkeys: for k in allkeys:
keyfile.write(k + "\n") keyfile.write(k + "\n") # write the remaining keys
if removedkey: if removedkey:
return True return True
@ -48,11 +53,8 @@ def rmkey(delkey):
def find_duplicates(): def find_duplicates():
with open("uploadkeys", "r") as keyfile: allkeys = read_keyfile()
allkeys = keyfile.readlines()
logging.debug("Read all keys")
allkeys = [x.strip("\n") for x in allkeys]
logging.debug("Stripped newlines")
seen = set() seen = set()
ukeys = [] ukeys = []
dupkeys = [] dupkeys = []
@ -66,11 +68,7 @@ def find_duplicates():
def get_keys(): def get_keys():
with open("uploadkeys", "r") as keyfile: # load valid keys validkeys = read_keyfile()
validkeys = keyfile.readlines()
logging.debug("Read uploadkeys")
validkeys = [x.strip("\n") for x in validkeys]
logging.debug("Stripped newlines from validkeys")
while "" in validkeys: while "" in validkeys:
validkeys.remove("") validkeys.remove("")
logging.debug("Removed blank keys") logging.debug("Removed blank keys")
@ -85,7 +83,7 @@ def cmd_list(args):
for i in range(len(validkeys)): for i in range(len(validkeys)):
showkey = validkeys[i][:6] showkey = validkeys[i][:6]
if len(validkeys[i]) > 6: if len(validkeys[i]) > 6:
showkey += "..." showkey += "..." # add ellipses since the key was shortened in list
print(" [{0}] {1}".format(i+1, showkey)) print(" [{0}] {1}".format(i+1, showkey))
@ -121,10 +119,12 @@ def cmd_remove(args):
logging.info("No key was removed.") logging.info("No key was removed.")
def cmd_dedupe(args): def cmd_dedupe(args):
for d in find_duplicates(): dupes = find_duplicates()
r = rmkey(d) if len(dupes) > 0:
logging.debug(r) for d in dupes:
logging.info("Removed duplicate key: {0}".format(d)) r = rmkey(d)
logging.debug(r)
logging.info("Removed duplicate key: {0}".format(d))
else: else:
logging.info("[" + u"\u2713" + "] No duplicate keys found!") logging.info("[" + u"\u2713" + "] No duplicate keys found!")