summaryrefslogtreecommitdiff
path: root/app/services
diff options
context:
space:
mode:
authorHannes Rosenögger <123haynes@gmail.com>2015-02-14 16:04:45 +0100
committerDouwe Maan <douwe@gitlab.com>2015-02-17 22:20:44 +0100
commit9bf8480b4a0d3ea6e284c4bd8bf26243f3f3f6f5 (patch)
tree2365d68b1905ddce4d20f226f9e888c29bc0dcf4 /app/services
parent0da0d800f2a0db9d9c16cf5e2feb0dd80b528223 (diff)
downloadgitlab-ce-9bf8480b4a0d3ea6e284c4bd8bf26243f3f3f6f5.tar.gz
Generalize the image upload in markdown
This commit generalizes the image upload via drag and drop so it supports all files. It also adds access control for these files.
Diffstat (limited to 'app/services')
-rw-r--r--app/services/projects/file_service.rb55
-rw-r--r--app/services/projects/image_service.rb39
2 files changed, 55 insertions, 39 deletions
diff --git a/app/services/projects/file_service.rb b/app/services/projects/file_service.rb
new file mode 100644
index 00000000000..8c149bf53a1
--- /dev/null
+++ b/app/services/projects/file_service.rb
@@ -0,0 +1,55 @@
+module Projects
+ class FileService < BaseService
+ include Rails.application.routes.url_helpers
+ def initialize(repository, params, root_url)
+ @repository, @params, @root_url = repository, params.dup, root_url
+ end
+
+ def execute
+ uploader = FileUploader.new("#{Rails.root}/uploads", upload_path, accepted_files)
+ file = @params['markdown_file']
+
+ if file
+ alt = file.original_filename
+ uploader.store!(file)
+ filename = nil
+ if image?(file)
+ filename=File.basename(alt, '.*')
+ else
+ filename=File.basename(alt)
+ end
+ link = {
+ 'alt' => filename,
+ 'url' => uploader.secure_url,
+ 'is_image' => image?(file)
+ }
+ else
+ link = nil
+ end
+ end
+
+ protected
+
+ def accepted_files
+ # insert accepted mime types here (e.g %w(jpg jpeg gif png))
+ nil
+ end
+
+ def accepted_images
+ %w(jpg jpeg gif png)
+ end
+
+ def image?(file)
+ accepted_images.map { |format| file.content_type.include? format }.any?
+ end
+
+ def upload_path
+ base_dir = FileUploader.generate_dir
+ File.join(@repository.path_with_namespace, base_dir)
+ end
+
+ def correct_mime_type?(file)
+ accepted_files.map { |format| image.content_type.include? format }.any?
+ end
+ end
+end
diff --git a/app/services/projects/image_service.rb b/app/services/projects/image_service.rb
deleted file mode 100644
index 7ca7e82c4a3..00000000000
--- a/app/services/projects/image_service.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-module Projects
- class ImageService < BaseService
- include Rails.application.routes.url_helpers
- def initialize(repository, params, root_url)
- @repository, @params, @root_url = repository, params.dup, root_url
- end
-
- def execute
- uploader = FileUploader.new('uploads', upload_path, accepted_images)
- image = @params['markdown_img']
-
- if image && correct_mime_type?(image)
- alt = image.original_filename
- uploader.store!(image)
- link = {
- 'alt' => File.basename(alt, '.*'),
- 'url' => File.join(@root_url, uploader.url)
- }
- else
- link = nil
- end
- end
-
- protected
-
- def upload_path
- base_dir = FileUploader.generate_dir
- File.join(@repository.path_with_namespace, base_dir)
- end
-
- def accepted_images
- %w(png jpg jpeg gif)
- end
-
- def correct_mime_type?(image)
- accepted_images.map{ |format| image.content_type.include? format }.any?
- end
- end
-end