Class: FaspClient::Provider

Inherits:
ApplicationRecord show all
Defined in:
app/models/fasp_client/provider.rb

Constant Summary

Constants inherited from ApplicationRecord

ApplicationRecord::CATEGORIES

Instance Method Summary collapse

Instance Method Details

#account_search(query, limit: 20) ⇒ Object



68
69
70
# File 'app/models/fasp_client/provider.rb', line 68

def (query, limit: 20)
  AccountSearchService.new(provider: self).search(query: query, limit: limit)
end

#capability_idsObject



46
47
48
# File 'app/models/fasp_client/provider.rb', line 46

def capability_ids
  capabilities.map { |it| it["id"] }.uniq.map(&:to_sym)
end

#capability_versions(capability) ⇒ Object



42
43
44
# File 'app/models/fasp_client/provider.rb', line 42

def capability_versions(capability)
  capabilities.filter_map { |it| it["version"] if it["id"] == capability.to_s }
end

#disable(capability, version) ⇒ Object



59
60
61
62
# File 'app/models/fasp_client/provider.rb', line 59

def disable(capability, version)
  return unless has_capability?(capability, version)
  CapabilityActivationService.new(provider: self, capability: capability, version: version).disable!
end

#enable(capability, version) ⇒ Object



54
55
56
57
# File 'app/models/fasp_client/provider.rb', line 54

def enable(capability, version)
  return unless has_capability?(capability, version)
  CapabilityActivationService.new(provider: self, capability: capability, version: version).enable!
end

#fasp_linzer_keyObject



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'app/models/fasp_client/provider.rb', line 96

def fasp_linzer_key
  asn1 = OpenSSL::ASN1.Sequence(
    [
      OpenSSL::ASN1.Sequence(
        [
          OpenSSL::ASN1.ObjectId("ED25519")
        ]
      ),
      OpenSSL::ASN1.BitString(verify_key.to_bytes)
    ]
  )
  pem = "    -----BEGIN PUBLIC KEY-----\n    \#{Base64.strict_encode64(asn1.to_der)}\n    -----END PUBLIC KEY-----\n  PEM\n  Linzer.new_ed25519_key(pem, uuid)\nend\n"

#fetch_provider_infoObject



50
51
52
# File 'app/models/fasp_client/provider.rb', line 50

def fetch_provider_info
  assign_attributes(ProviderInfoService.new(provider: self).to_provider_attributes) if approved?
end

#fingerprintObject



34
35
36
# File 'app/models/fasp_client/provider.rb', line 34

def fingerprint
  Digest::SHA256.base64digest(verify_key)
end

#follow_recommendation(account_uri) ⇒ Object



64
65
66
# File 'app/models/fasp_client/provider.rb', line 64

def follow_recommendation()
  FollowRecommendationService.new(provider: self).for(account_uri: )
end

#has_capability?(capability, version = nil) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
# File 'app/models/fasp_client/provider.rb', line 38

def has_capability?(capability, version = nil)
  version ? capability_versions(capability).include?(version) : capability_versions(capability).any?
end

#local_linzer_keyObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/fasp_client/provider.rb', line 76

def local_linzer_key
  asn1 = OpenSSL::ASN1.Sequence(
    [
      OpenSSL::ASN1::Integer(OpenSSL::BN.new(0)),
      OpenSSL::ASN1.Sequence(
        [
          OpenSSL::ASN1.ObjectId("ED25519")
        ]
      ),
      OpenSSL::ASN1.OctetString(OpenSSL::ASN1.OctetString(ed25519_signing_key.to_bytes).to_der)
    ]
  )
  pem = "    -----BEGIN PRIVATE KEY-----\n    \#{Base64.strict_encode64(asn1.to_der)}\n    -----END PRIVATE KEY-----\n  PEM\n  Linzer.new_ed25519_key(pem, server_id)\nend\n"

#valid_request?(request) ⇒ Boolean

Returns:

  • (Boolean)


72
73
74
# File 'app/models/fasp_client/provider.rb', line 72

def valid_request?(request)
  HttpRequestService.new(provider: self).verified?(request)
end

#verify_keyObject



30
31
32
# File 'app/models/fasp_client/provider.rb', line 30

def verify_key
  Ed25519::VerifyKey.new(Base64.strict_decode64(public_key))
end