mirror of
https://github.com/S2-/securerandomstring.git
synced 2025-08-02 18:30:04 +02:00
Compare commits
18 Commits
Author | SHA1 | Date | |
---|---|---|---|
94f2eadf63 | |||
394d13d5a7 | |||
![]() |
a6dc243138 | ||
cb6bbee3b1 | |||
0259480474 | |||
9fa7f94d57 | |||
5ecefd381c | |||
50ae45ebd6 | |||
![]() |
1c0fec2544 | ||
![]() |
6ef11ca1c8 | ||
![]() |
e91153d961 | ||
275814d49a | |||
![]() |
86caee2274 | ||
![]() |
31839fea0b | ||
4689347480 | |||
a3cef28167 | |||
![]() |
a1174300a8 | ||
![]() |
00fa92269e |
69
.jscsrc
Normal file
69
.jscsrc
Normal file
@@ -0,0 +1,69 @@
|
||||
{
|
||||
"requireCurlyBraces": [
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"try",
|
||||
"catch"
|
||||
],
|
||||
"requireSpaceAfterKeywords": [
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"switch",
|
||||
"case",
|
||||
"return",
|
||||
"try",
|
||||
"catch"
|
||||
],
|
||||
"requireSpaceBeforeBlockStatements": true,
|
||||
"requireParenthesesAroundIIFE": true,
|
||||
"requireSpacesInConditionalExpression": true,
|
||||
"disallowSpacesInNamedFunctionExpression": {
|
||||
"beforeOpeningRoundBrace": true
|
||||
},
|
||||
"disallowSpacesInFunctionDeclaration": {
|
||||
"beforeOpeningRoundBrace": true
|
||||
},
|
||||
"requireSpaceBetweenArguments": true,
|
||||
"disallowMultipleVarDecl": true,
|
||||
"requireVarDeclFirst": false,
|
||||
"requireBlocksOnNewline": false,
|
||||
"disallowEmptyBlocks": true,
|
||||
"disallowSpacesInsideArrayBrackets": true,
|
||||
"disallowSpacesInsideParentheses": true,
|
||||
"disallowDanglingUnderscores": false,
|
||||
"requireCommaBeforeLineBreak": true,
|
||||
"disallowSpaceAfterPrefixUnaryOperators": true,
|
||||
"disallowSpaceBeforePostfixUnaryOperators": true,
|
||||
"disallowSpaceBeforeBinaryOperators": [
|
||||
","
|
||||
],
|
||||
"requireSpacesInForStatement": true,
|
||||
"requireSpacesInAnonymousFunctionExpression": {
|
||||
"beforeOpeningCurlyBrace": true
|
||||
},
|
||||
"requireSpaceBeforeBinaryOperators": true,
|
||||
"requireSpaceAfterBinaryOperators": true,
|
||||
"disallowKeywords": [
|
||||
"with",
|
||||
"continue"
|
||||
],
|
||||
"validateIndentation": "\t",
|
||||
"disallowMixedSpacesAndTabs": true,
|
||||
"disallowTrailingWhitespace": true,
|
||||
"disallowTrailingComma": true,
|
||||
"disallowKeywordsOnNewLine": [
|
||||
"else"
|
||||
],
|
||||
"requireLineFeedAtFileEnd": true,
|
||||
"requireCapitalizedConstructors": true,
|
||||
"requireDotNotation": false,
|
||||
"disallowNewlineBeforeBlockStatements": true,
|
||||
"disallowMultipleLineStrings": true,
|
||||
"requireSpaceBeforeObjectValues": true
|
||||
}
|
@@ -4,6 +4,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [1.1.0] 2017-12-26
|
||||
|
||||
### New Features
|
||||
|
||||
- alphanumeric option to generate alphanumeric characters only.
|
||||
|
||||
## [1.0.0] 2015-08-27
|
||||
|
||||
### New Features
|
||||
@@ -15,3 +21,5 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
- Async API now follows the Node.js convention of returning an error as the first argument
|
||||
to the callback. The error might be populated if the system runs out of entropy. (#2, @markstos)
|
||||
|
||||
- `urlsafe` option was removed. All strings are URL-safe now. (#4, @S2-, @markstos)
|
||||
|
22
README.md
22
README.md
@@ -8,7 +8,9 @@ Node.js module that generates a cryptographically secure random string with a gi
|
||||
var srs = require('secure-random-string');
|
||||
```
|
||||
|
||||
### Default behavior: Generate a random string 32 characters long.
|
||||
### Default behavior: Generate a random Base64 encoded string 32 characters long.
|
||||
|
||||
This may include alphanumeric characters as well as the following characters: +, /, =.
|
||||
|
||||
```javascript
|
||||
// Sync
|
||||
@@ -34,7 +36,19 @@ srs({length: 256}, function(err, sr) {
|
||||
console.log(sr);
|
||||
});
|
||||
```
|
||||
### Options: alphanumeric
|
||||
|
||||
Optionally, you can specify a 'alphanumeric' option to get a alphanumerical chars only.
|
||||
|
||||
```javascript
|
||||
// sync
|
||||
var result = srs({alphanumeric: true});
|
||||
|
||||
// async
|
||||
srs({alphanumeric: true}, function(err, sr) {
|
||||
console.log(sr);
|
||||
});
|
||||
```
|
||||
## Error handling
|
||||
|
||||
|
||||
@@ -47,9 +61,9 @@ the async API returns the error to the callback.
|
||||
|
||||
## Contributors
|
||||
|
||||
[Mark Stosberg](https://github.com/markstos)
|
||||
[Mark Stosberg](https://github.com/markstos)
|
||||
[Sandro Gomez](https://github.com/mrsangrin)
|
||||
|
||||
## License
|
||||
|
||||
[MIT](https://github.com/aheckmann/node-ses/blob/master/LICENSE)
|
||||
|
||||
[MIT](https://opensource.org/licenses/MIT)
|
||||
|
@@ -9,14 +9,14 @@ function srs(options, cb) {
|
||||
}
|
||||
|
||||
var length = options['length'] || 32;
|
||||
|
||||
var alphanumeric = options['alphanumeric'] || false;
|
||||
// async path
|
||||
if (cb) {
|
||||
crypto.randomBytes(length, function(err, buf) {
|
||||
if (err) {
|
||||
return cb(err);
|
||||
}
|
||||
return cb(null,_finish(buf));
|
||||
return cb(null, _finish(buf));
|
||||
});
|
||||
}
|
||||
// sync path
|
||||
@@ -24,12 +24,15 @@ function srs(options, cb) {
|
||||
return _finish(crypto.randomBytes(length));
|
||||
}
|
||||
|
||||
function _finish (buf) {
|
||||
function _finish(buf) {
|
||||
var string = buf.toString('base64');
|
||||
string = string.replace(/\//g,'_').replace(/\+/g,'-');
|
||||
if (alphanumeric === true) {
|
||||
string = string.replace(/[\W_]+/g, '');
|
||||
} else {
|
||||
string = string.replace(/\//g, '_').replace(/\+/g, '-');
|
||||
}
|
||||
return string.substr(0, length);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "secure-random-string",
|
||||
"version": "1.0.0",
|
||||
"version": "1.1.2",
|
||||
"description": "Generates a secure random string with a given length",
|
||||
"main": "lib/secure-random-string.js",
|
||||
"scripts": {
|
||||
@@ -19,7 +19,9 @@
|
||||
"token"
|
||||
],
|
||||
"author": "Simon Santoro",
|
||||
"contributors": ["Mark Stosberg <mark@rideamigos.com>"],
|
||||
"contributors": [
|
||||
"Mark Stosberg <mark@rideamigos.com>"
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/S2-/securerandomstring/issues"
|
||||
|
17
tests.js
17
tests.js
@@ -50,11 +50,24 @@ srs({length: 256}, function(err, sr) {
|
||||
);
|
||||
});
|
||||
|
||||
srs({alphanumeric: true}, function(err, sr) {;
|
||||
test('Must contain alphanumeric only',
|
||||
sr.match(/^[a-zA-Z0-9_]*$/g)[0] === sr,
|
||||
true
|
||||
);
|
||||
});
|
||||
|
||||
srs({alphanumeric: true, length: 40}, function(err, sr) {;
|
||||
test('Must contain alphanumeric only and be 40 chars long',
|
||||
sr.match(/^[a-zA-Z0-9_]*$/g)[0] === sr && sr.length === 40,
|
||||
true
|
||||
);
|
||||
});
|
||||
|
||||
// sync tests
|
||||
test('generate a random string 32 chars long (sync)', srs().length, 32);
|
||||
test('generate a random string 1 chars long (sync)', srs({length:1}).length, 1);
|
||||
test('generate a random string 256 chars long (sync)', srs({length:256}).length, 256);
|
||||
test('generate a random string 1 chars long (sync)', srs({length: 1}).length, 1);
|
||||
test('generate a random string 256 chars long (sync)', srs({length: 256}).length, 256);
|
||||
|
||||
|
||||
//in 2000 chars there should be at least one substitution
|
||||
|
Reference in New Issue
Block a user