Add support for ACL blocks on note commenting

This commit is contained in:
Tom Hughes 2014-06-03 20:59:25 +01:00
parent 1f5615f022
commit 098c2675ba
3 changed files with 21 additions and 0 deletions

View file

@ -53,6 +53,9 @@ class NotesController < ApplicationController
## ##
# Create a new note # Create a new note
def create def create
# Check the ACLs
raise OSM::APIAccessDenied if Acl.no_note_comment(request.remote_ip)
# Check the arguments are sane # Check the arguments are sane
raise OSM::APIBadUserInput.new("No lat was given") unless params[:lat] raise OSM::APIBadUserInput.new("No lat was given") unless params[:lat]
raise OSM::APIBadUserInput.new("No lon was given") unless params[:lon] raise OSM::APIBadUserInput.new("No lon was given") unless params[:lon]
@ -86,6 +89,9 @@ class NotesController < ApplicationController
## ##
# Add a comment to an existing note # Add a comment to an existing note
def comment def comment
# Check the ACLs
raise OSM::APIAccessDenied if Acl.no_note_comment(request.remote_ip)
# Check the arguments are sane # Check the arguments are sane
raise OSM::APIBadUserInput.new("No id was given") unless params[:id] raise OSM::APIBadUserInput.new("No id was given") unless params[:id]
raise OSM::APIBadUserInput.new("No text was given") if params[:text].blank? raise OSM::APIBadUserInput.new("No text was given") if params[:text].blank?

View file

@ -11,6 +11,10 @@ class Acl < ActiveRecord::Base
self.match(address, domain).where(:k => "no_account_creation").exists? self.match(address, domain).where(:k => "no_account_creation").exists?
end end
def self.no_note_comment(address, domain = nil)
self.match(address, domain).where(:k => "no_note_comment").exists?
end
def self.no_trace_download(address, domain = nil) def self.no_trace_download(address, domain = nil)
self.match(address, domain).where(:k => "no_trace_download").exists? self.match(address, domain).where(:k => "no_trace_download").exists?
end end

View file

@ -24,6 +24,17 @@ module OSM
end end
end end
# Raised when access is denied.
class APIAccessDenied < RuntimeError
def status
:forbidden
end
def to_s
"Access denied"
end
end
# Raised when an API object is not found. # Raised when an API object is not found.
class APINotFoundError < APIError class APINotFoundError < APIError
def status def status