Class: Webhookdb::DatabaseDocument
- Inherits:
-
Object
- Object
- Webhookdb::DatabaseDocument
- 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
- #check_url(url, now: Time.now) ⇒ Object
-
#initialize ⇒ DatabaseDocument
constructor
A new instance of DatabaseDocument.
- #presigned_view_url(expire_at:, **kw) ⇒ Object
- #sign_url(path, expire_at:, params: {}) ⇒ Object
Constructor Details
#initialize ⇒ DatabaseDocument
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 |