hooks.mjs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import { generateError, generateSuccess } from '../../helpers/graph.mjs'
  2. import _ from 'lodash-es'
  3. export default {
  4. Query: {
  5. async hooks (obj, args, context) {
  6. if (!WIKI.auth.checkAccess(context.req.user, ['read:webhooks', 'write:webhooks', 'manage:webhooks'])) {
  7. throw new Error('ERR_FORBIDDEN')
  8. }
  9. return WIKI.db.hooks.query().orderBy('name')
  10. },
  11. async hookById (obj, args, context) {
  12. if (!WIKI.auth.checkAccess(context.req.user, ['read:webhooks', 'write:webhooks', 'manage:webhooks'])) {
  13. throw new Error('ERR_FORBIDDEN')
  14. }
  15. return WIKI.db.hooks.query().findById(args.id)
  16. }
  17. },
  18. Mutation: {
  19. /**
  20. * CREATE HOOK
  21. */
  22. async createHook (obj, args, context) {
  23. try {
  24. if (!WIKI.auth.checkAccess(context.req.user, ['write:webhooks', 'manage:webhooks'])) {
  25. throw new Error('ERR_FORBIDDEN')
  26. }
  27. // -> Validate inputs
  28. if (!args.name || args.name.length < 1) {
  29. throw new WIKI.Error.Custom('HookCreateInvalidName', 'Invalid Hook Name')
  30. }
  31. if (!args.events || args.events.length < 1) {
  32. throw new WIKI.Error.Custom('HookCreateInvalidEvents', 'Invalid Hook Events')
  33. }
  34. if (!args.url || args.url.length < 8 || !args.url.startsWith('http')) {
  35. throw new WIKI.Error.Custom('HookCreateInvalidURL', 'Invalid Hook URL')
  36. }
  37. // -> Create hook
  38. const newHook = await WIKI.db.hooks.createHook(args)
  39. WIKI.logger.debug(`New Hook ${newHook.id} created successfully.`)
  40. return {
  41. operation: generateSuccess('Hook created successfully'),
  42. hook: newHook
  43. }
  44. } catch (err) {
  45. return generateError(err)
  46. }
  47. },
  48. /**
  49. * UPDATE HOOK
  50. */
  51. async updateHook (obj, args, context) {
  52. try {
  53. if (!WIKI.auth.checkAccess(context.req.user, ['manage:webhooks'])) {
  54. throw new Error('ERR_FORBIDDEN')
  55. }
  56. // -> Load hook
  57. const hook = await WIKI.db.hooks.query().findById(args.id)
  58. if (!hook) {
  59. throw new WIKI.Error.Custom('HookInvalidId', 'Invalid Hook ID')
  60. }
  61. // -> Check for bad input
  62. if (_.has(args.patch, 'name') && args.patch.name.length < 1) {
  63. throw new WIKI.Error.Custom('HookCreateInvalidName', 'Invalid Hook Name')
  64. }
  65. if (_.has(args.patch, 'events') && args.patch.events.length < 1) {
  66. throw new WIKI.Error.Custom('HookCreateInvalidEvents', 'Invalid Hook Events')
  67. }
  68. if (_.has(args.patch, 'url') && (_.trim(args.patch.url).length < 8 || !args.patch.url.startsWith('http'))) {
  69. throw new WIKI.Error.Custom('HookInvalidURL', 'URL is invalid.')
  70. }
  71. // -> Update hook
  72. await WIKI.db.hooks.query().findById(args.id).patch(args.patch)
  73. WIKI.logger.debug(`Hook ${args.id} updated successfully.`)
  74. return {
  75. operation: generateSuccess('Hook updated successfully')
  76. }
  77. } catch (err) {
  78. return generateError(err)
  79. }
  80. },
  81. /**
  82. * DELETE HOOK
  83. */
  84. async deleteHook (obj, args, context) {
  85. try {
  86. if (!WIKI.auth.checkAccess(context.req.user, ['manage:webhooks'])) {
  87. throw new Error('ERR_FORBIDDEN')
  88. }
  89. await WIKI.db.hooks.deleteHook(args.id)
  90. WIKI.logger.debug(`Hook ${args.id} deleted successfully.`)
  91. return {
  92. operation: generateSuccess('Hook deleted successfully')
  93. }
  94. } catch (err) {
  95. return generateError(err)
  96. }
  97. }
  98. }
  99. }