Module: Bidi2pdf::Bidi::Interceptor

Included in:
AddHeadersInterceptor, AuthInterceptor
Defined in:
lib/bidi2pdf/bidi/interceptor.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



6
7
8
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 6

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#clientObject



74
75
76
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 74

def client
  @client
end

#contextObject

Raises:

  • (NotImplementedError)


18
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 18

def context = raise(NotImplementedError, "Interceptors must implement context")

#handle_event(response) ⇒ Object

rubocop: disable Metrics/AbcSize



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 49

def handle_event(response)
  event_response = response["params"]

  return unless event_response["intercepts"]&.include?(interceptor_id) && event_response["isBlocked"]

  navigation_id = event_response["navigation"]
  network_id = event_response["request"]["request"]
  url = event_response["request"]["url"]

  # Log the interception
  Bidi2pdf.logger.debug1 "Interceptor #{interceptor_id} handling event: #{navigation_id}/#{network_id}/#{url}"

  process_interception(event_response, navigation_id, network_id, url)
rescue StandardError => e
  Bidi2pdf.logger.error "Error handling event: #{e.message}"
  Bidi2pdf.logger.error e.backtrace.join("\n")
  raise e
end

#interceptor_idObject

rubocop: enable Metrics/AbcSize



70
71
72
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 70

def interceptor_id
  @interceptor_id
end

#process_interception(_event_response, _navigation_id, _network_id, _url) ⇒ Object

Raises:

  • (NotImplementedError)


20
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 20

def process_interception(_event_response, _navigation_id, _network_id, _url) = raise(NotImplementedError, "Interceptors must implement process_interception")

#register_with_client(client:) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 22

def register_with_client(client:)
  @client = client

  cmd = Bidi2pdf::Bidi::Commands::AddIntercept.new context: context, phases: self.class.phases, url_patterns: url_patterns

  client.send_cmd_and_wait(cmd) do |response|
    @interceptor_id = response["result"]["intercept"]

    Bidi2pdf.logger.debug2 "Interceptor added: #{@interceptor_id}"

    @handle_event_listener = client.on_event(*self.class.events, &method(:handle_event))

    self
  end
end

#unregister_with_client(client:) ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 38

def unregister_with_client(client:)
  return unless @handle_event_listener

  client.remove_event_listener(*self.class.events, @handle_event_listener)

  Bidi2pdf.logger.debug2 "Interceptor removed: #{@interceptor_id}"

  @handle_event_listener = nil
end

#url_patternsObject

Raises:

  • (NotImplementedError)


16
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 16

def url_patterns = raise(NotImplementedError, "Interceptors must implement url_patterns")

#validate_phases!Object

Raises:

  • (ArgumentError)


78
79
80
81
82
# File 'lib/bidi2pdf/bidi/interceptor.rb', line 78

def validate_phases!
  valid_phases = [Phases::BEFORE_REQUEST, Phases::RESPONSE_STARTED, Phases::AUTH_REQUIRED]

  raise ArgumentError, "Unsupported phase(s): #{self.class.phases}" unless self.class.phases.all? { |phase| valid_phases.include?(phase) }
end