Compare commits

...

2 Commits

Author SHA1 Message Date
fallenbagel
166796804e refactor: attempt to fix ip forwarding issue with more logging 2024-06-13 00:50:01 +05:00
Fallenbagel
9aeb3604e6 fix(auth): validation of ipv6/ipv4 (#812)
validation for ipv6 was sort of broken where for example `::1` was being sent as `1`, therefore,
logins were broken. This PR fixes it by using nodejs `net.isIPv4()` & `net.isIPv6` for ipv4 and ipv6
validation.

possibly related to and fixes #795
2024-06-12 18:50:00 +05:00
2 changed files with 24 additions and 2 deletions

View File

@@ -133,6 +133,11 @@ class JellyfinAPI extends ExternalAPI {
}
: {};
logger.debug(`Logging in to Jellyfin server: ${this.jellyfinHost}`, {
label: 'Jellyfin API',
clientIp: ClientIP,
});
const authResponse = await this.post<JellyfinLoginResponse>(
'/Users/AuthenticateByName',
{
@@ -146,6 +151,12 @@ class JellyfinAPI extends ExternalAPI {
return authResponse;
} catch (e) {
logger.error('Failed to login to Jellyfin server', {
label: 'Jellyfin API',
clientIp: ClientIP,
error: e,
});
const status = e.response?.status;
const networkErrorCodes = new Set([

View File

@@ -14,6 +14,7 @@ import { ApiError } from '@server/types/error';
import * as EmailValidator from 'email-validator';
import { Router } from 'express';
import gravatarUrl from 'gravatar-url';
import net from 'net';
const authRoutes = Router();
@@ -271,11 +272,21 @@ authRoutes.post('/jellyfin', async (req, res, next) => {
? jellyfinHost.slice(0, -1)
: jellyfinHost;
const ip = req.ip ? req.ip.split(':').reverse()[0] : undefined;
const ip = req.ip;
let clientIp;
if (ip) {
if (net.isIPv4(ip)) {
clientIp = ip;
} else if (net.isIPv6(ip)) {
clientIp = ip.startsWith('::ffff:') ? ip.substring(7) : ip;
}
}
const account = await jellyfinserver.login(
body.username,
body.password,
ip
clientIp
);
// Next let's see if the user already exists