mirror of
https://github.com/sct/overseerr.git
synced 2025-09-29 05:24:44 +02:00
fix(plex): do not fail to import Plex users when Plex Home has managed users (#1699)
* fix(plex): do not fail to import Plex users when Plex Home has managed users * fix: default display name to email when user has no username also, do not set username or plexUsername when it is the same as the user's email address * fix(ui): user display name placeholder should reflect fallback logic if username is not set * fix(ui): hide email addresses of other users if logged-in user does not have Manage Users permission * fix: always set Plex username even if same as user's email * fix: remove unnecessary permission check * fix: transform email addresses to lowercase
This commit is contained in:
@@ -43,7 +43,7 @@ authRoutes.post('/plex', async (req, res, next) => {
|
||||
let user = await userRepository
|
||||
.createQueryBuilder('user')
|
||||
.where('user.plexId = :id', { id: account.id })
|
||||
.orWhere('LOWER(user.email) = :email', {
|
||||
.orWhere('user.email = :email', {
|
||||
email: account.email.toLowerCase(),
|
||||
})
|
||||
.getOne();
|
||||
@@ -65,9 +65,6 @@ authRoutes.post('/plex', async (req, res, next) => {
|
||||
user.plexId = account.id;
|
||||
}
|
||||
|
||||
if (user.username === account.username) {
|
||||
user.username = '';
|
||||
}
|
||||
await userRepository.save(user);
|
||||
} else {
|
||||
// Here we check if it's the first user. If it is, we create the user with no check
|
||||
@@ -177,7 +174,7 @@ authRoutes.post('/local', async (req, res, next) => {
|
||||
const user = await userRepository
|
||||
.createQueryBuilder('user')
|
||||
.select(['user.id', 'user.password'])
|
||||
.where('LOWER(user.email) = :email', { email: body.email.toLowerCase() })
|
||||
.where('user.email = :email', { email: body.email.toLowerCase() })
|
||||
.getOne();
|
||||
|
||||
const isCorrectCredentials = await user?.passwordMatch(body.password);
|
||||
@@ -244,7 +241,7 @@ authRoutes.post('/reset-password', async (req, res) => {
|
||||
|
||||
const user = await userRepository
|
||||
.createQueryBuilder('user')
|
||||
.where('LOWER(user.email) = :email', { email: body.email.toLowerCase() })
|
||||
.where('user.email = :email', { email: body.email.toLowerCase() })
|
||||
.getOne();
|
||||
|
||||
if (user) {
|
||||
|
@@ -31,7 +31,7 @@ router.get('/', async (req, res, next) => {
|
||||
break;
|
||||
case 'displayname':
|
||||
query = query.orderBy(
|
||||
'(CASE WHEN user.username IS NULL THEN user.plexUsername ELSE user.username END)',
|
||||
"(CASE WHEN (user.username IS NULL OR user.username = '') THEN (CASE WHEN (user.plexUsername IS NULL OR user.plexUsername = '') THEN user.email ELSE LOWER(user.plexUsername) END) ELSE LOWER(user.username) END)",
|
||||
'ASC'
|
||||
);
|
||||
break;
|
||||
@@ -84,7 +84,7 @@ router.post(
|
||||
|
||||
const existingUser = await userRepository
|
||||
.createQueryBuilder('user')
|
||||
.where('LOWER(user.email) = :email', {
|
||||
.where('user.email = :email', {
|
||||
email: body.email.toLowerCase(),
|
||||
})
|
||||
.getOne();
|
||||
@@ -396,51 +396,45 @@ router.post(
|
||||
for (const rawUser of plexUsersResponse.MediaContainer.User) {
|
||||
const account = rawUser.$;
|
||||
|
||||
const user = await userRepository
|
||||
.createQueryBuilder('user')
|
||||
.where('user.plexId = :id', { id: account.id })
|
||||
.orWhere('LOWER(user.email) = :email', {
|
||||
email: account.email.toLowerCase(),
|
||||
})
|
||||
.getOne();
|
||||
if (account.email) {
|
||||
const user = await userRepository
|
||||
.createQueryBuilder('user')
|
||||
.where('user.plexId = :id', { id: account.id })
|
||||
.orWhere('user.email = :email', {
|
||||
email: account.email.toLowerCase(),
|
||||
})
|
||||
.getOne();
|
||||
|
||||
if (user) {
|
||||
// Update the user's avatar with their Plex thumbnail, in case it changed
|
||||
user.avatar = account.thumb;
|
||||
user.email = account.email;
|
||||
user.plexUsername = account.username;
|
||||
if (user) {
|
||||
// Update the user's avatar with their Plex thumbnail, in case it changed
|
||||
user.avatar = account.thumb;
|
||||
user.email = account.email;
|
||||
user.plexUsername = account.username;
|
||||
|
||||
// In case the user was previously a local account
|
||||
if (user.userType === UserType.LOCAL) {
|
||||
user.userType = UserType.PLEX;
|
||||
user.plexId = parseInt(account.id);
|
||||
|
||||
if (user.username === account.username) {
|
||||
user.username = '';
|
||||
// In case the user was previously a local account
|
||||
if (user.userType === UserType.LOCAL) {
|
||||
user.userType = UserType.PLEX;
|
||||
user.plexId = parseInt(account.id);
|
||||
}
|
||||
await userRepository.save(user);
|
||||
} else {
|
||||
if (await mainPlexTv.checkUserAccess(parseInt(account.id))) {
|
||||
const newUser = new User({
|
||||
plexUsername: account.username,
|
||||
email: account.email,
|
||||
permissions: settings.main.defaultPermissions,
|
||||
plexId: parseInt(account.id),
|
||||
plexToken: '',
|
||||
avatar: account.thumb,
|
||||
userType: UserType.PLEX,
|
||||
});
|
||||
await userRepository.save(newUser);
|
||||
createdUsers.push(newUser);
|
||||
}
|
||||
}
|
||||
await userRepository.save(user);
|
||||
} else {
|
||||
// Check to make sure it's a real account
|
||||
if (
|
||||
account.email &&
|
||||
account.username &&
|
||||
(await mainPlexTv.checkUserAccess(parseInt(account.id)))
|
||||
) {
|
||||
const newUser = new User({
|
||||
plexUsername: account.username,
|
||||
email: account.email,
|
||||
permissions: settings.main.defaultPermissions,
|
||||
plexId: parseInt(account.id),
|
||||
plexToken: '',
|
||||
avatar: account.thumb,
|
||||
userType: UserType.PLEX,
|
||||
});
|
||||
await userRepository.save(newUser);
|
||||
createdUsers.push(newUser);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return res.status(201).json(User.filterMany(createdUsers));
|
||||
} catch (e) {
|
||||
next({ status: 500, message: e.message });
|
||||
|
Reference in New Issue
Block a user