| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Jwt.js service | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @description: A set of functions similar to controller's actions to avoid code duplication. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const _ = require('lodash'); | 
					
						
							|  |  |  | const jwt = require('jsonwebtoken'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-26 07:32:28 +01:00
										 |  |  | const defaultJwtOptions = { expiresIn: '30d' }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  | module.exports = { | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   getToken(ctx) { | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  |     const params = _.assign({}, ctx.request.body, ctx.request.query); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     let token = ''; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (ctx.request && ctx.request.header && ctx.request.header.authorization) { | 
					
						
							|  |  |  |       const parts = ctx.request.header.authorization.split(' '); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (parts.length === 2) { | 
					
						
							|  |  |  |         const scheme = parts[0]; | 
					
						
							|  |  |  |         const credentials = parts[1]; | 
					
						
							|  |  |  |         if (/^Bearer$/i.test(scheme)) { | 
					
						
							|  |  |  |           token = credentials; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |       } else { | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |         throw new Error( | 
					
						
							|  |  |  |           'Invalid authorization header format. Format is Authorization: Bearer [token]' | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  |       } | 
					
						
							|  |  |  |     } else if (params.token) { | 
					
						
							|  |  |  |       token = params.token; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       throw new Error('No authorization header was found'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return this.verify(token); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   issue(payload, jwtOptions = {}) { | 
					
						
							| 
									
										
										
										
											2018-01-26 07:32:28 +01:00
										 |  |  |     _.defaults(jwtOptions, defaultJwtOptions); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |     return jwt.sign( | 
					
						
							|  |  |  |       _.clone(payload.toJSON ? payload.toJSON() : payload), | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |       process.env.JWT_SECRET || | 
					
						
							|  |  |  |         _.get(strapi.plugins['users-permissions'], 'config.jwtSecret') || | 
					
						
							|  |  |  |         'oursecret', | 
					
						
							|  |  |  |       jwtOptions | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |     ); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   verify(token) { | 
					
						
							|  |  |  |     return new Promise(function(resolve, reject) { | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |       jwt.verify( | 
					
						
							|  |  |  |         token, | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |         process.env.JWT_SECRET || | 
					
						
							|  |  |  |           _.get(strapi.plugins['users-permissions'], 'config.jwtSecret') || | 
					
						
							|  |  |  |           'oursecret', | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |         {}, | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |         function(err, tokenPayload = {}) { | 
					
						
							| 
									
										
										
										
											2018-01-22 18:19:44 +01:00
										 |  |  |           if (err) { | 
					
						
							| 
									
										
										
										
											2018-01-29 19:26:28 +01:00
										 |  |  |             return reject(new Error('Invalid token.')); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |           } | 
					
						
							| 
									
										
										
										
											2018-01-29 19:26:28 +01:00
										 |  |  |           resolve(tokenPayload); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |         } | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2017-11-16 14:12:03 +01:00
										 |  |  | }; |