1
Fork 0

Check MIME type in auth server response.

This commit is contained in:
Juliusz Chroboczek 2022-08-03 15:00:50 +02:00
parent d69c517137
commit b821cd71a9
1 changed files with 26 additions and 5 deletions

View File

@ -475,15 +475,36 @@ ServerConnection.prototype.join = async function(group, username, credentials, d
});
if(!r.ok)
throw new Error(
`The authorisation server said: ${r.status} ${r.statusText}`,
`The authorisation server said ${r.status} ${r.statusText}`,
);
if(r.status === 204) {
// no data, fallback to password auth
m.password = credentials.password;
break;
}
let ctype = r.headers.get("Content-Type");
if(!ctype)
throw new Error(
"The authorisation server didn't return a content type",
);
let semi = ctype.indexOf(";");
if(semi >= 0)
ctype = ctype.slice(0, semi);
ctype = ctype.trim();
switch(ctype.toLowerCase()) {
case 'application/jwt':
let data = await r.text();
if(!data)
// empty data, continue with password auth
m.password = credentials.password;
else
throw new Error(
"The authorisation server returned empty token",
);
m.token = data;
break;
default:
throw new Error(`The authorisation server returned ${ctype}`);
break;
}
break;
default:
throw new Error(`Unknown credentials type ${credentials.type}`);
}