fix: resolve error when setup on second attempt (#1061)
This commit is contained in:
@@ -299,14 +299,27 @@ authRoutes.post('/jellyfin', async (req, res, next) => {
|
|||||||
where: { jellyfinUserId: account.User.Id },
|
where: { jellyfinUserId: account.User.Id },
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!user && !(await userRepository.count())) {
|
const missingAdminUser = !user && !(await userRepository.count());
|
||||||
|
if (
|
||||||
|
missingAdminUser ||
|
||||||
|
settings.main.mediaServerType === MediaServerType.NOT_CONFIGURED
|
||||||
|
) {
|
||||||
// Check if user is admin on jellyfin
|
// Check if user is admin on jellyfin
|
||||||
if (account.User.Policy.IsAdministrator === false) {
|
if (account.User.Policy.IsAdministrator === false) {
|
||||||
throw new ApiError(403, ApiErrorCode.NotAdmin);
|
throw new ApiError(403, ApiErrorCode.NotAdmin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
body.serverType !== MediaServerType.JELLYFIN &&
|
||||||
|
body.serverType !== MediaServerType.EMBY
|
||||||
|
) {
|
||||||
|
throw new Error('select_server_type');
|
||||||
|
}
|
||||||
|
settings.main.mediaServerType = body.serverType;
|
||||||
|
|
||||||
|
if (missingAdminUser) {
|
||||||
logger.info(
|
logger.info(
|
||||||
'Sign-in attempt from Jellyfin user with access to the media server; creating initial admin user for Overseerr',
|
'Sign-in attempt from Jellyfin user with access to the media server; creating initial admin user for Jellyseerr',
|
||||||
{
|
{
|
||||||
label: 'API',
|
label: 'API',
|
||||||
ip: req.ip,
|
ip: req.ip,
|
||||||
@@ -316,10 +329,9 @@ authRoutes.post('/jellyfin', async (req, res, next) => {
|
|||||||
|
|
||||||
// User doesn't exist, and there are no users in the database, we'll create the user
|
// User doesn't exist, and there are no users in the database, we'll create the user
|
||||||
// with admin permissions
|
// with admin permissions
|
||||||
switch (body.serverType) {
|
|
||||||
case MediaServerType.EMBY:
|
|
||||||
settings.main.mediaServerType = MediaServerType.EMBY;
|
|
||||||
user = new User({
|
user = new User({
|
||||||
|
id: 1,
|
||||||
email: body.email || account.User.Name,
|
email: body.email || account.User.Name,
|
||||||
jellyfinUsername: account.User.Name,
|
jellyfinUsername: account.User.Name,
|
||||||
jellyfinUserId: account.User.Id,
|
jellyfinUserId: account.User.Id,
|
||||||
@@ -327,26 +339,44 @@ authRoutes.post('/jellyfin', async (req, res, next) => {
|
|||||||
jellyfinAuthToken: account.AccessToken,
|
jellyfinAuthToken: account.AccessToken,
|
||||||
permissions: Permission.ADMIN,
|
permissions: Permission.ADMIN,
|
||||||
avatar: `/avatarproxy/${account.User.Id}`,
|
avatar: `/avatarproxy/${account.User.Id}`,
|
||||||
userType: UserType.EMBY,
|
userType:
|
||||||
|
body.serverType === MediaServerType.JELLYFIN
|
||||||
|
? UserType.JELLYFIN
|
||||||
|
: UserType.EMBY,
|
||||||
});
|
});
|
||||||
|
|
||||||
break;
|
await userRepository.save(user);
|
||||||
case MediaServerType.JELLYFIN:
|
} else {
|
||||||
settings.main.mediaServerType = MediaServerType.JELLYFIN;
|
logger.info(
|
||||||
user = new User({
|
'Sign-in attempt from Jellyfin user with access to the media server; editing admin user for Jellyseerr',
|
||||||
email: body.email || account.User.Name,
|
{
|
||||||
|
label: 'API',
|
||||||
|
ip: req.ip,
|
||||||
jellyfinUsername: account.User.Name,
|
jellyfinUsername: account.User.Name,
|
||||||
jellyfinUserId: account.User.Id,
|
}
|
||||||
jellyfinDeviceId: deviceId,
|
);
|
||||||
jellyfinAuthToken: account.AccessToken,
|
|
||||||
permissions: Permission.ADMIN,
|
|
||||||
avatar: `/avatarproxy/${account.User.Id}`,
|
|
||||||
userType: UserType.JELLYFIN,
|
|
||||||
});
|
|
||||||
|
|
||||||
break;
|
// User alread exist but settings.json is not configured, we'll edit the admin user
|
||||||
default:
|
|
||||||
throw new Error('select_server_type');
|
user = await userRepository.findOne({
|
||||||
|
where: { id: 1 },
|
||||||
|
});
|
||||||
|
if (!user) {
|
||||||
|
throw new Error('Unable to find admin user to edit');
|
||||||
|
}
|
||||||
|
user.email = body.email || account.User.Name;
|
||||||
|
user.jellyfinUsername = account.User.Name;
|
||||||
|
user.jellyfinUserId = account.User.Id;
|
||||||
|
user.jellyfinDeviceId = deviceId;
|
||||||
|
user.jellyfinAuthToken = account.AccessToken;
|
||||||
|
user.permissions = Permission.ADMIN;
|
||||||
|
user.avatar = `/avatarproxy/${account.User.Id}`;
|
||||||
|
user.userType =
|
||||||
|
body.serverType === MediaServerType.JELLYFIN
|
||||||
|
? UserType.JELLYFIN
|
||||||
|
: UserType.EMBY;
|
||||||
|
|
||||||
|
await userRepository.save(user);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create an API key on Jellyfin from this admin user
|
// Create an API key on Jellyfin from this admin user
|
||||||
@@ -368,8 +398,6 @@ authRoutes.post('/jellyfin', async (req, res, next) => {
|
|||||||
settings.jellyfin.apiKey = apiKey;
|
settings.jellyfin.apiKey = apiKey;
|
||||||
await settings.save();
|
await settings.save();
|
||||||
startJobs();
|
startJobs();
|
||||||
|
|
||||||
await userRepository.save(user);
|
|
||||||
}
|
}
|
||||||
// User already exists, let's update their information
|
// User already exists, let's update their information
|
||||||
else if (account.User.Id === user?.jellyfinUserId) {
|
else if (account.User.Id === user?.jellyfinUserId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user