57 lines
1.2 KiB
Python
57 lines
1.2 KiB
Python
from flask import Flask, render_template, request
|
|
import socket
|
|
from struct import pack, unpack
|
|
import hashlib
|
|
import sys
|
|
|
|
PORT = 8989
|
|
|
|
files = []
|
|
|
|
app = Flask(__name__)
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return render_template('index.html')
|
|
|
|
@app.route('/upload', methods=['POST'])
|
|
def upload():
|
|
if 'file' not in request.files:
|
|
return 'No file part'
|
|
file = request.files['file']
|
|
if file.filename == '':
|
|
return 'No selected file'
|
|
|
|
buf = file.read()
|
|
hash = hashlib.sha256(buf).digest()
|
|
|
|
# Scan file
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.settimeout(10)
|
|
s.connect(("localhost", PORT))
|
|
|
|
s.send(pack("I", len(buf)))
|
|
s.send(buf)
|
|
|
|
try:
|
|
recv_hash = s.recv(32)
|
|
status = unpack("B", s.recv(1))
|
|
|
|
if (hash != recv_hash):
|
|
message = 'Error: Mismatching sha256.'
|
|
|
|
elif (status == 1):
|
|
message = "Error: Potential virus found, cannot upload."
|
|
|
|
else:
|
|
message = 'File successfully uploaded'
|
|
files.append({'filename': file.filename, 'content':buf})
|
|
|
|
except:
|
|
message = 'Error: Failed to scan file'
|
|
|
|
s.close()
|
|
return message
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True)
|