UNPKG

@kwiz/common

Version:

KWIZ common utilities and helpers for M365 platform

509 lines 26.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IsUserMemberOfGroup = exports.GetCurrentUserADGroupMemberships = exports.GroupIncludesAllUsers = exports.SetGroupOwner = exports.RemoveUserFromGroup = exports.AddUserToGroup = exports.CreateSiteGroup = exports.GetInfoFromSPPeoplePickerControlFormEntity = exports.GetSiteGroups = exports.GetGroupByNameSync = exports.GetGroupByName = exports.GetGroupSync = exports.GetGroup = exports.GetSecurityGroupByTitleSync = exports.GetSecurityGroupByTitle = exports.GetOrEnsureUserByLoginSync = exports.EnsureUserSync = exports.EnsureUser = exports.GetUserByLoginSync = exports.GetUserByLogin = exports.GetUserSync = exports.GetUser = exports.GetCurrentUserSync = exports.GetCurrentUser = exports.GetUserLoginNameSync = exports.GetUserLoginName = void 0; const exports_index_1 = require("../../exports-index"); const json_1 = require("../../helpers/json"); const sharepoint_1 = require("../../helpers/sharepoint"); const typecheckers_1 = require("../../helpers/typecheckers"); const url_1 = require("../../helpers/url"); const rest_types_1 = require("../../types/rest.types"); const sharepoint_types_1 = require("../../types/sharepoint.types"); const consolelogger_1 = require("../consolelogger"); const rest_1 = require("../rest"); const common_1 = require("./common"); const web_1 = require("./web"); const logger = consolelogger_1.ConsoleLogger.get("utils/sharepoint/user"); var __currentUserId = null; const groupSelect = "Id,Title,Description,CanCurrentUserViewMembership,OnlyAllowMembersViewMembership,IsHiddenInUI,OwnerTitle"; const userSelect = "PrincipalType,Id,LoginName,UserPrincipalName,Title,IsSiteAdmin,Email"; /** Get user login name */ function GetUserLoginName(siteUrl) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if (typeof (_spPageContextInfo) !== "undefined" && typeof (_spPageContextInfo.userPrincipalName) !== "undefined") //issue 6309 _spPageContextInfo.userLoginName is wrong for external users return Promise.resolve(_spPageContextInfo.userPrincipalName); return (0, rest_1.GetJson)((0, common_1.GetRestBaseUrl)(siteUrl) + "/web/currentUser/loginName", null, { ...rest_1.longLocalCache }) .then(r => r.d.LoginName) .catch(() => null); } exports.GetUserLoginName = GetUserLoginName; /** Get user login name syncronously */ function GetUserLoginNameSync(siteUrl) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if (typeof (_spPageContextInfo) !== "undefined" && typeof (_spPageContextInfo.userPrincipalName) !== "undefined") //issue 6309 _spPageContextInfo.userLoginName is wrong for external users return _spPageContextInfo.userPrincipalName; let res = (0, rest_1.GetJsonSync)((0, common_1.GetRestBaseUrl)(siteUrl) + "/web/currentUser/loginName", null, { ...rest_1.longLocalCache }); if (res.success) return res.result.d.LoginName; else return null; } exports.GetUserLoginNameSync = GetUserLoginNameSync; function _getCurrentUserRequestUrl(siteUrl, expandGroups) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/currentUser${expandGroups ? '?$expand=Groups' : ''}`; return url; } async function GetCurrentUser(siteUrl, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); return (0, rest_1.GetJson)(_getCurrentUserRequestUrl(siteUrl, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata, allowCache: !options || options.refreshCache !== true }) .then(user => { if (user) __currentUserId = user.Id; return user; }) .catch(() => null); } exports.GetCurrentUser = GetCurrentUser; function GetCurrentUserSync(siteUrl, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let res = (0, rest_1.GetJsonSync)(_getCurrentUserRequestUrl(siteUrl, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); if (res.success) { let user = res.result; if (user) __currentUserId = user.Id; return user; } else return null; } exports.GetCurrentUserSync = GetCurrentUserSync; function _getUserRequestUrl(siteUrl, userId, expandGroups) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/GetUserById(${userId})${expandGroups ? '?expand=Groups' : ''}`; return url; } async function GetUser(siteUrl, userId, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if ((0, typecheckers_1.isNullOrNaN)(userId) || __currentUserId === userId) return GetCurrentUser(siteUrl, options); return (0, rest_1.GetJson)(_getUserRequestUrl(siteUrl, userId, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }).then(user => { return user; }).catch(() => null); } exports.GetUser = GetUser; function GetUserSync(siteUrl, userId, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if ((0, typecheckers_1.isNullOrNaN)(userId) || __currentUserId === userId) return GetCurrentUserSync(siteUrl, options); let res = (0, rest_1.GetJsonSync)(_getUserRequestUrl(siteUrl, userId, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); if (res.success) { let user = res.result; return user; } else return null; } exports.GetUserSync = GetUserSync; function _getUserByLoginNameRequestUrl(siteUrl, loginName, expandGroups) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteUsers/getByLoginName(@u)?@u='${(0, url_1.encodeURIComponentEX)(loginName, { singleQuoteMultiplier: 2 })}'${expandGroups ? '&expand=Groups' : ''}`; return url; } async function GetUserByLogin(siteUrl, loginName, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if ((0, typecheckers_1.isNullOrEmptyString)(loginName)) { return GetCurrentUser(siteUrl, options); } return (0, rest_1.GetJson)(_getUserByLoginNameRequestUrl(siteUrl, loginName, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }) .then(user => user) .catch(() => null); } exports.GetUserByLogin = GetUserByLogin; function GetUserByLoginSync(siteUrl, loginName, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if ((0, typecheckers_1.isNullOrEmptyString)(loginName)) { return GetCurrentUserSync(siteUrl, options); } let res = (0, rest_1.GetJsonSync)(_getUserByLoginNameRequestUrl(siteUrl, loginName, options && options.expandGroups), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); if (res.success) { let user = res.result; return user; } return null; } exports.GetUserByLoginSync = GetUserByLoginSync; function _getEnsureUserRequestUrl(siteUrl, loginName, expandGroups) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/ensureUser(@u)?@u='${(0, url_1.encodeURIComponentEX)(loginName, { singleQuoteMultiplier: 2 })}'${expandGroups ? '&expand=Groups' : ''}`; return url; } async function EnsureUser(siteUrl, userLogin, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if ((0, typecheckers_1.isNullOrEmptyString)(userLogin)) return null; return (0, rest_1.GetJson)(_getEnsureUserRequestUrl(siteUrl, userLogin, options && options.expandGroups), null, { method: "POST", spWebUrl: siteUrl, jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache }) .then(user => { return user; }) .catch(() => null); } exports.EnsureUser = EnsureUser; function EnsureUserSync(siteUrl, userLogin, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); if ((0, typecheckers_1.isNullOrEmptyString)(userLogin)) return null; let res = (0, rest_1.GetJsonSync)(_getEnsureUserRequestUrl(siteUrl, userLogin, options && options.expandGroups), null, { method: "POST", spWebUrl: siteUrl, jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache }); if (res.success) { let user = res.result; return user; } return null; } exports.EnsureUserSync = EnsureUserSync; function GetOrEnsureUserByLoginSync(siteUrl, key, options) { let userValue = GetUserByLoginSync(siteUrl, key, options); if (!userValue) { userValue = EnsureUserSync(siteUrl, key, options); } return userValue; } exports.GetOrEnsureUserByLoginSync = GetOrEnsureUserByLoginSync; async function GetSecurityGroupByTitle(siteUrl, title) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); //on premise the title/name of security group could be as domain login //for example, 'KWIZCOM\ad_qa_group' //split[0] = will contain the domain name (KWIZCOM) //split[1] = will contain the title (ad_qa_group) //if split[1] is null, then we didn't get a domain login and the split[0] will just contain the title/name (ad_qa_group) of the group var split = title.split("\\"); var groupTitle = (split[1] || split[0]).toLowerCase(); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteusers?$filter=PrincipalType eq ${sharepoint_types_1.PrincipalType.SecurityGroup}`; return (0, rest_1.GetJson)(url, null, { method: "GET", jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache }) .then(securityGroupsResult => { var securityGroup = null; if (securityGroupsResult && securityGroupsResult.value && securityGroupsResult.value.length) { //first match the full title and fall back to the split title/name securityGroup = securityGroupsResult.value.filter((secGroup) => { //this will find security groups on premise where the title/name are saved as 'KWIZCOM\ad_qa_group' //but will not match when exporting from on premise to online return secGroup.Title.toLowerCase() === title.toLowerCase(); })[0] || securityGroupsResult.value.filter((secGroup) => { //this will match settings exported from on premise to online where the title/name of the group changes from 'KWIZCOM\ad_qa_group' to 'AD_QA_GROUP' return secGroup.Title.toLowerCase() === groupTitle; })[0]; } return securityGroup; }) .catch(() => null); } exports.GetSecurityGroupByTitle = GetSecurityGroupByTitle; function GetSecurityGroupByTitleSync(siteUrl, title) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); //on premise the title/name of security group could be as domain login //for example, 'KWIZCOM\ad_qa_group' //split[0] = will contain the domain name (KWIZCOM) //split[1] = will contain the title (ad_qa_group) //if split[1] is null, then we didn't get a domain login and the split[0] will just contain the title/name (ad_qa_group) of the group var split = title.split("\\"); var groupTitle = (split[1] || split[0]).toLowerCase(); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteusers?$filter=PrincipalType eq ${sharepoint_types_1.PrincipalType.SecurityGroup}`; let securityGroupsResult = (0, rest_1.GetJsonSync)(url, null, { method: "GET", jsonMetadata: rest_types_1.jsonTypes.nometadata, ...rest_1.shortLocalCache }); if (securityGroupsResult && securityGroupsResult.success) { var securityGroup = null; if (securityGroupsResult && securityGroupsResult.result && securityGroupsResult.result.value && securityGroupsResult.result.value.length) { //first match the full title and fall back to the split title/name securityGroup = securityGroupsResult.result.value.filter((secGroup) => { //this will find security groups on premise where the title/name are saved as 'KWIZCOM\ad_qa_group' //but will not match when exporting from on premise to online return secGroup.Title.toLowerCase() === title.toLowerCase(); })[0] || securityGroupsResult.result.value.filter((secGroup) => { //this will match settings exported from on premise to online where the title/name of the group changes from 'KWIZCOM\ad_qa_group' to 'AD_QA_GROUP' return secGroup.Title.toLowerCase() === groupTitle; })[0]; } return securityGroup; } return null; } exports.GetSecurityGroupByTitleSync = GetSecurityGroupByTitleSync; function _getGroupRequestUrl(siteUrl, groupId) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups/getById(${groupId})?$select=${groupSelect}`; return url; } function _getGroupUsersRequestUrl(siteUrl, groupId) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups/getById(${groupId})/Users?$select=${userSelect}`; return url; } async function GetGroup(siteUrl, groupId, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); return (0, rest_1.GetJson)(_getGroupRequestUrl(siteUrl, groupId), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata, allowCache: !options || options.refreshCache !== true }) .then(async (group) => { if (group) { group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup; group.LoginName = group.Title; if (options && options.expandUsers && group.CanCurrentUserViewMembership) { let users = await (0, rest_1.GetJson)(_getGroupUsersRequestUrl(siteUrl, groupId), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata, allowCache: !options || options.refreshCache !== true }); group.Users = users && users.value; } } return group; }) .catch(() => null); } exports.GetGroup = GetGroup; function GetGroupSync(siteUrl, groupId, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let res = (0, rest_1.GetJsonSync)(_getGroupRequestUrl(siteUrl, groupId), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); if (res.success) { let group = res.result; if (group) { group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup; group.LoginName = group.Title; if (options && options.expandUsers && group.CanCurrentUserViewMembership) { let users = (0, rest_1.GetJsonSync)(_getGroupUsersRequestUrl(siteUrl, groupId), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); group.Users = users.success && users.result && users.result.value; } } return group; } else return null; } exports.GetGroupSync = GetGroupSync; function _getGroupsRequestUrl(siteUrl) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); var url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups?$select=${groupSelect}`; return url; } function _getGroupByNameRequestUrl(siteUrl, groupName) { var url = `${_getGroupsRequestUrl(siteUrl)}&$filter=LoginName eq '${(0, url_1.encodeURIComponentEX)(groupName, { singleQuoteMultiplier: 2 })}'`; return url; } async function GetGroupByName(siteUrl, groupName, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let res = await (0, rest_1.GetJson)(_getGroupByNameRequestUrl(siteUrl, groupName), null, { ...rest_1.shortLocalCache, allowCache: !options || options.refreshCache !== true }); if (res) { let group = res && res.d && res.d.results && res.d.results[0]; if (group) { group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup; group.LoginName = group.Title; if (options && options.expandUsers && group.CanCurrentUserViewMembership) { let users = (0, rest_1.GetJsonSync)(_getGroupUsersRequestUrl(siteUrl, group.Id), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata, allowCache: !options || options.refreshCache !== true }); group.Users = users.success && users.result && users.result.value; } } return group; } else return null; } exports.GetGroupByName = GetGroupByName; function GetGroupByNameSync(siteUrl, groupName, options) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let res = (0, rest_1.GetJsonSync)(_getGroupByNameRequestUrl(siteUrl, groupName), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); if (res.success) { let group = res.result && res.result.value && res.result.value[0]; if (group) { group.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup; group.LoginName = group.Title; if (options && options.expandUsers && group.CanCurrentUserViewMembership) { let users = (0, rest_1.GetJsonSync)(_getGroupUsersRequestUrl(siteUrl, group.Id), null, { ...rest_1.shortLocalCache, jsonMetadata: rest_types_1.jsonTypes.nometadata }); group.Users = users.success && users.result && users.result.value; } } return group; } else return null; } exports.GetGroupByNameSync = GetGroupByNameSync; async function GetSiteGroups(siteUrl, refreshCache) { siteUrl = (0, common_1.GetSiteUrl)(siteUrl); let res = await (0, rest_1.GetJson)(_getGroupsRequestUrl(siteUrl), null, { ...rest_1.shortLocalCache, allowCache: refreshCache !== true }); if (res) { let groups = res && res.d && res.d.results || []; groups.forEach(g => { g.PrincipalType = sharepoint_types_1.PrincipalType.SharePointGroup; g.LoginName = g.Title; }); return groups; } else return []; } exports.GetSiteGroups = GetSiteGroups; function GetInfoFromSPPeoplePickerControlFormEntity(entity) { if ((0, sharepoint_1.IsSPPeoplePickerControlFormEntity)(entity)) { var principalType = (0, sharepoint_1.getPrincipalTypeFromPickerEntity)(entity); if ((0, typecheckers_1.isNullOrUndefined)(principalType)) { let userValue = GetOrEnsureUserByLoginSync(null, entity.Key); if (userValue) { return userValue; } let groupValue = GetGroupByNameSync(null, entity.Key); if (groupValue) { return groupValue; } } else if (principalType === sharepoint_types_1.PrincipalType.SharePointGroup) { return GetGroupByNameSync(null, entity.Key); } else { return GetOrEnsureUserByLoginSync(null, entity.Key); } } return null; } exports.GetInfoFromSPPeoplePickerControlFormEntity = GetInfoFromSPPeoplePickerControlFormEntity; async function CreateSiteGroup(siteUrl, info) { let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups`; let createGroup = await (0, rest_1.GetJson)(url, (0, json_1.jsonStringify)({ __metadata: { type: "SP.Group" }, Title: info.name, Description: info.description }), { allowCache: false }); return createGroup.d; } exports.CreateSiteGroup = CreateSiteGroup; async function AddUserToGroup(siteUrl, groupId, userIdOrLogin) { let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups(${groupId})/users`; if ((0, typecheckers_1.isNumber)(userIdOrLogin)) { let ensured = await GetUser(siteUrl, userIdOrLogin); userIdOrLogin = ensured.LoginName; } await (0, rest_1.GetJson)(url, (0, json_1.jsonStringify)({ LoginName: userIdOrLogin }), { allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata }); } exports.AddUserToGroup = AddUserToGroup; async function RemoveUserFromGroup(siteUrl, groupId, userId) { let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups(${groupId})/users/removeById(${userId})`; await (0, rest_1.GetJson)(url, null, { method: "POST", allowCache: false, jsonMetadata: rest_types_1.jsonTypes.nometadata }); } exports.RemoveUserFromGroup = RemoveUserFromGroup; async function SetGroupOwner(siteUrl, groupId, ownerId, ownerIsAGroup) { //https://github.com/SharePoint/sp-dev-docs/issues/5031#issuecomment-594710013 //if owner is a group - rest API doens't work. if (ownerIsAGroup !== true) { let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/web/siteGroups/getById('${groupId}')/SetUserAsOwner(${ownerId})`; try { await (0, rest_1.GetJson)(url, null, { jsonMetadata: rest_types_1.jsonTypes.nometadata, method: "POST" }); return true; } catch (e) { logger.error(`SetGroupOwner ${groupId} ${ownerId} error:`); logger.error(e); return false; } } else { try { let soapUrl = `${(0, common_1.GetSiteUrl)(siteUrl)}_vti_bin/client.svc/ProcessQuery`; let siteId = await (0, web_1.GetSiteId)(siteUrl); let serviceJSONResponse = await (0, rest_1.GetJson)(soapUrl, `<Request AddExpandoFieldTypeSuffix="true" SchemaVersion="15.0.0.0" LibraryVersion="15.0.0.0" ApplicationName=".NET Library" xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009"> <Actions> <SetProperty Id="1" ObjectPathId="2" Name="Owner"> <Parameter ObjectPathId="3" /> </SetProperty> <Method Name="Update" Id="4" ObjectPathId="2" /> </Actions> <ObjectPaths> <Identity Id="2" Name="740c6a0b-85e2-48a0-a494-e0f1759d4aa7:site:${siteId}:g:${groupId}" /> <Identity Id="3" Name="740c6a0b-85e2-48a0-a494-e0f1759d4aa7:site:${siteId}:g:${ownerId}" /> </ObjectPaths> </Request>`, { headers: { Accept: rest_types_1.jsonTypes.standard, "content-type": rest_types_1.contentTypes.xml } }); //logger.json(serviceJSONResponse, "soap result"); return (0, typecheckers_1.isNullOrEmptyArray)(serviceJSONResponse) || (0, typecheckers_1.isNullOrEmptyString)(serviceJSONResponse[0].ErrorInfo); } catch (e) { logger.error(`SetGroupOwner via SOAP ${ownerId} ${ownerId} error:`); logger.error(e); return false; } } } exports.SetGroupOwner = SetGroupOwner; async function GroupIncludesAllUsers(siteUrl, groupId) { try { if ((0, typecheckers_1.isNullOrNaN)(groupId)) return false; const groupInfo = await GetGroup(siteUrl, groupId, { expandUsers: true }); if ((0, typecheckers_1.isNullOrUndefined)(groupInfo)) return false; //special memebr called spo-grid-all-users/{tenant-id} will be added, its not in the AAD or anywhere else. const includesAllUsers = !(0, typecheckers_1.isNullOrUndefined)((0, exports_index_1.firstOrNull)(groupInfo.Users, u => (u.LoginName || "").indexOf("|spo-grid-all-users/") >= 0)); return includesAllUsers; } catch (e) { logger.error(e); return false; } } exports.GroupIncludesAllUsers = GroupIncludesAllUsers; /** return array of AAD group IDs, guid, normalized */ async function GetCurrentUserADGroupMemberships(siteUrl) { let url = `${(0, common_1.GetRestBaseUrl)(siteUrl)}/SP.Publishing.SitePageService.GetCurrentUserMemberships`; try { let result = await (0, rest_1.GetJson)(url, null, { jsonMetadata: rest_types_1.jsonTypes.nometadata }); return (0, typecheckers_1.isNotEmptyArray)(result.value) ? result.value.map(id => (0, exports_index_1.normalizeGuid)(id)) : []; } catch (e) { logger.error(e); return []; } } exports.GetCurrentUserADGroupMemberships = GetCurrentUserADGroupMemberships; /** checks users groups, then checks for groups that contains all users and that the user is not an external one */ async function IsUserMemberOfGroup(siteUrl, user, group) { if ((0, typecheckers_1.isNotEmptyArray)(user.Groups)) { //search user groups for the group by title or id const found = (0, exports_index_1.firstOrNull)(user.Groups, userGroup => ((0, typecheckers_1.isNotEmptyString)(group.LoginName) && userGroup.Title === group.LoginName) || ((0, typecheckers_1.isNumber)(group.Id) && userGroup.Id === group.Id)); if (found) return true; } const groupInfo = await GetGroup(siteUrl, group.Id, { expandUsers: true }); if (!(0, typecheckers_1.isNullOrUndefined)(groupInfo)) { if ((0, typecheckers_1.isNotEmptyArray)(groupInfo.Users)) { //search group users memberships directly const found = (0, exports_index_1.firstOrNull)(groupInfo.Users, groupUser => ((0, typecheckers_1.isNotEmptyString)(user.LoginName) && groupUser.LoginName === user.LoginName) || ((0, typecheckers_1.isNumber)(user.Id) && groupUser.Id === user.Id)); if (found) return true; //if we looking for current user - we can check GetCurrentUserADGroupMemberships let currentUser = await GetCurrentUser(siteUrl); if (currentUser.LoginName === user.LoginName) { //get user's aad groups const UserAADGroups = await GetCurrentUserADGroupMemberships(siteUrl); if ((0, typecheckers_1.isNotEmptyArray)(UserAADGroups)) { //convert group's users to guids const groupUserLoginsSplit = (0, exports_index_1.filterEmptyEntries)(groupInfo.Users.map(u => (0, exports_index_1.lastOrNull)(u.LoginName.split('|')))); //see if any of the group members is a guid that is in the user's aad groups const found = (0, exports_index_1.firstOrNull)(groupUserLoginsSplit, u => UserAADGroups.includes((0, exports_index_1.normalizeGuid)(u))); if (found) return true; } } } //groups that contain all-users special permission will not show up in the user's groups or anywhere else - so test manually. const includesAllUsers = await GroupIncludesAllUsers(siteUrl, group.Id); const isCurrentUserExternal = (0, sharepoint_1.isExternalUser)(user.LoginName); return includesAllUsers && !isCurrentUserExternal; } return false; } exports.IsUserMemberOfGroup = IsUserMemberOfGroup; //# sourceMappingURL=user.js.map