{ "version": 3, "sources": ["../ui/app/mn.user.roles.service.js", "../ui/app/mn.permissions.service.js"], "sourcesContent": ["/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {HttpClient, HttpParams} from '@angular/common/http';\n\nimport {singletonGuard} from './mn.core.js';\n\nexport {MnUserRolesService};\n\nclass MnUserRolesService {\n static get annotations() { return [\n new Injectable()\n ]}\n\n static get parameters() { return [\n HttpClient\n ]}\n\n constructor(http) {\n singletonGuard(MnUserRolesService);\n this.http = http;\n }\n\n getUsers(params) {\n return this.http.get('/settings/rbac/users', {\n params: new HttpParams()\n .set('permission', (params || {}).permission)\n .set('pageSize', (params || {}).pageSize)\n });\n }\n\n getUniqueUsers(permissions, whoAmI) {\n let uniqUsers = {};\n\n function createUserName(user) {\n let name = \"\";\n if (user.id.length > 16) {\n name += (user.id.substring(0, 16) + \"...\");\n } else {\n name += user.id;\n }\n name += (\" (\" + (user.domain === \"local\" ? \"couchbase\" : user.domain) + \")\");\n return name;\n }\n uniqUsers[whoAmI.domain + whoAmI.id] = createUserName(whoAmI);\n permissions.forEach(function (permission) {\n permission.users.forEach(user => uniqUsers[user.domain + user.id] = createUserName(user));\n });\n\n return Object.values(uniqUsers);\n }\n}\n", "/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\n\nimport {Injectable} from '@angular/core';\nimport {pluck, distinctUntilChanged, shareReplay, map, switchMap} from 'rxjs/operators';\nimport {combineLatest} from 'rxjs';\nimport {HttpClient} from '@angular/common/http';\n\nimport {MnBucketsService} from './mn.buckets.service.js';\nimport {MnAdminService} from './mn.admin.service.js';\n\nimport {singletonGuard} from './mn.core.js';\n\nlet bucketSpecificPermissions = [function (bucket) {\n var name = bucket.name;\n var basePermissions = [\n \"cluster.bucket[\" + name + \"].settings!write\",\n \"cluster.bucket[\" + name + \"].settings!read\",\n \"cluster.bucket[\" + name + \"].recovery!write\",\n \"cluster.bucket[\" + name + \"].recovery!read\",\n \"cluster.bucket[\" + name + \"].stats!read\",\n \"cluster.bucket[\" + name + \"]!flush\",\n \"cluster.bucket[\" + name + \"]!delete\",\n \"cluster.bucket[\" + name + \"]!compact\",\n \"cluster.bucket[\" + name + \"].xdcr!read\",\n \"cluster.bucket[\" + name + \"].xdcr!write\",\n \"cluster.bucket[\" + name + \"].xdcr!execute\",\n \"cluster.bucket[\" + name + \"].n1ql.select!execute\",\n \"cluster.bucket[\" + name + \"].n1ql.index!read\",\n \"cluster.bucket[\" + name + \"].n1ql.index!write\",\n \"cluster.bucket[\" + name + \"].collections!read\",\n \"cluster.bucket[\" + name + \"].collections!write\",\n \"cluster.collection[\" + name + \":.:.].stats!read\",\n \"cluster.collection[\" + name + \":.:.].collections!read\",\n \"cluster.collection[\" + name + \":.:.].collections!write\"\n ];\n if (bucket.name === \".\" || (bucket.bucketType === \"membase\")) {\n basePermissions = basePermissions.concat([\n \"cluster.bucket[\" + name + \"].views!read\",\n \"cluster.bucket[\" + name + \"].views!write\",\n \"cluster.bucket[\" + name + \"].views!compact\"\n ]);\n }\n if (bucket.name === \".\" || (bucket.bucketType !== \"memcached\")) {\n basePermissions = basePermissions.concat([\n \"cluster.bucket[\" + name + \"].data!write\",\n \"cluster.bucket[\" + name + \"].data!read\",\n \"cluster.bucket[\" + name + \"].data.docs!read\",\n \"cluster.bucket[\" + name + \"].data.docs!write\",\n \"cluster.bucket[\" + name + \"].data.docs!upsert\",\n \"cluster.collection[\" + name + \":.:.].data.docs!read\",\n \"cluster.collection[\" + name + \":.:.].data.docs!write\",\n \"cluster.collection[\" + name + \":.:.].data.docs!upsert\",\n \"cluster.collection[\" + name + \":.:.].n1ql.index!read\",\n \"cluster.collection[\" + name + \":.:.].n1ql.index!write\",\n \"cluster.collection[\" + name + \":.:.].n1ql.select!execute\"\n ]);\n }\n\n return basePermissions;\n}];\n\nlet interestingPermissions = ([\n \"cluster.buckets!create\",\n \"cluster.backup!all\",\n \"cluster.nodes!write\",\n \"cluster.pools!read\",\n \"cluster.server_groups!read\",\n \"cluster.server_groups!write\",\n \"cluster.settings!read\",\n \"cluster.settings!write\",\n \"cluster.settings.metrics!read\",\n \"cluster.settings.metrics!write\",\n \"cluster.stats!read\",\n \"cluster.tasks!read\",\n \"cluster.settings.indexes!read\",\n \"cluster.admin.internal!all\",\n \"cluster.xdcr.settings!read\",\n \"cluster.xdcr.settings!write\",\n \"cluster.xdcr.remote_clusters!read\",\n \"cluster.xdcr.remote_clusters!write\",\n \"cluster.admin.security!read\",\n \"cluster.admin.logs!read\",\n \"cluster.admin.settings!read\",\n \"cluster.admin.settings!write\",\n \"cluster.logs!read\",\n \"cluster.pools!write\",\n \"cluster.settings.indexes!write\",\n \"cluster.admin.security!write\",\n \"cluster.admin.security.admin!write\",\n \"cluster.admin.security.admin!read\",\n \"cluster.admin.security.external!write\",\n \"cluster.admin.security.external!read\",\n \"cluster.admin.security.local!read\",\n \"cluster.admin.security.local!write\",\n \"cluster.samples!read\",\n \"cluster.nodes!read\",\n \"cluster.admin.memcached!read\",\n \"cluster.admin.memcached!write\",\n \"cluster.eventing.functions!manage\",\n \"cluster.settings.autocompaction!read\",\n \"cluster.settings.autocompaction!write\"\n]).concat(bucketSpecificPermissions[0]({name: \".\"}));\n\nexport {MnPermissionsService};\n\nclass MnPermissionsService {\n static get annotations() { return [\n new Injectable()\n ]}\n\n static get parameters() { return [\n HttpClient,\n MnBucketsService,\n MnAdminService\n ]}\n\n constructor(http, mnBucketsService, mnAdminService) {\n singletonGuard(MnPermissionsService);\n this.http = http;\n this.stream = {};\n\n this.stream.url =\n mnAdminService.stream.getPoolsDefault.pipe(pluck(\"checkPermissionsURI\"),\n distinctUntilChanged());\n var concatAllBucketsPermissions =\n map(rv => rv.reduce((acc, bucket) =>\n acc.concat(this.generateBucketPermissions(bucket)), []));\n var allBucketsPermissions =\n mnBucketsService.stream.getBuckets.pipe(concatAllBucketsPermissions);\n\n this.stream.getBucketsPermissions =\n combineLatest(allBucketsPermissions, this.stream.url)\n .pipe(switchMap(this.doGet.bind(this)), shareReplay({refCount: true, bufferSize: 1}));\n\n this.stream.getSuccess =\n this.stream.url.pipe(map((url) => [this.getAll(), url]),\n switchMap(this.doGet.bind(this)),\n shareReplay({refCount: true, bufferSize: 1}));\n\n }\n\n generateBucketPermissions(bucketName) {\n return bucketSpecificPermissions.reduce(function (acc, getChunk) {\n return acc.concat(getChunk(bucketName));\n }, []);\n }\n\n getAll() {\n return [...interestingPermissions];\n }\n\n set(permission) {\n if (!interestingPermissions.includes(permission)) {\n interestingPermissions.push(permission);\n }\n return this;\n }\n\n\n setBucketSpecific(func) {\n if (func instanceof Function) {\n bucketSpecificPermissions.push(func);\n }\n return this;\n }\n\n doGet(urlAndPermissions) {\n return this.http\n .post(urlAndPermissions[1], urlAndPermissions[0].join(','))\n .pipe(map(rv => JSON.parse(rv)));\n }\n}\n"], "mappings": "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", "names": [] }