diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index b2678f794..097a40dab 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -1,16 +1,14 @@ class Api::BaseController < ApplicationController respond_to :json before_action :authenticate_user! - unless Rails.env.development? - rescue_from StandardError do |exception| - Raven.capture_exception(exception) - render json: { error: '500 error', message: exception.message }.to_json, status: 500 - end - end private def set_conversation @conversation ||= current_account.conversations.find_by(display_id: params[:conversation_id]) end + + def check_billing_enabled + raise ActionController::RoutingError, 'Not Found' unless ENV['BILLING_ENABLED'] + end end diff --git a/app/controllers/api/v1/subscriptions_controller.rb b/app/controllers/api/v1/subscriptions_controller.rb index 4ddd5a161..92e4f7f13 100644 --- a/app/controllers/api/v1/subscriptions_controller.rb +++ b/app/controllers/api/v1/subscriptions_controller.rb @@ -1,6 +1,8 @@ -class Api::V1::SubscriptionsController < ApplicationController +class Api::V1::SubscriptionsController < Api::BaseController skip_before_action :check_subscription + before_action :check_billing_enabled + def index render json: current_account.subscription_data end diff --git a/app/controllers/api/v1/webhooks_controller.rb b/app/controllers/api/v1/webhooks_controller.rb index 49ee1ec92..d15b414c1 100644 --- a/app/controllers/api/v1/webhooks_controller.rb +++ b/app/controllers/api/v1/webhooks_controller.rb @@ -4,6 +4,7 @@ class Api::V1::WebhooksController < ApplicationController skip_before_action :check_subscription before_action :login_from_basic_auth, only: [:chargebee] + before_action :check_billing_enabled, only: [:chargebee] def chargebee chargebee_consumer.consume head :ok diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 27e627a21..f38c45c63 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -67,7 +67,7 @@ class ApplicationController < ActionController::Base def check_subscription # This block is left over from the initial version of chatwoot # We might reuse this later in the hosted version of chatwoot. - return unless ENV['BILLING_ENABLED'] + return if !ENV['BILLING_ENABLED'] || !current_user if current_subscription.trial? && current_subscription.expiry < Date.current render json: { error: 'Trial Expired' }, status: :trial_expired diff --git a/config/routes.rb b/config/routes.rb index 66f29cb4c..ce85f0d6c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -94,17 +94,15 @@ Rails.application.routes.draw do end # this block is only required if subscription via chargebee is enabled - if ENV['BILLING_ENABLED'] - resources :subscriptions, only: [:index] do - collection do - get :summary - end + resources :subscriptions, only: [:index] do + collection do + get :summary end + end - resources :webhooks, only: [] do - collection do - post :chargebee - end + resources :webhooks, only: [] do + collection do + post :chargebee end end end diff --git a/spec/controllers/api/v1/subscriptions_controller_spec.rb b/spec/controllers/api/v1/subscriptions_controller_spec.rb new file mode 100644 index 000000000..ef7975183 --- /dev/null +++ b/spec/controllers/api/v1/subscriptions_controller_spec.rb @@ -0,0 +1,46 @@ +require 'rails_helper' + +RSpec.describe 'Subscriptions API', type: :request do + let(:account) { create(:account) } + + describe 'GET /api/v1/subscriptions' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + ENV['BILLING_ENABLED'] = 'true' + + get '/api/v1/subscriptions' + + expect(response).to have_http_status(:unauthorized) + + ENV['BILLING_ENABLED'] = nil + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, account: account, role: :agent) } + + it 'returns all subscriptions' do + ENV['BILLING_ENABLED'] = 'true' + + get '/api/v1/subscriptions', + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + expect(JSON.parse(response.body)).to eq(account.subscription_data.as_json) + + ENV['BILLING_ENABLED'] = nil + end + + it 'throws 404 error if env variable is not set' do + ENV['BILLING_ENABLED'] = nil + + get '/api/v1/subscriptions', + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:not_found) + end + end + end +end