diff --git a/server/api/plexapi.ts b/server/api/plexapi.ts
index a3abf0526..c8e123710 100644
--- a/server/api/plexapi.ts
+++ b/server/api/plexapi.ts
@@ -62,6 +62,7 @@ class PlexAPI {
this.plexClient = new NodePlexAPI({
hostname: settings.plex.ip,
port: settings.plex.port,
+ https: settings.plex.useSsl,
token: plexToken,
authenticator: {
authenticate: (
diff --git a/server/lib/settings.ts b/server/lib/settings.ts
index 1f33f3bee..f618615cb 100644
--- a/server/lib/settings.ts
+++ b/server/lib/settings.ts
@@ -14,6 +14,7 @@ export interface PlexSettings {
machineId?: string;
ip: string;
port: number;
+ useSsl?: boolean;
libraries: Library[];
}
@@ -109,6 +110,7 @@ class Settings {
name: '',
ip: '127.0.0.1',
port: 32400,
+ useSsl: false,
libraries: [],
},
radarr: [],
diff --git a/server/types/plex-api.d.ts b/server/types/plex-api.d.ts
index fd6db2dd9..9222faafc 100644
--- a/server/types/plex-api.d.ts
+++ b/server/types/plex-api.d.ts
@@ -4,6 +4,7 @@ declare module 'plex-api' {
hostname: string;
port: number;
token?: string;
+ https?: boolean;
authenticator: {
authenticate: (
_plexApi: PlexAPI,
diff --git a/src/components/Settings/SettingsPlex.tsx b/src/components/Settings/SettingsPlex.tsx
index d9d97c5d8..d4fa052ed 100644
--- a/src/components/Settings/SettingsPlex.tsx
+++ b/src/components/Settings/SettingsPlex.tsx
@@ -2,21 +2,23 @@ import React, { useState } from 'react';
import LoadingSpinner from '../Common/LoadingSpinner';
import type { PlexSettings } from '../../../server/lib/settings';
import useSWR from 'swr';
-import { useFormik } from 'formik';
+import { Formik, Field } from 'formik';
import Button from '../Common/Button';
import axios from 'axios';
import LibraryItem from './LibraryItem';
import Badge from '../Common/Badge';
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
+import * as Yup from 'yup';
const messages = defineMessages({
plexsettings: 'Plex Settings',
plexsettingsDescription:
'Configure the settings for your Plex server. Overseerr uses your Plex server to scan your library at an interval and see what content is available.',
- servername: 'Server Name (Automatically Set)',
+ servername: 'Server Name (Automatically set after you save)',
servernamePlaceholder: 'Plex Server Name',
hostname: 'Hostname/IP',
port: 'Port',
+ ssl: 'SSL',
save: 'Save Changes',
saving: 'Saving...',
plexlibraries: 'Plex Libraries',
@@ -32,6 +34,8 @@ const messages = defineMessages({
librariesRemaining: 'Libraries Remaining: {count}',
startscan: 'Start Scan',
cancelscan: 'Cancel Scan',
+ validationHostnameRequired: 'You must provide a hostname/IP',
+ validationPortRequired: 'You must provide a port',
});
interface Library {
@@ -64,33 +68,15 @@ const SettingsPlex: React.FC