321 lines
7.4 KiB
TypeScript
321 lines
7.4 KiB
TypeScript
/**
|
|
* SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
import { getCapabilities } from '@nextcloud/capabilities'
|
|
import { loadState } from '@nextcloud/initial-state'
|
|
|
|
type PasswordPolicyCapabilities = {
|
|
enforceNonCommonPassword: boolean
|
|
enforceNumericCharacters: boolean
|
|
enforceSpecialCharacters: boolean
|
|
enforceUpperLowerCase: boolean
|
|
minLength: number
|
|
}
|
|
|
|
type FileSharingCapabilities = {
|
|
api_enabled: boolean,
|
|
public: {
|
|
enabled: boolean,
|
|
password: {
|
|
enforced: boolean,
|
|
askForOptionalPassword: boolean
|
|
},
|
|
expire_date: {
|
|
enabled: boolean,
|
|
days: number,
|
|
enforced: boolean
|
|
},
|
|
multiple_links: boolean,
|
|
expire_date_internal: {
|
|
enabled: boolean
|
|
},
|
|
expire_date_remote: {
|
|
enabled: boolean
|
|
},
|
|
send_mail: boolean,
|
|
upload: boolean,
|
|
upload_files_drop: boolean,
|
|
custom_tokens: boolean,
|
|
},
|
|
resharing: boolean,
|
|
user: {
|
|
send_mail: boolean,
|
|
expire_date: {
|
|
enabled: boolean
|
|
}
|
|
},
|
|
group_sharing: boolean,
|
|
group: {
|
|
enabled: boolean,
|
|
expire_date: {
|
|
enabled: true
|
|
}
|
|
},
|
|
default_permissions: number,
|
|
federation: {
|
|
outgoing: boolean,
|
|
incoming: boolean,
|
|
expire_date: {
|
|
enabled: boolean
|
|
},
|
|
expire_date_supported: {
|
|
enabled: boolean
|
|
}
|
|
},
|
|
sharee: {
|
|
query_lookup_default: boolean,
|
|
always_show_unique: boolean
|
|
},
|
|
sharebymail: {
|
|
enabled: boolean,
|
|
send_password_by_mail: boolean,
|
|
upload_files_drop: {
|
|
enabled: boolean
|
|
},
|
|
password: {
|
|
enabled: boolean,
|
|
enforced: boolean
|
|
},
|
|
expire_date: {
|
|
enabled: boolean,
|
|
enforced: boolean
|
|
}
|
|
}
|
|
}
|
|
|
|
type Capabilities = {
|
|
files_sharing: FileSharingCapabilities
|
|
password_policy: PasswordPolicyCapabilities
|
|
}
|
|
|
|
export default class Config {
|
|
|
|
_capabilities: Capabilities
|
|
|
|
constructor() {
|
|
this._capabilities = getCapabilities() as Capabilities
|
|
}
|
|
|
|
/**
|
|
* Get default share permissions, if any
|
|
*/
|
|
get defaultPermissions(): number {
|
|
return this._capabilities.files_sharing?.default_permissions
|
|
}
|
|
|
|
/**
|
|
* Is public upload allowed on link shares ?
|
|
* This covers File request and Full upload/edit option.
|
|
*/
|
|
get isPublicUploadEnabled(): boolean {
|
|
return this._capabilities.files_sharing?.public?.upload === true
|
|
}
|
|
|
|
/**
|
|
* Get the federated sharing documentation link
|
|
*/
|
|
get federatedShareDocLink() {
|
|
return window.OC.appConfig.core.federatedCloudShareDoc
|
|
}
|
|
|
|
/**
|
|
* Get the default link share expiration date
|
|
*/
|
|
get defaultExpirationDate(): Date|null {
|
|
if (this.isDefaultExpireDateEnabled && this.defaultExpireDate !== null) {
|
|
return new Date(new Date().setDate(new Date().getDate() + this.defaultExpireDate))
|
|
}
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* Get the default internal expiration date
|
|
*/
|
|
get defaultInternalExpirationDate(): Date|null {
|
|
if (this.isDefaultInternalExpireDateEnabled && this.defaultInternalExpireDate !== null) {
|
|
return new Date(new Date().setDate(new Date().getDate() + this.defaultInternalExpireDate))
|
|
}
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* Get the default remote expiration date
|
|
*/
|
|
get defaultRemoteExpirationDateString(): Date|null {
|
|
if (this.isDefaultRemoteExpireDateEnabled && this.defaultRemoteExpireDate !== null) {
|
|
return new Date(new Date().setDate(new Date().getDate() + this.defaultRemoteExpireDate))
|
|
}
|
|
return null
|
|
}
|
|
|
|
/**
|
|
* Are link shares password-enforced ?
|
|
*/
|
|
get enforcePasswordForPublicLink(): boolean {
|
|
return window.OC.appConfig.core.enforcePasswordForPublicLink === true
|
|
}
|
|
|
|
/**
|
|
* Is password asked by default on link shares ?
|
|
*/
|
|
get enableLinkPasswordByDefault(): boolean {
|
|
return window.OC.appConfig.core.enableLinkPasswordByDefault === true
|
|
}
|
|
|
|
/**
|
|
* Is link shares expiration enforced ?
|
|
*/
|
|
get isDefaultExpireDateEnforced(): boolean {
|
|
return window.OC.appConfig.core.defaultExpireDateEnforced === true
|
|
}
|
|
|
|
/**
|
|
* Is there a default expiration date for new link shares ?
|
|
*/
|
|
get isDefaultExpireDateEnabled(): boolean {
|
|
return window.OC.appConfig.core.defaultExpireDateEnabled === true
|
|
}
|
|
|
|
/**
|
|
* Is internal shares expiration enforced ?
|
|
*/
|
|
get isDefaultInternalExpireDateEnforced(): boolean {
|
|
return window.OC.appConfig.core.defaultInternalExpireDateEnforced === true
|
|
}
|
|
|
|
/**
|
|
* Is there a default expiration date for new internal shares ?
|
|
*/
|
|
get isDefaultInternalExpireDateEnabled(): boolean {
|
|
return window.OC.appConfig.core.defaultInternalExpireDateEnabled === true
|
|
}
|
|
|
|
/**
|
|
* Is remote shares expiration enforced ?
|
|
*/
|
|
get isDefaultRemoteExpireDateEnforced(): boolean {
|
|
return window.OC.appConfig.core.defaultRemoteExpireDateEnforced === true
|
|
}
|
|
|
|
/**
|
|
* Is there a default expiration date for new remote shares ?
|
|
*/
|
|
get isDefaultRemoteExpireDateEnabled(): boolean {
|
|
return window.OC.appConfig.core.defaultRemoteExpireDateEnabled === true
|
|
}
|
|
|
|
/**
|
|
* Are users on this server allowed to send shares to other servers ?
|
|
*/
|
|
get isRemoteShareAllowed(): boolean {
|
|
return window.OC.appConfig.core.remoteShareAllowed === true
|
|
}
|
|
|
|
/**
|
|
* Is public sharing enabled ?
|
|
*/
|
|
get isPublicShareAllowed(): boolean {
|
|
return this._capabilities?.files_sharing?.public?.enabled === true
|
|
}
|
|
|
|
/**
|
|
* Is sharing my mail (link share) enabled ?
|
|
*/
|
|
get isMailShareAllowed(): boolean {
|
|
// eslint-disable-next-line camelcase
|
|
return this._capabilities?.files_sharing?.sharebymail?.enabled === true
|
|
// eslint-disable-next-line camelcase
|
|
&& this.isPublicShareAllowed === true
|
|
}
|
|
|
|
/**
|
|
* Get the default days to link shares expiration
|
|
*/
|
|
get defaultExpireDate(): number|null {
|
|
return window.OC.appConfig.core.defaultExpireDate
|
|
}
|
|
|
|
/**
|
|
* Get the default days to internal shares expiration
|
|
*/
|
|
get defaultInternalExpireDate(): number|null {
|
|
return window.OC.appConfig.core.defaultInternalExpireDate
|
|
}
|
|
|
|
/**
|
|
* Get the default days to remote shares expiration
|
|
*/
|
|
get defaultRemoteExpireDate(): number|null {
|
|
return window.OC.appConfig.core.defaultRemoteExpireDate
|
|
}
|
|
|
|
/**
|
|
* Is resharing allowed ?
|
|
*/
|
|
get isResharingAllowed(): boolean {
|
|
return window.OC.appConfig.core.resharingAllowed === true
|
|
}
|
|
|
|
/**
|
|
* Is password enforced for mail shares ?
|
|
*/
|
|
get isPasswordForMailSharesRequired(): boolean {
|
|
return this._capabilities.files_sharing?.sharebymail?.password?.enforced === true
|
|
}
|
|
|
|
/**
|
|
* Always show the email or userid unique sharee label if enabled by the admin
|
|
*/
|
|
get shouldAlwaysShowUnique(): boolean {
|
|
return this._capabilities.files_sharing?.sharee?.always_show_unique === true
|
|
}
|
|
|
|
/**
|
|
* Is sharing with groups allowed ?
|
|
*/
|
|
get allowGroupSharing(): boolean {
|
|
return window.OC.appConfig.core.allowGroupSharing === true
|
|
}
|
|
|
|
/**
|
|
* Get the maximum results of a share search
|
|
*/
|
|
get maxAutocompleteResults(): number {
|
|
return parseInt(window.OC.config['sharing.maxAutocompleteResults'], 10) || 25
|
|
}
|
|
|
|
/**
|
|
* Get the minimal string length
|
|
* to initiate a share search
|
|
*/
|
|
get minSearchStringLength(): number {
|
|
return parseInt(window.OC.config['sharing.minSearchStringLength'], 10) || 0
|
|
}
|
|
|
|
/**
|
|
* Get the password policy configuration
|
|
*/
|
|
get passwordPolicy(): PasswordPolicyCapabilities {
|
|
return this._capabilities?.password_policy || {}
|
|
}
|
|
|
|
/**
|
|
* Returns true if custom tokens are allowed
|
|
*/
|
|
get allowCustomTokens(): boolean {
|
|
return this._capabilities?.files_sharing?.public?.custom_tokens
|
|
}
|
|
|
|
/**
|
|
* Show federated shares as internal shares
|
|
* @return {boolean}
|
|
*/
|
|
get showFederatedSharesAsInternal(): boolean {
|
|
const showFederatedSharesAsInternal = loadState('files_sharing', 'showFederatedSharesAsInternal', false)
|
|
|
|
return !!showFederatedSharesAsInternal
|
|
}
|
|
|
|
}
|