Class: MESD

Inherits:
Object
  • Object
show all
Defined in:
lib/me_sd.rb

Direct Known Subclasses

Request

Constant Summary collapse

EXCEPTIONS =
[Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::EHOSTUNREACH, Errno::ECONNREFUSED, EOFError,
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ MESD

Returns a new instance of MESD.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/me_sd.rb', line 8

def initialize(args)
  host = args[:host]
  port = args[:port] || "80"
  username = args[:username]
  password = args[:password]
  uri = URI("http://#{host}:#{port}")
  begin
    Net::HTTP.start(uri.host, uri.port) do |http|
      request = http.get(uri)
      cookie = request.response["set-cookie"]
      uri = "#{uri}/j_security_check"
      auth_data = ""\
        "j_username=#{username}&"\
        "j_password=#{password}&"\
        "AdEnable=false&"\
        "DomainCount=0&"\
        "LDAPEnable=false&"\
        "LocalAuth=No&"\
        "LocalAuthWithDomain=No&"\
        "dynamicUserAddition_status=true&"\
        "hidden=Select+a+Domain&"\
        "hidden=For+Domain&"\
        "localAuthEnable=true&"\
        "loginButton=Login&"\
        "logonDomainName=-1&"\
      ""
      auth_headers = {
        "Referer" => "http://#{host}:#{port}",
        "Host" => "#{host}:#{port}",
        "Cookie" => "#{cookie};",
      }
      request = http.post(uri, auth_data, auth_headers)
      @session = {
        host: host,
        port: port,
        cookie: cookie,
      }
      @last_error = "wrong credentials" unless self.session_healthy?(self.session)
    end
  rescue *EXCEPTIONS => @last_error
  end
end

Instance Attribute Details

#curobjObject

Returns the value of attribute curobj.



2
3
4
# File 'lib/me_sd.rb', line 2

def curobj
  @curobj
end

#current_bodyObject

Returns the value of attribute current_body.



2
3
4
# File 'lib/me_sd.rb', line 2

def current_body
  @current_body
end

#last_errorObject

Returns the value of attribute last_error.



2
3
4
# File 'lib/me_sd.rb', line 2

def last_error
  @last_error
end

#sessionObject

Returns the value of attribute session.



2
3
4
# File 'lib/me_sd.rb', line 2

def session
  @session
end

Instance Method Details

#get_all_requestsObject



72
73
74
# File 'lib/me_sd.rb', line 72

def get_all_requests
  get_last_requests(0)
end

#get_last_requests(number) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/me_sd.rb', line 76

def get_last_requests(number)
  if number < 0
    @last_error = "wrong requests number"
    return false
  end
  select_all_requests
  if number == 0
    puts "Getting total #{@curobj['_TL']} requests:"
  else
    puts "Getting last #{number} of maximum #{@curobj['_TL']} requests:"
  end
  requests = Array.new
  get_requests_urls(@current_body).each { |url| requests.push(Request.new({ session: @session, url: url })) }
  begin
    there_are_more_pages = next_page
    get_requests_urls(@current_body).each { |url| requests.push(Request.new({ session: @session, url: url })) }
    break unless requests.size < number if number != 0
    break unless there_are_more_pages
  end while true
  requests[0..number-1]
end

#session_healthy?(session) ⇒ Boolean

logs in and tries to find out is session healthy criteria: logout button is present

Returns:

  • (Boolean)


53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/me_sd.rb', line 53

def session_healthy?(session)
  return false unless session
  session_healthy = false
  uri = URI("http://#{session[:host]}:#{session[:port]}/MySchedule.do")
  begin
    Net::HTTP.start(uri.host, uri.port) do |http|
      request = Net::HTTP::Get.new(uri)
      request.add_field("Cookie", "#{session[:cookie]}")
      request = http.request(request)
      # ...
      # <a style="display:inline" href="\&quot;javascript:" prelogout('null')\"="">Log out</a>
      # ...
      session_healthy = true if /preLogout/.match(request.body)
    end
  rescue *EXCEPTIONS => @last_error
  end
  session_healthy
end