X-Git-Url: https://jasonwoof.com/gitweb/?p=libre-fm-client-daemon.git;a=blobdiff_plain;f=auth.coffee;fp=auth.coffee;h=0000000000000000000000000000000000000000;hp=1b776ab23d290bb478f11ffef28299b77a2e462f;hb=9f281941f885f6fdcf878ce4c8b2cdb0f525c2a9;hpb=96118d765980c472bb3cafe75cd16b736724fe0d diff --git a/auth.coffee b/auth.coffee deleted file mode 100644 index 1b776ab..0000000 --- a/auth.coffee +++ /dev/null @@ -1,81 +0,0 @@ -fs = require 'fs' -http = require 'http' -crypto = require 'crypto' -xml = require 'node-xml' - -auth = {} - -md5 = (str) -> - sum = crypto.createHash 'md5' - sum.update str - return sum.digest 'hex' - -new_auth_token = (user, pass) -> - token = md5(user + md5(pass)) - auth.user = user - auth.token = token - return token - -auth_file = "#{process.env.HOME}/.libre.fm-cmus.auth" -save_auth = (user, pass, callback) -> - token = new_auth_token(user, pass) - text = JSON.stringify user: user, token: new_auth_token(user, pass) - fs.writeFile auth_file, text, 'utf8', callback - return token - -# load login credentials from settings file -load_auth = (callback) -> - if auth.user and auth.token - callback auth - return - - fs.readFile auth_file, 'utf8', (err, data) -> - if err - callback err - else - callback null, JSON.parse data - -# login and get a session key -login = (callback) -> - load_auth (err, auth) -> - return callback(err) if err? - - http.get { host: 'alpha.libre.fm', port: 80, path: "/2.0/?method=auth.getmobilesession&username=#{auth.user}&authToken=#{auth.token}"}, (res) -> - if res.statusCode != 200 - console.log "login response code: #{res.statusCode}" - callback "login response code: #{res.statusCode}" - return - - res.setEncoding 'utf8' - body = '' - res.on 'data', (chunk) -> - body += chunk - res.on 'end', -> - cur_tag = '' - done = false - parser = new xml.SaxParser (cb) -> - cb.onStartElementNS (name, attrs, prefix, uri, namespaces) -> - cur_tag = name - cb.onCharacters (str) -> - if cur_tag is 'key' - done = true - auth.sk = str - console.log("got key \"#{str}\"") - callback null, str - else if cur_tag is 'error' - done = true - callback "login failed: #{str}" - # ignore other stuff in there - unless parser.parse body, true - done = true - callback "login server response wouldn't parse as XML." - console.log "login server sent us bad XML: #{body}" - - unless done - callback "Couldn't understand response from login server" - - - -exports.login = login # fixme remove this from the API and call it automatically -exports.new_auth_token = new_auth_token -exports.save_auth = save_auth