77 lines
1.3 KiB
JavaScript
77 lines
1.3 KiB
JavaScript
/*!
|
|
* urlsafe-base64
|
|
*/
|
|
|
|
/**
|
|
* Module Dependencies
|
|
*/
|
|
|
|
// None yet!
|
|
|
|
/**
|
|
* Library version.
|
|
*/
|
|
|
|
exports.version = '1.0.0';
|
|
|
|
/**
|
|
* .encode
|
|
*
|
|
* return an encoded Buffer as URL Safe Base64
|
|
*
|
|
* Note: This function encodes to the RFC 4648 Spec where '+' is encoded
|
|
* as '-' and '/' is encoded as '_'. The padding character '=' is
|
|
* removed.
|
|
*
|
|
* @param {Buffer} buffer
|
|
* @return {String}
|
|
* @api public
|
|
*/
|
|
|
|
exports.encode = function encode(buffer) {
|
|
|
|
return buffer.toString('base64')
|
|
.replace(/\+/g, '-') // Convert '+' to '-'
|
|
.replace(/\//g, '_') // Convert '/' to '_'
|
|
.replace(/=+$/, ''); // Remove ending '='
|
|
|
|
};
|
|
|
|
/**
|
|
* .decode
|
|
*
|
|
* return an decoded URL Safe Base64 as Buffer
|
|
*
|
|
* @param {String}
|
|
* @return {Buffer}
|
|
* @api public
|
|
*/
|
|
|
|
exports.decode = function decode(base64) {
|
|
|
|
// Add removed at end '='
|
|
base64 += Array(5 - base64.length % 4).join('=');
|
|
|
|
base64 = base64
|
|
.replace(/\-/g, '+') // Convert '-' to '+'
|
|
.replace(/\_/g, '/'); // Convert '_' to '/'
|
|
|
|
return new Buffer(base64, 'base64');
|
|
|
|
};
|
|
|
|
/**
|
|
* .validate
|
|
*
|
|
* Validates a string if it is URL Safe Base64 encoded.
|
|
*
|
|
* @param {String}
|
|
* @return {Boolean}
|
|
* @api public
|
|
*/
|
|
|
|
exports.validate = function validate(base64) {
|
|
|
|
return /^[A-Za-z0-9\-_]+$/.test(base64);
|
|
|
|
}; |