Class: Gitlab::Spamcheck::Client

Inherits:
Object
  • Object
show all
Includes:
Spam::SpamConstants
Defined in:
lib/gitlab/spamcheck/client.rb

Constant Summary collapse

DEFAULT_TIMEOUT_SECS =
2
ACTION_MAPPING =
{
  create: ::Spamcheck::Action::CREATE,
  update: ::Spamcheck::Action::UPDATE
}.freeze
URL_SCHEME_REGEX =
%r{^grpc://|^tls://}

Constants included from Spam::SpamConstants

Spam::SpamConstants::ALLOW, Spam::SpamConstants::BLOCK_USER, Spam::SpamConstants::CONDITIONAL_ALLOW, Spam::SpamConstants::DISALLOW, Spam::SpamConstants::ERROR_TYPE, Spam::SpamConstants::NOOP, Spam::SpamConstants::OVERRIDE_VIA_ALLOW_POSSIBLE_SPAM, Spam::SpamConstants::SUPPORTED_VERDICTS

Instance Method Summary collapse

Constructor Details

#initializeClient

Returns a new instance of Client.



20
21
22
23
24
25
26
27
28
# File 'lib/gitlab/spamcheck/client.rb', line 20

def initialize
  @endpoint_url = Gitlab::CurrentSettings.current_application_settings.spam_check_endpoint_url

  @creds = client_creds(@endpoint_url)

  # remove the `grpc://` or 'tls://' as it's only useful to ensure we're expecting to
  # connect with Spamcheck
  @endpoint_url = @endpoint_url.sub(URL_SCHEME_REGEX, '')
end

Instance Method Details

#spam?(spammable:, user:, context: {}, extra_features: {}) ⇒ Boolean

Returns:

  • (Boolean)

Raises:



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/gitlab/spamcheck/client.rb', line 30

def spam?(spammable:, user:, context: {}, extra_features: {})
   = { 'authorization' => Gitlab::CurrentSettings.spam_check_api_key || '' }
  protobuf_args = { spammable: spammable, user: user, context: context, extra_features: extra_features }

  pb, grpc_method = build_protobuf(**protobuf_args)
  response = grpc_method.call(pb, metadata: )

  raise Error, response.error unless response.error.blank?

  Result.new(response)
end