mirror of
https://github.com/fallenbagel/jellyseerr.git
synced 2025-12-24 02:39:18 -05:00
Compare commits
3 Commits
renovate/n
...
23d05a5921
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23d05a5921 | ||
|
|
3ee69663dc | ||
|
|
539d49879d |
@@ -8,7 +8,7 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://discord.gg/seerr"><img src="https://img.shields.io/discord/783137440809746482" alt="Discord"></a>
|
<a href="https://discord.gg/seerr"><img src="https://img.shields.io/discord/783137440809746482" alt="Discord"></a>
|
||||||
<a href="https://hub.docker.com/r/seerr/seerr"><img src="https://img.shields.io/docker/pulls/seerr/seerr" alt="Docker pulls"></a>
|
<a href="https://hub.docker.com/r/seerr/seerr"><img src="https://img.shields.io/docker/pulls/seerr/seerr" alt="Docker pulls"></a>
|
||||||
<a href="https://translate.seerr.dev/engage/seerr/"><img src="https://translate.seerr.dev/widget/seerr/seerr-frontend/svg-badge.svg" alt="Translation status" /></a>
|
<a href="https://translate.seerr.dev/engage/seerr/"><img src="https://translate.seerr.dev/widget/seerr/svg-badge.svg" alt="Translation status" /></a>
|
||||||
<a href="https://github.com/seerr-team/seerr/blob/develop/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/seerr-team/seerr"></a>
|
<a href="https://github.com/seerr-team/seerr/blob/develop/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/seerr-team/seerr"></a>
|
||||||
|
|
||||||
**Seerr** is a free and open source software application for managing requests for your media library. It integrates with the media server of your choice: [Jellyfin](https://jellyfin.org), [Plex](https://plex.tv), and [Emby](https://emby.media/). In addition, it integrates with your existing services, such as **[Sonarr](https://sonarr.tv/)**, **[Radarr](https://radarr.video/)**.
|
**Seerr** is a free and open source software application for managing requests for your media library. It integrates with the media server of your choice: [Jellyfin](https://jellyfin.org), [Plex](https://plex.tv), and [Emby](https://emby.media/). In addition, it integrates with your existing services, such as **[Sonarr](https://sonarr.tv/)**, **[Radarr](https://radarr.video/)**.
|
||||||
|
|||||||
4679
pnpm-lock.yaml
generated
4679
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -626,76 +626,6 @@ authRoutes.post('/local', async (req, res, next) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const mainUser = await userRepository.findOneOrFail({
|
|
||||||
select: { id: true, plexToken: true, plexId: true },
|
|
||||||
where: { id: 1 },
|
|
||||||
});
|
|
||||||
const mainPlexTv = new PlexTvAPI(mainUser.plexToken ?? '');
|
|
||||||
|
|
||||||
if (!user.plexId) {
|
|
||||||
try {
|
|
||||||
const plexUsersResponse = await mainPlexTv.getUsers();
|
|
||||||
const account = plexUsersResponse.MediaContainer.User.find(
|
|
||||||
(account) =>
|
|
||||||
account.$.email &&
|
|
||||||
account.$.email.toLowerCase() === user.email.toLowerCase()
|
|
||||||
)?.$;
|
|
||||||
|
|
||||||
if (
|
|
||||||
account &&
|
|
||||||
(await mainPlexTv.checkUserAccess(parseInt(account.id)))
|
|
||||||
) {
|
|
||||||
logger.info(
|
|
||||||
'Found matching Plex user; updating user with Plex data',
|
|
||||||
{
|
|
||||||
label: 'API',
|
|
||||||
ip: req.ip,
|
|
||||||
email: body.email,
|
|
||||||
userId: user.id,
|
|
||||||
plexId: account.id,
|
|
||||||
plexUsername: account.username,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
user.plexId = parseInt(account.id);
|
|
||||||
user.avatar = account.thumb;
|
|
||||||
user.email = account.email;
|
|
||||||
user.plexUsername = account.username;
|
|
||||||
user.userType = UserType.PLEX;
|
|
||||||
|
|
||||||
await userRepository.save(user);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
logger.error('Something went wrong fetching Plex users', {
|
|
||||||
label: 'API',
|
|
||||||
errorMessage: e.message,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
|
||||||
user.plexId &&
|
|
||||||
user.plexId !== mainUser.plexId &&
|
|
||||||
!(await mainPlexTv.checkUserAccess(user.plexId))
|
|
||||||
) {
|
|
||||||
logger.warn(
|
|
||||||
'Failed sign-in attempt from Plex user without access to the media server',
|
|
||||||
{
|
|
||||||
label: 'API',
|
|
||||||
account: {
|
|
||||||
ip: req.ip,
|
|
||||||
email: body.email,
|
|
||||||
userId: user.id,
|
|
||||||
plexId: user.plexId,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return next({
|
|
||||||
status: 403,
|
|
||||||
message: 'Access denied.',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set logged in session
|
// Set logged in session
|
||||||
if (user && req.session) {
|
if (user && req.session) {
|
||||||
req.session.userId = user.id;
|
req.session.userId = user.id;
|
||||||
@@ -775,7 +705,7 @@ authRoutes.post('/logout', async (req, res, next) => {
|
|||||||
});
|
});
|
||||||
return next({ status: 500, message: 'Failed to destroy session.' });
|
return next({ status: 500, message: 'Failed to destroy session.' });
|
||||||
}
|
}
|
||||||
logger.info('Successfully logged out user', {
|
logger.debug('Successfully logged out user', {
|
||||||
label: 'Auth',
|
label: 'Auth',
|
||||||
userId,
|
userId,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user