getting_started_controller.rb 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. require 'resolv'
  3. class GettingStartedController < ApplicationController
  4. =begin
  5. Resource:
  6. GET /api/v1/getting_started
  7. Response:
  8. {
  9. "master_user": 1,
  10. "groups": [
  11. {
  12. "name": "group1",
  13. "active":true
  14. },
  15. {
  16. "name": "group2",
  17. "active":true
  18. }
  19. ]
  20. }
  21. Test:
  22. curl http://localhost/api/v1/getting_started -v -u #{login}:#{password}
  23. =end
  24. def index
  25. # check if first user already exists
  26. return if setup_done_response
  27. # check it auto wizard is already done
  28. return if auto_wizard_enabled_response
  29. # if master user already exists, we need to be authenticated
  30. if setup_done
  31. return if !authentication_check
  32. end
  33. # return result
  34. Calendar.init_setup(request.remote_ip)
  35. render json: {
  36. setup_done: setup_done,
  37. import_mode: Setting.get('import_mode'),
  38. import_backend: Setting.get('import_backend'),
  39. system_online_service: Setting.get('system_online_service'),
  40. }
  41. end
  42. def auto_wizard_admin
  43. # check if system setup is already done
  44. return if setup_done_response
  45. # check it auto wizard is enabled
  46. if !AutoWizard.enabled?
  47. render json: {
  48. auto_wizard: false,
  49. }
  50. return
  51. end
  52. # verify auto wizard file
  53. auto_wizard_data = AutoWizard.data
  54. if !auto_wizard_data || auto_wizard_data.empty?
  55. render json: {
  56. auto_wizard: true,
  57. auto_wizard_success: false,
  58. message: 'Invalid auto wizard file.',
  59. }
  60. return
  61. end
  62. # verify auto wizard token
  63. if auto_wizard_data['Token'] && auto_wizard_data['Token'] != params[:token]
  64. render json: {
  65. auto_wizard: true,
  66. auto_wizard_success: false,
  67. }
  68. return
  69. end
  70. # execute auto wizard
  71. auto_wizard_admin = AutoWizard.setup
  72. if !auto_wizard_admin
  73. render json: {
  74. auto_wizard: true,
  75. auto_wizard_success: false,
  76. message: 'Error during execution of auto wizard.',
  77. }
  78. return
  79. end
  80. # set current session user
  81. current_user_set(auto_wizard_admin)
  82. # set system init to done
  83. Setting.set('system_init_done', true)
  84. render json: {
  85. auto_wizard: true,
  86. auto_wizard_success: true,
  87. }
  88. end
  89. def base
  90. # check admin permissions
  91. return if deny_if_not_role(Z_ROLENAME_ADMIN)
  92. # validate url
  93. messages = {}
  94. if !Setting.get('system_online_service')
  95. if !params[:url] || params[:url] !~ %r{^(http|https)://.+?$}
  96. messages[:url] = 'A URL looks like http://zammad.example.com'
  97. end
  98. end
  99. # validate organization
  100. if !params[:organization] || params[:organization].empty?
  101. messages[:organization] = 'Invalid!'
  102. end
  103. # validate image
  104. if params[:logo] && params[:logo] =~ /^data:image/i
  105. file = StaticAssets.data_url_attributes(params[:logo])
  106. if !file[:content] || !file[:mime_type]
  107. messages[:logo] = 'Unable to process image upload.'
  108. end
  109. end
  110. if !messages.empty?
  111. render json: {
  112. result: 'invalid',
  113. messages: messages,
  114. }
  115. return
  116. end
  117. # split url in http_type and fqdn
  118. settings = {}
  119. if !Setting.get('system_online_service')
  120. if params[:url] =~ %r{/^(http|https)://(.+?)$}
  121. Setting.set('http_type', $1)
  122. settings[:http_type] = $1
  123. Setting.set('fqdn', $2)
  124. settings[:fqdn] = $2
  125. end
  126. end
  127. # save organization
  128. Setting.set('organization', params[:organization])
  129. settings[:organization] = params[:organization]
  130. # save image
  131. if params[:logo] && params[:logo] =~ /^data:image/i
  132. # data:image/png;base64
  133. file = StaticAssets.data_url_attributes(params[:logo])
  134. # store image 1:1
  135. StaticAssets.store_raw(file[:content], file[:mime_type])
  136. end
  137. if params[:logo_resize] && params[:logo_resize] =~ /^data:image/i
  138. # data:image/png;base64
  139. file = StaticAssets.data_url_attributes(params[:logo_resize])
  140. # store image 1:1
  141. settings[:product_logo] = StaticAssets.store(file[:content], file[:mime_type])
  142. end
  143. # set changed settings
  144. settings.each {|key, value|
  145. Setting.set(key, value)
  146. }
  147. render json: {
  148. result: 'ok',
  149. settings: settings,
  150. }
  151. end
  152. private
  153. def auto_wizard_enabled_response
  154. return false if !AutoWizard.enabled?
  155. render json: {
  156. auto_wizard: true
  157. }
  158. true
  159. end
  160. def setup_done
  161. #return false
  162. count = User.all.count()
  163. done = true
  164. if count <= 2
  165. done = false
  166. end
  167. done
  168. end
  169. def setup_done_response
  170. return false if !setup_done
  171. groups = Group.where( active: true )
  172. addresses = EmailAddress.where( active: true )
  173. render json: {
  174. setup_done: true,
  175. import_mode: Setting.get('import_mode'),
  176. import_backend: Setting.get('import_backend'),
  177. system_online_service: Setting.get('system_online_service'),
  178. addresses: addresses,
  179. groups: groups,
  180. config: config_to_update,
  181. channel_driver: {
  182. email: EmailHelper.available_driver,
  183. },
  184. }
  185. true
  186. end
  187. def config_to_update
  188. {
  189. product_logo: Setting.get('product_logo')
  190. }
  191. end
  192. end