Skip to content

Commit

Permalink
Fix CSRF auto refreshing (#801)
Browse files Browse the repository at this point in the history
* Fix automatic CSRF refreshing

* Change comment

* Apparently eslint has no idea what is and isn't a syntax error
  • Loading branch information
Regalijan authored Jul 31, 2024
1 parent dc306d1 commit f433904
Showing 1 changed file with 25 additions and 12 deletions.
37 changes: 25 additions & 12 deletions lib/util/http.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,19 +82,32 @@ exports.func = function (args) {
}
return http(args.url, opt).then(function (res) {
if (opt && opt.headers && opt.headers['X-CSRF-TOKEN']) {
if (res.statusCode === 403 && (res.statusMessage === 'XSRF Token Validation Failed' || res.statusMessage === 'Token Validation Failed')) {
depth++
if (depth >= 3) {
throw new Error('Tried ' + depth + ' times and could not refresh XCSRF token successfully')
if (res.statusCode === 403) {
let message

try {
message = typeof res.body === 'string' ? JSON.parse(res.body).message : res.body.message
} catch (_) {
// Roblox didn't send back a properly formed json object
}
const token = res.headers['x-csrf-token']
if (token) {
opt.headers['X-CSRF-TOKEN'] = token
opt.jar = jar
args.depth = depth + 1
return exports.func(args)
} else {
throw new Error('Could not refresh X-CSRF-TOKEN')

if (message === 'XSRF Token Validation Failed' || message === 'Token Validation Failed') {
depth++

if (depth >= 3) {
throw new Error('Tried ' + depth + ' times and could not refresh XCSRF token successfully')
}

const token = res.headers['x-csrf-token']

if (token) {
opt.headers['X-CSRF-TOKEN'] = token
opt.jar = jar
args.depth = depth + 1
return exports.func(args)
} else {
throw new Error('Could not refresh X-CSRF-TOKEN')
}
}
} else {
if (depth > 0) {
Expand Down

0 comments on commit f433904

Please sign in to comment.