Class: Scrobbler::SimpleAuth

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ SimpleAuth

Returns a new instance of SimpleAuth.

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
26
# File 'lib/scrobbler/simpleauth.rb', line 17

def initialize(args = {})
  @user = args[:user] # last.fm username
  @password = args[:password] # last.fm password
  @client_id = 'rbs' # Client ID assigned by last.fm; Don't change this!
  @client_ver = Scrobbler::Version

  raise ArgumentError, 'Missing required argument' if @user.blank? || @password.blank?

  @connection = REST::Connection.new(AUTH_URL)
end

Instance Attribute Details

#client_idObject

you should read last.fm/api/submissions#handshake



14
15
16
# File 'lib/scrobbler/simpleauth.rb', line 14

def client_id
  @client_id
end

#client_verObject

you should read last.fm/api/submissions#handshake



14
15
16
# File 'lib/scrobbler/simpleauth.rb', line 14

def client_ver
  @client_ver
end

#now_playing_urlObject (readonly)

Returns the value of attribute now_playing_url.



15
16
17
# File 'lib/scrobbler/simpleauth.rb', line 15

def now_playing_url
  @now_playing_url
end

#passwordObject

you should read last.fm/api/submissions#handshake



14
15
16
# File 'lib/scrobbler/simpleauth.rb', line 14

def password
  @password
end

#session_idObject (readonly)

Returns the value of attribute session_id.



15
16
17
# File 'lib/scrobbler/simpleauth.rb', line 15

def session_id
  @session_id
end

#statusObject (readonly)

Returns the value of attribute status.



15
16
17
# File 'lib/scrobbler/simpleauth.rb', line 15

def status
  @status
end

#submission_urlObject (readonly)

Returns the value of attribute submission_url.



15
16
17
# File 'lib/scrobbler/simpleauth.rb', line 15

def submission_url
  @submission_url
end

#userObject

you should read last.fm/api/submissions#handshake



14
15
16
# File 'lib/scrobbler/simpleauth.rb', line 14

def user
  @user
end

Instance Method Details

#handshake!Object



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
56
57
# File 'lib/scrobbler/simpleauth.rb', line 28

def handshake!
  password_hash = Digest::MD5.hexdigest(@password)
  timestamp = Time.now.to_i.to_s
  token = Digest::MD5.hexdigest(password_hash + timestamp)

  query = { :hs => 'true',
            :p => AUTH_VER,
            :c => @client_id,
            :v => @client_ver,
            :u => @user,
            :t => timestamp,
            :a => token }
  result = @connection.get('/', query)

  @status = result.split(/\n/)[0]
  case @status
  when /OK/
    @session_id, @now_playing_url, @submission_url = result.split(/\n/)[1,3]
  when /BANNED/
    raise BannedError # something is wrong with the gem, check for an update
  when /BADAUTH/
    raise BadAuthError # invalid user/password
  when /FAILED/
    raise RequestFailedError, @status
  when /BADTIME/
    raise BadTimeError # system time is way off
  else
    raise RequestFailedError
  end  
end