form_controller.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class FormController < ApplicationController
  3. def config
  4. return if !enabled?
  5. api_path = Rails.configuration.api_path
  6. http_type = Setting.get('http_type')
  7. fqdn = Setting.get('fqdn')
  8. endpoint = "#{http_type}://#{fqdn}#{api_path}/form_submit"
  9. config = {
  10. enabled: Setting.get('form_ticket_create'),
  11. endpoint: endpoint,
  12. }
  13. render json: config, status: :ok
  14. end
  15. def submit
  16. return if !enabled?
  17. # validate input
  18. errors = {}
  19. if !params[:name] || params[:name].empty?
  20. errors['name'] = 'required'
  21. end
  22. if !params[:email] || params[:email].empty?
  23. errors['email'] = 'required'
  24. end
  25. if params[:email] !~ /@/
  26. errors['email'] = 'invalid'
  27. end
  28. if params[:email] =~ /(>|<|\||\!|"|§|'|\$|%|&|\(|\)|\?|\s)/
  29. errors['email'] = 'invalid'
  30. end
  31. if !params[:title] || params[:title].empty?
  32. errors['title'] = 'required'
  33. end
  34. if !params[:body] || params[:body].empty?
  35. errors['body'] = 'required'
  36. end
  37. # realtime verify
  38. if !errors['email']
  39. begin
  40. checker = EmailVerifier::Checker.new(params[:email])
  41. checker.connect
  42. if !checker.verify
  43. errors['email'] = "Unable to send to '#{params[:email]}'"
  44. end
  45. rescue => e
  46. message = e.to_s
  47. Rails.logger.info "Can't verify email #{params[:email]}: #{message}"
  48. # ignore 450, graylistings
  49. if message !~ /450/
  50. errors['email'] = message
  51. end
  52. end
  53. end
  54. if errors && !errors.empty?
  55. render json: {
  56. errors: errors
  57. }, status: :ok
  58. return
  59. end
  60. name = params[:name].strip
  61. email = params[:email].strip.downcase
  62. customer = User.find_by(email: email)
  63. if !customer
  64. roles = Role.where(name: 'Customer')
  65. customer = User.create(
  66. firstname: name,
  67. lastname: '',
  68. email: email,
  69. password: '',
  70. active: true,
  71. roles: roles,
  72. updated_by_id: 1,
  73. created_by_id: 1,
  74. )
  75. end
  76. ticket = Ticket.create(
  77. group_id: 1,
  78. customer_id: customer.id,
  79. title: params[:title],
  80. state_id: Ticket::State.find_by(name: 'new').id,
  81. priority_id: Ticket::Priority.find_by(name: '2 normal').id,
  82. updated_by_id: customer.id,
  83. created_by_id: customer.id,
  84. )
  85. article = Ticket::Article.create(
  86. ticket_id: ticket.id,
  87. type_id: Ticket::Article::Type.find_by(name: 'web').id,
  88. sender_id: Ticket::Article::Sender.find_by(name: 'Customer').id,
  89. body: params[:body],
  90. from: email,
  91. subject: params[:title],
  92. internal: false,
  93. updated_by_id: customer.id,
  94. created_by_id: customer.id,
  95. )
  96. result = {}
  97. render json: result, status: :ok
  98. end
  99. private
  100. def enabled?
  101. return true if Setting.get('form_ticket_create')
  102. response_access_deny
  103. false
  104. end
  105. end