module Devops module API2_0 module Routes module UserRoutes def self.registered(app) # Get users list # # * *Request* # - method : GET # - headers : # - Accept: application/json # # * *Returns* : # [ # { # "email": "test@test.test", # "privileges": { # "flavor": "r", # "group": "r", # "image": "r", # "project": "r", # "server": "r", # "key": "r", # "user": "", # "filter": "r", # "network": "r", # "provider": "r", # "script": "r", # "templates": "r" # }, # "id": "test" # } # ] app.get_with_headers "/users", :headers => [:accept] do check_privileges("user", "r") json Devops::API2_0::Handler::User.new(request).users.map(&:to_hash) end # Create user # # * *Request* # - method : POST # - headers : # - Accept: application/json # - Content-Type: application/json # - body : # { # "username": "user name", # "email": "user email", # "password": "user password" # } # # * *Returns* : # 201 - Created app.post_with_headers "/user", :headers => [:accept, :content_type] do check_privileges("user", "w") Devops::API2_0::Handler::User.new(request).create create_response("Created", nil, 201) end hash = {} # Delete user # # * *Request* # - method : DELETE # - headers : # - Accept: application/json # # * *Returns* : # 200 - Deleted hash["DELETE"] = lambda {|user| check_privileges("user", "w") Devops::API2_0::Handler::User.new(request).delete(user) create_response("User '#{user}' removed") } # Change user privileges # # * *Request* # - method : PUT # - headers : # - Accept: application/json # - Content-Type: application/json # - body : # { # "cmd": "command or all", -> if empty, set default privileges # "privileges": "priv" -> 'rwx' or '' # } # # * *Returns* : # 200 - Updated hash["PUT"] = lambda {|user| check_privileges("user", "w") Devops::API2_0::Handler::User.new(request).change_user_privileges(user) create_response("Updated") } app.multi_routes "/user/:user", {:headers => [:accept, :content_type]}, hash # Change user email # # * *Request* # - method : PUT # - headers : # - Accept: application/json # - Content-Type: application/json # - body : # { # "email": "new user email", # } # # * *Returns* : # 200 - Updated app.put_with_headers %r{\A/user/#{DevopsConfig::OBJECT_NAME}/email\z}, :headers => [:accept, :content_type] do |user| check_privileges("user", "w") unless request.env['REMOTE_USER'] == user Devops::API2_0::Handler::User.new(request).change_email(user) create_response("Updated") end # Change user password # # * *Request* # - method : PUT # - headers : # - Accept: application/json # - Content-Type: application/json # - body : # { # "password": "new user password", # } # # * *Returns* : # 200 - Updated app.put_with_headers %r{\A/user/#{DevopsConfig::OBJECT_NAME}/password\z}, :headers => [:accept, :content_type] do |user| check_privileges("user", "w") unless request.env['REMOTE_USER'] == user Devops::API2_0::Handler::User.new(request).change_password(user) create_response("Updated") end puts "User routes initialized" end end end end end