Using Paperclip with S3 authenticated url

Für Channelthing ist es besonders wichtig, dass die hochgeladenen Dokumente, die wir bei S3 ablegen, nur durch authentifizierte Benutzer abgerufen werden können. Daher haben wir uns eine kleine Extension zu Paperclip gebaut, die solch eine verschlüsselte URL von S3 erhält, sobald ein Dokument, etc. angezeigt werden soll.

Dazu muss man zum einen den Bucket erstmal “sicher” machen. Mit der kleinen Firefox-Extension S3Fox Organizer. Man erlaubt nur dem Owner auf das Bucket zuzugreifen.

Unsere Extension erhält nur die Methode authenticated_s3_url die über die get_link Methode von dem s3-Objekt unsere URL mit einem Hash zurückgibt der nur über eine bestimmte Zeit aufgerufen werden kann. Die url-Methode von Paperclip überscheiben wir anschliessend.

module Railslove
  module Paperclip
    module SecureS3
 
      def authenticated_s3_url(style = nil, include_updated_timestamp = true, time_limit = 15.minutes)
        url = original_filename.nil? ? interpolate(@default_url, style) : self.s3.interface.get_link(self.s3_bucket.to_s, self.path(style), time_limit) 
        include_updated_timestamp && updated_at ? [url, updated_at].compact.join(url.include?("?") ? "&" : "?") : url
      end
 
    end
  end
end
 
Paperclip::Attachment.send(:include, Railslove::Paperclip::SecureS3)
Paperclip::Attachment.class_eval("alias :url :authenticated_s3_url")

Man sollte daran denken auch die entsprechenden Rechte, jedem hochgeladenem Dokument zu setzen. Die können über den Parameter s3_permissions gesetzt werden:

paperclip:
    storage: "s3"
    s3_credentials: <%= "#{RAILS_ROOT}/config/s3.yml" %>
    path: ":attachment/:id/:style.:extension"
    bucket: "RailsloveLovesS3"
    s3_permssions: "authenticated-read"

Nun haben wir unser gewünschtes Ziel erreicht.

Payment processing mit Rails, Activemerchant (PayPal) und Finite State Machine

Wer schon überlegt hat PayPal als Bezahlungsmöglichkeit auf seiner Rails-Platform zu integrieren, stößt schnell auf die aufschlußreiche Lektüre der Pragmatic Programmers: Payment Processing with Paypal and Ruby. Dieses Buch legt einen sehr guten Grundstein für weitere Ideen wie sich eine Bezahlung via PayPal in einer RubyOnRails Anwendung realisieren lässt.
In diesem Blog-Post soll eine weitere Alternative vorgestellt werden, wie durch den Einsatz von Active Merchant und des Finite State Machine-Plugins eine einfache PayPal Express Bezahlung in Rails realisiert werden kann. Basierend auf dem Blogeintrag von Cody Fauser PayPal Express Payments with ActiveMerchant und, ebenso von Cody Fauster veröffentlichtem eBook Active Merchant; Show me the money! möchte ich den Paymentprozess mit Paypal um das FSM-Plugin erweitern.
Read more

Technorati Profile