Class: Linzer::HTTP::SignatureFeature

Inherits:
HTTP::Feature
  • Object
show all
Defined in:
lib/linzer/http/signature_feature.rb

Overview

Note:

This file must be explicitly required: require "linzer/http/signature_feature"

HTTP.rb gem feature for automatic request signing.

This feature integrates with the http.rb gem to automatically sign outgoing HTTP requests. It wraps each request before sending and adds the signature and signature-input headers.

Examples:

Basic usage

require "linzer/http/signature_feature"

key = Linzer.generate_ed25519_key("my-key")
response = HTTP
  .use(http_signature: { key: key })
  .get("https://example.com/api")

With custom components and parameters

response = HTTP
  .use(http_signature: {
    key: key,
    covered_components: %w[@method @authority @path date],
    params: { nonce: SecureRandom.hex(16) }
  })
  .post("https://example.com/api", json: { data: "value" })

See Also:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(key:, params: {}, covered_components: default_components, profile: nil) ⇒ SignatureFeature

Creates a new signature feature.

Parameters:

  • key (Linzer::Key)

    The signing key (required)

  • params (Hash) (defaults to: {})

    Additional signature parameters (created, nonce, tag, etc.)

  • covered_components (Array<String>) (defaults to: default_components)

    Components to include in the signature. Defaults to @method, @request-target, @authority, and date.

  • profile (Symbol, Linzer::Signature::Profile::Base, nil) (defaults to: nil)

    Optional signing profile used when generating signatures. When provided, the profile may supply default covered components and signature parameters.

Raises:

  • (HTTP::Error)

    If key is nil or invalid



62
63
64
65
66
67
# File 'lib/linzer/http/signature_feature.rb', line 62

def initialize(key:, params: {}, covered_components: default_components, profile: nil)
  @fields = Array(covered_components)
  @key    = validate_key(key)
  @params = Hash(params)
  @profile = profile
end

Instance Attribute Details

#fieldsArray<String> (readonly)

Returns The components to include in signatures.

Returns:

  • (Array<String>)

    The components to include in signatures



70
71
72
# File 'lib/linzer/http/signature_feature.rb', line 70

def fields
  @fields
end

#paramsHash (readonly)

Returns Additional signature parameters.

Returns:

  • (Hash)

    Additional signature parameters



73
74
75
# File 'lib/linzer/http/signature_feature.rb', line 73

def params
  @params
end

#profileLinzer::Signature::Profile::Base, ... (readonly)

Returns Optional signing profile used during signature generation.

Returns:



77
78
79
# File 'lib/linzer/http/signature_feature.rb', line 77

def profile
  @profile
end

Instance Method Details

#default_covered_componentsArray<String> Also known as: default_components

Returns the default covered components.

Returns:



96
97
98
# File 'lib/linzer/http/signature_feature.rb', line 96

def default_covered_components
  Linzer::Options::DEFAULT[:covered_components]
end

#wrap_request(request) ⇒ HTTP::Request

Wraps an outgoing request to add signature headers.

Called automatically by http.rb for each request.

Parameters:

  • request (HTTP::Request)

    The outgoing request

Returns:

  • (HTTP::Request)

    The request with signature headers added



85
86
87
88
89
90
91
92
# File 'lib/linzer/http/signature_feature.rb', line 85

def wrap_request(request)
  Linzer.sign! request,
               key:        key,
               components: fields,
               params:     params,
               profile:    profile
  request
end