2021-06-08 01:23:25 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Subscriptions
|
|
|
|
class BaseSubscription < GraphQL::Schema::Subscription
|
|
|
|
object_class Types::BaseObject
|
|
|
|
field_class Types::BaseField
|
|
|
|
|
|
|
|
def initialize(object:, context:, field:)
|
|
|
|
super
|
|
|
|
|
|
|
|
# Reset user so that we don't use a stale user for authorization
|
|
|
|
current_user.reset if current_user
|
|
|
|
end
|
|
|
|
|
2023-06-20 00:43:36 +05:30
|
|
|
# We override graphql-ruby's default `subscribe` since it returns
|
|
|
|
# :no_response instead, which leads to empty hashes rendered out
|
|
|
|
# to the caller which has caused problems in the client.
|
|
|
|
#
|
|
|
|
# Eventually, we should move to an approach where the caller receives
|
|
|
|
# a response here upon subscribing, but we don't need this currently
|
|
|
|
# because Vue components also perform an initial fetch query.
|
|
|
|
# See https://gitlab.com/gitlab-org/gitlab/-/issues/402614
|
|
|
|
def subscribe(*)
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
|
2021-06-08 01:23:25 +05:30
|
|
|
def authorized?(*)
|
|
|
|
raise NotImplementedError
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def unauthorized!
|
|
|
|
unsubscribe if context.query.subscription_update?
|
|
|
|
|
|
|
|
raise GraphQL::ExecutionError, 'Unauthorized subscription'
|
|
|
|
end
|
|
|
|
|
|
|
|
def current_user
|
|
|
|
context[:current_user]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|