@@ -42,17 +42,17 @@ You **MUST** include `app.immich:/` as the redirect URI for iOS and Android mobi
## Enable OAuth
-Once you have a new OAuth client application configured, Immich can be configured using the following environment variables:
+Once you have a new OAuth client application configured, Immich can be configured using the Administration Settings page, available on the web (Administration -> Settings).
-| Key | Type | Default | Description |
+| Setting | Type | Default | Description |
| ------------------- | ------- | -------------------- | ------------------------------------------------------------------------- |
-| OAUTH_ENABLED | boolean | false | Enable/disable OAuth2 |
-| OAUTH_ISSUER_URL | URL | (required) | Required. Self-discovery URL for client (from previous step) |
-| OAUTH_CLIENT_ID | string | (required) | Required. Client ID (from previous step) |
-| OAUTH_CLIENT_SECRET | string | (required) | Required. Client Secret (previous step) |
-| OAUTH_SCOPE | string | openid email profile | Full list of scopes to send with the request (space delimited) |
-| OAUTH_AUTO_REGISTER | boolean | true | When true, will automatically register a user the first time they sign in |
-| OAUTH_BUTTON_TEXT | string | Login with OAuth | Text for the OAuth button on the web |
+| OAuth enabled | boolean | false | Enable/disable OAuth2 |
+| OAuth issuer URL | URL | (required) | Required. Self-discovery URL for client (from previous step) |
+| OAuth client ID | string | (required) | Required. Client ID (from previous step) |
+| OAuth client secret | string | (required) | Required. Client Secret (previous step) |
+| OAuth scope | string | openid email profile | Full list of scopes to send with the request (space delimited) |
+| OAuth button text | string | Login with OAuth | Text for the OAuth button on the web |
+| OAuth auto register | boolean | true | When true, will automatically register a user the first time they sign in |
:::info
The Issuer URL should look something like the following, and return a valid json document.
@@ -63,14 +63,4 @@ The Issuer URL should look something like the following, and return a valid json
The `.well-known/openid-configuration` part of the url is optional and will be automatically added during discovery.
:::
-Here is an example of a valid configuration for setting up Immich to use OAuth with Authentik:
-
-```
-OAUTH_ENABLED=true
-OAUTH_ISSUER_URL=http://192.168.0.187:9000/application/o/immich
-OAUTH_CLIENT_ID=f08f9c5b4f77dcfd3916b1c032336b5544a7b368
-OAUTH_CLIENT_SECRET=6fe2e697644da6ff6aef73387a457d819018189086fa54b151a6067fbb884e75f7e5c90be16d3c688cf902c6974817a85eab93007d76675041eaead8c39cf5a2
-OAUTH_BUTTON_TEXT=Login with Authentik
-```
-
[oidc]: https://openid.net/connect/
diff --git a/mobile/openapi/.openapi-generator/FILES b/mobile/openapi/.openapi-generator/FILES
index 15fce354b..608df54b1 100644
--- a/mobile/openapi/.openapi-generator/FILES
+++ b/mobile/openapi/.openapi-generator/FILES
@@ -61,9 +61,9 @@ doc/ServerVersionReponseDto.md
doc/SignUpDto.md
doc/SmartInfoResponseDto.md
doc/SystemConfigApi.md
-doc/SystemConfigKey.md
-doc/SystemConfigResponseDto.md
-doc/SystemConfigResponseItem.md
+doc/SystemConfigDto.md
+doc/SystemConfigFFmpegDto.md
+doc/SystemConfigOAuthDto.md
doc/TagApi.md
doc/TagResponseDto.md
doc/TagTypeEnum.md
@@ -149,9 +149,9 @@ lib/model/server_stats_response_dto.dart
lib/model/server_version_reponse_dto.dart
lib/model/sign_up_dto.dart
lib/model/smart_info_response_dto.dart
-lib/model/system_config_key.dart
-lib/model/system_config_response_dto.dart
-lib/model/system_config_response_item.dart
+lib/model/system_config_dto.dart
+lib/model/system_config_f_fmpeg_dto.dart
+lib/model/system_config_o_auth_dto.dart
lib/model/tag_response_dto.dart
lib/model/tag_type_enum.dart
lib/model/thumbnail_format.dart
@@ -224,9 +224,9 @@ test/server_version_reponse_dto_test.dart
test/sign_up_dto_test.dart
test/smart_info_response_dto_test.dart
test/system_config_api_test.dart
-test/system_config_key_test.dart
-test/system_config_response_dto_test.dart
-test/system_config_response_item_test.dart
+test/system_config_dto_test.dart
+test/system_config_f_fmpeg_dto_test.dart
+test/system_config_o_auth_dto_test.dart
test/tag_api_test.dart
test/tag_response_dto_test.dart
test/tag_type_enum_test.dart
diff --git a/mobile/openapi/README.md b/mobile/openapi/README.md
index a0482b3e0..76b13b232 100644
Binary files a/mobile/openapi/README.md and b/mobile/openapi/README.md differ
diff --git a/mobile/openapi/doc/SystemConfigApi.md b/mobile/openapi/doc/SystemConfigApi.md
index 9e40b4e81..365ac3f76 100644
Binary files a/mobile/openapi/doc/SystemConfigApi.md and b/mobile/openapi/doc/SystemConfigApi.md differ
diff --git a/mobile/openapi/doc/SystemConfigKey.md b/mobile/openapi/doc/SystemConfigDto.md
similarity index 66%
rename from mobile/openapi/doc/SystemConfigKey.md
rename to mobile/openapi/doc/SystemConfigDto.md
index b142ab559..af283c4fd 100644
Binary files a/mobile/openapi/doc/SystemConfigKey.md and b/mobile/openapi/doc/SystemConfigDto.md differ
diff --git a/mobile/openapi/doc/SystemConfigResponseDto.md b/mobile/openapi/doc/SystemConfigFFmpegDto.md
similarity index 62%
rename from mobile/openapi/doc/SystemConfigResponseDto.md
rename to mobile/openapi/doc/SystemConfigFFmpegDto.md
index 506d531b9..b208d7b9f 100644
Binary files a/mobile/openapi/doc/SystemConfigResponseDto.md and b/mobile/openapi/doc/SystemConfigFFmpegDto.md differ
diff --git a/mobile/openapi/doc/SystemConfigResponseItem.md b/mobile/openapi/doc/SystemConfigOAuthDto.md
similarity index 56%
rename from mobile/openapi/doc/SystemConfigResponseItem.md
rename to mobile/openapi/doc/SystemConfigOAuthDto.md
index 03b753cb6..e91850e50 100644
Binary files a/mobile/openapi/doc/SystemConfigResponseItem.md and b/mobile/openapi/doc/SystemConfigOAuthDto.md differ
diff --git a/mobile/openapi/lib/api.dart b/mobile/openapi/lib/api.dart
index 69efb7a30..b30e4f681 100644
Binary files a/mobile/openapi/lib/api.dart and b/mobile/openapi/lib/api.dart differ
diff --git a/mobile/openapi/lib/api/system_config_api.dart b/mobile/openapi/lib/api/system_config_api.dart
index e228c7199..7bd66c670 100644
Binary files a/mobile/openapi/lib/api/system_config_api.dart and b/mobile/openapi/lib/api/system_config_api.dart differ
diff --git a/mobile/openapi/lib/api_client.dart b/mobile/openapi/lib/api_client.dart
index 5057f6950..628b533e7 100644
Binary files a/mobile/openapi/lib/api_client.dart and b/mobile/openapi/lib/api_client.dart differ
diff --git a/mobile/openapi/lib/api_helper.dart b/mobile/openapi/lib/api_helper.dart
index 828ff84fc..c59dc0f91 100644
Binary files a/mobile/openapi/lib/api_helper.dart and b/mobile/openapi/lib/api_helper.dart differ
diff --git a/mobile/openapi/lib/model/system_config_response_dto.dart b/mobile/openapi/lib/model/system_config_dto.dart
similarity index 55%
rename from mobile/openapi/lib/model/system_config_response_dto.dart
rename to mobile/openapi/lib/model/system_config_dto.dart
index 23020930a..a667236e7 100644
Binary files a/mobile/openapi/lib/model/system_config_response_dto.dart and b/mobile/openapi/lib/model/system_config_dto.dart differ
diff --git a/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart b/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart
new file mode 100644
index 000000000..73692bdce
Binary files /dev/null and b/mobile/openapi/lib/model/system_config_f_fmpeg_dto.dart differ
diff --git a/mobile/openapi/lib/model/system_config_key.dart b/mobile/openapi/lib/model/system_config_key.dart
deleted file mode 100644
index 1154864bf..000000000
Binary files a/mobile/openapi/lib/model/system_config_key.dart and /dev/null differ
diff --git a/mobile/openapi/lib/model/system_config_o_auth_dto.dart b/mobile/openapi/lib/model/system_config_o_auth_dto.dart
new file mode 100644
index 000000000..9ca02ce41
Binary files /dev/null and b/mobile/openapi/lib/model/system_config_o_auth_dto.dart differ
diff --git a/mobile/openapi/lib/model/system_config_response_item.dart b/mobile/openapi/lib/model/system_config_response_item.dart
deleted file mode 100644
index f52ea6eaf..000000000
Binary files a/mobile/openapi/lib/model/system_config_response_item.dart and /dev/null differ
diff --git a/mobile/openapi/test/system_config_api_test.dart b/mobile/openapi/test/system_config_api_test.dart
index db9e8c002..84d1ceeb9 100644
Binary files a/mobile/openapi/test/system_config_api_test.dart and b/mobile/openapi/test/system_config_api_test.dart differ
diff --git a/mobile/openapi/test/system_config_response_dto_test.dart b/mobile/openapi/test/system_config_dto_test.dart
similarity index 55%
rename from mobile/openapi/test/system_config_response_dto_test.dart
rename to mobile/openapi/test/system_config_dto_test.dart
index e9f39ea7e..1cf6c7f23 100644
Binary files a/mobile/openapi/test/system_config_response_dto_test.dart and b/mobile/openapi/test/system_config_dto_test.dart differ
diff --git a/mobile/openapi/test/system_config_f_fmpeg_dto_test.dart b/mobile/openapi/test/system_config_f_fmpeg_dto_test.dart
new file mode 100644
index 000000000..a088dc611
Binary files /dev/null and b/mobile/openapi/test/system_config_f_fmpeg_dto_test.dart differ
diff --git a/mobile/openapi/test/system_config_key_test.dart b/mobile/openapi/test/system_config_key_test.dart
deleted file mode 100644
index 47271c7a7..000000000
Binary files a/mobile/openapi/test/system_config_key_test.dart and /dev/null differ
diff --git a/mobile/openapi/test/system_config_o_auth_dto_test.dart b/mobile/openapi/test/system_config_o_auth_dto_test.dart
new file mode 100644
index 000000000..d3bfed19e
Binary files /dev/null and b/mobile/openapi/test/system_config_o_auth_dto_test.dart differ
diff --git a/mobile/openapi/test/system_config_response_item_test.dart b/mobile/openapi/test/system_config_response_item_test.dart
deleted file mode 100644
index 1fa5fd3d6..000000000
Binary files a/mobile/openapi/test/system_config_response_item_test.dart and /dev/null differ
diff --git a/server/apps/immich/src/api-v1/oauth/oauth.module.ts b/server/apps/immich/src/api-v1/oauth/oauth.module.ts
index 103645881..8d43799c2 100644
--- a/server/apps/immich/src/api-v1/oauth/oauth.module.ts
+++ b/server/apps/immich/src/api-v1/oauth/oauth.module.ts
@@ -1,3 +1,4 @@
+import { ImmichConfigModule } from '@app/immich-config';
import { Module } from '@nestjs/common';
import { ImmichJwtModule } from '../../modules/immich-jwt/immich-jwt.module';
import { UserModule } from '../user/user.module';
@@ -5,7 +6,7 @@ import { OAuthController } from './oauth.controller';
import { OAuthService } from './oauth.service';
@Module({
- imports: [UserModule, ImmichJwtModule],
+ imports: [UserModule, ImmichJwtModule, ImmichConfigModule],
controllers: [OAuthController],
providers: [OAuthService],
exports: [OAuthService],
diff --git a/server/apps/immich/src/api-v1/oauth/oauth.service.spec.ts b/server/apps/immich/src/api-v1/oauth/oauth.service.spec.ts
index d62d44208..8d7ac78d1 100644
--- a/server/apps/immich/src/api-v1/oauth/oauth.service.spec.ts
+++ b/server/apps/immich/src/api-v1/oauth/oauth.service.spec.ts
@@ -1,24 +1,13 @@
+import { SystemConfig } from '@app/database/entities/system-config.entity';
import { UserEntity } from '@app/database/entities/user.entity';
+import { ImmichConfigService } from '@app/immich-config';
import { BadRequestException } from '@nestjs/common';
-import { ConfigService } from '@nestjs/config';
import { generators, Issuer } from 'openid-client';
import { ImmichJwtService } from '../../modules/immich-jwt/immich-jwt.service';
import { LoginResponseDto } from '../auth/response-dto/login-response.dto';
import { OAuthService } from '../oauth/oauth.service';
import { IUserRepository } from '../user/user-repository';
-interface OAuthConfig {
- OAUTH_ENABLED: boolean;
- OAUTH_AUTO_REGISTER: boolean;
- OAUTH_ISSUER_URL: string;
- OAUTH_SCOPE: string;
- OAUTH_BUTTON_TEXT: string;
-}
-
-const mockConfig = (config: Partial{subtitle}
+{subtitle}
+| Setting | -Value | -
|---|---|
| - {item.name} - | -- - | -
| First name | -Last name | -Action | -|
|---|---|---|---|
| {user.email} | -{user.firstName} | -{user.lastName} | -- {#if !isDeleted(user)} - - - {/if} - {#if isDeleted(user)} - - {/if} - | -