| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-08 11:20:13 +02:00
										 |  |  | module.exports = ({ strapi }) => ({ | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   getToken(ctx) { | 
					
						
							| 
									
										
										
										
											2021-11-15 17:54:17 +01:00
										 |  |  |     let token; | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if (ctx.request && ctx.request.header && ctx.request.header.authorization) { | 
					
						
							| 
									
										
										
										
											2021-11-15 17:54:17 +01:00
										 |  |  |       const parts = ctx.request.header.authorization.split(/\s+/); | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 17:54:17 +01:00
										 |  |  |       if (parts[0].toLowerCase() !== 'bearer' || parts.length !== 2) { | 
					
						
							|  |  |  |         return null; | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2021-11-15 17:54:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |       token = parts[1]; | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  |     } else { | 
					
						
							| 
									
										
										
										
											2021-11-15 17:54:17 +01:00
										 |  |  |       return null; | 
					
						
							| 
									
										
										
										
											2017-11-27 16:47:16 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return this.verify(token); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   issue(payload, jwtOptions = {}) { | 
					
						
							| 
									
										
										
										
											2021-08-17 19:28:10 +02:00
										 |  |  |     _.defaults(jwtOptions, strapi.config.get('plugin.users-permissions.jwt')); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |     return jwt.sign( | 
					
						
							|  |  |  |       _.clone(payload.toJSON ? payload.toJSON() : payload), | 
					
						
							| 
									
										
										
										
											2021-08-17 19:28:10 +02:00
										 |  |  |       strapi.config.get('plugin.users-permissions.jwtSecret'), | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |       jwtOptions | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |     ); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   verify(token) { | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |     return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |       jwt.verify( | 
					
						
							|  |  |  |         token, | 
					
						
							|  |  |  |         strapi.config.get('plugin.users-permissions.jwtSecret'), | 
					
						
							|  |  |  |         {}, | 
					
						
							|  |  |  |         (err, tokenPayload = {}) => { | 
					
						
							|  |  |  |           if (err) { | 
					
						
							|  |  |  |             return reject(new Error('Invalid token.')); | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |           resolve(tokenPayload); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2022-08-08 23:33:39 +02:00
										 |  |  |       ); | 
					
						
							| 
									
										
										
										
											2017-12-07 15:27:11 +01:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2019-07-15 23:16:50 +02:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-07-08 11:20:13 +02:00
										 |  |  | }); |