external_credentials_controller.rb 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
  2. class ExternalCredentialsController < ApplicationController
  3. prepend_before_action :permission_check
  4. def index
  5. model_index_render(ExternalCredential, params)
  6. end
  7. def show
  8. model_show_render(ExternalCredential, params)
  9. end
  10. def create
  11. model_create_render(ExternalCredential, params)
  12. end
  13. def update
  14. model_update_render(ExternalCredential, params)
  15. end
  16. def destroy
  17. model_destroy_render(ExternalCredential, params)
  18. end
  19. def app_verify
  20. render json: { attributes: ExternalCredential.app_verify(params.permit!.to_h) }, status: :ok
  21. rescue => e
  22. render json: { error: e.message }, status: :ok
  23. end
  24. def link_account
  25. provider = params[:provider].downcase
  26. attributes = ExternalCredential.request_account_to_link(provider)
  27. session[:request_token] = attributes[:request_token]
  28. redirect_to attributes[:authorize_url]
  29. end
  30. def callback
  31. provider = params[:provider].downcase
  32. channel = ExternalCredential.link_account(provider, session[:request_token], params.permit!.to_h)
  33. session[:request_token] = nil
  34. redirect_to app_url(provider, channel.id)
  35. end
  36. private
  37. def callback_url(provider)
  38. ExternalCredential.callback_url(provider)
  39. end
  40. def app_url(provider, channel_id)
  41. ExternalCredential.app_url(provider, channel_id)
  42. end
  43. def permission_check
  44. if params[:id].present? && ExternalCredential.exists?(params[:id])
  45. external_credential = ExternalCredential.find(params[:id])
  46. raise 'No such ExternalCredential!' if !external_credential
  47. authentication_check(permission: ["admin.channel_#{external_credential.name}"])
  48. return
  49. end
  50. if params[:name].present? || params[:provider].present?
  51. if params[:name].present?
  52. name = params[:name].downcase
  53. elsif params[:provider].present?
  54. name = params[:provider].downcase
  55. else
  56. raise 'Missing name/provider!'
  57. end
  58. authentication_check(permission: ["admin.channel_#{name}"])
  59. return
  60. end
  61. authentication_check(permission: ['admin'])
  62. end
  63. end