You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					206 lines
				
				6.3 KiB
			
		
		
			
		
	
	
					206 lines
				
				6.3 KiB
			| 
											3 years ago
										 | import cookie from '../plugin'; | ||
|  | import { expectType } from 'tsd'; | ||
|  | import * as fastifyCookieStar from '..'; | ||
|  | import fastifyCookieCjsImport = require('..'); | ||
|  | import fastifyCookieDefault, { fastifyCookie as fastifyCookieNamed  } from '..'; | ||
|  | import fastify, { FastifyInstance,  FastifyReply, setCookieWrapper } from 'fastify'; | ||
|  | 
 | ||
|  | const fastifyCookieCjs = require('..'); | ||
|  | 
 | ||
|  | const app: FastifyInstance = fastify(); | ||
|  | app.register(fastifyCookieNamed); | ||
|  | app.register(fastifyCookieDefault); | ||
|  | app.register(fastifyCookieCjs); | ||
|  | app.register(fastifyCookieCjsImport.default); | ||
|  | app.register(fastifyCookieCjsImport.fastifyCookie); | ||
|  | app.register(fastifyCookieStar.default); | ||
|  | app.register(fastifyCookieStar.fastifyCookie); | ||
|  | 
 | ||
|  | expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieNamed); | ||
|  | expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieDefault); | ||
|  | expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieCjsImport.default); | ||
|  | expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieCjsImport.fastifyCookie); | ||
|  | expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieStar.default); | ||
|  | expectType<fastifyCookieStar.FastifyCookie>( | ||
|  |   fastifyCookieStar.fastifyCookie | ||
|  | ); | ||
|  | expectType<any>(fastifyCookieCjs); | ||
|  | 
 | ||
|  | expectType<fastifyCookieStar.Sign>(fastifyCookieDefault.sign); | ||
|  | expectType<fastifyCookieStar.Unsign>(fastifyCookieDefault.unsign); | ||
|  | expectType<fastifyCookieStar.SignerFactory >(fastifyCookieDefault.signerFactory ); | ||
|  | 
 | ||
|  | expectType<fastifyCookieStar.Sign>(fastifyCookieNamed.sign); | ||
|  | expectType<fastifyCookieStar.Unsign>(fastifyCookieNamed.unsign); | ||
|  | expectType<fastifyCookieStar.SignerFactory >(fastifyCookieNamed.signerFactory ); | ||
|  | 
 | ||
|  | const server = fastify(); | ||
|  | 
 | ||
|  | server.register(cookie); | ||
|  | 
 | ||
|  | server.after((_err) => { | ||
|  |   expectType<{ [key: string]: string }>( | ||
|  |     // See https://github.com/fastify/fastify-cookie#manual-cookie-parsing
 | ||
|  |     server.parseCookie('sessionId=aYb4uTIhdBXC') | ||
|  |   ); | ||
|  | 
 | ||
|  |   server.get('/', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     expectType<string | undefined>(test); | ||
|  | 
 | ||
|  |     expectType<setCookieWrapper>(reply.cookie); | ||
|  |     expectType<setCookieWrapper>(reply.setCookie); | ||
|  | 
 | ||
|  |     expectType<FastifyReply>( | ||
|  |       reply | ||
|  |         .setCookie('test', test!, { domain: 'example.com', path: '/' }) | ||
|  |         .clearCookie('foo') | ||
|  |         .send({ hello: 'world' }) | ||
|  |     ); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | const serverWithHttp2 = fastify({ http2: true }); | ||
|  | 
 | ||
|  | serverWithHttp2.register(cookie); | ||
|  | 
 | ||
|  | serverWithHttp2.after(() => { | ||
|  |   serverWithHttp2.get('/', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     reply | ||
|  |       .setCookie('test', test!, { domain: 'example.com', path: '/' }) | ||
|  |       .clearCookie('foo') | ||
|  |       .send({ hello: 'world' }); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | const testSamesiteOptionsApp = fastify(); | ||
|  | 
 | ||
|  | testSamesiteOptionsApp.register(cookie); | ||
|  | testSamesiteOptionsApp.after(() => { | ||
|  |   server.get('/test-samesite-option-true', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     reply.setCookie('test', test!, { sameSite: true }).send({ hello: 'world' }); | ||
|  |   }); | ||
|  |   server.get('/test-samesite-option-false', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     reply.setCookie('test', test!, { sameSite: false }).send({ hello: 'world' }); | ||
|  |   }); | ||
|  |   server.get('/test-samesite-option-lax', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     reply.setCookie('test', test!, { sameSite: 'lax' }).send({ hello: 'world' }); | ||
|  |   }); | ||
|  |   server.get('/test-samesite-option-strict', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     reply | ||
|  |       .setCookie('test', test!, { sameSite: 'strict' }) | ||
|  |       .send({ hello: 'world' }); | ||
|  |   }); | ||
|  |   server.get('/test-samesite-option-none', (request, reply) => { | ||
|  |     const test = request.cookies.test; | ||
|  |     reply | ||
|  |       .setCookie('test', test!, { sameSite: 'none' }) | ||
|  |       .send({ hello: 'world' }); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | const appWithImplicitHttpSigned = fastify(); | ||
|  | 
 | ||
|  | appWithImplicitHttpSigned.register(cookie, { | ||
|  |   secret: 'testsecret', | ||
|  | }); | ||
|  | appWithImplicitHttpSigned.register(cookie, { | ||
|  |   secret: 'testsecret', | ||
|  |   algorithm: 'sha512' | ||
|  | }); | ||
|  | appWithImplicitHttpSigned.after(() => { | ||
|  |   server.get('/', (request, reply) => { | ||
|  |     appWithImplicitHttpSigned.unsignCookie(request.cookies.test!); | ||
|  |     appWithImplicitHttpSigned.unsignCookie('test'); | ||
|  | 
 | ||
|  |     reply.unsignCookie(request.cookies.test!); | ||
|  |     reply.unsignCookie('test'); | ||
|  | 
 | ||
|  |     request.unsignCookie(request.cookies.anotherTest!); | ||
|  |     request.unsignCookie('anotherTest'); | ||
|  | 
 | ||
|  |     reply.send({ hello: 'world' }); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | const appWithRotationSecret = fastify(); | ||
|  | 
 | ||
|  | appWithRotationSecret.register(cookie, { | ||
|  |   secret: ['testsecret'], | ||
|  | }); | ||
|  | appWithRotationSecret.after(() => { | ||
|  |   server.get('/', (request, reply) => { | ||
|  |     reply.unsignCookie(request.cookies.test!); | ||
|  |     const { valid, renew, value } = reply.unsignCookie('test'); | ||
|  | 
 | ||
|  |     expectType<boolean>(valid); | ||
|  |     expectType<boolean>(renew); | ||
|  |     expectType<string | null>(value); | ||
|  | 
 | ||
|  |     reply.send({ hello: 'world' }); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | const appWithParseOptions = fastify(); | ||
|  | 
 | ||
|  | const parseOptions: fastifyCookieStar.CookieSerializeOptions = { | ||
|  |   domain: 'example.com', | ||
|  |   encode: (value: string) => value, | ||
|  |   expires: new Date(), | ||
|  |   httpOnly: true, | ||
|  |   maxAge: 3600, | ||
|  |   path: '/', | ||
|  |   sameSite: 'lax', | ||
|  |   secure: true, | ||
|  |   signed: true, | ||
|  | }; | ||
|  | expectType<fastifyCookieStar.CookieSerializeOptions>(parseOptions); | ||
|  | 
 | ||
|  | appWithParseOptions.register(cookie, { | ||
|  |   secret: 'testsecret', | ||
|  |   parseOptions, | ||
|  | }); | ||
|  | appWithParseOptions.after(() => { | ||
|  |   server.get('/', (request, reply) => { | ||
|  |     const { valid, renew, value } = reply.unsignCookie(request.cookies.test!); | ||
|  | 
 | ||
|  |     expectType<boolean>(valid); | ||
|  |     expectType<boolean>(renew); | ||
|  |     expectType<string | null>(value); | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | const appWithCustomSigner = fastify() | ||
|  | 
 | ||
|  | appWithCustomSigner.register(cookie, { | ||
|  |   secret: { | ||
|  |     sign: (x) => x + '.signed', | ||
|  |     unsign: (x) => { | ||
|  |       if (x.endsWith('.signed')) { return { renew: false, valid: true, value: x.slice(0, -7) } } | ||
|  |       return { renew: false, valid: false, value: null } | ||
|  |     } | ||
|  |   } | ||
|  | }) | ||
|  | appWithCustomSigner.after(() => { | ||
|  |   server.get('/', (request, reply) => { | ||
|  |     reply.unsignCookie(request.cookies.test!) | ||
|  |     const { valid, renew, value } = reply.unsignCookie('test') | ||
|  | 
 | ||
|  |     expectType<boolean>(valid) | ||
|  |     expectType<boolean>(renew) | ||
|  |     expectType<string | null>(value) | ||
|  | 
 | ||
|  |     reply.send({ hello: 'world' }) | ||
|  |   }) | ||
|  | }) | ||
|  | 
 | ||
|  | new fastifyCookieStar.Signer('secretString') | ||
|  | new fastifyCookieStar.Signer(['secretStringInArray']) | ||
|  | const signer = new fastifyCookieStar.Signer(['secretStringInArray'], 'sha256') | ||
|  | signer.sign('Lorem Ipsum') | ||
|  | signer.unsign('Lorem Ipsum') |