Sha256: 6768e6385f0ac1046547d4b72e4169403f543b5925dca96d94216aba1679c3b2

Contents?: true

Size: 1.67 KB

Versions: 2

Compression:

Stored size: 1.67 KB

Contents

module JekyllAdmin
  class Server < Sinatra::Base
    namespace "/static_files" do
      get do
        json static_files.map(&:to_api)
      end

      get "/*" do
        if static_file
          json static_file.to_api(:include_content => true)
        elsif !static_files_for_path.empty?
          json static_files_for_path.map(&:to_api)
        else
          render_404
        end
      end

      put "/*" do
        write_file(static_file_path, static_file_body)
        ensure_static_file_exists
        json static_file.to_api(:include_content => true)
      end

      delete "/*" do
        ensure_static_file_exists
        delete_file static_file_path
        content_type :json
        status 200
        halt
      end

      private

      def static_file_path
        if params["splat"]
          params["static_file_id"] = params["splat"].first
        end
        sanitized_path params["static_file_id"]
      end

      def static_file_body
        if !request_payload["raw_content"].to_s.empty?
          request_payload["raw_content"].to_s
        else
          Base64.decode64 request_payload["encoded_content"].to_s
        end
      end

      def static_files
        site.static_files
      end

      def file_list_dir(path)
      end

      def static_file
        static_files.find { |f| f.path == static_file_path }
      end

      def static_files_for_path
        # Joined with / to ensure user can't do partial paths
        base_path = File.join(static_file_path, "/")
        static_files.select do |f|
          f.path.start_with? base_path
        end
      end

      def ensure_static_file_exists
        render_404 if static_file.nil?
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jekyll-admin-0.1.1 lib/jekyll-admin/server/static_file.rb
jekyll-admin-0.1.0 lib/jekyll-admin/server/static_file.rb