Class: Scrobbler::SimpleAuth

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

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (SimpleAuth) initialize(args = {})

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

- (Object) client_id

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



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

def client_id
  @client_id
end

- (Object) client_ver

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



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

def client_ver
  @client_ver
end

- (Object) now_playing_url (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

- (Object) password

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



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

def password
  @password
end

- (Object) session_id (readonly)

Returns the value of attribute session_id



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

def session_id
  @session_id
end

- (Object) status (readonly)

Returns the value of attribute status



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

def status
  @status
end

- (Object) submission_url (readonly)

Returns the value of attribute submission_url



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

def submission_url
  @submission_url
end

- (Object) user

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

- (Object) handshake!



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