123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- var Uploader = {
- roomId: null,
-
- createRoom: function() {
- var self = this;
- $.post('/room', {}, function(response) {
- self.roomId = $.parseJSON(response).id
- })
- },
- getRoom: function(callback) {
- $.getJSON('/room/'+this.roomId, callback)
- },
- getFile: function(fileName, callback) {
- var xhr = new XMLHttpRequest();
- xhr.open('GET', '/room/'+this.roomId+'/'+fileName, true);
- xhr.responseType = 'arraybuffer';
- xhr.onload = callback;
- xhr.send();
- },
-
- deleteRoom: function() {
- $.ajax({
- type: 'DELETE',
- url: '/room/'+this.roomId
- })
- },
- uploadFile: function(name, data){
- var formData = new FormData();
- formData.append("file", data, name);
- $.ajax({
- url: '/room/'+this.roomId,
- data: formData,
- cache: false,
- processData: false,
- contentType: false,
- xhr: function () {
- var xhr = new XMLHttpRequest()
- //xhr.upload.addEventListener('progress', progress, false)
- return xhr
- },
- type: 'POST'
- });
- },
-
- deleteFile: function() {
- console.log('NOPE');
- },
- }
- var CryptoUploader = {
-
- createRoom: function() {
- Uploader.createRoom();
- CryptoUtils.initialize()
- .then(function(){
- window.location = window.location.href+"#"+Uploader.roomId+","+CryptoUtils.urlSafeKey;
- window.location.reload();
- })
- },
-
- uploadFile: function() {
- var fileReader = new FileReader();
- var data;
- var file = document.getElementById("file-selector").files[0];
- var self = this;
- fileReader.onload = function(e) {
- this.data = fileReader.result;
- CryptoUtils.encrypt(this.data)
- .then(function(encrypted){
- Uploader.uploadFile(file.name, encrypted);
- self.showRoomContent();
- }).catch(function(err){
- console.error(err);
- });
- };
- fileReader.readAsArrayBuffer(file);
- },
- downloadFile: function(fileName) {
- Uploader.getFile(fileName, function(e){
- if(this.status == 200) {
- CryptoUtils.decrypt(this.response).
- then(function(decrypted){
- var a = document.createElement("a");
- document.body.appendChild(a);
- a.style = "display: none";
- blob = new Blob([decrypted], {type: "application/octet-binary"}),
- url = window.URL.createObjectURL(blob);
- a.href = url;
- a.download = fileName;
- a.click();
- window.URL.revokeObjectURL(url);
- }).catch(function(err){
- console.error(err);
- })
- }
- })
- },
- showRoomContent: function() {
- $("#file-list > ul").empty();
- Uploader.getRoom(function(data){
- for(let f of data.entries()) {
- $("<li><a>"+f[1]+"</a></li>")
- .appendTo("#file-list > ul")
- .on('click', function(e){CryptoUploader.downloadFile(e.target.text)});
- }
- })
- }
- }
- $(function(){
- if(window.location.hash) {
- var params = window.location.hash.substr(1).split(',');
- var roomId = params.shift();
- var key = params.shift();
- var file = params.shift();
- $("#create-room").hide();
- $("#room").show();
- Uploader.roomId = roomId;
- CryptoUtils.initialize(key).then(function(){
- $("#woot").on('click', function(){
- CryptoUploader.uploadFile();
- });
- CryptoUploader.showRoomContent();
- if(file !== undefined) {
- CryptoUploader.downloadFile(file);
- }
- }).catch(function(err){
- console.error(err);
- });
- }
- else {
- $("#room").hide();
- $("#create-room").show();
- $("#create-room > input").on('click', function(e){
- CryptoUploader.createRoom();
- });
- }
- })
|