diff --git a/cgi-bin/upload.py b/cgi-bin/upload.py index 887579b..8089af8 100755 --- a/cgi-bin/upload.py +++ b/cgi-bin/upload.py @@ -1,32 +1,34 @@ #!/home/tomas/Software/miniconda/envs/py3/bin/python import cgi import datetime import cgitb; cgitb.enable() form = cgi.FieldStorage() # Get filename here. fileitem = form['audio_data'] latitude = form.getvalue('lat') longitude = form.getvalue('lon') +ext = form.getvalue('extension') or 'ogg' label = 1 data = fileitem.file.read() -if len(data) < 2000000: +#We limit the file size to 1MB, to prevent possible flooding attacks. +if len(data) < 1000000: # Test if the file was uploaded - filename =f'{datetime.datetime.now().isoformat()}_{latitude}_{longitude}_{label}.webm' + filename =f'{datetime.datetime.now().isoformat()}_{latitude}_{longitude}_{label}.{ext}' if fileitem.filename: open('/tmp/' + filename, 'wb').write(data) message = 'The file "' + filename + '" was uploaded successfully' else: message = 'No file was uploaded' else: message = 'Record too long.' print("""\ Content-Type: text/html\n

%s

""" % (message,)) diff --git a/js/cleanapp.js b/js/cleanapp.js index a7d43f6..a8b4d4b 100644 --- a/js/cleanapp.js +++ b/js/cleanapp.js @@ -1,40 +1,47 @@ -var recorder, gumStream; +var recorder, gumStream, extension; var lat=null; var lon=null; var recordButton = document.getElementById("recordButton"); var recordText = document.getElementById("recordText"); recordButton.addEventListener("click", toggleRecording); +if (MediaRecorder.isTypeSupported('audio/webm;codecs=opus')){ + extension="webm"; +}else{ + extension="ogg" +} + function toggleRecording() { if (recorder && recorder.state == "recording") { recorder.stop(); gumStream.getAudioTracks()[0].stop(); recordText.innerHTML = "◉ Record"; recordButton.classList.remove('btn-danger'); recordButton.classList.add('btn-dark'); } else { navigator.mediaDevices.getUserMedia({ audio: true }).then(function(stream) { gumStream = stream; recorder = new MediaRecorder(stream); recorder.ondataavailable = function(e) { var xhr=new XMLHttpRequest(); var fd=new FormData(); fd.append("audio_data", e.data, new Date().toISOString()); fd.append("lat", lat); fd.append("lon", lon); + fd.append("extension", extension); xhr.open("POST","/cgi-bin/upload.py",true); xhr.send(fd); }; recorder.start(); recordText.innerHTML = "◻ Stop"; recordButton.classList.remove('btn-dark'); recordButton.classList.add('btn-danger'); navigator.geolocation.getCurrentPosition(function(position) { lat = position.coords.latitude; lon = position.coords.longitude; }); }); } }