{"version":3,"file":"current-user.repository-DHj5cLiS.js","sources":["../../../src/packages/user/current-user/repository/current-user.server.data-source.ts","../../../src/packages/user/current-user/repository/current-user.repository.ts"],"sourcesContent":["import type { UmbCurrentUserModel } from '../types.js';\r\nimport { UserService } from '@umbraco-cms/backoffice/external/backend-api';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { tryExecute, tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources';\r\n\r\n/**\r\n * A data source for the current user that fetches data from the server\r\n * @class UmbCurrentUserServerDataSource\r\n */\r\nexport class UmbCurrentUserServerDataSource {\r\n\t#host: UmbControllerHost;\r\n\r\n\t/**\r\n\t * Creates an instance of UmbCurrentUserServerDataSource.\r\n\t * @param {UmbControllerHost} host - The controller host for this controller to be appended to\r\n\t * @memberof UmbCurrentUserServerDataSource\r\n\t */\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tthis.#host = host;\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current user\r\n\t * @returns {*}\r\n\t * @memberof UmbCurrentUserServerDataSource\r\n\t */\r\n\tasync getCurrentUser() {\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, UserService.getUserCurrent());\r\n\r\n\t\tif (data) {\r\n\t\t\tconst user: UmbCurrentUserModel = {\r\n\t\t\t\tallowedSections: data.allowedSections,\r\n\t\t\t\tavatarUrls: data.avatarUrls,\r\n\t\t\t\tdocumentStartNodeUniques: data.documentStartNodeIds.map((node) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tunique: node.id,\r\n\t\t\t\t\t};\r\n\t\t\t\t}),\r\n\t\t\t\temail: data.email,\r\n\t\t\t\tfallbackPermissions: data.fallbackPermissions,\r\n\t\t\t\thasAccessToAllLanguages: data.hasAccessToAllLanguages,\r\n\t\t\t\thasAccessToSensitiveData: data.hasAccessToSensitiveData,\r\n\t\t\t\thasDocumentRootAccess: data.hasDocumentRootAccess,\r\n\t\t\t\thasMediaRootAccess: data.hasMediaRootAccess,\r\n\t\t\t\tisAdmin: data.isAdmin,\r\n\t\t\t\tlanguageIsoCode: data.languageIsoCode || 'en-us', // TODO: make global variable\r\n\t\t\t\tlanguages: data.languages,\r\n\t\t\t\tmediaStartNodeUniques: data.mediaStartNodeIds.map((node) => {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tunique: node.id,\r\n\t\t\t\t\t};\r\n\t\t\t\t}),\r\n\t\t\t\tname: data.name,\r\n\t\t\t\tpermissions: data.permissions,\r\n\t\t\t\tunique: data.id,\r\n\t\t\t\tuserName: data.userName,\r\n\t\t\t\tuserGroupUniques: data.userGroupIds.map((group) => group.id),\r\n\t\t\t};\r\n\t\t\treturn { data: user };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current user's external login providers\r\n\t * @memberof UmbCurrentUserServerDataSource\r\n\t */\r\n\tasync getExternalLoginProviders() {\r\n\t\treturn tryExecuteAndNotify(this.#host, UserService.getUserCurrentLoginProviders());\r\n\t}\r\n\r\n\t/**\r\n\t * Get the current user's available MFA login providers\r\n\t * @memberof UmbCurrentUserServerDataSource\r\n\t */\r\n\tasync getMfaLoginProviders() {\r\n\t\tconst { data, error } = await tryExecuteAndNotify(this.#host, UserService.getUserCurrent2Fa());\r\n\r\n\t\tif (data) {\r\n\t\t\treturn { data };\r\n\t\t}\r\n\r\n\t\treturn { error };\r\n\t}\r\n\r\n\t/**\r\n\t * Enable an MFA provider\r\n\t * @param providerName\r\n\t * @param code\r\n\t * @param secret\r\n\t */\r\n\tasync enableMfaProvider(providerName: string, code: string, secret: string) {\r\n\t\tconst { error } = await tryExecute(\r\n\t\t\tUserService.postUserCurrent2FaByProviderName({ providerName, requestBody: { code, secret } }),\r\n\t\t);\r\n\r\n\t\tif (error) {\r\n\t\t\treturn { error };\r\n\t\t}\r\n\r\n\t\treturn {};\r\n\t}\r\n\r\n\t/**\r\n\t * Disable an MFA provider\r\n\t * @param providerName\r\n\t * @param code\r\n\t */\r\n\tasync disableMfaProvider(providerName: string, code: string) {\r\n\t\tconst { error } = await tryExecute(UserService.deleteUserCurrent2FaByProviderName({ providerName, code }));\r\n\r\n\t\tif (error) {\r\n\t\t\treturn { error };\r\n\t\t}\r\n\r\n\t\treturn {};\r\n\t}\r\n\r\n\t/**\r\n\t * Change the password for current user\r\n\t * @param id\r\n\t * @param newPassword\r\n\t * @param oldPassword\r\n\t * @param isCurrentUser\r\n\t * @returns\r\n\t */\r\n\tasync changePassword(newPassword: string, oldPassword: string) {\r\n\t\treturn tryExecuteAndNotify(\r\n\t\t\tthis.#host,\r\n\t\t\tUserService.postUserCurrentChangePassword({\r\n\t\t\t\trequestBody: {\r\n\t\t\t\t\tnewPassword,\r\n\t\t\t\t\toldPassword,\r\n\t\t\t\t},\r\n\t\t\t}),\r\n\t\t);\r\n\t}\r\n}\r\n","import { UmbCurrentUserServerDataSource } from './current-user.server.data-source.js';\r\nimport { UMB_CURRENT_USER_STORE_CONTEXT } from './current-user.store.token.js';\r\nimport type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';\r\nimport { UmbRepositoryBase } from '@umbraco-cms/backoffice/repository';\r\nimport type { UmbNotificationContext } from '@umbraco-cms/backoffice/notification';\r\nimport { UMB_NOTIFICATION_CONTEXT } from '@umbraco-cms/backoffice/notification';\r\n\r\n/**\r\n * A repository for the current user\r\n * @class UmbCurrentUserRepository\r\n * @augments {UmbRepositoryBase}\r\n */\r\nexport class UmbCurrentUserRepository extends UmbRepositoryBase {\r\n\t#currentUserSource = new UmbCurrentUserServerDataSource(this._host);\r\n\t#currentUserStore?: typeof UMB_CURRENT_USER_STORE_CONTEXT.TYPE;\r\n\t#init: Promise;\r\n\tprotected notificationContext?: UmbNotificationContext;\r\n\r\n\tconstructor(host: UmbControllerHost) {\r\n\t\tsuper(host);\r\n\r\n\t\tthis.#init = Promise.all([\r\n\t\t\tthis.consumeContext(UMB_CURRENT_USER_STORE_CONTEXT, (instance) => {\r\n\t\t\t\tthis.#currentUserStore = instance;\r\n\t\t\t}).asPromise(),\r\n\r\n\t\t\tthis.consumeContext(UMB_NOTIFICATION_CONTEXT, (instance) => {\r\n\t\t\t\tthis.notificationContext = instance;\r\n\t\t\t}).asPromise(),\r\n\t\t]);\r\n\t}\r\n\r\n\t/**\r\n\t * Request the current user\r\n\t * @returns {*}\r\n\t * @memberof UmbCurrentUserRepository\r\n\t */\r\n\tasync requestCurrentUser() {\r\n\t\tawait this.#init;\r\n\t\tconst { data, error } = await this.#currentUserSource.getCurrentUser();\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#currentUserStore?.set(data);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this.#currentUserStore!.data };\r\n\t}\r\n\r\n\t/**\r\n\t * Request the current user's external login providers\r\n\t * @memberof UmbCurrentUserRepository\r\n\t */\r\n\tasync requestExternalLoginProviders() {\r\n\t\tawait this.#init;\r\n\t\tconst { data, error } = await this.#currentUserSource.getExternalLoginProviders();\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#currentUserStore?.setExternalLoginProviders(data);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this.#currentUserStore!.externalLoginProviders };\r\n\t}\r\n\r\n\t/**\r\n\t * Request the current user's available MFA login providers\r\n\t * @memberof UmbCurrentUserRepository\r\n\t */\r\n\tasync requestMfaLoginProviders() {\r\n\t\tawait this.#init;\r\n\r\n\t\tconst { data, error } = await this.#currentUserSource.getMfaLoginProviders();\r\n\r\n\t\tif (data) {\r\n\t\t\tthis.#currentUserStore?.setMfaProviders(data);\r\n\t\t}\r\n\r\n\t\treturn { data, error, asObservable: () => this.#currentUserStore!.mfaProviders };\r\n\t}\r\n\r\n\t/**\r\n\t * Enable an MFA provider\r\n\t * @param provider The provider to enable\r\n\t * @param providerName\r\n\t * @param code The activation code of the provider to enable\r\n\t * @param secret\r\n\t * @memberof UmbCurrentUserRepository\r\n\t */\r\n\tasync enableMfaProvider(providerName: string, code: string, secret: string) {\r\n\t\tconst { error } = await this.#currentUserSource.enableMfaProvider(providerName, code, secret);\r\n\r\n\t\tif (error) {\r\n\t\t\treturn { error };\r\n\t\t}\r\n\r\n\t\tthis.#currentUserStore?.updateMfaProvider({ providerName, isEnabledOnUser: true });\r\n\r\n\t\treturn {};\r\n\t}\r\n\r\n\t/**\r\n\t * Disable an MFA provider\r\n\t * @param provider The provider to disable\r\n\t * @param providerName\r\n\t * @param code The activation code of the provider to disable\r\n\t * @memberof UmbCurrentUserRepository\r\n\t */\r\n\tasync disableMfaProvider(providerName: string, code: string) {\r\n\t\tconst { error } = await this.#currentUserSource.disableMfaProvider(providerName, code);\r\n\r\n\t\tif (error) {\r\n\t\t\treturn { error };\r\n\t\t}\r\n\r\n\t\tthis.#currentUserStore?.updateMfaProvider({ providerName, isEnabledOnUser: false });\r\n\r\n\t\treturn {};\r\n\t}\r\n\t/**\r\n\t * Change password for current user\r\n\t * @param userId\r\n\t * @param newPassword\r\n\t * @param oldPassword\r\n\t * @param isCurrentUser\r\n\t * @returns\r\n\t */\r\n\tasync changePassword(newPassword: string, oldPassword: string) {\r\n\t\tif (!newPassword) throw new Error('New password is missing');\r\n\t\tif (!oldPassword) throw new Error('Old password is missing');\r\n\r\n\t\tconst { data, error } = await this.#currentUserSource.changePassword(newPassword, oldPassword);\r\n\r\n\t\tif (!error) {\r\n\t\t\tconst notification = { data: { message: `Password changed` } };\r\n\t\t\tthis.notificationContext?.peek('positive', notification);\r\n\t\t}\r\n\r\n\t\treturn { data, error };\r\n\t}\r\n}\r\n\r\nexport default UmbCurrentUserRepository;\r\n"],"names":["UmbCurrentUserServerDataSource","#host","host","data","error","tryExecuteAndNotify","UserService","node","group","providerName","code","secret","tryExecute","newPassword","oldPassword","UmbCurrentUserRepository","UmbRepositoryBase","#currentUserSource","#currentUserStore","#init","UMB_CURRENT_USER_STORE_CONTEXT","instance","UMB_NOTIFICATION_CONTEXT","notification"],"mappings":"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"}