diff --git a/backend/src/middleware/index.js b/backend/src/middleware/index.js index 4f725ef72..17b9d63fb 100644 --- a/backend/src/middleware/index.js +++ b/backend/src/middleware/index.js @@ -10,14 +10,14 @@ import permissionsMiddleware from './permissionsMiddleware' import userMiddleware from './userMiddleware' import includedFieldsMiddleware from './includedFieldsMiddleware' import orderByMiddleware from './orderByMiddleware' -import validUrlMiddleware from './validUrlMiddleware' +import validationMiddleware from './validation' import notificationsMiddleware from './notifications' export default schema => { let middleware = [ passwordMiddleware, dateTimeMiddleware, - validUrlMiddleware, + validationMiddleware, sluggifyMiddleware, excerptMiddleware, notificationsMiddleware, diff --git a/backend/src/middleware/userMiddleware.js b/backend/src/middleware/userMiddleware.js index 4789b4cbd..78f04638d 100644 --- a/backend/src/middleware/userMiddleware.js +++ b/backend/src/middleware/userMiddleware.js @@ -1,5 +1,4 @@ import dotenv from 'dotenv' -import { UserInputError } from 'apollo-server' import createOrUpdateLocations from './nodes/locations' @@ -13,13 +12,9 @@ export default { return result }, UpdateUser: async (resolve, root, args, context, info) => { - const USERNAME_MIN_LENGTH = 3 // TODO move to the correct place - if (!args.name || args.name.length < USERNAME_MIN_LENGTH) { - throw new UserInputError(`Username must be at least ${USERNAME_MIN_LENGTH} characters long!`) - } const result = await resolve(root, args, context, info) await createOrUpdateLocations(args.id, args.locationName, context.driver) return result - } + }, } } diff --git a/backend/src/middleware/userMiddleware.spec.js b/backend/src/middleware/userMiddleware.spec.js index 9aa8f96c1..ef752c729 100644 --- a/backend/src/middleware/userMiddleware.spec.js +++ b/backend/src/middleware/userMiddleware.spec.js @@ -71,7 +71,8 @@ describe('userMiddleware', () => { it('with too short name', async () => { const variables = { - id: 'u1' + id: 'u1', + name: ' ' } const expected = 'Username must be at least 3 characters long!' await expect(client.request(mutation, variables)) diff --git a/backend/src/middleware/validUrlMiddleware.js b/backend/src/middleware/validUrlMiddleware.js deleted file mode 100644 index 37f06199c..000000000 --- a/backend/src/middleware/validUrlMiddleware.js +++ /dev/null @@ -1,18 +0,0 @@ -const validURL = str => { - const isValid = str.match(/^(?:https?:\/\/)(?:[^@\n])?(?:www\.)?([^:/\n?]+)/g) - return !!isValid -} - -export default { - Mutation: { - CreateSocialMedia: async (resolve, root, args, context, info) => { - let socialMedia - if (validURL(args.url)) { - socialMedia = await resolve(root, args, context, info) - } else { - throw Error('Input is not a URL') - } - return socialMedia - } - } -} diff --git a/backend/src/middleware/validation/index.js b/backend/src/middleware/validation/index.js new file mode 100644 index 000000000..c84e111ee --- /dev/null +++ b/backend/src/middleware/validation/index.js @@ -0,0 +1,30 @@ +import { UserInputError } from 'apollo-server' + +const USERNAME_MIN_LENGTH = 3 + +const validateUsername = async (resolve, root, args, context, info) => { + if (args.name && args.name.length >= USERNAME_MIN_LENGTH) { + return await resolve(root, args, context, info) + } else { + throw new UserInputError(`Username must be at least ${USERNAME_MIN_LENGTH} characters long!`) + } +} + +const validateUrl = async (resolve, root, args, context, info) => { + const { url } = args + const isValid = url.match(/^(?:https?:\/\/)(?:[^@\n])?(?:www\.)?([^:/\n?]+)/g) + if (isValid) { + return await resolve(root, args, context, info) + } else { + throw new UserInputError('Input is not a URL') + } +} + +export default { + Mutation: { + // CreateUser: validateUsername, + UpdateUser: validateUsername, + CreateSocialMedia: validateUrl + } +} +