| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  | const _ = require('lodash');
 | 
					
						
							| 
									
										
										
										
											2019-10-16 00:17:54 +09:00
										 |  |  | const { ApolloError } = require('apollo-server-koa');
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  | * Throws an ApolloError if context body contains a bad request
 | 
					
						
							|  |  |  | * @param contextBody - body of the context object given to the resolver
 | 
					
						
							|  |  |  | * @throws ApolloError if the body is a bad request
 | 
					
						
							|  |  |  | */
 | 
					
						
							|  |  |  | function checkBadRequest(contextBody) {
 | 
					
						
							|  |  |  |   if (_.get(contextBody, 'output.payload.statusCode', 200) !== 200) {
 | 
					
						
							|  |  |  |     const statusCode = _.get(contextBody, 'output.payload.statusCode', 400);
 | 
					
						
							|  |  |  |     const message = _.get(contextBody, 'output.payload.message', 'Bad Request');
 | 
					
						
							|  |  |  |     throw new ApolloError(message, statusCode, _.omit(contextBody, ['output']));
 | 
					
						
							|  |  |  |   }
 | 
					
						
							|  |  |  | }
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  | module.exports = {
 | 
					
						
							|  |  |  |   type: {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |     UsersPermissionsPermission: false, // Make this type NOT queriable.
 | 
					
						
							| 
									
										
										
										
											2018-10-14 21:14:02 -05:00
										 |  |  |   },
 | 
					
						
							|  |  |  |   definition: `
 | 
					
						
							|  |  |  |     type UsersPermissionsMe {
 | 
					
						
							| 
									
										
										
										
											2019-07-19 02:14:46 -07:00
										 |  |  |       id: ID!
 | 
					
						
							| 
									
										
										
										
											2018-10-14 21:14:02 -05:00
										 |  |  |       username: String!
 | 
					
						
							|  |  |  |       email: String!
 | 
					
						
							|  |  |  |       confirmed: Boolean
 | 
					
						
							|  |  |  |       blocked: Boolean
 | 
					
						
							| 
									
										
										
										
											2018-10-15 11:03:00 -05:00
										 |  |  |       role: UsersPermissionsMeRole
 | 
					
						
							| 
									
										
										
										
											2018-10-14 21:14:02 -05:00
										 |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     type UsersPermissionsMeRole {
 | 
					
						
							| 
									
										
										
										
											2019-07-19 02:14:46 -07:00
										 |  |  |       id: ID!
 | 
					
						
							| 
									
										
										
										
											2018-10-14 21:14:02 -05:00
										 |  |  |       name: String!
 | 
					
						
							|  |  |  |       description: String
 | 
					
						
							|  |  |  |       type: String
 | 
					
						
							|  |  |  |     }
 | 
					
						
							| 
									
										
										
										
											2019-10-16 00:17:54 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     input UsersPermissionsLoginInput {
 | 
					
						
							|  |  |  |       identifier: String!
 | 
					
						
							|  |  |  |       password: String!
 | 
					
						
							|  |  |  |       provider: String = "local"
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     type UsersPermissionsLoginPayload {
 | 
					
						
							|  |  |  |       jwt: String!
 | 
					
						
							|  |  |  |       user: UsersPermissionsUser!
 | 
					
						
							|  |  |  |     }
 | 
					
						
							| 
									
										
										
										
											2018-10-14 21:14:02 -05:00
										 |  |  |   `,
 | 
					
						
							| 
									
										
										
										
											2018-10-09 20:06:52 -05:00
										 |  |  |   query: `
 | 
					
						
							| 
									
										
										
										
											2018-10-14 21:14:02 -05:00
										 |  |  |     me: UsersPermissionsMe
 | 
					
						
							| 
									
										
										
										
											2018-10-09 20:06:52 -05:00
										 |  |  |   `,
 | 
					
						
							| 
									
										
										
										
											2019-10-16 00:17:54 +09:00
										 |  |  |   mutation: `
 | 
					
						
							|  |  |  |     login(input: UsersPermissionsLoginInput!): UsersPermissionsLoginPayload!
 | 
					
						
							|  |  |  |     register(input: UserInput!): UsersPermissionsLoginPayload!
 | 
					
						
							|  |  |  |   `,
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  |   resolver: {
 | 
					
						
							|  |  |  |     Query: {
 | 
					
						
							| 
									
										
										
										
											2018-10-09 20:06:52 -05:00
										 |  |  |       me: {
 | 
					
						
							|  |  |  |         resolverOf: 'User.me',
 | 
					
						
							|  |  |  |         resolver: {
 | 
					
						
							|  |  |  |           plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           handler: 'User.me',
 | 
					
						
							|  |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-10-09 20:06:52 -05:00
										 |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  |       role: {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  |         resolverOf: 'UsersPermissions.getRole',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							|  |  |  |           await strapi.plugins[
 | 
					
						
							|  |  |  |             'users-permissions'
 | 
					
						
							|  |  |  |           ].controllers.userspermissions.getRole(context);
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-13 19:27:18 +01:00
										 |  |  |           return context.body.role;
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  |       },
 | 
					
						
							|  |  |  |       roles: {
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:57:25 +02:00
										 |  |  |         description: `Retrieve all the existing roles. You can't apply filters on this query.`,
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  |         resolverOf: 'UsersPermissions.getRoles', // Apply the `getRoles` permissions on the resolver.
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							|  |  |  |           await strapi.plugins[
 | 
					
						
							|  |  |  |             'users-permissions'
 | 
					
						
							|  |  |  |           ].controllers.userspermissions.getRoles(context);
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-13 19:27:18 +01:00
										 |  |  |           return context.body.roles;
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							|  |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  |     },
 | 
					
						
							|  |  |  |     Mutation: {
 | 
					
						
							|  |  |  |       createRole: {
 | 
					
						
							|  |  |  |         description: 'Create a new role',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  |         resolverOf: 'UsersPermissions.createRole',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							|  |  |  |           await strapi.plugins[
 | 
					
						
							|  |  |  |             'users-permissions'
 | 
					
						
							|  |  |  |           ].controllers.userspermissions.createRole(context);
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |           return { ok: true };
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  |       },
 | 
					
						
							|  |  |  |       updateRole: {
 | 
					
						
							|  |  |  |         description: 'Update an existing role',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  |         resolverOf: 'UsersPermissions.updateRole',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							|  |  |  |           await strapi.plugins[
 | 
					
						
							|  |  |  |             'users-permissions'
 | 
					
						
							|  |  |  |           ].controllers.userspermissions.updateRole(
 | 
					
						
							|  |  |  |             context.params,
 | 
					
						
							|  |  |  |             context.body
 | 
					
						
							|  |  |  |           );
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |           return { ok: true };
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  |       },
 | 
					
						
							|  |  |  |       deleteRole: {
 | 
					
						
							|  |  |  |         description: 'Delete an existing role',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  |         resolverOf: 'UsersPermissions.deleteRole',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							|  |  |  |           await strapi.plugins[
 | 
					
						
							|  |  |  |             'users-permissions'
 | 
					
						
							|  |  |  |           ].controllers.userspermissions.deleteRole(context);
 | 
					
						
							| 
									
										
										
										
											2018-09-10 16:05:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |           return { ok: true };
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |       },
 | 
					
						
							|  |  |  |       createUser: {
 | 
					
						
							|  |  |  |         description: 'Create a new user',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |         resolverOf: 'User.create',
 | 
					
						
							|  |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           context.params = _.toPlainObject(options.input.where);
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |           context.request.body = _.toPlainObject(options.input.data);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           await strapi.plugins['users-permissions'].controllers.user.create(
 | 
					
						
							|  |  |  |             context
 | 
					
						
							|  |  |  |           );
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           return {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |             user: context.body.toJSON ? context.body.toJSON() : context.body,
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |           };
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |       },
 | 
					
						
							|  |  |  |       updateUser: {
 | 
					
						
							|  |  |  |         description: 'Update an existing user',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |         resolverOf: 'User.update',
 | 
					
						
							|  |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           context.params = _.toPlainObject(options.input.where);
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |           context.request.body = _.toPlainObject(options.input.data);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           await strapi.plugins['users-permissions'].controllers.user.update(
 | 
					
						
							|  |  |  |             context
 | 
					
						
							|  |  |  |           );
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           return {
 | 
					
						
							|  |  |  |             user: context.body.toJSON ? context.body.toJSON() : context.body,
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |           };
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         },
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |       },
 | 
					
						
							|  |  |  |       deleteUser: {
 | 
					
						
							|  |  |  |         description: 'Delete an existing user',
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |         plugin: 'users-permissions',
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |         resolverOf: 'User.destroy',
 | 
					
						
							|  |  |  |         resolver: async (obj, options, { context }) => {
 | 
					
						
							| 
									
										
										
										
											2018-11-27 14:54:34 +01:00
										 |  |  |           // Set parameters to context.
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           context.params = _.toPlainObject(options.input.where);
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |           context.request.body = _.toPlainObject(options.input.data);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           // Retrieve user to be able to return it because
 | 
					
						
							| 
									
										
										
										
											2018-11-27 14:54:34 +01:00
										 |  |  |           // Bookshelf doesn't return the row once deleted.
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           await strapi.plugins['users-permissions'].controllers.user.findOne(
 | 
					
						
							|  |  |  |             context
 | 
					
						
							|  |  |  |           );
 | 
					
						
							| 
									
										
										
										
											2018-11-27 14:54:34 +01:00
										 |  |  |           // Assign result to user.
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           const user = context.body.toJSON
 | 
					
						
							|  |  |  |             ? context.body.toJSON()
 | 
					
						
							|  |  |  |             : context.body;
 | 
					
						
							| 
									
										
										
										
											2018-11-27 14:54:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           // Run destroy query.
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |           await strapi.plugins['users-permissions'].controllers.user.destroy(
 | 
					
						
							|  |  |  |             context
 | 
					
						
							|  |  |  |           );
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           return {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |             user,
 | 
					
						
							| 
									
										
										
										
											2018-11-26 18:32:35 +01:00
										 |  |  |           };
 | 
					
						
							| 
									
										
										
										
											2019-10-16 00:17:54 +09:00
										 |  |  |         }
 | 
					
						
							| 
									
										
										
										
											2019-09-18 12:07:45 +02:00
										 |  |  |       },
 | 
					
						
							| 
									
										
										
										
											2019-10-16 00:17:54 +09:00
										 |  |  |       register: {
 | 
					
						
							|  |  |  |         description: 'Register a user',
 | 
					
						
							|  |  |  |         plugin: 'users-permissions',
 | 
					
						
							|  |  |  |         resolverOf: 'Auth.register',
 | 
					
						
							|  |  |  |         resolver: async (obj, options, {context}) => {
 | 
					
						
							|  |  |  |           context.request.body = _.toPlainObject(options.input);
 | 
					
						
							|  |  |  |           
 | 
					
						
							|  |  |  |           await strapi.plugins['users-permissions'].controllers.auth.register(context);
 | 
					
						
							|  |  |  |           let output = context.body.toJSON ? context.body.toJSON() : context.body;
 | 
					
						
							|  |  |  |           
 | 
					
						
							|  |  |  |           checkBadRequest(output);
 | 
					
						
							|  |  |  |           return {
 | 
					
						
							|  |  |  |             user: output.user || output, jwt: output.jwt
 | 
					
						
							|  |  |  |           };
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |       },
 | 
					
						
							|  |  |  |       login: {
 | 
					
						
							|  |  |  |         resolverOf: 'Auth.callback',
 | 
					
						
							|  |  |  |         plugin: 'users-permissions',
 | 
					
						
							|  |  |  |         resolver: async (obj, options, {context}) => {
 | 
					
						
							|  |  |  |           context.params = {...context.params, provider: options.input.provider};
 | 
					
						
							|  |  |  |           context.request.body = _.toPlainObject(options.input);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           await strapi.plugins['users-permissions'].controllers.auth.callback(context);
 | 
					
						
							|  |  |  |           let output = context.body.toJSON ? context.body.toJSON() : context.body;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           checkBadRequest(output);
 | 
					
						
							|  |  |  |           return {
 | 
					
						
							|  |  |  |             user: output.user || output, jwt: output.jwt
 | 
					
						
							|  |  |  |           };
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |       }
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  |   }
 | 
					
						
							| 
									
										
										
										
											2018-04-11 12:53:07 +02:00
										 |  |  | };
 |