-
-
Notifications
You must be signed in to change notification settings - Fork 51
/
authentication.rb
55 lines (46 loc) · 1.43 KB
/
authentication.rb
1
2
3
4
5
6
7
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
50
51
52
53
54
55
module Garb
module Request
class Authentication
class AuthError < StandardError; end
URL = 'https://www.google.com/accounts/ClientLogin'
def initialize(email, password, opts = {})
@email = email
@password = password
@account_type = opts.fetch(:account_type, 'HOSTED_OR_GOOGLE')
end
def parameters
{
'Email' => @email,
'Passwd' => @password,
'accountType' => @account_type,
'service' => 'analytics',
'source' => "sija-garb-v#{Garb::Version}"
}
end
def uri
@uri ||= URI.parse(URL)
end
def send_request(ssl_mode)
http = Net::HTTP.new(uri.host, uri.port, Garb.proxy_address, Garb.proxy_port)
http.read_timeout = Garb.read_timeout
http.use_ssl = true
http.verify_mode = ssl_mode
if ssl_mode == OpenSSL::SSL::VERIFY_PEER
http.ca_file = CA_CERT_FILE
end
http.request(build_request) do |response|
raise AuthError unless response.is_a?(Net::HTTPOK)
end
end
def build_request
post = Net::HTTP::Post.new(uri.path)
post.set_form_data(parameters)
post
end
def auth_token(opts = {})
ssl_mode = opts[:secure] ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
send_request(ssl_mode).body.match(/^Auth=(.*)$/)[1]
end
end
end
end