Add configuration mechanism
[coquelicot.git] / coquelicot_app.rb
index b32e526..cee4509 100644 (file)
@@ -6,6 +6,7 @@ require 'sass'
 require 'digest/sha1'
 require 'gettext'
 require 'coquelicot'
+require 'coquelicot/configure'
 require 'haml_gettext'
 
 module Coquelicot
@@ -38,13 +39,19 @@ module Coquelicot
     end
   end
 
-  class Application < Sinatra::Base
-    set :upload_password, '0e5f7d398e6f9cd1f6bac5cc823e363aec636495'
-
-    def password_match?(password)
-      return TRUE if settings.upload_password.nil?
-      (not password.nil?) && Digest::SHA1.hexdigest(password) == settings.upload_password
+  class << self
+    def settings
+      (class << self; Application; end)
+    end
+    def depot
+      @depot = Depot.new(settings.depot_path) if @depot.nil? || settings.depot_path != @depot.path
+      @depot
     end
+  end
+
+  class Application < Sinatra::Base
+    set :app_file, __FILE__
+    include Coquelicot::Configure
 
     GetText::bindtextdomain('coquelicot')
     before do
@@ -84,14 +91,16 @@ module Coquelicot
 
     post '/authenticate' do
       pass unless request.xhr?
-      unless password_match? params[:upload_password] then
+      unless authenticate(params) then
         error 403, "Forbidden"
       end
       'OK'
     end
 
     post '/upload' do
-      unless password_match? params[:upload_password] then
+      # if JS is disabled upload_token might be nil
+      params['upload_token'] = JSON.parse(params['upload_token']) unless params['upload_token'].nil?
+      unless authenticate(params) then
         error 403
       end
       if params[:file] then
@@ -102,9 +111,13 @@ module Coquelicot
         @error = "No file selected"
         return haml(:index)
       end
+      if tmpfile.lstat.size == 0 then
+        @error = "#{name} is empty"
+        return haml(:index)
+      end
       if params[:expire].nil? or params[:expire].to_i == 0 then
-        params[:expire] = Coquelicot.settings.default_expire
-      elsif params[:expire].to_i > Coquelicot.settings.maximum_expire then
+        params[:expire] = settings.default_expire
+      elsif params[:expire].to_i > settings.maximum_expire then
         error 403
       end
       expire_at = Time.now + 60 * params[:expire].to_i
@@ -190,6 +203,10 @@ module Coquelicot
         url << request.script_name
         "#{url}/"
       end
+
+      def auth_method
+        Coquelicot.settings.auth_method
+      end
     end
   end
 end