108 lines
2.3 KiB
Python
Executable File
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 = "paste.benjamyn.love/"
|
|
method = "https://" # 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
|
|
|
|
app = Flask(__name__)
|
|
app.config['DEBUG'] = False
|
|
|
|
@app.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
|
|
|
|
|
|
@app.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__':
|
|
app.run(host='127.0.0.1')
|