mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-29 17:54:33 -05:00
135 lines
4.4 KiB
TypeScript
135 lines
4.4 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
import { Inject, Injectable } from '@nestjs/common';
|
|
import { ConsoleLoggerService } from '../logger/console-logger.service';
|
|
import {
|
|
AuthProviders,
|
|
BrandingDto,
|
|
CustomAuthNamesDto,
|
|
FrontendConfigDto,
|
|
IframeCommunicationDto,
|
|
SpecialUrlsDto,
|
|
} from './frontend-config.dto';
|
|
import authConfiguration, { AuthConfig } from '../config/auth.config';
|
|
import customizationConfiguration, {
|
|
CustomizationConfig,
|
|
} from '../config/customization.config';
|
|
import appConfiguration, { AppConfig } from '../config/app.config';
|
|
import externalServicesConfiguration, {
|
|
ExternalServicesConfig,
|
|
} from '../config/external-services.config';
|
|
import { getServerVersionFromPackageJson } from '../utils/serverVersion';
|
|
|
|
@Injectable()
|
|
export class FrontendConfigService {
|
|
constructor(
|
|
private readonly logger: ConsoleLoggerService,
|
|
@Inject(appConfiguration.KEY)
|
|
private appConfig: AppConfig,
|
|
@Inject(authConfiguration.KEY)
|
|
private authConfig: AuthConfig,
|
|
@Inject(customizationConfiguration.KEY)
|
|
private customizationConfig: CustomizationConfig,
|
|
@Inject(externalServicesConfiguration.KEY)
|
|
private externalServicesConfig: ExternalServicesConfig,
|
|
) {
|
|
this.logger.setContext(FrontendConfigService.name);
|
|
}
|
|
|
|
async getFrontendConfig(): Promise<FrontendConfigDto> {
|
|
return {
|
|
// ToDo: use actual value here
|
|
allowAnonymous: false,
|
|
allowRegister: this.authConfig.email.enableRegister,
|
|
authProviders: this.getAuthProviders(),
|
|
branding: this.getBranding(),
|
|
customAuthNames: this.getCustomAuthNames(),
|
|
iframeCommunication: this.getIframeCommunication(),
|
|
maxDocumentLength: this.appConfig.maxDocumentLength,
|
|
plantUmlServer: this.externalServicesConfig.plantUmlServer
|
|
? new URL(this.externalServicesConfig.plantUmlServer)
|
|
: undefined,
|
|
specialUrls: this.getSpecialUrls(),
|
|
useImageProxy: !!this.externalServicesConfig.imageProxy,
|
|
version: await getServerVersionFromPackageJson(),
|
|
};
|
|
}
|
|
|
|
private getAuthProviders(): AuthProviders {
|
|
return {
|
|
dropbox: !!this.authConfig.dropbox.clientID,
|
|
facebook: !!this.authConfig.facebook.clientID,
|
|
github: !!this.authConfig.github.clientID,
|
|
gitlab: this.authConfig.gitlab.length !== 0,
|
|
google: !!this.authConfig.google.clientID,
|
|
internal: this.authConfig.email.enableLogin,
|
|
ldap: this.authConfig.ldap.length !== 0,
|
|
oauth2: this.authConfig.oauth2.length !== 0,
|
|
saml: this.authConfig.saml.length !== 0,
|
|
twitter: !!this.authConfig.twitter.consumerKey,
|
|
};
|
|
}
|
|
|
|
private getCustomAuthNames(): CustomAuthNamesDto {
|
|
return {
|
|
gitlab: this.authConfig.gitlab.map((entry) => {
|
|
return {
|
|
identifier: entry.identifier,
|
|
providerName: entry.providerName,
|
|
};
|
|
}),
|
|
ldap: this.authConfig.ldap.map((entry) => {
|
|
return {
|
|
identifier: entry.identifier,
|
|
providerName: entry.providerName,
|
|
};
|
|
}),
|
|
oauth2: this.authConfig.oauth2.map((entry) => {
|
|
return {
|
|
identifier: entry.identifier,
|
|
providerName: entry.providerName,
|
|
};
|
|
}),
|
|
saml: this.authConfig.saml.map((entry) => {
|
|
return {
|
|
identifier: entry.identifier,
|
|
providerName: entry.providerName,
|
|
};
|
|
}),
|
|
};
|
|
}
|
|
|
|
private getBranding(): BrandingDto {
|
|
return {
|
|
logo: this.customizationConfig.branding.customLogo
|
|
? new URL(this.customizationConfig.branding.customLogo)
|
|
: undefined,
|
|
name: this.customizationConfig.branding.customName,
|
|
};
|
|
}
|
|
|
|
private getSpecialUrls(): SpecialUrlsDto {
|
|
return {
|
|
imprint: this.customizationConfig.specialUrls.imprint
|
|
? new URL(this.customizationConfig.specialUrls.imprint)
|
|
: undefined,
|
|
privacy: this.customizationConfig.specialUrls.privacy
|
|
? new URL(this.customizationConfig.specialUrls.privacy)
|
|
: undefined,
|
|
termsOfUse: this.customizationConfig.specialUrls.termsOfUse
|
|
? new URL(this.customizationConfig.specialUrls.termsOfUse)
|
|
: undefined,
|
|
};
|
|
}
|
|
|
|
private getIframeCommunication(): IframeCommunicationDto {
|
|
return {
|
|
editorOrigin: new URL(this.appConfig.domain),
|
|
rendererOrigin: new URL(this.appConfig.rendererOrigin),
|
|
};
|
|
}
|
|
}
|