mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	feat(server)!: move welcome message to settings (#6157)
* feat(server): move welcome message to settings * chore: open api
This commit is contained in:
		
							parent
							
								
									52e92e9bb4
								
							
						
					
					
						commit
						f8d64be13c
					
				
							
								
								
									
										6
									
								
								cli/src/api/open-api/api.ts
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								cli/src/api/open-api/api.ts
									
									
									
										generated
									
									
									
								
							@ -4038,6 +4038,12 @@ export interface SystemConfigServerDto {
 | 
				
			|||||||
     * @memberof SystemConfigServerDto
 | 
					     * @memberof SystemConfigServerDto
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    'externalDomain': string;
 | 
					    'externalDomain': string;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @type {string}
 | 
				
			||||||
 | 
					     * @memberof SystemConfigServerDto
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    'loginPageMessage': string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 | 
				
			|||||||
@ -31,12 +31,11 @@ These environment variables are used by the `docker-compose.yml` file and do **N
 | 
				
			|||||||
## General
 | 
					## General
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Variable                | Description                                  |       Default       | Services                                     |
 | 
					| Variable                | Description                                  |       Default       | Services                                     |
 | 
				
			||||||
| :-------------------------- | :------------------------------------------- | :-----------------: | :------------------------------------------- |
 | 
					| :---------------------- | :------------------------------------------- | :-----------------: | :------------------------------------------- |
 | 
				
			||||||
| `TZ`                    | Timezone                                     |                     | microservices                                |
 | 
					| `TZ`                    | Timezone                                     |                     | microservices                                |
 | 
				
			||||||
| `NODE_ENV`              | Environment (production, development)        |    `production`     | server, microservices, machine learning, web |
 | 
					| `NODE_ENV`              | Environment (production, development)        |    `production`     | server, microservices, machine learning, web |
 | 
				
			||||||
| `LOG_LEVEL`             | Log Level (verbose, debug, log, warn, error) |        `log`        | server, microservices                        |
 | 
					| `LOG_LEVEL`             | Log Level (verbose, debug, log, warn, error) |        `log`        | server, microservices                        |
 | 
				
			||||||
| `IMMICH_MEDIA_LOCATION` | Media Location                               |     `./upload`      | server, microservices                        |
 | 
					| `IMMICH_MEDIA_LOCATION` | Media Location                               |     `./upload`      | server, microservices                        |
 | 
				
			||||||
| `PUBLIC_LOGIN_PAGE_MESSAGE` | Public Login Page Message                    |                     | web                                          |
 | 
					 | 
				
			||||||
| `IMMICH_CONFIG_FILE`    | Path to config file                          |                     | server                                       |
 | 
					| `IMMICH_CONFIG_FILE`    | Path to config file                          |                     | server                                       |
 | 
				
			||||||
| `IMMICH_WEB_ROOT`       | Path of root index.html                      | `/usr/src/app/www'` | server                                       |
 | 
					| `IMMICH_WEB_ROOT`       | Path of root index.html                      | `/usr/src/app/www'` | server                                       |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								mobile/openapi/doc/SystemConfigServerDto.md
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								mobile/openapi/doc/SystemConfigServerDto.md
									
									
									
										generated
									
									
									
								
							@ -9,6 +9,7 @@ import 'package:openapi/api.dart';
 | 
				
			|||||||
Name | Type | Description | Notes
 | 
					Name | Type | Description | Notes
 | 
				
			||||||
------------ | ------------- | ------------- | -------------
 | 
					------------ | ------------- | ------------- | -------------
 | 
				
			||||||
**externalDomain** | **String** |  | 
 | 
					**externalDomain** | **String** |  | 
 | 
				
			||||||
 | 
					**loginPageMessage** | **String** |  | 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
					[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -14,25 +14,31 @@ class SystemConfigServerDto {
 | 
				
			|||||||
  /// Returns a new [SystemConfigServerDto] instance.
 | 
					  /// Returns a new [SystemConfigServerDto] instance.
 | 
				
			||||||
  SystemConfigServerDto({
 | 
					  SystemConfigServerDto({
 | 
				
			||||||
    required this.externalDomain,
 | 
					    required this.externalDomain,
 | 
				
			||||||
 | 
					    required this.loginPageMessage,
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  String externalDomain;
 | 
					  String externalDomain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  String loginPageMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  bool operator ==(Object other) => identical(this, other) || other is SystemConfigServerDto &&
 | 
					  bool operator ==(Object other) => identical(this, other) || other is SystemConfigServerDto &&
 | 
				
			||||||
     other.externalDomain == externalDomain;
 | 
					     other.externalDomain == externalDomain &&
 | 
				
			||||||
 | 
					     other.loginPageMessage == loginPageMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  int get hashCode =>
 | 
					  int get hashCode =>
 | 
				
			||||||
    // ignore: unnecessary_parenthesis
 | 
					    // ignore: unnecessary_parenthesis
 | 
				
			||||||
    (externalDomain.hashCode);
 | 
					    (externalDomain.hashCode) +
 | 
				
			||||||
 | 
					    (loginPageMessage.hashCode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  String toString() => 'SystemConfigServerDto[externalDomain=$externalDomain]';
 | 
					  String toString() => 'SystemConfigServerDto[externalDomain=$externalDomain, loginPageMessage=$loginPageMessage]';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Map<String, dynamic> toJson() {
 | 
					  Map<String, dynamic> toJson() {
 | 
				
			||||||
    final json = <String, dynamic>{};
 | 
					    final json = <String, dynamic>{};
 | 
				
			||||||
      json[r'externalDomain'] = this.externalDomain;
 | 
					      json[r'externalDomain'] = this.externalDomain;
 | 
				
			||||||
 | 
					      json[r'loginPageMessage'] = this.loginPageMessage;
 | 
				
			||||||
    return json;
 | 
					    return json;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,6 +51,7 @@ class SystemConfigServerDto {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      return SystemConfigServerDto(
 | 
					      return SystemConfigServerDto(
 | 
				
			||||||
        externalDomain: mapValueOfType<String>(json, r'externalDomain')!,
 | 
					        externalDomain: mapValueOfType<String>(json, r'externalDomain')!,
 | 
				
			||||||
 | 
					        loginPageMessage: mapValueOfType<String>(json, r'loginPageMessage')!,
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return null;
 | 
					    return null;
 | 
				
			||||||
@ -93,6 +100,7 @@ class SystemConfigServerDto {
 | 
				
			|||||||
  /// The list of required keys that must be present in a JSON.
 | 
					  /// The list of required keys that must be present in a JSON.
 | 
				
			||||||
  static const requiredKeys = <String>{
 | 
					  static const requiredKeys = <String>{
 | 
				
			||||||
    'externalDomain',
 | 
					    'externalDomain',
 | 
				
			||||||
 | 
					    'loginPageMessage',
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,11 @@ void main() {
 | 
				
			|||||||
      // TODO
 | 
					      // TODO
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // String loginPageMessage
 | 
				
			||||||
 | 
					    test('to test the property `loginPageMessage`', () async {
 | 
				
			||||||
 | 
					      // TODO
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9371,10 +9371,14 @@
 | 
				
			|||||||
        "properties": {
 | 
					        "properties": {
 | 
				
			||||||
          "externalDomain": {
 | 
					          "externalDomain": {
 | 
				
			||||||
            "type": "string"
 | 
					            "type": "string"
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          "loginPageMessage": {
 | 
				
			||||||
 | 
					            "type": "string"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "required": [
 | 
					        "required": [
 | 
				
			||||||
          "externalDomain"
 | 
					          "externalDomain",
 | 
				
			||||||
 | 
					          "loginPageMessage"
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
        "type": "object"
 | 
					        "type": "object"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
 | 
				
			|||||||
@ -78,14 +78,10 @@ export class ServerInfoService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  async getConfig(): Promise<ServerConfigDto> {
 | 
					  async getConfig(): Promise<ServerConfigDto> {
 | 
				
			||||||
    const config = await this.configCore.getConfig();
 | 
					    const config = await this.configCore.getConfig();
 | 
				
			||||||
 | 
					 | 
				
			||||||
    // TODO move to system config
 | 
					 | 
				
			||||||
    const loginPageMessage = process.env.PUBLIC_LOGIN_PAGE_MESSAGE || '';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const isInitialized = await this.userRepository.hasAdmin();
 | 
					    const isInitialized = await this.userRepository.hasAdmin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      loginPageMessage,
 | 
					      loginPageMessage: config.server.loginPageMessage,
 | 
				
			||||||
      trashDays: config.trash.days,
 | 
					      trashDays: config.trash.days,
 | 
				
			||||||
      oauthButtonText: config.oauth.buttonText,
 | 
					      oauthButtonText: config.oauth.buttonText,
 | 
				
			||||||
      isInitialized,
 | 
					      isInitialized,
 | 
				
			||||||
 | 
				
			|||||||
@ -3,4 +3,7 @@ import { IsString } from 'class-validator';
 | 
				
			|||||||
export class SystemConfigServerDto {
 | 
					export class SystemConfigServerDto {
 | 
				
			||||||
  @IsString()
 | 
					  @IsString()
 | 
				
			||||||
  externalDomain!: string;
 | 
					  externalDomain!: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @IsString()
 | 
				
			||||||
 | 
					  loginPageMessage!: string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -129,6 +129,7 @@ export const defaults = Object.freeze<SystemConfig>({
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  server: {
 | 
					  server: {
 | 
				
			||||||
    externalDomain: '',
 | 
					    externalDomain: '',
 | 
				
			||||||
 | 
					    loginPageMessage: '',
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -102,6 +102,7 @@ const updatedConfig = Object.freeze<SystemConfig>({
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  server: {
 | 
					  server: {
 | 
				
			||||||
    externalDomain: '',
 | 
					    externalDomain: '',
 | 
				
			||||||
 | 
					    loginPageMessage: '',
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  storageTemplate: {
 | 
					  storageTemplate: {
 | 
				
			||||||
    enabled: false,
 | 
					    enabled: false,
 | 
				
			||||||
 | 
				
			|||||||
@ -85,6 +85,7 @@ export enum SystemConfigKey {
 | 
				
			|||||||
  PASSWORD_LOGIN_ENABLED = 'passwordLogin.enabled',
 | 
					  PASSWORD_LOGIN_ENABLED = 'passwordLogin.enabled',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SERVER_EXTERNAL_DOMAIN = 'server.externalDomain',
 | 
					  SERVER_EXTERNAL_DOMAIN = 'server.externalDomain',
 | 
				
			||||||
 | 
					  SERVER_LOGIN_PAGE_MESSAGE = 'server.loginPageMessage',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  STORAGE_TEMPLATE_ENABLED = 'storageTemplate.enabled',
 | 
					  STORAGE_TEMPLATE_ENABLED = 'storageTemplate.enabled',
 | 
				
			||||||
  STORAGE_TEMPLATE_HASH_VERIFICATION_ENABLED = 'storageTemplate.hashVerificationEnabled',
 | 
					  STORAGE_TEMPLATE_HASH_VERIFICATION_ENABLED = 'storageTemplate.hashVerificationEnabled',
 | 
				
			||||||
@ -248,5 +249,6 @@ export interface SystemConfig {
 | 
				
			|||||||
  };
 | 
					  };
 | 
				
			||||||
  server: {
 | 
					  server: {
 | 
				
			||||||
    externalDomain: string;
 | 
					    externalDomain: string;
 | 
				
			||||||
 | 
					    loginPageMessage: string;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										6
									
								
								web/src/api/open-api/api.ts
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										6
									
								
								web/src/api/open-api/api.ts
									
									
									
										generated
									
									
									
								
							@ -4038,6 +4038,12 @@ export interface SystemConfigServerDto {
 | 
				
			|||||||
     * @memberof SystemConfigServerDto
 | 
					     * @memberof SystemConfigServerDto
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    'externalDomain': string;
 | 
					    'externalDomain': string;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 
 | 
				
			||||||
 | 
					     * @type {string}
 | 
				
			||||||
 | 
					     * @memberof SystemConfigServerDto
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    'loginPageMessage': string;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * 
 | 
					 * 
 | 
				
			||||||
 | 
				
			|||||||
@ -92,6 +92,15 @@
 | 
				
			|||||||
            bind:value={serverConfig.externalDomain}
 | 
					            bind:value={serverConfig.externalDomain}
 | 
				
			||||||
            isEdited={serverConfig.externalDomain !== savedConfig.externalDomain}
 | 
					            isEdited={serverConfig.externalDomain !== savedConfig.externalDomain}
 | 
				
			||||||
          />
 | 
					          />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <SettingInputField
 | 
				
			||||||
 | 
					            inputType={SettingInputFieldType.TEXT}
 | 
				
			||||||
 | 
					            label="WELCOME MESSAGE"
 | 
				
			||||||
 | 
					            desc="A message that is displayed on the login page."
 | 
				
			||||||
 | 
					            bind:value={serverConfig.loginPageMessage}
 | 
				
			||||||
 | 
					            isEdited={serverConfig.loginPageMessage !== savedConfig.loginPageMessage}
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          <div class="ml-4">
 | 
					          <div class="ml-4">
 | 
				
			||||||
            <SettingButtonsRow
 | 
					            <SettingButtonsRow
 | 
				
			||||||
              on:reset={({ detail }) => handleReset(detail)}
 | 
					              on:reset={({ detail }) => handleReset(detail)}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user