Class: Webhookdb::DatabaseDocument

Inherits:
Object
  • Object
show all
Includes:
Appydays::Configurable
Defined in:
lib/webhookdb/database_document.rb

Overview

Simple model for jamming stuff into the database. Since WebhookDB isn’t a resource-heavy application, and it’s meant to be self-hosted, we may as well do this over pulling in an S3 or GCS dependeency.

Instance Method Summary collapse

Constructor Details

#initializeDatabaseDocument

Returns a new instance of DatabaseDocument.



20
21
22
23
# File 'lib/webhookdb/database_document.rb', line 20

def initialize(*)
  super
  self.encryption_secret ||= SecureRandom.hex(32)
end

Instance Method Details

#check_url(url, now: Time.now) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/webhookdb/database_document.rb', line 34

def check_url(url, now: Time.now)
  sig_idx = url.rindex("&sig=")
  return false if sig_idx.nil?
  without_sig = url[...sig_idx]
  got_sig = url[(sig_idx + 5)..]
  real_sig = self.digest_url(without_sig)
  return false unless ActiveSupport::SecurityUtils.secure_compare(got_sig, real_sig)
  expires = CGI.parse(URI(url).query || "?")["expire_at"]
  return false unless expires
  t = Time.at(expires.first.to_i)
  return false if t <= now
  return true
end

#presigned_view_url(expire_at:, **kw) ⇒ Object



54
55
56
57
# File 'lib/webhookdb/database_document.rb', line 54

def presigned_view_url(expire_at:, **kw)
  url = "#{Webhookdb.api_url}/admin/v1/database_documents/#{self.id}/view"
  return self.sign_url(url, expire_at:, **kw)
end

#sign_url(path, expire_at:, params: {}) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/webhookdb/database_document.rb', line 25

def sign_url(path, expire_at:, params: {})
  uri = URI(path)
  q = params.merge(expire_at: expire_at.to_i)
  uri.query = HTTParty::Request::NON_RAILS_QUERY_STRING_NORMALIZER.call(q)
  url = uri.to_s
  sig = self.digest_url(url)
  return url + "&sig=#{sig}"
end