parent
							
								
									a958c66249
								
							
						
					
					
						commit
						cc65e98940
					
				
							
								
								
									
										26
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								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 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 John Crepezzi
						John Crepezzi