Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / express-session / node_modules / uid-safe / index.js
1 /*!
2  * uid-safe
3  * Copyright(c) 2014 Jonathan Ong
4  * Copyright(c) 2015 Douglas Christopher Wilson
5  * MIT Licensed
6  */
7
8 'use strict'
9
10 /**
11  * Module dependencies.
12  * @private
13  */
14
15 var crypto = require('crypto')
16 var escape = require('base64-url').escape
17
18 /**
19  * Module exports.
20  * @public
21  */
22
23 module.exports = uid
24 module.exports.sync = uidSync
25
26 /**
27  * Create a unique ID.
28  *
29  * @param {number} length
30  * @param {function} [callback]
31  * @return {Promise}
32  * @public
33  */
34
35 function uid(length, callback) {
36   // validate callback is a function, if provided
37   if (callback !== undefined && typeof callback !== 'function') {
38     throw new TypeError('argument callback must be a function')
39   }
40
41   // require the callback without promises
42   if (!callback && !global.Promise) {
43     throw new TypeError('argument callback is required')
44   }
45
46   if (callback) {
47     // classic callback style
48     return generateUid(length, callback)
49   }
50
51   return new Promise(function executor(resolve, reject) {
52     generateUid(length, function onUid(err, str) {
53       if (err) return reject(err)
54       resolve(str)
55     })
56   })
57 }
58
59 /**
60  * Create a unique ID sync.
61  *
62  * @param {number} length
63  * @return {string}
64  * @public
65  */
66
67 function uidSync(length) {
68   try {
69     return toString(crypto.randomBytes(length))
70   } catch (e) {
71     return toString(crypto.pseudoRandomBytes(length))
72   }
73 }
74
75 /**
76  * Generate a unique ID string.
77  *
78  * @param {number} length
79  * @param {function} callback
80  * @private
81  */
82
83 function generateUid(length, callback) {
84   randomBytes(length, function (err, buf) {
85     if (err) return callback(err)
86     callback(null, toString(buf))
87   })
88 }
89
90 /**
91  * Get some random bytes.
92  *
93  * @param {number} length
94  * @param {function} callback
95  * @return {Buffer}
96  * @private
97  */
98
99 function randomBytes(length, callback) {
100   crypto.randomBytes(length, function (err, buf) {
101     if (!err) return callback(null, buf)
102     crypto.pseudoRandomBytes(length, function (err, buf) {
103       if (err) return callback(err)
104       callback(null, buf)
105     })
106   })
107 }
108
109 /**
110  * Change a Buffer into a string.
111  *
112  * @param {Buffer} buf
113  * @return {string}
114  * @private
115  */
116
117 function toString(buf) {
118   return escape(buf.toString('base64'))
119 }