3 Commits
v1.0 ... v1.1

Author SHA1 Message Date
065296f84a Rename functions.py to functions.py.default
Since this is default settings and the user might want to customize
them, functions.py has been renamed. This also will prevent conflicts if
the user has updated their functions.py and then tries to pull.
2020-09-02 18:04:41 -05:00
841bb513d3 Allow easy customization of filename generation
Added a new file called functions.py which contains user-customizable
functions, instead of requiring the user to edit imgupload.py.
2020-09-02 17:14:28 -05:00
f0bb30a747 Change keygen.py to not require root
keygen.py now recommends that you run it as the user you want to have
ownership of secret.key and uploadkeys (such as www-data for nginx).
Then, if uploadkeys or secret.key don't exist, they will be created with
the correct ownership.
2020-09-02 14:26:57 -05:00
4 changed files with 50 additions and 52 deletions

1
.gitignore vendored
View File

@ -133,4 +133,5 @@ uploadkeys
savelog.log savelog.log
uwsgi.log uwsgi.log
settings.py settings.py
functions.py
secret.key secret.key

8
functions.py.default Normal file
View File

@ -0,0 +1,8 @@
import string
import random
def generate_name():
chars = string.ascii_letters + string.digits # uppercase, lowercase, and numbers
name = ''.join((random.choice(chars) for i in range(8))) # generate name
return name

View File

@ -2,15 +2,12 @@ from flask import Flask, request, jsonify, abort, Response
from cryptography.fernet import Fernet from cryptography.fernet import Fernet
from flask_api import status from flask_api import status
from pathlib import Path from pathlib import Path
import string
import random import random
import os import os
import datetime import datetime
import settings # app settings (such as allowed extensions) import settings # app settings (such as allowed extensions)
import functions # custom functions
ALPHANUMERIC = string.ascii_letters + string.digits # uppercase, lowercase, and numbers
app = Flask(__name__) # app is the app app = Flask(__name__) # app is the app
@ -22,15 +19,6 @@ def allowed_extension(testext):
return False return False
def generate_name(extension):
namefound = False
while not namefound:
fname = ''.join((random.choice(ALPHANUMERIC) for i in range(8))) + str(extension)
if not Path(fname).is_file():
namefound = True
return fname
def log_savelog(key, ip, savedname): def log_savelog(key, ip, savedname):
if settings.SAVELOG_KEYPREFIX > 0: if settings.SAVELOG_KEYPREFIX > 0:
with open(settings.SAVELOG, "a+") as slogf: with open(settings.SAVELOG, "a+") as slogf:
@ -77,7 +65,7 @@ def upload():
fext = Path(f.filename).suffix # get the uploaded extension fext = Path(f.filename).suffix # get the uploaded extension
if allowed_extension(fext): # if the extension is allowed if allowed_extension(fext): # if the extension is allowed
print("Generating file with extension {0}".format(fext)) print("Generating file with extension {0}".format(fext))
fname = generate_name(fext) # generate file name fname = functions.generate_name() + fext # generate file name
print("Generated name: {0}".format(fname)) print("Generated name: {0}".format(fname))
if f: # if the uploaded image exists if f: # if the uploaded image exists

View File

@ -8,11 +8,6 @@ import sys
import os import os
# Check if the script was run as root
if os.geteuid() != 0:
exit("Root privileges are necessary to run this script.\nPlease try again as root or using `sudo`.")
# Check if encryption key already exists # Check if encryption key already exists
enckey = Path(settings.ENCKEY_PATH) enckey = Path(settings.ENCKEY_PATH)
if enckey.is_file(): if enckey.is_file():
@ -63,20 +58,26 @@ def ask_yn(msg):
return proceed return proceed
N = 64 # Size of token start = ask_yn("Have you run this program as the correct user (for example, nginx uses www-data)? [y/n] ")
if not start:
print("Please run this as the correct user with: sudo su [user] -s /bin/sh -c 'python3 keygen/py'")
# Generate key
token = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(N))
# Decrypt the existing keyfile
key = load_key()
keyf = Fernet(key)
genkey = True
uploadkeysp = Path("uploadkeys")
if not uploadkeysp.is_file():
uploadkeysp.touch()
else: else:
N = 64 # Size of token
# Generate key
token = ''.join(secrets.choice(string.ascii_letters + string.digits) for i in range(N))
# Decrypt the existing keyfile
key = load_key()
keyf = Fernet(key)
genkey = True
uploadkeysp = Path("uploadkeys")
if not uploadkeysp.is_file():
uploadkeysp.touch()
else:
with open("uploadkeys", "rb") as ukf: with open("uploadkeys", "rb") as ukf:
# read the encrypted data # read the encrypted data
encrypted_data = ukf.read() encrypted_data = ukf.read()
@ -97,6 +98,6 @@ else:
if not proceed2: if not proceed2:
genkey = False genkey = False
if genkey: if genkey:
print("Your new token is: " + str(token)) # Print token print("Your new token is: " + str(token)) # Print token
encrypt_key(str(token)) # Encrypt the key and save encrypt_key(str(token)) # Encrypt the key and save