external_credentials_controller.rb 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. class ExternalCredentialsController < ApplicationController
  3. prepend_before_action :authenticate_and_authorize!
  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. logger.error e
  23. render json: { error: e.message }, status: :ok
  24. end
  25. def link_account
  26. provider = params[:provider].downcase
  27. attributes = ExternalCredential.request_account_to_link(provider, params)
  28. session[:request_token] = attributes[:request_token]
  29. session[:channel_id] = params[:channel_id]
  30. session[:shared_mailbox] = params[:shared_mailbox]
  31. redirect_to attributes[:authorize_url], allow_other_host: true
  32. end
  33. def callback
  34. provider = params[:provider].downcase
  35. channel = ExternalCredential.link_account(provider, session[:request_token], link_params)
  36. return redirect_to(channel), allow_other_host: true if channel.instance_of?(String)
  37. session[:request_token] = nil
  38. session[:channel_id] = nil
  39. session[:shared_mailbox] = nil
  40. redirect_to app_url(provider, channel.id), allow_other_host: true
  41. end
  42. private
  43. def link_params
  44. params.permit!.to_h.merge(channel_id: session[:channel_id], shared_mailbox: session[:shared_mailbox])
  45. end
  46. def callback_url(provider)
  47. ExternalCredential.callback_url(provider)
  48. end
  49. def app_url(provider, channel_id)
  50. ExternalCredential.app_url(provider, channel_id)
  51. end
  52. end