Permalink
Browse files

Added support for phonetic key naming

Closes #7
  • Loading branch information...
1 parent a958c66 commit cc65e98940ff9aaebb3c9414148bdca00194d967 @seejohnrun seejohnrun committed Jan 7, 2012
Showing with 87 additions and 13 deletions.
  1. +27 −1 README.md
  2. +4 −0 config.js
  3. +2 −11 lib/document_handler.js
  4. +32 −0 lib/key_generators/phonetic.js
  5. +14 −0 lib/key_generators/random.js
  6. +8 −1 server.js
View
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.
* `storage` - storage options (see below)
* `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
@@ -94,4 +120,4 @@ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR I
### Other components:
* jQuery: MIT/GPL license
-* highlight.js: Copyright © 2006, Ivan Sagalaev
+* highlight.js: Copyright © 2006, Ivan Sagalaev
View
4 config.js
@@ -19,6 +19,10 @@
}
],
+ "keyGenerator": {
+ "type": "phonetic"
+ },
+
"storage": {
"type": "redis",
"host": "localhost",
View
13 lib/document_handler.js
@@ -9,6 +9,7 @@ var DocumentHandler = function(options) {
this.keyLength = options.keyLength || DocumentHandler.defaultKeyLength;
this.maxLength = options.maxLength; // none by default
this.store = options.store;
+ this.keyGenerator = options.keyGenerator;
};
DocumentHandler.defaultKeyLength = 10;
@@ -87,7 +88,7 @@ DocumentHandler.prototype.handlePost = function(request, response) {
// Get a random key that hasn't been already used
DocumentHandler.prototype.chooseKey = function(callback) {
- var key = this.randomKey();
+ var key = this.keyGenerator.createKey(this.keyLength);
var _this = this;
this.store.get(key, function(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;
View
32 lib/key_generators/phonetic.js
@@ -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;
View
14 lib/key_generators/random.js
@@ -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;
View
9 server.js
@@ -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
var documentHandler = new DocumentHandler({
store: preferredStore,
maxLength: config.maxLength,
- keyLength: config.keyLength
+ keyLength: config.keyLength,
+ keyGenerator: keyGenerator
});
// Set the server up with a static cache

0 comments on commit cc65e98

Please sign in to comment.