diff --git a/src/request.ts b/src/request.ts index 37c036a..a601df4 100644 --- a/src/request.ts +++ b/src/request.ts @@ -6,9 +6,9 @@ var isAuthenticated = false; var isPremium = false; var defaultHeaders:request.Headers = { - 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0', - 'Connection': 'keep-alive' - }; + 'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0', + 'Connection': 'keep-alive' +}; /** * Performs a GET request for the resource. @@ -41,69 +41,48 @@ export function post(config: IConfig, options: request.Options, done: (err: Erro */ function authenticate(config: IConfig, done: (err: Error) => void) { if (isAuthenticated || !config.pass || !config.user) return done(null); - /* First just request the login page */ - var options = { + + /* Bypass the login page and send a login request directly */ + var options = + { headers: defaultHeaders, jar: true, - url: 'https://www.crunchyroll.com/login' - } - - request(options, (err: Error, rep: any, body: any) => + gzip: false, + url: 'https://www.crunchyroll.com/?a=formhandler&formname=RpcApiUser_Login&name=' + config.user + '&password=' + config.pass + }; + + request(options, (err: Error, rep: string, body: string) => { if (err) return done(err); - var $ = cheerio.load(body); - - /* Get the token from the login page */ - var token = $('input[name="login_form[_token]"]').attr("value"); - if (token == "") return done(new Error("Can't find token!")); - + /* The page return with a meta based redirection, as we wan't to check that everything is fine, reload + * the main page. A bit convoluted, but more sure. + */ var options = { headers: defaultHeaders, - form: - { - 'login_form[redirect_url]': '/', - 'login_form[name]': config.user, - 'login_form[password]': config.pass, - 'login_form[_token]': token, - }, jar: true, - gzip: false, - url: 'https://www.crunchyroll.com/login' - }; - request.post(options, (err: Error, rep: string, body: string) => + url: 'http://www.crunchyroll.com/' + } + request(options, (err: Error, rep: string, body: string) => { if (err) return done(err); - /* The page return with a meta based redirection, as we wan't to check that everything is fine, reload - * the main page. A bit convoluted, but more sure. - */ - var options = + var $ = cheerio.load(body); + /* Check if auth worked */ + var regexps = /ga\(\'set\', \'dimension[5-8]\', \'([^']*)\'\);/g + var dims = regexps.exec($('script').text()) + for(var i = 1; i < 5; i++) { - headers: defaultHeaders, - jar: true, - url: 'http://www.crunchyroll.com/' + if ((dims[i] != undefined) && (dims[i] != "") && (dims[i] != "not-registered")) { isAuthenticated = true; } + if ((dims[i] == "premium") || (dims[i] == "premiumplus")) { isPremium = true; } } - request(options, (err: Error, rep: string, body: string) => + if (isAuthenticated == false) { - if (err) return done(err); - var $ = cheerio.load(body); - /* Check if auth worked */ - var regexps = /ga\(\'set\', \'dimension[5-8]\', \'([^']*)\'\);/g - var dims = regexps.exec($('script').text()) - for(var i = 1; i < 5; i++) - { - if ((dims[i] != undefined) && (dims[i] != "") && (dims[i] != "not-registered")) { isAuthenticated = true; } - if ((dims[i] == "premium") || (dims[i] == "premiumplus")) { isPremium = true; } - } - if (isAuthenticated == false) - { - var error = $('ul.message, li.error').text(); - return done(new Error("Authentication failed: " + error)); - } - if (isPremium == false) { console.info("Do not use this app without a premium account."); } - else { console.info("You have a premium account! Good!"); } - done(null); - }) + var error = $('ul.message, li.error').text(); + return done(new Error("Authentication failed: " + error)); + } + if (isPremium == false) { console.info("Do not use this app without a premium account."); } + else { console.info("You have a premium account! Good!"); } + done(null); }) }) }