5 Commits

Author SHA1 Message Date
9910bc279c Add imageName field to request a specific name to save to 2020-09-15 17:24:36 -05:00
f100732e4d Check if image with same name already exists 2020-09-15 17:20:41 -05:00
46420eecda Remove leftover debug print statements in configtest.py 2020-09-15 16:35:50 -05:00
7b372a7b6f Increase processes in uwsgi.ini.default 2020-09-12 19:48:42 -05:00
5570710432 Rewrite installation section in README.md
Also added uWSGI installation tutorial
2020-09-08 00:39:48 -05:00
4 changed files with 68 additions and 19 deletions

View File

@ -31,27 +31,51 @@ First, fork [this repository](https://git.bbaovanc.com/bbaovanc/imgupload). If y
## Installation
1. Clone the repository: `git clone https://git.bbaovanc.com/bbaovanc/imgupload.git`
2. Enter the imgupload directory: `cd imgupload`
3. Create a virtualenv: `python3 -m venv env`
4. Enter the virtualenv: `source env/bin/activate`
5. Install dependencies: `python3 -m pip install -r requirements.txt`
6. [Run the Flask app](#running-the-flask-app)
---
## Running the Flask app
### Using uWSGI
[https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html](https://uwsgi-docs.readthedocs.io/en/latest/Configuration.html)
Note: replace `www-data` with whatever user your webserver runs as.
Instructions specific to imgupload are coming soon
1. Make /srv/imgupload: `sudo mkdir /srv/imgupload`
2. Change ownership of /srv/imgupload: `sudo chown www-data:www-data /srv/imgupload`
3. Enter www-data user: `sudo su www-data`
4. Change directories to /srv/imgupload: `cd /srv/imgupload`
5. Clone the repository: `git clone https://git.bbaovanc.com/bbaovanc/imgupload.git`
6. Enter the imgupload directory: `cd imgupload`
7. Create a virtualenv: `python3 -m venv env`
8. Enter the virtualenv: `source env/bin/activate`
9. Install dependencies: `python3 -m pip install -r requirements.txt`
10. Leave the www-data user: `exit`
11. Copy the default uWSGI configuration: `sudo cp /srv/imgupload/uwsgi.ini.default /etc/uwsgi/apps-available/imgupload.ini`
12. Modify `/etc/uwsgi/apps-available/imgupload.ini` to your preferences
13. Enable imgupload: `sudo ln -s /etc/uwsgi/apps-available/imgupload.ini /etc/uwsgi/apps-enabled/`
14. Restart uWSGI: `sudo systemctl restart uwsgi`
15. Set up your webserver to proxy the uwsgi.sock
Example NGINX location block:
```nginx
location /upload {
include uwsgi_params;
uwsgi_pass unix:/srv/imgupload/uwsgi.sock;
client_max_body_size 25M;
}
```
### Using Flask development server
#### Setup
```shell
$ git clone https://git.bbaovanc.com/bbaovanc/imgupload.git
$ cd imgupload
$ python3 -m venv env
$ source env/bin/activate
$ pip3 install -r requirements.txt
```
#### Run
```shell
$ source env/bin/activate # if you haven't already entered the virtualenv
$ export FLASK_APP=imgupload.py
$ flask run
```

View File

@ -85,8 +85,6 @@ if "ROOTURL" in checksettings:
pass
else:
rooturl_good = False
print(settings.ROOTURL)
print(settings.ROOTURL.startswith("https://"))
print("[!] ROOTURL does not start with `http://` or `https://`! This may cause issues!")
if not settings.ROOTURL.endswith("/"):
rooturl_good = False

View File

@ -67,12 +67,27 @@ def upload():
fext = Path(f.filename).suffix # get the uploaded extension
if allowed_extension(fext): # if the extension is allowed
if not "imageName" in request.form.keys():
print("Generating file with extension {0}".format(fext))
fname = functions.generate_name() + fext # generate file name
print("Generated name: {0}".format(fname))
else:
fname = request.form["imageName"]
if len(fname) > 0:
print("Request imageName: {0}".format(fname))
if not fname.lower().endswith(fext.lower()): # if requested name doesn't have the correct extension
fname += fext # add the extension
print("Added extension; new filename: {0}".format(fname))
else:
print("Requested filename is blank!")
fname = functions.generate_name() + fext # generate a valid filename
print("Generated name: {0}".format(fname))
if f: # if the uploaded image exists
print("Uploaded image exists")
if Path(os.path.join(settings.UPLOAD_FOLDER, fname)).is_file():
print("Requested filename already exists!")
return jsonify({'status': 'error', 'error': 'FILENAME_TAKEN'}), status.HTTP_409_CONFLICT
f.save(os.path.join(settings.UPLOAD_FOLDER, fname)) # save the image
print("Saved to {0}".format(fname))
url = settings.ROOTURL + fname # construct the url to the image

12
uwsgi.ini.default Normal file
View File

@ -0,0 +1,12 @@
[uwsgi]
socket = /srv/imgupload/uwsgi.sock
chmod-socket = 755
chdir = /srv/imgupload
venv = /srv/imgupload/env
master = true
module = imgupload:app
processes = 10
threads = 1
uid = www-data
gid = www-data
plugins = python3,logfile