parent
a958c66249
commit
cc65e98940
6 changed files with 87 additions and 13 deletions
28
README.md
28
README.md
|
@ -38,6 +38,32 @@ which will output a URL to share containing the contents of `cat something`'s ST
|
||||||
* `documents` - static documents to serve (ex: http://hastebin.com/about.com) in addition to static assets. These will never expire.
|
* `documents` - static documents to serve (ex: http://hastebin.com/about.com) in addition to static assets. These will never expire.
|
||||||
* `storage` - storage options (see below)
|
* `storage` - storage options (see below)
|
||||||
* `logging` - logging preferences
|
* `logging` - logging preferences
|
||||||
|
* `keyGenerator` - key generator options (see below)
|
||||||
|
|
||||||
|
## Key Generation
|
||||||
|
|
||||||
|
### Phonetic
|
||||||
|
|
||||||
|
Attempts to generate phonetic keys, similar to `pwgen`
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
"type": "phonetic"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Random
|
||||||
|
|
||||||
|
Generates a random key
|
||||||
|
|
||||||
|
``` json
|
||||||
|
{
|
||||||
|
"type": "random",
|
||||||
|
"keyspace": "abcdef"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The _optional_ keySpace argument is a string of acceptable characters for the key.
|
||||||
|
|
||||||
## Storage
|
## Storage
|
||||||
|
|
||||||
|
@ -94,4 +120,4 @@ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR I
|
||||||
### Other components:
|
### Other components:
|
||||||
|
|
||||||
* jQuery: MIT/GPL license
|
* jQuery: MIT/GPL license
|
||||||
* highlight.js: Copyright © 2006, Ivan Sagalaev
|
* highlight.js: Copyright © 2006, Ivan Sagalaev
|
||||||
|
|
|
@ -19,6 +19,10 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
"keyGenerator": {
|
||||||
|
"type": "phonetic"
|
||||||
|
},
|
||||||
|
|
||||||
"storage": {
|
"storage": {
|
||||||
"type": "redis",
|
"type": "redis",
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
|
|
|
@ -9,6 +9,7 @@ var DocumentHandler = function(options) {
|
||||||
this.keyLength = options.keyLength || DocumentHandler.defaultKeyLength;
|
this.keyLength = options.keyLength || DocumentHandler.defaultKeyLength;
|
||||||
this.maxLength = options.maxLength; // none by default
|
this.maxLength = options.maxLength; // none by default
|
||||||
this.store = options.store;
|
this.store = options.store;
|
||||||
|
this.keyGenerator = options.keyGenerator;
|
||||||
};
|
};
|
||||||
|
|
||||||
DocumentHandler.defaultKeyLength = 10;
|
DocumentHandler.defaultKeyLength = 10;
|
||||||
|
@ -87,7 +88,7 @@ DocumentHandler.prototype.handlePost = function(request, response) {
|
||||||
|
|
||||||
// Get a random key that hasn't been already used
|
// Get a random key that hasn't been already used
|
||||||
DocumentHandler.prototype.chooseKey = function(callback) {
|
DocumentHandler.prototype.chooseKey = function(callback) {
|
||||||
var key = this.randomKey();
|
var key = this.keyGenerator.createKey(this.keyLength);
|
||||||
var _this = this;
|
var _this = this;
|
||||||
this.store.get(key, function(ret) {
|
this.store.get(key, function(ret) {
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -98,14 +99,4 @@ DocumentHandler.prototype.chooseKey = function(callback) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// Generate a random key
|
|
||||||
DocumentHandler.prototype.randomKey = function() {
|
|
||||||
var text = '';
|
|
||||||
var keyspace = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
||||||
for (var i = 0; i < this.keyLength; i++) {
|
|
||||||
text += keyspace.charAt(Math.floor(Math.random() * keyspace.length));
|
|
||||||
}
|
|
||||||
return text;
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = DocumentHandler;
|
module.exports = DocumentHandler;
|
||||||
|
|
32
lib/key_generators/phonetic.js
Normal file
32
lib/key_generators/phonetic.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// Draws inspiration from pwgen and http://tools.arantius.com/password
|
||||||
|
var PhoneticKeyGenerator = function(options) {
|
||||||
|
// No options
|
||||||
|
};
|
||||||
|
|
||||||
|
// Generate a phonetic key
|
||||||
|
PhoneticKeyGenerator.prototype.createKey = function(keyLength) {
|
||||||
|
var text = '';
|
||||||
|
for (var i = 0; i < keyLength; i++) {
|
||||||
|
text += (i % 2 == 0) ? this.randConsonant() : this.randVowel();
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
};
|
||||||
|
|
||||||
|
PhoneticKeyGenerator.consonants = 'bcdfghjklmnpqrstvwxy';
|
||||||
|
PhoneticKeyGenerator.vowels = 'aeiou';
|
||||||
|
|
||||||
|
// Get an random vowel
|
||||||
|
PhoneticKeyGenerator.prototype.randVowel = function() {
|
||||||
|
return PhoneticKeyGenerator.vowels[
|
||||||
|
Math.floor(Math.random() * PhoneticKeyGenerator.vowels.length)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get an random consonant
|
||||||
|
PhoneticKeyGenerator.prototype.randConsonant = function() {
|
||||||
|
return PhoneticKeyGenerator.consonants[
|
||||||
|
Math.floor(Math.random() * PhoneticKeyGenerator.consonants.length)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = PhoneticKeyGenerator;
|
14
lib/key_generators/random.js
Normal file
14
lib/key_generators/random.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
var RandomKeyGenerator = function(options) {
|
||||||
|
this.keyspace = options.keyspace || 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Generate a random key
|
||||||
|
RandomKeyGenerator.prototype.createKey = function(keyLength) {
|
||||||
|
var text = '';
|
||||||
|
for (var i = 0; i < keyLength; i++) {
|
||||||
|
text += this.keyspace.charAt(Math.floor(Math.random() * this.keyspace.length));
|
||||||
|
}
|
||||||
|
return text;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = RandomKeyGenerator;
|
|
@ -72,11 +72,18 @@ for (var name in config.documents) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pick up a key generator
|
||||||
|
var pwOptions = config.keyGenerator || {};
|
||||||
|
pwOptions.type = pwOptions.type || 'random';
|
||||||
|
var gen = require('./lib/key_generators/' + pwOptions.type);
|
||||||
|
var keyGenerator = new gen(pwOptions);
|
||||||
|
|
||||||
// Configure the document handler
|
// Configure the document handler
|
||||||
var documentHandler = new DocumentHandler({
|
var documentHandler = new DocumentHandler({
|
||||||
store: preferredStore,
|
store: preferredStore,
|
||||||
maxLength: config.maxLength,
|
maxLength: config.maxLength,
|
||||||
keyLength: config.keyLength
|
keyLength: config.keyLength,
|
||||||
|
keyGenerator: keyGenerator
|
||||||
});
|
});
|
||||||
|
|
||||||
// Set the server up with a static cache
|
// Set the server up with a static cache
|
||||||
|
|
Loading…
Reference in a new issue