GoogleOauth2.0 First implementation
First try for GoogleOauth2.0
This commit is contained in:
97
express-server/node_modules/cookies/HISTORY.md
generated
vendored
Normal file
97
express-server/node_modules/cookies/HISTORY.md
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
||||
0.7.1 / 2017-08-26
|
||||
==================
|
||||
|
||||
* deps: depd@~1.1.1
|
||||
- Remove unnecessary `Buffer` loading
|
||||
* deps: keygrip@~1.0.2
|
||||
- perf: improve comparison speed
|
||||
|
||||
0.7.0 / 2017-02-19
|
||||
==================
|
||||
|
||||
* Add `sameSite` option for SameSite cookie support
|
||||
* pref: enable strict mode
|
||||
|
||||
0.6.2 / 2016-11-12
|
||||
==================
|
||||
|
||||
* Fix `keys` deprecation message
|
||||
* deps: keygrip@~1.0.1
|
||||
|
||||
0.6.1 / 2016-02-29
|
||||
==================
|
||||
|
||||
* Fix regression in 0.6.0 for array of strings in `keys` option
|
||||
|
||||
0.6.0 / 2016-02-29
|
||||
==================
|
||||
|
||||
* Add `secure` constructor option for secure connection checking
|
||||
* Change constructor to signature `new Cookies(req, res, [options])`
|
||||
- Replace `new Cookies(req, res, key)` with `new Cookies(req, res, {'keys': keys})`
|
||||
* Change prototype construction for proper "constructor" property
|
||||
* Deprecate `secureProxy` option in `.set`; use `secure` option instead
|
||||
- If `secure: true` throws even over SSL, use the `secure` constructor option
|
||||
|
||||
0.5.1 / 2014-07-27
|
||||
==================
|
||||
|
||||
* Throw on invalid values provided to `Cookie` constructor
|
||||
- This is not strict validation, but basic RFC 7230 validation
|
||||
|
||||
0.5.0 / 2014-07-27
|
||||
==================
|
||||
|
||||
* Integrate with `req.protocol` for secure cookies
|
||||
* Support `maxAge` as well as `maxage`
|
||||
|
||||
0.4.1 / 2014-05-07
|
||||
==================
|
||||
|
||||
* Update package for repo move
|
||||
|
||||
0.4.0 / 2014-01-31
|
||||
==================
|
||||
|
||||
* Allow passing an array of strings as keys
|
||||
|
||||
0.3.8-0.2.0
|
||||
===========
|
||||
|
||||
* TODO: write down history for these releases
|
||||
|
||||
0.1.6 / 2011-03-01
|
||||
==================
|
||||
|
||||
* SSL cookies secure by default
|
||||
* Use httpOnly by default unless explicitly false
|
||||
|
||||
0.1.5 / 2011-02-26
|
||||
==================
|
||||
|
||||
* Delete sig cookie if signed cookie is deleted
|
||||
|
||||
0.1.4 / 2011-02-26
|
||||
==================
|
||||
|
||||
* Always set path
|
||||
|
||||
0.1.3 / 2011-02-26
|
||||
==================
|
||||
|
||||
* Add sensible defaults for path
|
||||
|
||||
0.1.2 / 2011-02-26
|
||||
==================
|
||||
|
||||
* Inherit cookie properties to signature cookie
|
||||
|
||||
0.1.1 / 2011-02-25
|
||||
==================
|
||||
|
||||
* Readme updates
|
||||
|
||||
0.1.0 / 2011-02-25
|
||||
==================
|
||||
|
||||
* Initial release
|
23
express-server/node_modules/cookies/LICENSE
generated
vendored
Normal file
23
express-server/node_modules/cookies/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 Jed Schmidt, http://jed.is/
|
||||
Copyright (c) 2015-2016 Douglas Christopher Wilson <doug@somethingdoug.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
158
express-server/node_modules/cookies/README.md
generated
vendored
Normal file
158
express-server/node_modules/cookies/README.md
generated
vendored
Normal file
@ -0,0 +1,158 @@
|
||||
Cookies
|
||||
=======
|
||||
|
||||
[![NPM Version][npm-image]][npm-url]
|
||||
[![NPM Downloads][downloads-image]][downloads-url]
|
||||
[![Node.js Version][node-version-image]][node-version-url]
|
||||
[![Build Status][travis-image]][travis-url]
|
||||
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||
|
||||
Cookies is a [node.js](http://nodejs.org/) module for getting and setting HTTP(S) cookies. Cookies can be signed to prevent tampering, using [Keygrip](https://www.npmjs.com/package/keygrip). It can be used with the built-in node.js HTTP library, or as Connect/Express middleware.
|
||||
|
||||
## Install
|
||||
|
||||
This is a [Node.js](https://nodejs.org/en/) module available through the
|
||||
[npm registry](https://www.npmjs.com/). Installation is done using the
|
||||
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
||||
|
||||
```
|
||||
$ npm install cookies
|
||||
```
|
||||
|
||||
## Features
|
||||
|
||||
* **Lazy**: Since cookie verification against multiple keys could be expensive, cookies are only verified lazily when accessed, not eagerly on each request.
|
||||
|
||||
* **Secure**: All cookies are `httponly` by default, and cookies sent over SSL are `secure` by default. An error will be thrown if you try to send secure cookies over an insecure socket.
|
||||
|
||||
* **Unobtrusive**: Signed cookies are stored the same way as unsigned cookies, instead of in an obfuscated signing format. An additional signature cookie is stored for each signed cookie, using a standard naming convention (_cookie-name_`.sig`). This allows other libraries to access the original cookies without having to know the signing mechanism.
|
||||
|
||||
* **Agnostic**: This library is optimized for use with [Keygrip](https://www.npmjs.com/package/keygrip), but does not require it; you can implement your own signing scheme instead if you like and use this library only to read/write cookies. Factoring the signing into a separate library encourages code reuse and allows you to use the same signing library for other areas where signing is needed, such as in URLs.
|
||||
|
||||
## API
|
||||
|
||||
### cookies = new Cookies( request, response, [ options ] )
|
||||
|
||||
This creates a cookie jar corresponding to the current _request_ and _response_, additionally passing an object _options_.
|
||||
|
||||
A [Keygrip](https://www.npmjs.com/package/keygrip) object or an array of keys can optionally be passed as _options.keys_ to enable cryptographic signing based on SHA1 HMAC, using rotated credentials.
|
||||
|
||||
A Boolean can optionally be passed as _options.secure_ to explicitally specify if the connection is secure, rather than this module examining _request_.
|
||||
|
||||
Note that since this only saves parameters without any other processing, it is very lightweight. Cookies are only parsed on demand when they are accessed.
|
||||
|
||||
### express.createServer( Cookies.express( keys ) )
|
||||
|
||||
This adds cookie support as a Connect middleware layer for use in Express apps, allowing inbound cookies to be read using `req.cookies.get` and outbound cookies to be set using `res.cookies.set`.
|
||||
|
||||
### cookies.get( name, [ options ] )
|
||||
|
||||
This extracts the cookie with the given name from the `Cookie` header in the request. If such a cookie exists, its value is returned. Otherwise, nothing is returned.
|
||||
|
||||
`{ signed: true }` can optionally be passed as the second parameter _options_. In this case, a signature cookie (a cookie of same name ending with the `.sig` suffix appended) is fetched. If no such cookie exists, nothing is returned.
|
||||
|
||||
If the signature cookie _does_ exist, the provided [Keygrip](https://www.npmjs.com/package/keygrip) object is used to check whether the hash of _cookie-name_=_cookie-value_ matches that of any registered key:
|
||||
|
||||
* If the signature cookie hash matches the first key, the original cookie value is returned.
|
||||
* If the signature cookie hash matches any other key, the original cookie value is returned AND an outbound header is set to update the signature cookie's value to the hash of the first key. This enables automatic freshening of signature cookies that have become stale due to key rotation.
|
||||
* If the signature cookie hash does not match any key, nothing is returned, and an outbound header with an expired date is used to delete the cookie.
|
||||
|
||||
### cookies.set( name, [ value ], [ options ] )
|
||||
|
||||
This sets the given cookie in the response and returns the current context to allow chaining.
|
||||
|
||||
If the _value_ is omitted, an outbound header with an expired date is used to delete the cookie.
|
||||
|
||||
If the _options_ object is provided, it will be used to generate the outbound cookie header as follows:
|
||||
|
||||
* `maxAge`: a number representing the milliseconds from `Date.now()` for expiry
|
||||
* `expires`: a `Date` object indicating the cookie's expiration date (expires at the end of session by default).
|
||||
* `path`: a string indicating the path of the cookie (`/` by default).
|
||||
* `domain`: a string indicating the domain of the cookie (no default).
|
||||
* `secure`: a boolean indicating whether the cookie is only to be sent over HTTPS (`false` by default for HTTP, `true` by default for HTTPS). [Read more about this option below](#secure-cookies).
|
||||
* `httpOnly`: a boolean indicating whether the cookie is only to be sent over HTTP(S), and not made available to client JavaScript (`true` by default).
|
||||
* `sameSite`: a boolean or string indicating whether the cookie is a "same site" cookie (`false` by default). This can be set to `'strict'`, `'lax'`, or `true` (which maps to `'strict'`).
|
||||
* `signed`: a boolean indicating whether the cookie is to be signed (`false` by default). If this is true, another cookie of the same name with the `.sig` suffix appended will also be sent, with a 27-byte url-safe base64 SHA1 value representing the hash of _cookie-name_=_cookie-value_ against the first [Keygrip](https://www.npmjs.com/package/keygrip) key. This signature key is used to detect tampering the next time a cookie is received.
|
||||
* `overwrite`: a boolean indicating whether to overwrite previously set cookies of the same name (`false` by default). If this is true, all cookies set during the same request with the same name (regardless of path or domain) are filtered out of the Set-Cookie header when setting this cookie.
|
||||
|
||||
### Secure cookies
|
||||
|
||||
To send a secure cookie, you set a cookie with the `secure: true` option.
|
||||
|
||||
HTTPS is necessary for secure cookies. When `cookies.set` is called with `secure: true` and a secure connection is not detected, the cookie will not be set and an error will be thrown.
|
||||
|
||||
This module will test each request to see if it's secure by checking:
|
||||
|
||||
* if the `protocol` property of the request is set to `https`, or
|
||||
* if the `connection.encrypted` property of the request is set to `true`.
|
||||
|
||||
If your server is running behind a proxy and you are using `secure: true`, you need to configure your server to read the request headers added by your proxy to determine whether the request is using a secure connection.
|
||||
|
||||
For more information about working behind proxies, consult the framework you are using:
|
||||
|
||||
* For Koa - [`app.proxy = true`](http://koajs.com/#settings)
|
||||
* For Express - [trust proxy setting](http://expressjs.com/en/4x/api.html#trust.proxy.options.table)
|
||||
|
||||
If your Koa or Express server is properly configured, the `protocol` property of the request will be set to match the protocol reported by the proxy in the `X-Forwarded-Proto` header.
|
||||
|
||||
## Example
|
||||
|
||||
```javascript
|
||||
var http = require( "http" )
|
||||
var Cookies = require( "cookies" )
|
||||
|
||||
server = http.createServer( function( req, res ) {
|
||||
var cookies = new Cookies( req, res, { "keys": keys } )
|
||||
, unsigned, signed, tampered
|
||||
|
||||
if ( req.url == "/set" ) {
|
||||
cookies
|
||||
// set a regular cookie
|
||||
.set( "unsigned", "foo", { httpOnly: false } )
|
||||
|
||||
// set a signed cookie
|
||||
.set( "signed", "bar", { signed: true } )
|
||||
|
||||
// mimic a signed cookie, but with a bogus signature
|
||||
.set( "tampered", "baz" )
|
||||
.set( "tampered.sig", "bogus" )
|
||||
|
||||
res.writeHead( 302, { "Location": "/" } )
|
||||
return res.end( "Now let's check." )
|
||||
}
|
||||
|
||||
unsigned = cookies.get( "unsigned" )
|
||||
signed = cookies.get( "signed", { signed: true } )
|
||||
tampered = cookies.get( "tampered", { signed: true } )
|
||||
|
||||
assert.equal( unsigned, "foo" )
|
||||
assert.equal( signed, "bar" )
|
||||
assert.notEqual( tampered, "baz" )
|
||||
assert.equal( tampered, undefined )
|
||||
|
||||
res.writeHead( 200, { "Content-Type": "text/plain" } )
|
||||
res.end(
|
||||
"unsigned expected: foo\n\n" +
|
||||
"unsigned actual: " + unsigned + "\n\n" +
|
||||
"signed expected: bar\n\n" +
|
||||
"signed actual: " + signed + "\n\n" +
|
||||
"tampered expected: undefined\n\n"+
|
||||
"tampered: " + tampered + "\n\n"
|
||||
)
|
||||
})
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
[MIT](LICENSE)
|
||||
|
||||
[npm-image]: https://img.shields.io/npm/v/cookies.svg
|
||||
[npm-url]: https://npmjs.org/package/cookies
|
||||
[coveralls-image]: https://img.shields.io/coveralls/pillarjs/cookies/master.svg
|
||||
[coveralls-url]: https://coveralls.io/r/pillarjs/cookies?branch=master
|
||||
[downloads-image]: https://img.shields.io/npm/dm/cookies.svg
|
||||
[downloads-url]: https://npmjs.org/package/cookies
|
||||
[node-version-image]: https://img.shields.io/node/v/cookies.svg
|
||||
[node-version-url]: https://nodejs.org/en/download/
|
||||
[travis-image]: https://img.shields.io/travis/pillarjs/cookies/master.svg
|
||||
[travis-url]: https://travis-ci.org/pillarjs/cookies
|
216
express-server/node_modules/cookies/index.js
generated
vendored
Normal file
216
express-server/node_modules/cookies/index.js
generated
vendored
Normal file
@ -0,0 +1,216 @@
|
||||
/*!
|
||||
* cookies
|
||||
* Copyright(c) 2014 Jed Schmidt, http://jed.is/
|
||||
* Copyright(c) 2015-2016 Douglas Christopher Wilson
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
'use strict'
|
||||
|
||||
var deprecate = require('depd')('cookies')
|
||||
var Keygrip = require('keygrip')
|
||||
var http = require('http')
|
||||
var cache = {}
|
||||
|
||||
/**
|
||||
* RegExp to match field-content in RFC 7230 sec 3.2
|
||||
*
|
||||
* field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
|
||||
* field-vchar = VCHAR / obs-text
|
||||
* obs-text = %x80-FF
|
||||
*/
|
||||
|
||||
var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
|
||||
|
||||
/**
|
||||
* RegExp to match Same-Site cookie attribute value.
|
||||
*/
|
||||
|
||||
var sameSiteRegExp = /^(?:lax|strict)$/i
|
||||
|
||||
function Cookies(request, response, options) {
|
||||
if (!(this instanceof Cookies)) return new Cookies(request, response, options)
|
||||
|
||||
this.secure = undefined
|
||||
this.request = request
|
||||
this.response = response
|
||||
|
||||
if (options) {
|
||||
if (Array.isArray(options)) {
|
||||
// array of key strings
|
||||
deprecate('"keys" argument; provide using options {"keys": [...]}')
|
||||
this.keys = new Keygrip(options)
|
||||
} else if (options.constructor && options.constructor.name === 'Keygrip') {
|
||||
// any keygrip constructor to allow different versions
|
||||
deprecate('"keys" argument; provide using options {"keys": keygrip}')
|
||||
this.keys = options
|
||||
} else {
|
||||
this.keys = Array.isArray(options.keys) ? new Keygrip(options.keys) : options.keys
|
||||
this.secure = options.secure
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Cookies.prototype.get = function(name, opts) {
|
||||
var sigName = name + ".sig"
|
||||
, header, match, value, remote, data, index
|
||||
, signed = opts && opts.signed !== undefined ? opts.signed : !!this.keys
|
||||
|
||||
header = this.request.headers["cookie"]
|
||||
if (!header) return
|
||||
|
||||
match = header.match(getPattern(name))
|
||||
if (!match) return
|
||||
|
||||
value = match[1]
|
||||
if (!opts || !signed) return value
|
||||
|
||||
remote = this.get(sigName)
|
||||
if (!remote) return
|
||||
|
||||
data = name + "=" + value
|
||||
if (!this.keys) throw new Error('.keys required for signed cookies');
|
||||
index = this.keys.index(data, remote)
|
||||
|
||||
if (index < 0) {
|
||||
this.set(sigName, null, {path: "/", signed: false })
|
||||
} else {
|
||||
index && this.set(sigName, this.keys.sign(data), { signed: false })
|
||||
return value
|
||||
}
|
||||
};
|
||||
|
||||
Cookies.prototype.set = function(name, value, opts) {
|
||||
var res = this.response
|
||||
, req = this.request
|
||||
, headers = res.getHeader("Set-Cookie") || []
|
||||
, secure = this.secure !== undefined ? !!this.secure : req.protocol === 'https' || req.connection.encrypted
|
||||
, cookie = new Cookie(name, value, opts)
|
||||
, signed = opts && opts.signed !== undefined ? opts.signed : !!this.keys
|
||||
|
||||
if (typeof headers == "string") headers = [headers]
|
||||
|
||||
if (!secure && opts && opts.secure) {
|
||||
throw new Error('Cannot send secure cookie over unencrypted connection')
|
||||
}
|
||||
|
||||
cookie.secure = secure
|
||||
if (opts && "secure" in opts) cookie.secure = opts.secure
|
||||
|
||||
if (opts && "secureProxy" in opts) {
|
||||
deprecate('"secureProxy" option; use "secure" option, provide "secure" to constructor if needed')
|
||||
cookie.secure = opts.secureProxy
|
||||
}
|
||||
|
||||
headers = pushCookie(headers, cookie)
|
||||
|
||||
if (opts && signed) {
|
||||
if (!this.keys) throw new Error('.keys required for signed cookies');
|
||||
cookie.value = this.keys.sign(cookie.toString())
|
||||
cookie.name += ".sig"
|
||||
headers = pushCookie(headers, cookie)
|
||||
}
|
||||
|
||||
var setHeader = res.set ? http.OutgoingMessage.prototype.setHeader : res.setHeader
|
||||
setHeader.call(res, 'Set-Cookie', headers)
|
||||
return this
|
||||
};
|
||||
|
||||
function Cookie(name, value, attrs) {
|
||||
if (!fieldContentRegExp.test(name)) {
|
||||
throw new TypeError('argument name is invalid');
|
||||
}
|
||||
|
||||
if (value && !fieldContentRegExp.test(value)) {
|
||||
throw new TypeError('argument value is invalid');
|
||||
}
|
||||
|
||||
value || (this.expires = new Date(0))
|
||||
|
||||
this.name = name
|
||||
this.value = value || ""
|
||||
|
||||
for (var name in attrs) {
|
||||
this[name] = attrs[name]
|
||||
}
|
||||
|
||||
if (this.path && !fieldContentRegExp.test(this.path)) {
|
||||
throw new TypeError('option path is invalid');
|
||||
}
|
||||
|
||||
if (this.domain && !fieldContentRegExp.test(this.domain)) {
|
||||
throw new TypeError('option domain is invalid');
|
||||
}
|
||||
|
||||
if (this.sameSite && this.sameSite !== true && !sameSiteRegExp.test(this.sameSite)) {
|
||||
throw new TypeError('option sameSite is invalid')
|
||||
}
|
||||
}
|
||||
|
||||
Cookie.prototype.path = "/";
|
||||
Cookie.prototype.expires = undefined;
|
||||
Cookie.prototype.domain = undefined;
|
||||
Cookie.prototype.httpOnly = true;
|
||||
Cookie.prototype.sameSite = false;
|
||||
Cookie.prototype.secure = false;
|
||||
Cookie.prototype.overwrite = false;
|
||||
|
||||
Cookie.prototype.toString = function() {
|
||||
return this.name + "=" + this.value
|
||||
};
|
||||
|
||||
Cookie.prototype.toHeader = function() {
|
||||
var header = this.toString()
|
||||
|
||||
if (this.maxAge) this.expires = new Date(Date.now() + this.maxAge);
|
||||
|
||||
if (this.path ) header += "; path=" + this.path
|
||||
if (this.expires ) header += "; expires=" + this.expires.toUTCString()
|
||||
if (this.domain ) header += "; domain=" + this.domain
|
||||
if (this.sameSite ) header += "; samesite=" + (this.sameSite === true ? 'strict' : this.sameSite.toLowerCase())
|
||||
if (this.secure ) header += "; secure"
|
||||
if (this.httpOnly ) header += "; httponly"
|
||||
|
||||
return header
|
||||
};
|
||||
|
||||
// back-compat so maxage mirrors maxAge
|
||||
Object.defineProperty(Cookie.prototype, 'maxage', {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
get: function () { return this.maxAge },
|
||||
set: function (val) { return this.maxAge = val }
|
||||
});
|
||||
deprecate.property(Cookie.prototype, 'maxage', '"maxage"; use "maxAge" instead')
|
||||
|
||||
function getPattern(name) {
|
||||
if (cache[name]) return cache[name]
|
||||
|
||||
return cache[name] = new RegExp(
|
||||
"(?:^|;) *" +
|
||||
name.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") +
|
||||
"=([^;]*)"
|
||||
)
|
||||
}
|
||||
|
||||
function pushCookie(cookies, cookie) {
|
||||
if (cookie.overwrite) {
|
||||
cookies = cookies.filter(function(c) { return c.indexOf(cookie.name+'=') !== 0 })
|
||||
}
|
||||
cookies.push(cookie.toHeader())
|
||||
return cookies
|
||||
}
|
||||
|
||||
Cookies.connect = Cookies.express = function(keys) {
|
||||
return function(req, res, next) {
|
||||
req.cookies = res.cookies = new Cookies(req, res, {
|
||||
keys: keys
|
||||
})
|
||||
|
||||
next()
|
||||
}
|
||||
}
|
||||
|
||||
Cookies.Cookie = Cookie
|
||||
|
||||
module.exports = Cookies
|
75
express-server/node_modules/cookies/package.json
generated
vendored
Normal file
75
express-server/node_modules/cookies/package.json
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
{
|
||||
"_from": "cookies@0.7.1",
|
||||
"_id": "cookies@0.7.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=",
|
||||
"_location": "/cookies",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "version",
|
||||
"registry": true,
|
||||
"raw": "cookies@0.7.1",
|
||||
"name": "cookies",
|
||||
"escapedName": "cookies",
|
||||
"rawSpec": "0.7.1",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "0.7.1"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/cookie-session"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz",
|
||||
"_shasum": "7c8a615f5481c61ab9f16c833731bcb8f663b99b",
|
||||
"_spec": "cookies@0.7.1",
|
||||
"_where": "C:\\Users\\Georg\\GitHub\\SmartShopper\\express-server\\node_modules\\cookie-session",
|
||||
"author": {
|
||||
"name": "Jed Schmidt",
|
||||
"email": "tr@nslator.jp",
|
||||
"url": "http://jed.is"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/pillarjs/cookies/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Douglas Christopher Wilson",
|
||||
"email": "doug@somethingdoug.com"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"depd": "~1.1.1",
|
||||
"keygrip": "~1.0.2"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Cookies, optionally signed using Keygrip.",
|
||||
"devDependencies": {
|
||||
"express": "4.9.8",
|
||||
"istanbul": "0.4.5",
|
||||
"mocha": "2.5.3",
|
||||
"restify": "2.8.1",
|
||||
"supertest": "1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
},
|
||||
"files": [
|
||||
"HISTORY.md",
|
||||
"LICENSE",
|
||||
"README.md",
|
||||
"index.js"
|
||||
],
|
||||
"homepage": "https://github.com/pillarjs/cookies#readme",
|
||||
"license": "MIT",
|
||||
"name": "cookies",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/pillarjs/cookies.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/",
|
||||
"test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/",
|
||||
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/"
|
||||
},
|
||||
"version": "0.7.1"
|
||||
}
|
Reference in New Issue
Block a user