55 lines
1.9 KiB
Ruby
55 lines
1.9 KiB
Ruby
class UploadsController < ApplicationController
|
|
def new
|
|
@upload = Upload.new
|
|
if params[:url]
|
|
@post = Post.find_by_source(params[:url])
|
|
end
|
|
end
|
|
|
|
def show
|
|
end
|
|
|
|
def create
|
|
unless @current_user.can_upload?
|
|
respond_to_error("Daily limit exceeded", {:controller => "user", :action => "upload_limit"}, :status => 421)
|
|
return
|
|
end
|
|
|
|
if @current_user.is_contributor_or_higher?
|
|
status = "active"
|
|
else
|
|
status = "pending"
|
|
end
|
|
|
|
begin
|
|
@post = Post.new(params[:post].merge(:updater_user_id => @current_user.id, :updater_ip_addr => request.remote_ip))
|
|
@post.user_id = @current_user.id
|
|
@post.status = status
|
|
@post.ip_addr = request.remote_ip
|
|
@post.save
|
|
rescue Errno::ENOENT
|
|
respond_to_error("Internal error. Try uploading again.", {:controller => "post", :action => "error"})
|
|
return
|
|
end
|
|
|
|
if @post.errors.empty?
|
|
if params[:md5] && @post.md5 != params[:md5].downcase
|
|
@post.destroy
|
|
respond_to_error("MD5 mismatch", {:action => "error"}, :status => 420)
|
|
else
|
|
respond_to_success("Post uploaded", {:controller => "post", :action => "show", :id => @post.id, :tag_title => @post.tag_title}, :api => {:post_id => @post.id, :location => url_for(:controller => "post", :action => "show", :id => @post.id)})
|
|
end
|
|
elsif @post.errors.invalid?(:md5)
|
|
p = Post.find_by_md5(@post.md5)
|
|
|
|
update = { :tags => p.cached_tags + " " + params[:post][:tags], :updater_user_id => session[:user_id], :updater_ip_addr => request.remote_ip }
|
|
update[:source] = @post.source if p.source.blank? && !@post.source.blank?
|
|
p.update_attributes(update)
|
|
|
|
respond_to_error("Post already exists", {:controller => "post", :action => "show", :id => p.id, :tag_title => @post.tag_title}, :api => {:location => url_for(:controller => "post", :action => "show", :id => p.id)}, :status => 423)
|
|
else
|
|
respond_to_error(@post, :action => "error")
|
|
end
|
|
end
|
|
end
|