Specify an explicit upload bucket ID with ?sid= param. (Closes #42)

This commit is contained in:
Christoph Wiechert
2018-12-14 16:02:03 +01:00
parent 3688ce6c2b
commit fa52624374
3 changed files with 31 additions and 20 deletions

View File

@@ -25,6 +25,7 @@ It's an alternative to paid services like Dropbox, WeTransfer.
* Password protected download list ([AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard))
* `/admin` Page lists bucket information, [Screenshot](https://raw.githubusercontent.com/psi-4ward/psitransfer/master/docs/PsiTransfer-Admin.png) (_disabled until you set `adminPass` config value_)
* Lightweight [Vue](https://vuejs.org) based frontend apps. Gzipped (on by default) less than 65k
* Explicit named bucket IDs with query param `sid=<myBucketID>`
**See the blog posts about PsiTransfer: https://psi.cx/tags/PsiTransfer/ and checkout the
[Documentation](https://github.com/psi-4ward/psitransfer/tree/master/docs)**

View File

@@ -7,46 +7,46 @@
label(for='retention') Retention
|
select#retention.form-control(:value='retention', :disabled='disabled',
@input="$store.commit('upload/RETENTION', $event.target.value)")
@input="$store.commit('upload/RETENTION', $event.target.value)")
option(v-for='(label, seconds, index) in config.retentions',
:value="seconds", :selected="seconds == retention") {{ label }}
:value="seconds", :selected="seconds === retention") {{ label }}
div
label(for='password') Password
.input-group
input#password.form-control(type='text', :value='password',
@input="$store.commit('upload/PASSWORD', $event.target.value)",
:disabled='disabled', placeholder='optional')
@input="$store.commit('upload/PASSWORD', $event.target.value)",
:disabled='disabled', placeholder='optional')
span.input-group-addon(style='cursor: pointer', title='generate password', @click='generatePassword()')
icon(name="key")
</template>
<script type="text/babel">
"use strict";
import {mapState} from 'vuex';
import { mapState } from 'vuex';
import 'vue-awesome/icons/key';
const passGen = {
_pattern : /[A-Z0-9_\-\+\!]/,
_pattern: /[A-Z0-9_\-+!]/,
_getRandomByte: function() {
const result = new Uint8Array(1);
var fixedcrypto = window.msCrypto;
if (!fixedcrypto) {
var fixedcrypto = window.crypto;
}
let fixedcrypto = window.msCrypto;
if (!fixedcrypto) {
fixedcrypto = window.crypto;
}
fixedcrypto.getRandomValues(result);
return result[0];
},
generate: function(length) {
var fixedcrypto2 = window.msCrypto;
if (!fixedcrypto2) {
var fixedcrypto2 = window.crypto;
}
if(!fixedcrypto2 || !fixedcrypto2.getRandomValues) return '';
return Array.apply(null, {'length': length}).map(function() {
let fixedcrypto2 = window.msCrypto;
if (!fixedcrypto2) {
fixedcrypto2 = window.crypto;
}
if (!fixedcrypto2 || !fixedcrypto2.getRandomValues) return '';
return Array.apply(null, { 'length': length }).map(function() {
let result;
while(true) {
while (true) {
result = String.fromCharCode(this._getRandomByte());
if(this._pattern.test(result)) return result;
if (this._pattern.test(result)) return result;
}
}, this).join('');
}
@@ -64,7 +64,7 @@
methods: {
generatePassword() {
if(this.disabled) return;
if (this.disabled) return;
this.$store.commit('upload/PASSWORD', passGen.generate(10));
}
}

View File

@@ -16,6 +16,16 @@ function humanFileSize(fileSizeInBytes) {
let onOnlineHandler = null;
let onOnlineHandlerAttached = false;
function getSid() {
// support setting an explicit SID by location search param
const match = document.location.search.match(/sid=([^&]+)/);
if(match) {
return match[1];
} else {
return md5(uuid()).toString().substr(0, 12);
}
}
export default {
namespaced: true,
@@ -23,7 +33,7 @@ export default {
retention: null,
password: '',
files: [],
sid: md5(uuid()).toString().substr(0, 12),
sid: getSid(),
bytesUploaded: 0,
},