mirror of
https://github.com/lingble/chatwoot.git
synced 2025-12-03 11:33:55 +00:00
This PR adds the following changes 1. Refactor `microsoft/callbacks_controller` to move common logic to `oauth_callback_controller`, most of the logic is re-used for Google 2. Add UI components, `googleClient` and I18n entries for Google login 3. Add Google callback and inbox creation 4. Add a `joinUrl` utility along with specs (need to move it to utils) 5. Add `GoogleConcern`, `Google::AuthorizationsController` and `Google::CallbacksController` > Note: The UI is hidden for now, so we can merge this without any hiccups, to enable it just revert the commit `05c18de` ### Preview https://github.com/chatwoot/chatwoot/assets/18097732/1606d150-4561-49dc-838d-e0b00fe49ce3 ### Linear Tickers [CW-3370](https://linear.app/chatwoot/issue/CW-3370) [CW-3371](https://linear.app/chatwoot/issue/CW-3371) --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
33 lines
1.1 KiB
Ruby
33 lines
1.1 KiB
Ruby
class Api::V1::Accounts::Google::AuthorizationsController < Api::V1::Accounts::BaseController
|
|
include GoogleConcern
|
|
before_action :check_authorization
|
|
|
|
def create
|
|
email = params[:authorization][:email]
|
|
redirect_url = google_client.auth_code.authorize_url(
|
|
{
|
|
redirect_uri: "#{base_url}/google/callback",
|
|
scope: 'email profile https://mail.google.com/',
|
|
response_type: 'code',
|
|
prompt: 'consent', # the oauth flow does not return a refresh token, this is supposed to fix it
|
|
access_type: 'offline', # the default is 'online'
|
|
client_id: GlobalConfigService.load('GOOGLE_OAUTH_CLIENT_ID', nil)
|
|
}
|
|
)
|
|
|
|
if redirect_url
|
|
cache_key = "google::#{email.downcase}"
|
|
::Redis::Alfred.setex(cache_key, Current.account.id, 5.minutes)
|
|
render json: { success: true, url: redirect_url }
|
|
else
|
|
render json: { success: false }, status: :unprocessable_entity
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def check_authorization
|
|
raise Pundit::NotAuthorizedError unless Current.account_user.administrator?
|
|
end
|
|
end
|