fixed
This commit is contained in:
parent
4b603f680b
commit
25486edfe5
@ -10,7 +10,7 @@ class User < MongoModel
|
||||
ROOT_PASSWORD = ''
|
||||
|
||||
PRIVILEGES = ["r", "w", "x"]
|
||||
PRIVILEGES_REGEX = /x?y?z?/
|
||||
PRIVILEGES_REGEX = /r?w?x?/
|
||||
|
||||
attr_accessor :id, :password, :privileges, :email
|
||||
types :id => {:type => String, :empty => false},
|
||||
@ -33,7 +33,7 @@ class User < MongoModel
|
||||
end
|
||||
|
||||
def grant cmd, priv=''
|
||||
if !priv.empty? and PRIVILEGES_REGEX.match(priv).empty?
|
||||
if !priv.empty? and PRIVILEGES_REGEX.match(priv).to_s.empty?
|
||||
raise InvalidCommand.new "Invalid privileges '#{priv}'. Available values are '#{PRIVILEGES.join("', '")}'"
|
||||
end
|
||||
raise InvalidCommand.new "Can't grant privileges to root" if self.id == ROOT_USER_NAME
|
||||
@ -76,6 +76,7 @@ class User < MongoModel
|
||||
return p.include?(priv)
|
||||
end
|
||||
|
||||
=begin
|
||||
def check_privilege_read cmd
|
||||
check_privilege_r_w cmd, "r"
|
||||
end
|
||||
@ -89,6 +90,7 @@ class User < MongoModel
|
||||
return false if p.nil?
|
||||
return p == flag || p == 'rw'
|
||||
end
|
||||
=end
|
||||
|
||||
def self.create_root
|
||||
root = User.new({'username' => ROOT_USER_NAME, 'password' => ROOT_PASSWORD})
|
||||
|
||||
@ -323,10 +323,8 @@ class MongoConnector
|
||||
def check_user_privileges id, cmd, priv
|
||||
user = self.user(id)
|
||||
case priv
|
||||
when "r"
|
||||
raise InvalidPrivileges.new("Access denied for '#{user.id}'") unless user.check_privilege_read cmd
|
||||
when "w"
|
||||
raise InvalidPrivileges.new("Access denied for '#{user.id}'") unless user.check_privilege_write cmd
|
||||
when "r", "w", "x"
|
||||
raise InvalidPrivileges.new("Access denied for '#{user.id}'") unless user.check_privilege cmd, priv
|
||||
else
|
||||
raise InvalidPrivileges.new("Access internal problem with privilege '#{priv}'")
|
||||
end
|
||||
|
||||
@ -27,10 +27,7 @@ module Version2_0
|
||||
halt(rstatus, json(obj))
|
||||
end
|
||||
|
||||
def check_privileges cmd, p=nil
|
||||
if p != "r" and p != "w"
|
||||
p = request.get? ? "r" : "w"
|
||||
end
|
||||
def check_privileges cmd, p
|
||||
BaseRoutes.mongo.check_user_privileges(request.env['REMOTE_USER'], cmd, p)
|
||||
end
|
||||
|
||||
|
||||
@ -12,15 +12,6 @@ module Version2_0
|
||||
puts "Image routes initialized"
|
||||
end
|
||||
|
||||
before "/image/:image_id" do
|
||||
if request.get? or request.delete?
|
||||
check_headers :accept
|
||||
else
|
||||
check_headers
|
||||
end
|
||||
check_privileges("image")
|
||||
end
|
||||
|
||||
after %r{\A/image(/[\w]+)?\z} do
|
||||
statistic
|
||||
end
|
||||
@ -99,6 +90,8 @@ module Version2_0
|
||||
# "id": "36dc7618-4178-4e29-be43-286fbfe90f50"
|
||||
# }
|
||||
get "/image/:image_id" do
|
||||
check_headers :accept
|
||||
check_privileges("image", "r")
|
||||
json BaseRoutes.mongo.image(params[:image_id])
|
||||
end
|
||||
|
||||
@ -147,6 +140,8 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Updated
|
||||
put "/image/:image_id" do
|
||||
check_headers
|
||||
check_privileges("image", "w")
|
||||
BaseRoutes.mongo.image params[:image_id]
|
||||
image = Image.new(create_object_from_json_body)
|
||||
image.id = params[:image_id]
|
||||
@ -164,6 +159,8 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/image/:image_id" do
|
||||
check_headers
|
||||
check_privileges("image", "w")
|
||||
projects = BaseRoutes.mongo.projects_by_image params[:image_id]
|
||||
unless projects.empty?
|
||||
ar = []
|
||||
|
||||
@ -18,15 +18,6 @@ module Version2_0
|
||||
puts "Project routes initialized"
|
||||
end
|
||||
|
||||
before "/project/:id" do
|
||||
if request.get?
|
||||
check_headers :accept
|
||||
else
|
||||
check_headers :accept, :content_type
|
||||
end
|
||||
check_privileges("project")
|
||||
end
|
||||
|
||||
before "/project/:id/user" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "w")
|
||||
@ -95,6 +86,8 @@ module Version2_0
|
||||
# "name": "project_1"
|
||||
# }
|
||||
get "/project/:project" do
|
||||
check_headers :accept
|
||||
check_privileges("project", "r")
|
||||
json BaseRoutes.mongo.project(params[:project])
|
||||
end
|
||||
|
||||
@ -226,6 +219,8 @@ module Version2_0
|
||||
# 200 - Updated
|
||||
# TODO: multi project
|
||||
put "/project/:id" do
|
||||
check_headers
|
||||
check_privileges("project", "w")
|
||||
project = Project.new(create_object_from_json_body)
|
||||
project.id = params[:id]
|
||||
old_project = BaseRoutes.mongo.project params[:id]
|
||||
@ -331,6 +326,8 @@ module Version2_0
|
||||
# * *Returns* :
|
||||
# 200 - Deleted
|
||||
delete "/project/:id" do
|
||||
check_headers :accept, :content_type
|
||||
check_privileges("project", "w")
|
||||
servers = BaseRoutes.mongo.servers params[:id]
|
||||
raise DependencyError.new "Deleting #{params[:id]} is forbidden: Project has servers" if !servers.empty?
|
||||
body = create_object_from_json_body(Hash, true)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user