paste/paste.py

108 lines
2.3 KiB
Python
Executable File

#!/usr/bin/python3.6
from flask import Flask, request, render_template, make_response
import random, string
from pathlib import Path
# Basic settings for paste
pasteDir = Path("pastes")
nameLength = 10
useSpecialChars = False
allowListing = False
hostedURL = "PREURL"
method = "PREPROTO" # https:// or http://
letters = string.ascii_letters
if useSpecialChars:
letters = letters + string.punctuation
# Functions
def randomName():
name = ""
for x in range(0,nameLength):
num = random.randint(0,len(letters))
#print(num)
name += letters[num - 1]
return name
def doesDirExist():
if pasteDir.is_dir() == False:
pasteDir.mkdir()
def doesPasteExist(pasteName):
pasten = pasteDir / pasteName
if pasten.is_file():
return True
else:
return False
def writePaste(pasteName, pasteData):
pasten = pasteDir / pasteName
tmpData = pasteData.split('\n')
for line in tmpData:
with pasten.open('a') as f: f.write(line + '\n')
def printRealIP():
if request.environ.get('HTTP_X_FORWARDED_FOR') is None:
print(request.environ['REMOTE_ADDR'])
else:
print(request.environ['HTTP_X_FORWARDED_FOR'])
doesDirExist()
# Web interface
# https://paste.benjamyn.love/CBynvvjwDK
application = Flask(__name__)
application.config['DEBUG'] = False
@application.route('/', methods=['POST', 'GET'])
def index():
printRealIP()
if request.method == "GET":
if allowListing == True:
return "FileList"
else:
return render_template("post.html")
elif request.method == "POST":
data = request.get_data().decode()
if "buttonwaspushed" in data:
data = request.form['textarea']
name = randomName()
while doesPasteExist(name):
name = randomName()
else:
#print("Writing: " + data)
writePaste(name, data)
return method + hostedURL + name
@application.route('/<path:path>')
def getPaste(path):
printRealIP()
raw = False
tmpPath = Path(path)
pasten = pasteDir / tmpPath.name
try:
if request.values['raw'] == 'true':
raw = True
except:
pass
#print("Checking " + str(pasten))
if pasten.is_file():
with pasten.open() as f: data = f.read()
#print(data)
if raw:
r = make_response(data)
r.headers.set('Content-Type', "text/plain")
return r
return render_template("read.html", data=data)
else:
return render_template("read.html", data="No paste found")
if __name__ == '__main__':
application.run(host='127.0.0.1')