class Wdmc::Client

Public Class Methods

new(*args) click to toggle source
# File lib/wdmc/client.rb, line 9
def initialize(*args)
  @config = Wdmc::Config.load
  @config[:verify_ssl] = (@config['validate_cert'].nil? or @config['validate_cert'] != false) ? true : false
  @config['api_net_nl_bug'] = @config['api_net_nl_bug'].nil? ? false : @config['api_net_nl_bug']
  @cookiefile = File.join(ENV['HOME'], '.wdmc_cookie')
  login
end

Public Instance Methods

add_share( data ) click to toggle source

add new share

# File lib/wdmc/client.rb, line 116
def add_share( data )
  response = post("#{@config['url']}/api/2.1/rest/shares", data, {accept: :json, :cookies => cookies})
  return response.code
end
add_user( data ) click to toggle source

add new user

# File lib/wdmc/client.rb, line 197
def add_user( data )
  response = post("#{@config['url']}/api/2.1/rest/users", data, {accept: :json, :cookies => cookies})
  return response.code
end
all_shares() click to toggle source
working with shares

get all shares

# File lib/wdmc/client.rb, line 92
def all_shares
  response = get("#{@config['url']}/api/2.1/rest/shares", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:shares][:share]
end
all_users() click to toggle source
Users

Get all users

# File lib/wdmc/client.rb, line 173
def all_users
  response = get("#{@config['url']}/api/2.1/rest/users", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:users][:user]
end
cookies() click to toggle source
# File lib/wdmc/client.rb, line 38
def cookies
  file = File.read(@cookiefile)
  eval(file)
  #file = YAML.load_file(@cookiefile)
end
delete_acl( data ) click to toggle source
# File lib/wdmc/client.rb, line 150
def delete_acl( data )
  # well, I know the code below is not very pretty...
  # if someone knows how this shitty delete with rest-client will work
  response = delete("#{@config['url']}/api/2.1/rest/share_access?share_name=#{data[:share_name]}&username=#{data[:username]}", {accept: :json, :cookies => cookies})
  return response
end
delete_share( name ) click to toggle source

delete a share

# File lib/wdmc/client.rb, line 128
def delete_share( name )
  response = delete("#{@config['url']}/api/2.1/rest/shares/#{name}", {accept: :json, :cookies => cookies})
  return response.code
end
delete_user( name ) click to toggle source

delete user

# File lib/wdmc/client.rb, line 209
def delete_user( name )
  response = delete("#{@config['url']}/api/2.1/rest/users/#{name}", {accept: :json, :cookies => cookies})
  return response.code
end
device_description() click to toggle source
# File lib/wdmc/client.rb, line 60
def device_description
  response = get("#{@config['url']}/api/2.1/rest/device_description", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:device_description]
end
find_share( name ) click to toggle source

find a share by name

# File lib/wdmc/client.rb, line 98
def find_share( name )
  result = []
  all_shares.each do |share|
    result.push share if share[:share_name] == name
  end
  return result
end
find_user( name ) click to toggle source

find a user by name

# File lib/wdmc/client.rb, line 179
def find_user( name )
  result = []
  all_users.each do |user|
    result.push user if user[:username] == name
  end
  return result
end
firmware() click to toggle source
# File lib/wdmc/client.rb, line 55
def firmware
  response = get("#{@config['url']}/api/2.1/rest/firmware_info", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:firmware_info]
end
get_acl( name ) click to toggle source
working with ACL of a share

get the specified share access

# File lib/wdmc/client.rb, line 135
def get_acl( name )
  response = get("#{@config['url']}/api/2.1/rest/share_access/#{name}", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:share_access_list]
end
get_tm() click to toggle source
TimeMachine

Get TimeMachine Configuration

# File lib/wdmc/client.rb, line 160
def get_tm
  response = get("#{@config['url']}/api/2.1/rest/time_machine", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:time_machine]
end
login() click to toggle source
# File lib/wdmc/client.rb, line 17
def login
  @url = @config['url']
  @username = @config['username']
  @password = @config['password']

  begin
    api = get("#{@url}/api/2.1/rest/local_login?username=#{@username}&password=#{@password}")
  rescue RestClient::SSLCertificateNotVerified => e
    if @config['validate_cert'] == 'warn'
      $stderr.puts("Warning: #{ e.class.name}: #{ e.message } for host URL: '#{ @url }'")
      @config[:verify_ssl] = false
      api = get("#{@url}/api/2.1/rest/local_login?username=#{@username}&password=#{@password}")
    else
      raise(e)
    end
  end

  cookie = api.cookies
  File.write(@cookiefile, api.cookies)
end
modify_acl( data ) click to toggle source
# File lib/wdmc/client.rb, line 145
def modify_acl( data )
  response = put("#{@config['url']}/api/2.1/rest/share_access", data, {accept: :json, :cookies => cookies})
  return response.code
end
modify_share( data ) click to toggle source

modifies a share

# File lib/wdmc/client.rb, line 122
def modify_share( data )
  response = put("#{@config['url']}/api/2.1/rest/shares", data, {accept: :json, :cookies => cookies})
  return response.code
end
network() click to toggle source
# File lib/wdmc/client.rb, line 65
    def network
      response = get("#{@config['url']}/api/2.1/rest/network_configuration", {accept: :json, :cookies => cookies})
      if @config['api_net_nl_bug']
        response = response.delete("\n")
      end
      begin
        JSON.parse(response, :symbolize_names => true)[:network_configuration]
      rescue JSON::ParserError => e
        unless @config['api_net_nl_bug']
          $stderr.puts(<<~EOL.tr("\n", " ")
             Warning: Consider adding 'api_net_nl_bug: true' to your configuration file
             to mitigate a known bug retrieving network configuration data.
             EOL
          )
        end
        raise e
      end
    end
set_acl( data ) click to toggle source
# File lib/wdmc/client.rb, line 140
def set_acl( data )
  response = post("#{@config['url']}/api/2.1/rest/share_access", data, {accept: :json, :cookies => cookies})
  return response.code
end
set_tm( data ) click to toggle source

Set TimeMachine Configuration

# File lib/wdmc/client.rb, line 166
def set_tm( data )
  response = put("#{@config['url']}/api/2.1/rest/time_machine", data, {accept: :json, :cookies => cookies})
  return response
end
share_exists?( name ) click to toggle source

check if share with exists

# File lib/wdmc/client.rb, line 107
def share_exists?( name )
  result = []
  all_shares.each do |share|
    result.push share[:share_name] if share[:share_name].include?(name)
  end
  return result
end
storage_usage() click to toggle source

storage

# File lib/wdmc/client.rb, line 85
def storage_usage
  response = get("#{@config['url']}/api/2.1/rest/storage_usage", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:storage_usage]
end
system_information() click to toggle source

device

# File lib/wdmc/client.rb, line 45
def system_information
  response = get("#{@config['url']}/api/2.1/rest/system_information", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:system_information]
end
system_state() click to toggle source
# File lib/wdmc/client.rb, line 50
def system_state
  response = get("#{@config['url']}/api/2.1/rest/system_state", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:system_state]
end
update_user( name, data ) click to toggle source

update an existing user

# File lib/wdmc/client.rb, line 203
def update_user( name, data )
  response = put("#{@config['url']}/api/2.1/rest/users/#{name}", data, {accept: :json, :cookies => cookies})
  return response.code
end
user_exists?( name ) click to toggle source

check if user with name exists

# File lib/wdmc/client.rb, line 188
def user_exists?( name )
  result = []
  all_users.each do |user|
    result.push user[:username] if user[:username].include?(name)
  end
  return result
end
volumes() click to toggle source

Users

# File lib/wdmc/client.rb, line 216
def volumes
  login
  response = get("#{@config['url']}/api/2.1/rest/volumes", {accept: :json, :cookies => cookies})
  JSON.parse(response, :symbolize_names => true)[:volumes][:volume]
end

Private Instance Methods

delete(url, headers={}, &block) click to toggle source
# File lib/wdmc/client.rb, line 236
def delete(url, headers={}, &block)
  execute_request(:method => :delete, :url => url, :headers => headers, &block)
end
execute_request(args, &block) click to toggle source
# File lib/wdmc/client.rb, line 240
def execute_request(args, &block)
  args[:verify_ssl] = @config[:verify_ssl]
  RestClient::Request.execute(args, &block)
end
get(url, headers={}, &block) click to toggle source
# File lib/wdmc/client.rb, line 224
def get(url, headers={}, &block)
  execute_request(:method => :get, :url => url, :headers => headers, &block)
end
post(url, payload, headers={}, &block) click to toggle source
# File lib/wdmc/client.rb, line 228
def post(url, payload, headers={}, &block)
  execute_request(:method => :post, :url => url, :payload => payload, :headers => headers, &block)
end
put(url, payload, headers={}, &block) click to toggle source
# File lib/wdmc/client.rb, line 232
def put(url, payload, headers={}, &block)
  execute_request(:method => :put, :url => url, :payload => payload, :headers => headers, &block)
end