47 lines
1.3 KiB
Ruby
47 lines
1.3 KiB
Ruby
class Google::CallbacksController < OauthCallbackController
|
|
include GoogleConcern
|
|
|
|
def find_channel_by_email
|
|
# find by imap_login first, and then by email
|
|
# this ensures the legacy users can migrate correctly even if inbox email address doesn't match
|
|
imap_channel = Channel::Email.find_by(imap_login: users_data['email'], account: account)
|
|
return imap_channel if imap_channel
|
|
|
|
Channel::Email.find_by(email: users_data['email'], account: account)
|
|
end
|
|
|
|
private
|
|
|
|
def verify_scopes
|
|
granted_scopes = parsed_body['scope']&.split || []
|
|
required_scopes = scope.split
|
|
|
|
missing_scopes = required_scopes - granted_scopes
|
|
return if missing_scopes.empty?
|
|
|
|
raise StandardError, I18n.t('errors.oauth.insufficient_scopes', scopes: missing_scopes.join(', '))
|
|
end
|
|
|
|
def provider_name
|
|
'google'
|
|
end
|
|
|
|
def imap_address
|
|
'imap.gmail.com'
|
|
end
|
|
|
|
def oauth_client
|
|
# from GoogleConcern
|
|
google_client
|
|
end
|
|
|
|
def handle_error(exception)
|
|
ChatwootExceptionTracker.new(exception).capture_exception
|
|
|
|
error_message = exception.message || I18n.t('errors.oauth.authorization_failed')
|
|
redirect_url = "#{ENV.fetch('FRONTEND_URL', 'http://localhost:3000')}/app/accounts/#{account.id}/settings/inboxes/new/email"
|
|
|
|
redirect_to "#{redirect_url}?error=#{CGI.escape(error_message)}"
|
|
end
|
|
end
|