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.

Kickstarting a Rails project #yai7d

Die ersten Tage der “Boswell” Entwicklung waren bereits sehr produktiv. Die User stories waren für das Projekt schnell geschrieben und die ersten Interface Skizzen gezeichnet. Ich denke wir werden diese bestimmt nochmal in einem eignen Post veröffentlichen, jetzt aber erstmal zum initialen Rails Setup.
Seit Version 2.3 werden ja Applikations-Templates unterstützt, die das Setup sehr einfach und schnell machen und die langweilige Installations-Arbeit abnehmen (siehe auch unseren Post von damals)
Auf Github hat Jeremy McAnally einige Templates gesammelt. Interessant sind auch die 54 forks des Projektes.

Für unsere Projekte – und eben für die 7 Tage “Boswell” App – haben wir unser eigenes Template:

Ein einfaches rails -m http://gist.github.com/raw/39969/d70e0ff89f59afbaad84593003db27349118bbac/railslove.rb MyNextMySpace macht dann folgendes:

und damit Happy Coding! ;)

Der Start in eine neue #yai7d-Woche: “Boswell”

Es hat nicht lange gedauert bis wir unseren ersten Kandidaten für die “Your app in 7 days”-Aktion gefunden haben: Mr. X möchte “Boswell” entwickeln – wenn das mal nicht spannend klingt! Leider können wir diesmal bis zum Launch keine weiteren Details über das konkrete Produkt berichten, aber die ersten Berichte über die technische Umsetzung sind bereits in Planung.

… jetzt aber ran ans Werk!

your app in 7 days – #yai7d

Wenn in der zweit-regnerischsten Stadt Europas die ersten Sonnenstrahlen des Jahres durchs Fenster fallen, so langsam aber sicher die Temperaturen steigen und der Frühling in der Stadt beginnt, dann kann von Winter-Lethargie im Railslove Office keine Rede mehr sein: Wir sind heiß auf neue Herausforderungen und haben daher eine ganz besondere Frühlingsaktion ins Leben gerufen: Wir entwickeln deine App – in sieben Tagen! Wir planen dein Vorhaben am Montag und launchen die fertige Anwendung am Sonntag – natürlich zusammen mit dir und Kaffee und Kuchen im Railslove Office. Über die Woche twittern, flickrn und bloggen wir über das Projekt, so dass am Sonntag direkt die ersten Benutzer Schlange stehen.

Das ist nicht euer Ernst!?

Doch, tatsächlich! Wir lieben es einfach Web-Anwendung zu entwickeln, wir lieben agile Prozesse, flexibles Handeln und frische Ideen; und für dich ist es die Gelegenheit in kurzer Zeit eine Version 1.0 deiner Idee online zu sehen – ohne alpha, ohne beta.

Bleibt dabei nicht die Qualität auf der Strecke?

Keineswegs! Selbstverständlich garantieren wir unseren bekannten Qualitätsanspruch. Verlass dich auf unsere Best Practices aus über 10 Jahren Web- und mehr als vier Jahren Rails-Entwicklung. Durch iteratives prototyping bestimmst du jeden Tag wie die Entwicklung weitergeht und unser test-driven development sichert die Funktionstüchtigkeit des Codes.

An wen richtet sich das Angebot?

An jeden, der eine spannende Idee im Kopf hat. Wir haben bereits mit größeren Companies, wie jungen StartUps gearbeitet, aber auch mit Non-Profit-Organisationen oder Privatpersonen. Die Idee zählt – und die Bereitschaft eine Woche eng mit uns zusammenzuarbeiten.

Okay, wie kann ich mitmachen?

Ganz einfach: Lade dir unser Client Worksheet, nimm dir eine Stunde Zeit und denke noch einmal über deine Idee nach. Bleib realistisch: In 168 Stunden kann man eine Menge umsetzen, sieben Tage sind jedoch nicht sieben Monate. Versuche alle Fragen so genau wie möglich zu beantworten und schick uns das Worksheet bis Donnerstag der Vorwoche. Spätestens bis Samstag erhälst du von uns eine Antwort, ob wir deine Idee umsetzen werden. Am Montag treffen wir uns dann in unserem Büro und planen gemeinsam die gesamte Umsetzung, tägliche Prototypen helfen uns den Kurs zu halten. Bis Sonntag läuft die neue Anwendung auf deinem Server!

Weitere Informationen gibt’s in Kürze auf einer eigenen Aktionsseite. Wir freuen uns auf deine E-Mail an team@railslove.com!

Die kleingedruckten Regeln: Schicke uns das ausgefüllte Client Worksheet bis Donnerstag. Aus allen Einsendungen entscheiden wir uns bis Samstag. Die Zusage enthält dann unser Angebot. Wir legen die technische Umsetzung deiner Anwendung fest. Das Design entsteht in Zusammenarbeit nach deinen genauen Vorstellungen. Wir werden öffentlich über sämtliche Entwicklungsaktivitäten berichten – auf Wunsch pseudonymisieren wir dabei dein Produkt oder dich.

Barcamp Cologne drei und wir sind dabei!

Railslove hat heute den Kampf um drei von zweihundertvierzig Plätzen gewonnen! Auch allen anderen ein herzlichen Glückwunsch – einfach war das nicht. Nach genau 15 min waren alle Plätze vergeben.

Wir freuen uns aber, dass wir dabei sein dürfen und für die ungeduldigen unter uns gibt es auch den live-countdown-stunden-zähler für den zweiten Bildschirm.

Das Barcamp findet am 06. und 07. Juni in den Räumen der QSC AG statt. Alle weiteren Informationen und ein paar Banner sind auf der BarcampCologne-Seite zu finden.

Barcamp Cologne wir kommen!

Barcamp Cologne 3

Next Page →